From c772ff511d91ea30ceffa3eb2e2346dd29e6772b Mon Sep 17 00:00:00 2001
From: Dustyn Gibson <miigotu@gmail.com>
Date: Tue, 3 Nov 2015 12:19:09 -0800
Subject: [PATCH 001/215] Make sure airdates are > 1 (really 693595) in webapi
 to stop erroring when unaired episodes are asked for info Fixes
 https://github.com/SiCKRAGETV/sickrage-issues/issues/3512

---
 sickbeard/webapi.py | 33 ++++++++++++++++++++++-----------
 1 file changed, 22 insertions(+), 11 deletions(-)

diff --git a/sickbeard/webapi.py b/sickbeard/webapi.py
index 0220b2e72..f2420e539 100644
--- a/sickbeard/webapi.py
+++ b/sickbeard/webapi.py
@@ -749,10 +749,15 @@ class CMD_Episode(ApiCall):
             episode["location"] = episode["location"][showPathLength:]
         elif not showPath:  # show dir is broken ... episode path will be empty
             episode["location"] = ""
+
         # convert stuff to human form
-        episode['airdate'] = sbdatetime.sbdatetime.sbfdate(sbdatetime.sbdatetime.convert_to_setting(
-            network_timezones.parse_date_time(int(episode['airdate']), showObj.airs, showObj.network)),
-                                                           d_preset=dateFormat)
+        if helpers.tryInt(episode['airdate'], 1) > 693595: # 1900
+            episode['airdate'] = sbdatetime.sbdatetime.sbfdate(sbdatetime.sbdatetime.convert_to_setting(
+                network_timezones.parse_date_time(int(episode['airdate']), showObj.airs, showObj.network)),
+                                                               d_preset=dateFormat)
+        else:
+            episode['airdate'] = 'Never'
+
         status, quality = Quality.splitCompositeStatus(int(episode["status"]))
         episode["status"] = _get_status_Strings(status)
         episode["quality"] = get_quality_string(quality)
@@ -1915,7 +1920,7 @@ class CMD_Show(ApiCall):
             showDict["network"] = ""
         showDict["status"] = showObj.status
 
-        if showObj.nextaired:
+        if helpers.tryInt(showObj.nextaired, 1) > 693595:
             dtEpisodeAirs = sbdatetime.sbdatetime.convert_to_setting(
                 network_timezones.parse_date_time(showObj.nextaired, showDict['airs'], showDict['network']))
             showDict['airs'] = sbdatetime.sbdatetime.sbftime(dtEpisodeAirs, t_preset=timeFormat).lstrip('0').replace(
@@ -2529,9 +2534,12 @@ class CMD_ShowSeasons(ApiCall):
                 status, quality = Quality.splitCompositeStatus(int(row["status"]))
                 row["status"] = _get_status_Strings(status)
                 row["quality"] = get_quality_string(quality)
-                dtEpisodeAirs = sbdatetime.sbdatetime.convert_to_setting(
-                    network_timezones.parse_date_time(row['airdate'], showObj.airs, showObj.network))
-                row['airdate'] = sbdatetime.sbdatetime.sbfdate(dtEpisodeAirs, d_preset=dateFormat)
+                if helpers.tryInt(row['airdate'], 1) > 693595: # 1900
+                    dtEpisodeAirs = sbdatetime.sbdatetime.convert_to_setting(
+                        network_timezones.parse_date_time(row['airdate'], showObj.airs, showObj.network))
+                    row['airdate'] = sbdatetime.sbdatetime.sbfdate(dtEpisodeAirs, d_preset=dateFormat)
+                else:
+                    row['airdate'] = 'Never'
                 curSeason = int(row["season"])
                 curEpisode = int(row["episode"])
                 del row["season"]
@@ -2553,9 +2561,12 @@ class CMD_ShowSeasons(ApiCall):
                 status, quality = Quality.splitCompositeStatus(int(row["status"]))
                 row["status"] = _get_status_Strings(status)
                 row["quality"] = get_quality_string(quality)
-                dtEpisodeAirs = sbdatetime.sbdatetime.convert_to_setting(
-                    network_timezones.parse_date_time(row['airdate'], showObj.airs, showObj.network))
-                row['airdate'] = sbdatetime.sbdatetime.sbfdate(dtEpisodeAirs, d_preset=dateFormat)
+                if helpers.tryInt(row['airdate'], 1) > 693595: # 1900
+                    dtEpisodeAirs = sbdatetime.sbdatetime.convert_to_setting(
+                        network_timezones.parse_date_time(row['airdate'], showObj.airs, showObj.network))
+                    row['airdate'] = sbdatetime.sbdatetime.sbfdate(dtEpisodeAirs, d_preset=dateFormat)
+                else:
+                    row['airdate'] = 'Never'
                 if not curEpisode in seasons:
                     seasons[curEpisode] = {}
                 seasons[curEpisode] = row
@@ -2812,7 +2823,7 @@ class CMD_Shows(ApiCall):
                 "subtitles": (0, 1)[curShow.subtitles],
             }
 
-            if curShow.nextaired:
+            if helpers.tryInt(curShow.nextaired, 1) > 693595: # 1900
                 dtEpisodeAirs = sbdatetime.sbdatetime.convert_to_setting(
                     network_timezones.parse_date_time(curShow.nextaired, curShow.airs, showDict['network']))
                 showDict['next_ep_airdate'] = sbdatetime.sbdatetime.sbfdate(dtEpisodeAirs, d_preset=dateFormat)
-- 
GitLab


From 3ee22fe9711cd9a4641a49140268ebf18e7cb134 Mon Sep 17 00:00:00 2001
From: Dustyn Gibson <miigotu@gmail.com>
Date: Tue, 3 Nov 2015 14:59:59 -0800
Subject: [PATCH 002/215] Fix setting home layout. Will be more issues popping
 up now that mako cache is working!

---
 gui/slick/views/home.mako | 37 ++++++++++++++++++-------------------
 1 file changed, 18 insertions(+), 19 deletions(-)

diff --git a/gui/slick/views/home.mako b/gui/slick/views/home.mako
index 667736fad..5e963666e 100644
--- a/gui/slick/views/home.mako
+++ b/gui/slick/views/home.mako
@@ -10,7 +10,6 @@
 
     myDB = db.DBConnection()
     today = str(datetime.date.today().toordinal())
-    layout = sickbeard.HOME_LAYOUT
 
     status_quality  = '(' + ','.join([str(x) for x in Quality.SNATCHED + Quality.SNATCHED_PROPER]) + ')'
     status_download = '(' + ','.join([str(x) for x in Quality.DOWNLOADED + Quality.ARCHIVED]) + ')'
@@ -54,24 +53,24 @@
 % endif
 
 <div id="HomeLayout" class="pull-right hidden-print" style="margin-top: -40px;">
-    % if layout != 'poster':
+    % if sickbeard.HOME_LAYOUT != 'poster':
         <button id="popover" type="button" class="btn btn-inline">Select Columns <b class="caret"></b></button>
     % endif
     <span> Layout:
         <select name="layout" class="form-control form-control-inline input-sm" onchange="location = this.options[this.selectedIndex].value;">
-            <option value="${srRoot}/setHomeLayout/?layout=poster" ${('', 'selected="selected"')[layout == 'poster']}>Poster</option>
-            <option value="${srRoot}/setHomeLayout/?layout=small" ${('', 'selected="selected"')[layout == 'small']}>Small Poster</option>
-            <option value="${srRoot}/setHomeLayout/?layout=banner" ${('', 'selected="selected"')[layout == 'banner']}>Banner</option>
-            <option value="${srRoot}/setHomeLayout/?layout=simple" ${('', 'selected="selected"')[layout == 'simple']}>Simple</option>
+            <option value="${srRoot}/setHomeLayout/?layout=poster" ${('', 'selected="selected"')[sickbeard.HOME_LAYOUT == 'poster']}>Poster</option>
+            <option value="${srRoot}/setHomeLayout/?layout=small" ${('', 'selected="selected"')[sickbeard.HOME_LAYOUT == 'small']}>Small Poster</option>
+            <option value="${srRoot}/setHomeLayout/?layout=banner" ${('', 'selected="selected"')[sickbeard.HOME_LAYOUT == 'banner']}>Banner</option>
+            <option value="${srRoot}/setHomeLayout/?layout=simple" ${('', 'selected="selected"')[sickbeard.HOME_LAYOUT == 'simple']}>Simple</option>
         </select>
-        % if layout != 'poster':
+        % if sickbeard.HOME_LAYOUT != 'poster':
         Search:
             <input class="search form-control form-control-inline input-sm input200" type="search" data-column="2" placeholder="Search Show Name">
             <button type="button" class="resetsorting btn btn-inline">Reset Search</button>
         % endif
     </span>
 
-    % if layout == 'poster':
+    % if sickbeard.HOME_LAYOUT == 'poster':
     &nbsp;
     <span> Sort By:
         <select id="postersort" class="form-control form-control-inline input-sm">
@@ -99,8 +98,8 @@
     % if curListType == "Anime":
         <h1 class="header">Anime List</h1>
     % endif
-% if layout == 'poster':
-<div id="${('container', 'container-anime')[curListType == 'Anime' and layout == 'poster']}" class="clearfix">
+% if sickbeard.HOME_LAYOUT == 'poster':
+<div id="${('container', 'container-anime')[curListType == 'Anime' and sickbeard.HOME_LAYOUT == 'poster']}" class="clearfix">
 <div class="posterview">
 % for curLoadingShow in sickbeard.showQueueScheduler.action.loadingShowList:
     % if curLoadingShow.show == None:
@@ -220,7 +219,7 @@
                 </td>
 
                 <td class="show-table">
-                    % if layout != 'simple':
+                    % if sickbeard.HOME_LAYOUT != 'simple':
                         % if curShow.network:
                             <span title="${curShow.network}"><img class="show-network-image" src="${srRoot}/showPoster/?show=${curShow.indexerid}&amp;which=network" alt="${curShow.network}" title="${curShow.network}" /></span>
                         % else:
@@ -377,28 +376,28 @@
         <td align="center" class="nowrap"></td>
     % endif
 
-    % if layout == 'small':
+    % if sickbeard.HOME_LAYOUT == 'small':
         <td class="tvShow">
-            <div class="imgsmallposter ${layout}">
+            <div class="imgsmallposter ${sickbeard.HOME_LAYOUT}">
                 <a href="${srRoot}/home/displayShow?show=${curShow.indexerid}" title="${curShow.name}">
-                    <img src="${srRoot}/showPoster/?show=${curShow.indexerid}&amp;which=poster_thumb" class="${layout}" alt="${curShow.indexerid}"/>
+                    <img src="${srRoot}/showPoster/?show=${curShow.indexerid}&amp;which=poster_thumb" class="${sickbeard.HOME_LAYOUT}" alt="${curShow.indexerid}"/>
                 </a>
                 <a href="${srRoot}/home/displayShow?show=${curShow.indexerid}" style="vertical-align: middle;">${curShow.name}</a>
             </div>
         </td>
-    % elif layout == 'banner':
+    % elif sickbeard.HOME_LAYOUT == 'banner':
         <td>
             <span style="display: none;">${curShow.name}</span>
-            <div class="imgbanner ${layout}">
+            <div class="imgbanner ${sickbeard.HOME_LAYOUT}">
                 <a href="${srRoot}/home/displayShow?show=${curShow.indexerid}">
-                <img src="${srRoot}/showPoster/?show=${curShow.indexerid}&amp;which=banner" class="${layout}" alt="${curShow.indexerid}" title="${curShow.name}"/>
+                <img src="${srRoot}/showPoster/?show=${curShow.indexerid}&amp;which=banner" class="${sickbeard.HOME_LAYOUT}" alt="${curShow.indexerid}" title="${curShow.name}"/>
             </div>
         </td>
-    % elif layout == 'simple':
+    % elif sickbeard.HOME_LAYOUT == 'simple':
         <td class="tvShow"><a href="${srRoot}/home/displayShow?show=${curShow.indexerid}">${curShow.name}</a></td>
     % endif
 
-    % if layout != 'simple':
+    % if sickbeard.HOME_LAYOUT != 'simple':
         <td align="center">
         % if curShow.network:
             <span title="${curShow.network}" class="hidden-print"><img id="network" width="54" height="27" src="${srRoot}/showPoster/?show=${curShow.indexerid}&amp;which=network" alt="${curShow.network}" title="${curShow.network}" /></span>
-- 
GitLab


From 4f1a13b3a4c0295aba67b47508515abf9154d3d1 Mon Sep 17 00:00:00 2001
From: Dustyn Gibson <miigotu@gmail.com>
Date: Tue, 3 Nov 2015 16:49:51 -0800
Subject: [PATCH 003/215] Fix show download statistics (downloaded, snatched,
 totals) cache issue Move SQL out of home.mako. Replaces #2635

---
 gui/slick/views/home.mako | 30 ------------------------------
 sickbeard/webserve.py     | 37 ++++++++++++++++++++++++++++++++++++-
 2 files changed, 36 insertions(+), 31 deletions(-)

diff --git a/gui/slick/views/home.mako b/gui/slick/views/home.mako
index 5e963666e..33b95391c 100644
--- a/gui/slick/views/home.mako
+++ b/gui/slick/views/home.mako
@@ -7,36 +7,6 @@
     from sickbeard import db, sbdatetime, network_timezones
     import datetime
     import re
-
-    myDB = db.DBConnection()
-    today = str(datetime.date.today().toordinal())
-
-    status_quality  = '(' + ','.join([str(x) for x in Quality.SNATCHED + Quality.SNATCHED_PROPER]) + ')'
-    status_download = '(' + ','.join([str(x) for x in Quality.DOWNLOADED + Quality.ARCHIVED]) + ')'
-
-    sql_statement  = 'SELECT showid, '
-
-    sql_statement += '(SELECT COUNT(*) FROM tv_episodes WHERE showid=tv_eps.showid AND season > 0 AND episode > 0 AND airdate > 1 AND status IN ' + status_quality + ') AS ep_snatched, '
-    sql_statement += '(SELECT COUNT(*) FROM tv_episodes WHERE showid=tv_eps.showid AND season > 0 AND episode > 0 AND airdate > 1 AND status IN ' + status_download + ') AS ep_downloaded, '
-    sql_statement += '(SELECT COUNT(*) FROM tv_episodes WHERE showid=tv_eps.showid AND season > 0 AND episode > 0 AND airdate > 1 '
-    sql_statement += ' AND ((airdate <= ' + today + ' AND (status = ' + str(SKIPPED) + ' OR status = ' + str(WANTED) + ' OR status = ' + str(FAILED) + ')) '
-    sql_statement += ' OR (status IN ' + status_quality + ') OR (status IN ' + status_download + '))) AS ep_total, '
-
-    sql_statement += ' (SELECT airdate FROM tv_episodes WHERE showid=tv_eps.showid AND airdate >= ' + today + ' AND (status = ' + str(UNAIRED) + ' OR status = ' + str(WANTED) + ') ORDER BY airdate ASC LIMIT 1) AS ep_airs_next, '
-    sql_statement += ' (SELECT airdate FROM tv_episodes WHERE showid=tv_eps.showid AND airdate > 1 AND status <> ' + str(UNAIRED) + ' ORDER BY airdate DESC LIMIT 1) AS ep_airs_prev '
-    sql_statement += ' FROM tv_episodes tv_eps GROUP BY showid'
-
-    sql_result = myDB.select(sql_statement)
-
-    show_stat = {}
-    max_download_count = 1000
-
-    for cur_result in sql_result:
-        show_stat[cur_result['showid']] = cur_result
-        if cur_result['ep_total'] > max_download_count:
-            max_download_count = cur_result['ep_total']
-
-    max_download_count = max_download_count * 100
 %>
 <%block name="metas">
 <meta data-var="max_download_count" data-content="${max_download_count}">
diff --git a/sickbeard/webserve.py b/sickbeard/webserve.py
index 69689ea9c..5b98cfd52 100644
--- a/sickbeard/webserve.py
+++ b/sickbeard/webserve.py
@@ -673,7 +673,42 @@ class Home(WebRoot):
         else:
             showlists = [["Shows", sickbeard.showList]]
 
-        return t.render(title="Home", header="Show List", topmenu="home", showlists=showlists)
+        stats = self.show_statistics()
+        return t.render(title="Home", header="Show List", topmenu="home", showlists=showlists, show_stat=stats[0], max_download_count=stats[1])
+
+    @staticmethod
+    def show_statistics():
+        myDB = db.DBConnection()
+        today = str(datetime.date.today().toordinal())
+
+        status_quality  = '(' + ','.join([str(x) for x in Quality.SNATCHED + Quality.SNATCHED_PROPER]) + ')'
+        status_download = '(' + ','.join([str(x) for x in Quality.DOWNLOADED + Quality.ARCHIVED]) + ')'
+
+        sql_statement  = 'SELECT showid, '
+
+        sql_statement += '(SELECT COUNT(*) FROM tv_episodes WHERE showid=tv_eps.showid AND season > 0 AND episode > 0 AND airdate > 1 AND status IN ' + status_quality + ') AS ep_snatched, '
+        sql_statement += '(SELECT COUNT(*) FROM tv_episodes WHERE showid=tv_eps.showid AND season > 0 AND episode > 0 AND airdate > 1 AND status IN ' + status_download + ') AS ep_downloaded, '
+        sql_statement += '(SELECT COUNT(*) FROM tv_episodes WHERE showid=tv_eps.showid AND season > 0 AND episode > 0 AND airdate > 1 '
+        sql_statement += ' AND ((airdate <= ' + today + ' AND (status = ' + str(SKIPPED) + ' OR status = ' + str(WANTED) + ' OR status = ' + str(FAILED) + ')) '
+        sql_statement += ' OR (status IN ' + status_quality + ') OR (status IN ' + status_download + '))) AS ep_total, '
+
+        sql_statement += ' (SELECT airdate FROM tv_episodes WHERE showid=tv_eps.showid AND airdate >= ' + today + ' AND (status = ' + str(UNAIRED) + ' OR status = ' + str(WANTED) + ') ORDER BY airdate ASC LIMIT 1) AS ep_airs_next, '
+        sql_statement += ' (SELECT airdate FROM tv_episodes WHERE showid=tv_eps.showid AND airdate > 1 AND status <> ' + str(UNAIRED) + ' ORDER BY airdate DESC LIMIT 1) AS ep_airs_prev '
+        sql_statement += ' FROM tv_episodes tv_eps GROUP BY showid'
+
+        sql_result = myDB.select(sql_statement)
+
+        show_stat = {}
+        max_download_count = 1000
+        for cur_result in sql_result:
+            show_stat[cur_result['showid']] = cur_result
+            if cur_result['ep_total'] > max_download_count:
+                max_download_count = cur_result['ep_total']
+
+        max_download_count *= 100
+
+        return show_stat, max_download_count
+
 
     def is_alive(self, *args, **kwargs):
         if 'callback' in kwargs and '_' in kwargs:
-- 
GitLab


From bda03f4af8ff08ccd61697fb07cee137055bbe40 Mon Sep 17 00:00:00 2001
From: Dustyn Gibson <miigotu@gmail.com>
Date: Tue, 3 Nov 2015 22:26:22 -0800
Subject: [PATCH 004/215] Remove feedcache, update feedparser

---
 lib/feedcache/__init__.py                     |   44 -
 lib/feedcache/cache.py                        |  212 -
 lib/feedcache/cachestoragelock.py             |   69 -
 lib/feedcache/example.py                      |   63 -
 lib/feedcache/example_threads.py              |  144 -
 lib/feedcache/test_cache.py                   |  323 --
 lib/feedcache/test_cachestoragelock.py        |   90 -
 lib/feedcache/test_server.py                  |  241 --
 lib/feedcache/test_shovefilesystem.py         |   89 -
 lib/feedparser/__init__.py                    |   44 +
 lib/feedparser/api.py                         |  247 ++
 lib/feedparser/datetimes/__init__.py          |   41 +
 lib/feedparser/datetimes/asctime.py           |   32 +
 lib/feedparser/datetimes/greek.py             |   56 +
 lib/feedparser/datetimes/hungarian.py         |   43 +
 lib/feedparser/datetimes/iso8601.py           |  120 +
 lib/feedparser/datetimes/korean.py            |   47 +
 lib/feedparser/datetimes/perforce.py          |   25 +
 lib/feedparser/datetimes/rfc822.py            |  109 +
 lib/feedparser/datetimes/w3dtf.py             |   88 +
 lib/feedparser/encodings.py                   |  279 ++
 lib/feedparser/exceptions.py                  |   52 +
 lib/feedparser/feedparser.py                  | 3820 -----------------
 lib/feedparser/feedparsertest.py              |  871 ----
 lib/feedparser/html.py                        |  213 +
 lib/feedparser/http.py                        |  231 +
 lib/feedparser/mixin.py                       |  754 ++++
 lib/feedparser/namespaces/__init__.py         |    0
 lib/feedparser/namespaces/_base.py            |  499 +++
 lib/feedparser/namespaces/admin.py            |   55 +
 lib/feedparser/namespaces/cc.py               |   71 +
 lib/feedparser/namespaces/dc.py               |  136 +
 lib/feedparser/namespaces/georss.py           |  264 ++
 lib/feedparser/namespaces/itunes.py           |  111 +
 lib/feedparser/namespaces/mediarss.py         |  142 +
 lib/feedparser/namespaces/psc.py              |   72 +
 lib/feedparser/parsers/__init__.py            |    0
 lib/feedparser/parsers/loose.py               |   72 +
 lib/feedparser/parsers/strict.py              |  135 +
 lib/feedparser/sanitizer.py                   |  466 ++
 lib/feedparser/sgml.py                        |   76 +
 lib/feedparser/sgmllib.py                     |  547 ---
 .../tests/compression/deflate-no-headers.z    |  Bin 50 -> 0 bytes
 .../compression/deflate-not-compressed.z      |    1 -
 lib/feedparser/tests/compression/deflate.z    |  Bin 56 -> 0 bytes
 .../tests/compression/gzip-not-compressed.gz  |  Bin 32 -> 0 bytes
 .../tests/compression/gzip-struct-error.gz    |  Bin 79 -> 0 bytes
 lib/feedparser/tests/compression/gzip.gz      |  Bin 79 -> 0 bytes
 lib/feedparser/tests/compression/sample.xml   |    1 -
 lib/feedparser/tests/encoding/big5.xml        |    8 -
 .../tests/encoding/bozo_bogus_encoding.xml    |    7 -
 .../encoding/bozo_double-encoded-html.xml     |   13 -
 .../encoding/bozo_encoding_mismatch_crash.xml |   10 -
 .../tests/encoding/bozo_http_i18n.xml         |   11 -
 .../tests/encoding/bozo_http_text_plain.xml   |    8 -
 .../encoding/bozo_http_text_plain_charset.xml |    8 -
 .../encoding/bozo_invalid-bytes-with-bom.xml  |   10 -
 .../tests/encoding/bozo_linenoise.xml         |   13 -
 lib/feedparser/tests/encoding/csucs4.xml      |  Bin 736 -> 0 bytes
 lib/feedparser/tests/encoding/csunicode.xml   |  Bin 386 -> 0 bytes
 .../tests/encoding/demoronize-1.xml           |   13 -
 .../tests/encoding/demoronize-2.xml           |   13 -
 .../tests/encoding/demoronize-3.xml           |   13 -
 .../tests/encoding/double-encoded-html.xml    |   13 -
 .../encoding/encoding_attribute_crash.xml     |    9 -
 .../encoding/encoding_attribute_crash_2.xml   |    9 -
 .../tests/encoding/euc-kr-attribute.xml       |   14 -
 lib/feedparser/tests/encoding/euc-kr-item.xml |   14 -
 lib/feedparser/tests/encoding/euc-kr.xml      |   12 -
 .../http_application_atom_xml_charset.xml     |    8 -
 ...on_atom_xml_charset_overrides_encoding.xml |    8 -
 .../http_application_atom_xml_default.xml     |    8 -
 .../http_application_atom_xml_encoding.xml    |    8 -
 ...tp_application_atom_xml_gb2312_charset.xml |    9 -
 ..._xml_gb2312_charset_overrides_encoding.xml |    9 -
 ...p_application_atom_xml_gb2312_encoding.xml |    9 -
 .../http_application_rss_xml_charset.xml      |    8 -
 ...ion_rss_xml_charset_overrides_encoding.xml |    8 -
 .../http_application_rss_xml_default.xml      |    8 -
 .../http_application_rss_xml_encoding.xml     |    8 -
 .../encoding/http_application_xml_charset.xml |    8 -
 ...ication_xml_charset_overrides_encoding.xml |    8 -
 .../encoding/http_application_xml_default.xml |    8 -
 .../http_application_xml_dtd_charset.xml      |    8 -
 ...ion_xml_dtd_charset_overrides_encoding.xml |    8 -
 .../http_application_xml_dtd_default.xml      |    8 -
 .../http_application_xml_dtd_encoding.xml     |    8 -
 .../http_application_xml_encoding.xml         |    8 -
 .../http_application_xml_epe_charset.xml      |    8 -
 ...ion_xml_epe_charset_overrides_encoding.xml |    8 -
 .../http_application_xml_epe_default.xml      |    8 -
 .../http_application_xml_epe_encoding.xml     |    8 -
 .../http_encoding_attribute_crash.xml         |   13 -
 lib/feedparser/tests/encoding/http_i18n.xml   |   13 -
 .../encoding/http_text_atom_xml_charset.xml   |    8 -
 ...xt_atom_xml_charset_overrides_encoding.xml |    8 -
 .../encoding/http_text_atom_xml_default.xml   |    8 -
 .../encoding/http_text_atom_xml_encoding.xml  |    8 -
 .../encoding/http_text_rss_xml_charset.xml    |    8 -
 ...ext_rss_xml_charset_overrides_encoding.xml |    8 -
 .../encoding/http_text_rss_xml_default.xml    |    8 -
 .../encoding/http_text_rss_xml_encoding.xml   |    8 -
 .../encoding/http_text_xml_bogus_charset.xml  |    8 -
 .../encoding/http_text_xml_bogus_param.xml    |    8 -
 .../tests/encoding/http_text_xml_charset.xml  |    8 -
 .../encoding/http_text_xml_charset_2.xml      |   16 -
 ...tp_text_xml_charset_overrides_encoding.xml |    8 -
 ..._text_xml_charset_overrides_encoding_2.xml |   17 -
 .../tests/encoding/http_text_xml_default.xml  |    8 -
 .../encoding/http_text_xml_epe_charset.xml    |    8 -
 ...ext_xml_epe_charset_overrides_encoding.xml |    8 -
 .../encoding/http_text_xml_epe_default.xml    |    8 -
 .../encoding/http_text_xml_epe_encoding.xml   |    8 -
 .../tests/encoding/http_text_xml_qs.xml       |    8 -
 .../tests/encoding/iso-10646-ucs-2.xml        |  Bin 422 -> 0 bytes
 .../tests/encoding/iso-10646-ucs-4.xml        |  Bin 844 -> 0 bytes
 .../encoding/no_content_type_default.xml      |    7 -
 .../encoding/no_content_type_encoding.xml     |    7 -
 lib/feedparser/tests/encoding/u16.xml         |  Bin 350 -> 0 bytes
 lib/feedparser/tests/encoding/ucs-2.xml       |  Bin 362 -> 0 bytes
 lib/feedparser/tests/encoding/ucs-4.xml       |  Bin 724 -> 0 bytes
 .../tests/encoding/utf-16be-autodetect.xml    |  Bin 452 -> 0 bytes
 .../tests/encoding/utf-16be-bom.xml           |  Bin 464 -> 0 bytes
 lib/feedparser/tests/encoding/utf-16be.xml    |  Bin 448 -> 0 bytes
 .../tests/encoding/utf-16le-autodetect.xml    |  Bin 458 -> 0 bytes
 .../tests/encoding/utf-16le-bom.xml           |  Bin 470 -> 0 bytes
 lib/feedparser/tests/encoding/utf-16le.xml    |  Bin 454 -> 0 bytes
 .../tests/encoding/utf-32be-autodetect.xml    |  Bin 904 -> 0 bytes
 .../tests/encoding/utf-32be-bom.xml           |  Bin 928 -> 0 bytes
 lib/feedparser/tests/encoding/utf-32be.xml    |  Bin 896 -> 0 bytes
 .../tests/encoding/utf-32le-autodetect.xml    |  Bin 916 -> 0 bytes
 .../tests/encoding/utf-32le-bom.xml           |  Bin 940 -> 0 bytes
 lib/feedparser/tests/encoding/utf-32le.xml    |  Bin 908 -> 0 bytes
 lib/feedparser/tests/encoding/utf-8-bom.xml   |    8 -
 lib/feedparser/tests/encoding/utf16.xml       |  Bin 362 -> 0 bytes
 lib/feedparser/tests/encoding/utf_16.xml      |  Bin 368 -> 0 bytes
 lib/feedparser/tests/encoding/utf_32.xml      |  Bin 736 -> 0 bytes
 lib/feedparser/tests/encoding/x80_437.xml     |    9 -
 lib/feedparser/tests/encoding/x80_850.xml     |    9 -
 lib/feedparser/tests/encoding/x80_852.xml     |    9 -
 lib/feedparser/tests/encoding/x80_855.xml     |    9 -
 lib/feedparser/tests/encoding/x80_857.xml     |    9 -
 lib/feedparser/tests/encoding/x80_860.xml     |    9 -
 lib/feedparser/tests/encoding/x80_861.xml     |    9 -
 lib/feedparser/tests/encoding/x80_862.xml     |    9 -
 lib/feedparser/tests/encoding/x80_863.xml     |    9 -
 lib/feedparser/tests/encoding/x80_865.xml     |    9 -
 lib/feedparser/tests/encoding/x80_866.xml     |    9 -
 lib/feedparser/tests/encoding/x80_cp037.xml   |    1 -
 lib/feedparser/tests/encoding/x80_cp1125.xml  |    9 -
 lib/feedparser/tests/encoding/x80_cp1250.xml  |    9 -
 lib/feedparser/tests/encoding/x80_cp1251.xml  |    9 -
 lib/feedparser/tests/encoding/x80_cp1252.xml  |    9 -
 lib/feedparser/tests/encoding/x80_cp1253.xml  |    9 -
 lib/feedparser/tests/encoding/x80_cp1254.xml  |    9 -
 lib/feedparser/tests/encoding/x80_cp1255.xml  |    9 -
 lib/feedparser/tests/encoding/x80_cp1256.xml  |    9 -
 lib/feedparser/tests/encoding/x80_cp1257.xml  |    9 -
 lib/feedparser/tests/encoding/x80_cp1258.xml  |    9 -
 lib/feedparser/tests/encoding/x80_cp437.xml   |    9 -
 lib/feedparser/tests/encoding/x80_cp500.xml   |    1 -
 lib/feedparser/tests/encoding/x80_cp737.xml   |    9 -
 lib/feedparser/tests/encoding/x80_cp775.xml   |    9 -
 lib/feedparser/tests/encoding/x80_cp850.xml   |    9 -
 lib/feedparser/tests/encoding/x80_cp852.xml   |    9 -
 lib/feedparser/tests/encoding/x80_cp855.xml   |    9 -
 lib/feedparser/tests/encoding/x80_cp856.xml   |    9 -
 lib/feedparser/tests/encoding/x80_cp857.xml   |    9 -
 lib/feedparser/tests/encoding/x80_cp860.xml   |    9 -
 lib/feedparser/tests/encoding/x80_cp861.xml   |    9 -
 lib/feedparser/tests/encoding/x80_cp862.xml   |    9 -
 lib/feedparser/tests/encoding/x80_cp863.xml   |    9 -
 lib/feedparser/tests/encoding/x80_cp864.xml   |    9 -
 lib/feedparser/tests/encoding/x80_cp865.xml   |    9 -
 lib/feedparser/tests/encoding/x80_cp866.xml   |    9 -
 lib/feedparser/tests/encoding/x80_cp874.xml   |    9 -
 lib/feedparser/tests/encoding/x80_cp875.xml   |    1 -
 lib/feedparser/tests/encoding/x80_cp_is.xml   |    9 -
 .../tests/encoding/x80_csibm037.xml           |    1 -
 .../tests/encoding/x80_csibm500.xml           |    1 -
 .../tests/encoding/x80_csibm855.xml           |    9 -
 .../tests/encoding/x80_csibm857.xml           |    9 -
 .../tests/encoding/x80_csibm860.xml           |    9 -
 .../tests/encoding/x80_csibm861.xml           |    9 -
 .../tests/encoding/x80_csibm863.xml           |    9 -
 .../tests/encoding/x80_csibm864.xml           |    9 -
 .../tests/encoding/x80_csibm865.xml           |    9 -
 .../tests/encoding/x80_csibm866.xml           |    9 -
 lib/feedparser/tests/encoding/x80_cskoi8r.xml |    9 -
 .../tests/encoding/x80_csmacintosh.xml        |    9 -
 .../tests/encoding/x80_cspc775baltic.xml      |    9 -
 .../encoding/x80_cspc850multilingual.xml      |    9 -
 .../tests/encoding/x80_cspc862latinhebrew.xml |    9 -
 .../tests/encoding/x80_cspc8codepage437.xml   |    9 -
 .../tests/encoding/x80_cspcp852.xml           |    9 -
 lib/feedparser/tests/encoding/x80_dbcs.xml    |    9 -
 .../tests/encoding/x80_ebcdic-cp-be.xml       |    1 -
 .../tests/encoding/x80_ebcdic-cp-ca.xml       |    1 -
 .../tests/encoding/x80_ebcdic-cp-ch.xml       |    1 -
 .../tests/encoding/x80_ebcdic-cp-nl.xml       |    1 -
 .../tests/encoding/x80_ebcdic-cp-us.xml       |    1 -
 .../tests/encoding/x80_ebcdic-cp-wt.xml       |    1 -
 .../tests/encoding/x80_ebcdic_cp_be.xml       |    1 -
 .../tests/encoding/x80_ebcdic_cp_ca.xml       |    1 -
 .../tests/encoding/x80_ebcdic_cp_ch.xml       |    1 -
 .../tests/encoding/x80_ebcdic_cp_nl.xml       |    1 -
 .../tests/encoding/x80_ebcdic_cp_us.xml       |    1 -
 .../tests/encoding/x80_ebcdic_cp_wt.xml       |    1 -
 lib/feedparser/tests/encoding/x80_ibm037.xml  |    1 -
 lib/feedparser/tests/encoding/x80_ibm039.xml  |    1 -
 lib/feedparser/tests/encoding/x80_ibm1140.xml |    1 -
 lib/feedparser/tests/encoding/x80_ibm437.xml  |    9 -
 lib/feedparser/tests/encoding/x80_ibm500.xml  |    1 -
 lib/feedparser/tests/encoding/x80_ibm775.xml  |    9 -
 lib/feedparser/tests/encoding/x80_ibm850.xml  |    9 -
 lib/feedparser/tests/encoding/x80_ibm852.xml  |    9 -
 lib/feedparser/tests/encoding/x80_ibm855.xml  |    9 -
 lib/feedparser/tests/encoding/x80_ibm857.xml  |    9 -
 lib/feedparser/tests/encoding/x80_ibm860.xml  |    9 -
 lib/feedparser/tests/encoding/x80_ibm861.xml  |    9 -
 lib/feedparser/tests/encoding/x80_ibm862.xml  |    9 -
 lib/feedparser/tests/encoding/x80_ibm863.xml  |    9 -
 lib/feedparser/tests/encoding/x80_ibm864.xml  |    9 -
 lib/feedparser/tests/encoding/x80_ibm865.xml  |    9 -
 lib/feedparser/tests/encoding/x80_ibm866.xml  |    9 -
 lib/feedparser/tests/encoding/x80_koi8-r.xml  |    9 -
 lib/feedparser/tests/encoding/x80_koi8-t.xml  |    9 -
 lib/feedparser/tests/encoding/x80_koi8-u.xml  |    9 -
 .../tests/encoding/x80_mac-cyrillic.xml       |    9 -
 lib/feedparser/tests/encoding/x80_mac.xml     |    9 -
 .../tests/encoding/x80_maccentraleurope.xml   |    9 -
 .../tests/encoding/x80_maccyrillic.xml        |    9 -
 .../tests/encoding/x80_macgreek.xml           |    9 -
 .../tests/encoding/x80_maciceland.xml         |    9 -
 .../tests/encoding/x80_macintosh.xml          |    9 -
 .../tests/encoding/x80_maclatin2.xml          |    9 -
 .../tests/encoding/x80_macroman.xml           |    9 -
 .../tests/encoding/x80_macturkish.xml         |    9 -
 lib/feedparser/tests/encoding/x80_ms-ansi.xml |    9 -
 lib/feedparser/tests/encoding/x80_ms-arab.xml |    9 -
 lib/feedparser/tests/encoding/x80_ms-cyrl.xml |    9 -
 lib/feedparser/tests/encoding/x80_ms-ee.xml   |    9 -
 .../tests/encoding/x80_ms-greek.xml           |    9 -
 lib/feedparser/tests/encoding/x80_ms-hebr.xml |    9 -
 lib/feedparser/tests/encoding/x80_ms-turk.xml |    9 -
 .../tests/encoding/x80_tcvn-5712.xml          |    9 -
 lib/feedparser/tests/encoding/x80_tcvn.xml    |    9 -
 .../tests/encoding/x80_tcvn5712-1.xml         |    9 -
 lib/feedparser/tests/encoding/x80_viscii.xml  |    9 -
 .../tests/encoding/x80_winbaltrim.xml         |    9 -
 .../tests/encoding/x80_windows-1250.xml       |    9 -
 .../tests/encoding/x80_windows-1251.xml       |    9 -
 .../tests/encoding/x80_windows-1252.xml       |    9 -
 .../tests/encoding/x80_windows-1253.xml       |    9 -
 .../tests/encoding/x80_windows-1254.xml       |    9 -
 .../tests/encoding/x80_windows-1255.xml       |    9 -
 .../tests/encoding/x80_windows-1256.xml       |    9 -
 .../tests/encoding/x80_windows-1257.xml       |    9 -
 .../tests/encoding/x80_windows-1258.xml       |    9 -
 .../tests/encoding/x80_windows_1250.xml       |    9 -
 .../tests/encoding/x80_windows_1251.xml       |    9 -
 .../tests/encoding/x80_windows_1252.xml       |    9 -
 .../tests/encoding/x80_windows_1253.xml       |    9 -
 .../tests/encoding/x80_windows_1254.xml       |    9 -
 .../tests/encoding/x80_windows_1255.xml       |    9 -
 .../tests/encoding/x80_windows_1256.xml       |    9 -
 .../tests/encoding/x80_windows_1257.xml       |    9 -
 .../tests/encoding/x80_windows_1258.xml       |    9 -
 lib/feedparser/tests/entities/160.xml         |    9 -
 lib/feedparser/tests/entities/732.xml         |    9 -
 lib/feedparser/tests/entities/8216.xml        |    9 -
 lib/feedparser/tests/entities/8217.xml        |    9 -
 lib/feedparser/tests/entities/8220.xml        |    9 -
 lib/feedparser/tests/entities/8221.xml        |    9 -
 lib/feedparser/tests/entities/9830.xml        |    9 -
 lib/feedparser/tests/entities/aacute.xml      |    9 -
 lib/feedparser/tests/entities/acirc.xml       |    9 -
 lib/feedparser/tests/entities/acute.xml       |    9 -
 lib/feedparser/tests/entities/aelig.xml       |    9 -
 lib/feedparser/tests/entities/agrave.xml      |    9 -
 lib/feedparser/tests/entities/alefsym.xml     |    9 -
 lib/feedparser/tests/entities/alpha.xml       |    9 -
 lib/feedparser/tests/entities/and.xml         |    9 -
 lib/feedparser/tests/entities/ang.xml         |    9 -
 lib/feedparser/tests/entities/aring.xml       |    9 -
 lib/feedparser/tests/entities/asymp.xml       |    9 -
 lib/feedparser/tests/entities/atilde.xml      |    9 -
 lib/feedparser/tests/entities/attr_amp.xml    |    7 -
 lib/feedparser/tests/entities/auml.xml        |    9 -
 lib/feedparser/tests/entities/bdquo.xml       |    9 -
 lib/feedparser/tests/entities/beta.xml        |    9 -
 lib/feedparser/tests/entities/brvbar.xml      |    9 -
 lib/feedparser/tests/entities/bull.xml        |    9 -
 lib/feedparser/tests/entities/cap.xml         |    9 -
 lib/feedparser/tests/entities/ccedil.xml      |    9 -
 lib/feedparser/tests/entities/cedil.xml       |    9 -
 lib/feedparser/tests/entities/cent.xml        |    9 -
 lib/feedparser/tests/entities/chi.xml         |    9 -
 lib/feedparser/tests/entities/circ.xml        |    9 -
 lib/feedparser/tests/entities/clubs.xml       |    9 -
 lib/feedparser/tests/entities/cong.xml        |    9 -
 lib/feedparser/tests/entities/copy.xml        |    9 -
 lib/feedparser/tests/entities/crarr.xml       |    9 -
 lib/feedparser/tests/entities/cup.xml         |    9 -
 lib/feedparser/tests/entities/curren.xml      |    9 -
 lib/feedparser/tests/entities/dagger.xml      |    9 -
 lib/feedparser/tests/entities/darr.xml        |    9 -
 lib/feedparser/tests/entities/deg.xml         |    9 -
 lib/feedparser/tests/entities/delta.xml       |    9 -
 lib/feedparser/tests/entities/diams.xml       |    9 -
 lib/feedparser/tests/entities/divide.xml      |    9 -
 .../tests/entities/doesnotexist.xml           |    9 -
 lib/feedparser/tests/entities/eacute.xml      |    9 -
 lib/feedparser/tests/entities/ecirc.xml       |    9 -
 lib/feedparser/tests/entities/egrave.xml      |    9 -
 lib/feedparser/tests/entities/empty.xml       |    9 -
 lib/feedparser/tests/entities/emsp.xml        |    9 -
 lib/feedparser/tests/entities/ensp.xml        |    9 -
 lib/feedparser/tests/entities/epsilon.xml     |    9 -
 lib/feedparser/tests/entities/equiv.xml       |    9 -
 lib/feedparser/tests/entities/eta.xml         |    9 -
 lib/feedparser/tests/entities/eth.xml         |    9 -
 lib/feedparser/tests/entities/euml.xml        |    9 -
 lib/feedparser/tests/entities/euro.xml        |    9 -
 lib/feedparser/tests/entities/exist.xml       |    9 -
 lib/feedparser/tests/entities/fnof.xml        |    9 -
 lib/feedparser/tests/entities/forall.xml      |    9 -
 lib/feedparser/tests/entities/frac12.xml      |    9 -
 lib/feedparser/tests/entities/frac14.xml      |    9 -
 lib/feedparser/tests/entities/frac34.xml      |    9 -
 lib/feedparser/tests/entities/frasl.xml       |    9 -
 lib/feedparser/tests/entities/gamma.xml       |    9 -
 lib/feedparser/tests/entities/ge.xml          |    9 -
 lib/feedparser/tests/entities/hArr.xml        |    9 -
 lib/feedparser/tests/entities/hearts.xml      |    9 -
 lib/feedparser/tests/entities/hellip.xml      |    9 -
 .../tests/entities/hex_entity_x_lowercase.xml |    9 -
 .../tests/entities/hex_entity_x_uppercase.xml |    9 -
 lib/feedparser/tests/entities/iacute.xml      |    9 -
 lib/feedparser/tests/entities/icirc.xml       |    9 -
 lib/feedparser/tests/entities/iexcl.xml       |    9 -
 lib/feedparser/tests/entities/igrave.xml      |    9 -
 lib/feedparser/tests/entities/image.xml       |    9 -
 lib/feedparser/tests/entities/infin.xml       |    9 -
 lib/feedparser/tests/entities/int.xml         |    9 -
 lib/feedparser/tests/entities/iota.xml        |    9 -
 lib/feedparser/tests/entities/iquest.xml      |    9 -
 lib/feedparser/tests/entities/isin.xml        |    9 -
 lib/feedparser/tests/entities/iuml.xml        |    9 -
 lib/feedparser/tests/entities/kappa.xml       |    9 -
 lib/feedparser/tests/entities/lArr.xml        |    9 -
 lib/feedparser/tests/entities/lambda.xml      |    9 -
 lib/feedparser/tests/entities/lang.xml        |    9 -
 lib/feedparser/tests/entities/laquo.xml       |    9 -
 lib/feedparser/tests/entities/lceil.xml       |    9 -
 lib/feedparser/tests/entities/ldquo.xml       |    9 -
 lib/feedparser/tests/entities/le.xml          |    9 -
 lib/feedparser/tests/entities/lfloor.xml      |    9 -
 lib/feedparser/tests/entities/lowast.xml      |    9 -
 lib/feedparser/tests/entities/loz.xml         |    9 -
 lib/feedparser/tests/entities/lrm.xml         |    9 -
 lib/feedparser/tests/entities/lsaquo.xml      |    9 -
 lib/feedparser/tests/entities/lsquo.xml       |    9 -
 lib/feedparser/tests/entities/macr.xml        |    9 -
 lib/feedparser/tests/entities/mdash.xml       |    9 -
 lib/feedparser/tests/entities/micro.xml       |    9 -
 lib/feedparser/tests/entities/middot.xml      |    9 -
 lib/feedparser/tests/entities/minus.xml       |    9 -
 lib/feedparser/tests/entities/mu.xml          |    9 -
 lib/feedparser/tests/entities/nabla.xml       |    9 -
 lib/feedparser/tests/entities/nbsp.xml        |    9 -
 lib/feedparser/tests/entities/ndash.xml       |    9 -
 lib/feedparser/tests/entities/ne.xml          |    9 -
 lib/feedparser/tests/entities/ni.xml          |    9 -
 lib/feedparser/tests/entities/not.xml         |    9 -
 lib/feedparser/tests/entities/notin.xml       |    9 -
 lib/feedparser/tests/entities/nsub.xml        |    9 -
 lib/feedparser/tests/entities/ntilde.xml      |    9 -
 lib/feedparser/tests/entities/nu.xml          |    9 -
 lib/feedparser/tests/entities/oacute.xml      |    9 -
 lib/feedparser/tests/entities/ocirc.xml       |    9 -
 lib/feedparser/tests/entities/oelig.xml       |    9 -
 lib/feedparser/tests/entities/ograve.xml      |    9 -
 lib/feedparser/tests/entities/oline.xml       |    9 -
 lib/feedparser/tests/entities/omega.xml       |    9 -
 lib/feedparser/tests/entities/omicron.xml     |    9 -
 lib/feedparser/tests/entities/oplus.xml       |    9 -
 lib/feedparser/tests/entities/or.xml          |    9 -
 lib/feedparser/tests/entities/ordf.xml        |    9 -
 lib/feedparser/tests/entities/ordm.xml        |    9 -
 lib/feedparser/tests/entities/oslash.xml      |    9 -
 lib/feedparser/tests/entities/otilde.xml      |    9 -
 lib/feedparser/tests/entities/otimes.xml      |    9 -
 lib/feedparser/tests/entities/ouml.xml        |    9 -
 lib/feedparser/tests/entities/para.xml        |    9 -
 lib/feedparser/tests/entities/part.xml        |    9 -
 lib/feedparser/tests/entities/permil.xml      |    9 -
 lib/feedparser/tests/entities/perp.xml        |    9 -
 lib/feedparser/tests/entities/phi.xml         |    9 -
 lib/feedparser/tests/entities/pi.xml          |    9 -
 lib/feedparser/tests/entities/piv.xml         |    9 -
 lib/feedparser/tests/entities/plusmn.xml      |    9 -
 lib/feedparser/tests/entities/pound.xml       |    9 -
 lib/feedparser/tests/entities/prime.xml       |    9 -
 lib/feedparser/tests/entities/prod.xml        |    9 -
 lib/feedparser/tests/entities/prop.xml        |    9 -
 lib/feedparser/tests/entities/psi.xml         |    9 -
 .../tests/entities/query_variable_entry.xml   |   11 -
 .../tests/entities/query_variable_feed.xml    |    9 -
 lib/feedparser/tests/entities/radic.xml       |    9 -
 lib/feedparser/tests/entities/rang.xml        |    9 -
 lib/feedparser/tests/entities/raquo.xml       |    9 -
 lib/feedparser/tests/entities/rarr.xml        |    9 -
 lib/feedparser/tests/entities/rceil.xml       |    9 -
 lib/feedparser/tests/entities/rdquo.xml       |    9 -
 lib/feedparser/tests/entities/real.xml        |    9 -
 lib/feedparser/tests/entities/reg.xml         |    9 -
 lib/feedparser/tests/entities/rfloor.xml      |    9 -
 lib/feedparser/tests/entities/rho.xml         |    9 -
 lib/feedparser/tests/entities/rlm.xml         |    9 -
 lib/feedparser/tests/entities/rsaquo.xml      |    9 -
 lib/feedparser/tests/entities/rsquo.xml       |    9 -
 lib/feedparser/tests/entities/sbquo.xml       |    9 -
 lib/feedparser/tests/entities/scaron.xml      |    9 -
 lib/feedparser/tests/entities/sdot.xml        |    9 -
 lib/feedparser/tests/entities/sect.xml        |    9 -
 lib/feedparser/tests/entities/shy.xml         |    9 -
 lib/feedparser/tests/entities/sigma.xml       |    9 -
 lib/feedparser/tests/entities/sigmaf.xml      |    9 -
 lib/feedparser/tests/entities/sim.xml         |    9 -
 lib/feedparser/tests/entities/spades.xml      |    9 -
 lib/feedparser/tests/entities/sub.xml         |    9 -
 lib/feedparser/tests/entities/sube.xml        |    9 -
 lib/feedparser/tests/entities/sum.xml         |    9 -
 lib/feedparser/tests/entities/sup.xml         |    9 -
 lib/feedparser/tests/entities/sup1.xml        |    9 -
 lib/feedparser/tests/entities/sup2.xml        |    9 -
 lib/feedparser/tests/entities/sup3.xml        |    9 -
 lib/feedparser/tests/entities/supe.xml        |    9 -
 lib/feedparser/tests/entities/szlig.xml       |    9 -
 lib/feedparser/tests/entities/tau.xml         |    9 -
 lib/feedparser/tests/entities/there4.xml      |    9 -
 lib/feedparser/tests/entities/theta.xml       |    9 -
 lib/feedparser/tests/entities/thetasym.xml    |    9 -
 lib/feedparser/tests/entities/thinsp.xml      |    9 -
 lib/feedparser/tests/entities/thorn.xml       |    9 -
 lib/feedparser/tests/entities/tilde.xml       |    9 -
 lib/feedparser/tests/entities/times.xml       |    9 -
 lib/feedparser/tests/entities/trade.xml       |    9 -
 lib/feedparser/tests/entities/uacute.xml      |    9 -
 lib/feedparser/tests/entities/uarr.xml        |    9 -
 lib/feedparser/tests/entities/ucirc.xml       |    9 -
 lib/feedparser/tests/entities/ugrave.xml      |    9 -
 lib/feedparser/tests/entities/uml.xml         |    9 -
 lib/feedparser/tests/entities/upper_AElig.xml |    9 -
 .../tests/entities/upper_Aacute.xml           |    9 -
 lib/feedparser/tests/entities/upper_Acirc.xml |    9 -
 .../tests/entities/upper_Agrave.xml           |    9 -
 lib/feedparser/tests/entities/upper_Alpha.xml |    9 -
 lib/feedparser/tests/entities/upper_Aring.xml |    9 -
 .../tests/entities/upper_Atilde.xml           |    9 -
 lib/feedparser/tests/entities/upper_Auml.xml  |    9 -
 lib/feedparser/tests/entities/upper_Beta.xml  |    9 -
 .../tests/entities/upper_Ccedil.xml           |    9 -
 lib/feedparser/tests/entities/upper_Chi.xml   |    9 -
 .../tests/entities/upper_Dagger.xml           |    9 -
 lib/feedparser/tests/entities/upper_Delta.xml |    9 -
 lib/feedparser/tests/entities/upper_ETH.xml   |    9 -
 .../tests/entities/upper_Eacute.xml           |    9 -
 lib/feedparser/tests/entities/upper_Ecirc.xml |    9 -
 .../tests/entities/upper_Egrave.xml           |    9 -
 .../tests/entities/upper_Epsilon.xml          |    9 -
 lib/feedparser/tests/entities/upper_Eta.xml   |    9 -
 lib/feedparser/tests/entities/upper_Euml.xml  |    9 -
 lib/feedparser/tests/entities/upper_Gamma.xml |    9 -
 .../tests/entities/upper_Iacute.xml           |    9 -
 lib/feedparser/tests/entities/upper_Icirc.xml |    9 -
 .../tests/entities/upper_Igrave.xml           |    9 -
 lib/feedparser/tests/entities/upper_Iota.xml  |    9 -
 lib/feedparser/tests/entities/upper_Iuml.xml  |    9 -
 lib/feedparser/tests/entities/upper_Kappa.xml |    9 -
 .../tests/entities/upper_Lambda.xml           |    9 -
 lib/feedparser/tests/entities/upper_Mu.xml    |    9 -
 .../tests/entities/upper_Ntilde.xml           |    9 -
 lib/feedparser/tests/entities/upper_Nu.xml    |    9 -
 lib/feedparser/tests/entities/upper_OElig.xml |    9 -
 .../tests/entities/upper_Oacute.xml           |    9 -
 lib/feedparser/tests/entities/upper_Ocirc.xml |    9 -
 .../tests/entities/upper_Ograve.xml           |    9 -
 lib/feedparser/tests/entities/upper_Omega.xml |    9 -
 .../tests/entities/upper_Omicron.xml          |    9 -
 .../tests/entities/upper_Oslash.xml           |    9 -
 .../tests/entities/upper_Otilde.xml           |    9 -
 lib/feedparser/tests/entities/upper_Ouml.xml  |    9 -
 lib/feedparser/tests/entities/upper_Phi.xml   |    9 -
 lib/feedparser/tests/entities/upper_Pi.xml    |    9 -
 lib/feedparser/tests/entities/upper_Prime.xml |    9 -
 lib/feedparser/tests/entities/upper_Psi.xml   |    9 -
 lib/feedparser/tests/entities/upper_Rho.xml   |    9 -
 .../tests/entities/upper_Scaron.xml           |    9 -
 lib/feedparser/tests/entities/upper_Sigma.xml |    9 -
 lib/feedparser/tests/entities/upper_THORN.xml |    9 -
 lib/feedparser/tests/entities/upper_Tau.xml   |    9 -
 lib/feedparser/tests/entities/upper_Theta.xml |    9 -
 .../tests/entities/upper_Uacute.xml           |    9 -
 lib/feedparser/tests/entities/upper_Ucirc.xml |    9 -
 .../tests/entities/upper_Ugrave.xml           |    9 -
 .../tests/entities/upper_Upsilon.xml          |    9 -
 lib/feedparser/tests/entities/upper_Uuml.xml  |    9 -
 lib/feedparser/tests/entities/upper_Xi.xml    |    9 -
 .../tests/entities/upper_Yacute.xml           |    9 -
 lib/feedparser/tests/entities/upper_Yuml.xml  |    9 -
 lib/feedparser/tests/entities/upper_Zeta.xml  |    9 -
 lib/feedparser/tests/entities/upsih.xml       |    9 -
 lib/feedparser/tests/entities/upsilon.xml     |    9 -
 lib/feedparser/tests/entities/uuml.xml        |    9 -
 lib/feedparser/tests/entities/weierp.xml      |    9 -
 lib/feedparser/tests/entities/xi.xml          |    9 -
 lib/feedparser/tests/entities/yacute.xml      |    9 -
 lib/feedparser/tests/entities/yen.xml         |    9 -
 lib/feedparser/tests/entities/yuml.xml        |    9 -
 lib/feedparser/tests/entities/zeta.xml        |    9 -
 lib/feedparser/tests/entities/zwj.xml         |    9 -
 lib/feedparser/tests/entities/zwnj.xml        |    9 -
 .../tests/http/http_redirect_to_304.xml       |    7 -
 lib/feedparser/tests/http/http_status_301.xml |    7 -
 lib/feedparser/tests/http/http_status_302.xml |    7 -
 lib/feedparser/tests/http/http_status_303.xml |    7 -
 lib/feedparser/tests/http/http_status_304.xml |    9 -
 lib/feedparser/tests/http/http_status_307.xml |    7 -
 lib/feedparser/tests/http/http_status_404.xml |    6 -
 .../tests/http/http_status_9001.xml           |    6 -
 lib/feedparser/tests/http/target.xml          |    7 -
 .../tests/illformed/aaa_illformed.xml         |    6 -
 .../tests/illformed/always_strip_doctype.xml  |   10 -
 .../tests/illformed/chardet/big5.xml          |    8 -
 .../tests/illformed/chardet/eucjp.xml         |   13 -
 .../tests/illformed/chardet/euckr.xml         |   13 -
 .../tests/illformed/chardet/gb2312.xml        |   12 -
 .../tests/illformed/chardet/koi8r.xml         |   14 -
 .../tests/illformed/chardet/shiftjis.xml      |   11 -
 .../tests/illformed/chardet/tis620.xml        |   12 -
 .../tests/illformed/chardet/windows1255.xml   |   14 -
 .../tests/illformed/http_high_bit_date.xml    |   12 -
 .../tests/illformed/non-ascii-tag.xml         |   12 -
 .../illformed/rdf_channel_empty_textinput.xml |   26 -
 .../tests/illformed/rss_empty_document.xml    |    4 -
 .../tests/illformed/rss_incomplete_cdata.xml  |   13 -
 .../tests/illformed/undeclared_namespace.xml  |   10 -
 .../tests/microformats/hcard/2-4-2-vcard.xml  |   23 -
 .../hcard/3-1-1-fn-unicode-char.xml           |   14 -
 .../tests/microformats/hcard/3-1-1-fn.xml     |   17 -
 .../microformats/hcard/3-1-2-n-2-plural.xml   |   26 -
 .../microformats/hcard/3-1-2-n-2-singular.xml |   30 -
 .../microformats/hcard/3-1-2-n-plural.xml     |   23 -
 .../microformats/hcard/3-1-2-n-singular.xml   |   23 -
 .../hcard/3-1-3-nickname-2-plural.xml         |   17 -
 .../hcard/3-1-3-nickname-2-singular.xml       |   18 -
 .../microformats/hcard/3-1-3-nickname.xml     |   17 -
 .../microformats/hcard/3-1-4-photo-inline.xml |   17 -
 .../tests/microformats/hcard/3-1-4-photo.xml  |   17 -
 .../tests/microformats/hcard/3-1-5-bday-2.xml |   17 -
 .../tests/microformats/hcard/3-1-5-bday-3.xml |   17 -
 .../tests/microformats/hcard/3-1-5-bday.xml   |   17 -
 .../tests/microformats/hcard/3-2-1-adr.xml    |   25 -
 .../tests/microformats/hcard/3-2-2-label.xml  |   30 -
 .../tests/microformats/hcard/3-3-1-tel.xml    |   23 -
 .../microformats/hcard/3-3-2-email-2.xml      |   17 -
 .../microformats/hcard/3-3-2-email-3.xml      |   20 -
 .../tests/microformats/hcard/3-3-2-email.xml  |   17 -
 .../tests/microformats/hcard/3-3-3-mailer.xml |   17 -
 .../tests/microformats/hcard/3-4-1-tz-2.xml   |   20 -
 .../tests/microformats/hcard/3-4-1-tz.xml     |   17 -
 .../tests/microformats/hcard/3-4-2-geo.xml    |   20 -
 .../tests/microformats/hcard/3-5-1-title.xml  |   17 -
 .../tests/microformats/hcard/3-5-2-role.xml   |   17 -
 .../tests/microformats/hcard/3-5-3-logo-2.xml |   17 -
 .../tests/microformats/hcard/3-5-3-logo.xml   |   17 -
 .../microformats/hcard/3-5-4-agent-2.xml      |   20 -
 .../tests/microformats/hcard/3-5-4-agent.xml  |   17 -
 .../tests/microformats/hcard/3-5-5-org.xml    |   21 -
 .../hcard/3-6-1-categories-2-plural.xml       |   22 -
 .../hcard/3-6-1-categories-2-singular.xml     |   20 -
 .../microformats/hcard/3-6-1-categories.xml   |   17 -
 .../tests/microformats/hcard/3-6-2-note.xml   |   17 -
 .../tests/microformats/hcard/3-6-4-rev-2.xml  |   17 -
 .../tests/microformats/hcard/3-6-4-rev.xml    |   17 -
 .../hcard/3-6-5-sort-string-2.xml             |   21 -
 .../hcard/3-6-5-sort-string-3.xml             |   19 -
 .../hcard/3-6-5-sort-string-4.xml             |   25 -
 .../hcard/3-6-5-sort-string-5.xml             |   19 -
 .../microformats/hcard/3-6-5-sort-string.xml  |   27 -
 .../microformats/hcard/3-6-6-sound-2.xml      |   20 -
 .../tests/microformats/hcard/3-6-6-sound.xml  |   20 -
 .../tests/microformats/hcard/3-6-7-uid.xml    |   18 -
 .../tests/microformats/hcard/3-6-8-url.xml    |   17 -
 .../microformats/hcard/3-7-1-class-2.xml      |   17 -
 .../microformats/hcard/3-7-1-class-3.xml      |   17 -
 .../tests/microformats/hcard/3-7-1-class.xml  |   17 -
 .../tests/microformats/hcard/3-7-2-key.xml    |   20 -
 .../tests/microformats/hcard/7-authors.xml    |   64 -
 .../rel_enclosure/rel_enclosure_href.xml      |   14 -
 ...l_enclosure_href_autodetect_by_ext_avi.xml |   14 -
 ...l_enclosure_href_autodetect_by_ext_bin.xml |   14 -
 ...l_enclosure_href_autodetect_by_ext_bz2.xml |   14 -
 ...l_enclosure_href_autodetect_by_ext_deb.xml |   14 -
 ...l_enclosure_href_autodetect_by_ext_dmg.xml |   14 -
 ...l_enclosure_href_autodetect_by_ext_exe.xml |   14 -
 ...el_enclosure_href_autodetect_by_ext_gz.xml |   14 -
 ...l_enclosure_href_autodetect_by_ext_hqx.xml |   14 -
 ...l_enclosure_href_autodetect_by_ext_img.xml |   14 -
 ...l_enclosure_href_autodetect_by_ext_iso.xml |   14 -
 ...l_enclosure_href_autodetect_by_ext_jar.xml |   14 -
 ...l_enclosure_href_autodetect_by_ext_m4a.xml |   14 -
 ...l_enclosure_href_autodetect_by_ext_m4v.xml |   14 -
 ...l_enclosure_href_autodetect_by_ext_mp2.xml |   14 -
 ...l_enclosure_href_autodetect_by_ext_mp3.xml |   14 -
 ...l_enclosure_href_autodetect_by_ext_mp4.xml |   14 -
 ...l_enclosure_href_autodetect_by_ext_msi.xml |   14 -
 ...l_enclosure_href_autodetect_by_ext_ogg.xml |   14 -
 ...l_enclosure_href_autodetect_by_ext_rar.xml |   14 -
 ...l_enclosure_href_autodetect_by_ext_rpm.xml |   14 -
 ...l_enclosure_href_autodetect_by_ext_sit.xml |   14 -
 ..._enclosure_href_autodetect_by_ext_sitx.xml |   14 -
 ...l_enclosure_href_autodetect_by_ext_tar.xml |   14 -
 ..._enclosure_href_autodetect_by_ext_tbz2.xml |   14 -
 ...l_enclosure_href_autodetect_by_ext_tgz.xml |   14 -
 ...l_enclosure_href_autodetect_by_ext_wma.xml |   14 -
 ...l_enclosure_href_autodetect_by_ext_wmv.xml |   14 -
 ...rel_enclosure_href_autodetect_by_ext_z.xml |   14 -
 ...l_enclosure_href_autodetect_by_ext_zip.xml |   14 -
 ...ref_autodetect_by_type_application_ogg.xml |   14 -
 ...nclosure_href_autodetect_by_type_audio.xml |   14 -
 ...nclosure_href_autodetect_by_type_video.xml |   14 -
 .../rel_enclosure_href_invalid.xml            |   14 -
 .../rel_enclosure_no_autodetect.xml           |   14 -
 .../rel_enclosure_no_autodetect_xml.xml       |   14 -
 .../rel_enclosure/rel_enclosure_title.xml     |   14 -
 .../rel_enclosure_title_from_link_text.xml    |   14 -
 ...el_enclosure_title_overrides_link_text.xml |   14 -
 .../rel_enclosure/rel_enclosure_type.xml      |   14 -
 .../rel_tag/rel_tag_duplicate.xml             |   15 -
 .../microformats/rel_tag/rel_tag_label.xml    |   14 -
 .../microformats/rel_tag/rel_tag_scheme.xml   |   14 -
 .../microformats/rel_tag/rel_tag_term.xml     |   14 -
 .../rel_tag/rel_tag_term_trailing_slash.xml   |   14 -
 .../microformats/xfn/xfn_acquaintance.xml     |   14 -
 .../tests/microformats/xfn/xfn_brother.xml    |   14 -
 .../tests/microformats/xfn/xfn_child.xml      |   14 -
 .../microformats/xfn/xfn_co-resident.xml      |   14 -
 .../tests/microformats/xfn/xfn_co-worker.xml  |   14 -
 .../tests/microformats/xfn/xfn_colleague.xml  |   14 -
 .../tests/microformats/xfn/xfn_contact.xml    |   14 -
 .../tests/microformats/xfn/xfn_coresident.xml |   14 -
 .../tests/microformats/xfn/xfn_coworker.xml   |   14 -
 .../tests/microformats/xfn/xfn_crush.xml      |   14 -
 .../tests/microformats/xfn/xfn_date.xml       |   14 -
 .../tests/microformats/xfn/xfn_friend.xml     |   14 -
 .../tests/microformats/xfn/xfn_href.xml       |   14 -
 .../tests/microformats/xfn/xfn_husband.xml    |   14 -
 .../tests/microformats/xfn/xfn_kin.xml        |   14 -
 .../tests/microformats/xfn/xfn_me.xml         |   14 -
 .../tests/microformats/xfn/xfn_met.xml        |   14 -
 .../tests/microformats/xfn/xfn_multiple.xml   |   14 -
 .../tests/microformats/xfn/xfn_muse.xml       |   14 -
 .../tests/microformats/xfn/xfn_name.xml       |   14 -
 .../tests/microformats/xfn/xfn_neighbor.xml   |   14 -
 .../tests/microformats/xfn/xfn_parent.xml     |   14 -
 .../tests/microformats/xfn/xfn_relative.xml   |   14 -
 .../tests/microformats/xfn/xfn_sibling.xml    |   14 -
 .../tests/microformats/xfn/xfn_sister.xml     |   14 -
 .../tests/microformats/xfn/xfn_spouse.xml     |   14 -
 .../tests/microformats/xfn/xfn_sweetheart.xml |   14 -
 .../tests/microformats/xfn/xfn_wife.xml       |   14 -
 lib/feedparser/tests/wellformed/amp/amp01.xml |    9 -
 lib/feedparser/tests/wellformed/amp/amp02.xml |    9 -
 lib/feedparser/tests/wellformed/amp/amp03.xml |    9 -
 lib/feedparser/tests/wellformed/amp/amp04.xml |    9 -
 lib/feedparser/tests/wellformed/amp/amp05.xml |    9 -
 lib/feedparser/tests/wellformed/amp/amp06.xml |    9 -
 lib/feedparser/tests/wellformed/amp/amp07.xml |    9 -
 lib/feedparser/tests/wellformed/amp/amp08.xml |    9 -
 lib/feedparser/tests/wellformed/amp/amp09.xml |    9 -
 lib/feedparser/tests/wellformed/amp/amp10.xml |    9 -
 lib/feedparser/tests/wellformed/amp/amp11.xml |    9 -
 lib/feedparser/tests/wellformed/amp/amp12.xml |    9 -
 lib/feedparser/tests/wellformed/amp/amp13.xml |    9 -
 lib/feedparser/tests/wellformed/amp/amp14.xml |    9 -
 lib/feedparser/tests/wellformed/amp/amp15.xml |    9 -
 lib/feedparser/tests/wellformed/amp/amp16.xml |    9 -
 lib/feedparser/tests/wellformed/amp/amp17.xml |    9 -
 lib/feedparser/tests/wellformed/amp/amp18.xml |    9 -
 lib/feedparser/tests/wellformed/amp/amp19.xml |    9 -
 lib/feedparser/tests/wellformed/amp/amp20.xml |    9 -
 lib/feedparser/tests/wellformed/amp/amp21.xml |    9 -
 lib/feedparser/tests/wellformed/amp/amp22.xml |    9 -
 lib/feedparser/tests/wellformed/amp/amp23.xml |    9 -
 lib/feedparser/tests/wellformed/amp/amp24.xml |    9 -
 lib/feedparser/tests/wellformed/amp/amp25.xml |    9 -
 lib/feedparser/tests/wellformed/amp/amp26.xml |    9 -
 lib/feedparser/tests/wellformed/amp/amp27.xml |    9 -
 lib/feedparser/tests/wellformed/amp/amp28.xml |    9 -
 lib/feedparser/tests/wellformed/amp/amp29.xml |    9 -
 lib/feedparser/tests/wellformed/amp/amp30.xml |    9 -
 lib/feedparser/tests/wellformed/amp/amp31.xml |    9 -
 lib/feedparser/tests/wellformed/amp/amp32.xml |    9 -
 lib/feedparser/tests/wellformed/amp/amp33.xml |    9 -
 lib/feedparser/tests/wellformed/amp/amp34.xml |    9 -
 lib/feedparser/tests/wellformed/amp/amp35.xml |    9 -
 lib/feedparser/tests/wellformed/amp/amp36.xml |    9 -
 lib/feedparser/tests/wellformed/amp/amp37.xml |    9 -
 lib/feedparser/tests/wellformed/amp/amp38.xml |    9 -
 lib/feedparser/tests/wellformed/amp/amp39.xml |    9 -
 lib/feedparser/tests/wellformed/amp/amp40.xml |    9 -
 lib/feedparser/tests/wellformed/amp/amp41.xml |    9 -
 lib/feedparser/tests/wellformed/amp/amp42.xml |    9 -
 lib/feedparser/tests/wellformed/amp/amp43.xml |    9 -
 lib/feedparser/tests/wellformed/amp/amp44.xml |    9 -
 lib/feedparser/tests/wellformed/amp/amp45.xml |    9 -
 lib/feedparser/tests/wellformed/amp/amp46.xml |    9 -
 lib/feedparser/tests/wellformed/amp/amp47.xml |    9 -
 lib/feedparser/tests/wellformed/amp/amp48.xml |    9 -
 lib/feedparser/tests/wellformed/amp/amp49.xml |    9 -
 lib/feedparser/tests/wellformed/amp/amp50.xml |    9 -
 lib/feedparser/tests/wellformed/amp/amp51.xml |    9 -
 lib/feedparser/tests/wellformed/amp/amp52.xml |    9 -
 lib/feedparser/tests/wellformed/amp/amp53.xml |    9 -
 lib/feedparser/tests/wellformed/amp/amp54.xml |    9 -
 lib/feedparser/tests/wellformed/amp/amp55.xml |    9 -
 lib/feedparser/tests/wellformed/amp/amp56.xml |    9 -
 lib/feedparser/tests/wellformed/amp/amp57.xml |    9 -
 lib/feedparser/tests/wellformed/amp/amp58.xml |    9 -
 lib/feedparser/tests/wellformed/amp/amp59.xml |    9 -
 lib/feedparser/tests/wellformed/amp/amp60.xml |    9 -
 lib/feedparser/tests/wellformed/amp/amp61.xml |    9 -
 lib/feedparser/tests/wellformed/amp/amp62.xml |    9 -
 lib/feedparser/tests/wellformed/amp/amp63.xml |    9 -
 lib/feedparser/tests/wellformed/amp/amp64.xml |    9 -
 .../tests/wellformed/amp/attr01.xml           |    9 -
 .../tests/wellformed/amp/attr02.xml           |    9 -
 .../tests/wellformed/amp/attr03.xml           |    9 -
 .../tests/wellformed/amp/attr04.xml           |    9 -
 .../tests/wellformed/amp/attr05.xml           |    9 -
 .../tests/wellformed/amp/attr06.xml           |    9 -
 .../wellformed/atom/atom_namespace_1.xml      |    7 -
 .../wellformed/atom/atom_namespace_2.xml      |    7 -
 .../wellformed/atom/atom_namespace_3.xml      |    7 -
 .../wellformed/atom/atom_namespace_4.xml      |    7 -
 .../wellformed/atom/atom_namespace_5.xml      |    7 -
 .../wellformed/atom/entry_author_email.xml    |   13 -
 .../wellformed/atom/entry_author_homepage.xml |   13 -
 .../atom/entry_author_map_author.xml          |   13 -
 .../atom/entry_author_map_author_2.xml        |   12 -
 .../wellformed/atom/entry_author_name.xml     |   13 -
 .../wellformed/atom/entry_author_uri.xml      |   13 -
 .../wellformed/atom/entry_author_url.xml      |   13 -
 .../atom/entry_content_mode_base64.xml        |   11 -
 .../atom/entry_content_mode_escaped.xml       |    9 -
 .../wellformed/atom/entry_content_type.xml    |    9 -
 .../atom/entry_content_type_text_plain.xml    |    9 -
 .../wellformed/atom/entry_content_value.xml   |    9 -
 .../atom/entry_contributor_email.xml          |   13 -
 .../atom/entry_contributor_homepage.xml       |   13 -
 .../atom/entry_contributor_multiple.xml       |   18 -
 .../atom/entry_contributor_name.xml           |   13 -
 .../wellformed/atom/entry_contributor_uri.xml |   13 -
 .../wellformed/atom/entry_contributor_url.xml |   13 -
 .../tests/wellformed/atom/entry_created.xml   |    9 -
 .../atom/entry_created_multiple_values.xml    |   10 -
 .../wellformed/atom/entry_created_parsed.xml  |    9 -
 .../tests/wellformed/atom/entry_id.xml        |    9 -
 .../wellformed/atom/entry_id_map_guid.xml     |    9 -
 .../tests/wellformed/atom/entry_issued.xml    |    9 -
 .../wellformed/atom/entry_issued_parsed.xml   |    9 -
 .../atom/entry_link_alternate_map_link.xml    |    9 -
 .../atom/entry_link_alternate_map_link_2.xml  |    9 -
 .../tests/wellformed/atom/entry_link_href.xml |    9 -
 .../wellformed/atom/entry_link_multiple.xml   |   10 -
 .../tests/wellformed/atom/entry_link_rel.xml  |    9 -
 .../wellformed/atom/entry_link_title.xml      |    9 -
 .../tests/wellformed/atom/entry_link_type.xml |    9 -
 .../tests/wellformed/atom/entry_modified.xml  |    9 -
 .../entry_modified_map_updated_parsed.xml     |    9 -
 .../atom/entry_published_parsed.xml           |    9 -
 ...ntry_published_parsed_date_overwriting.xml |   10 -
 .../atom/entry_source_updated_parsed.xml      |   11 -
 .../tests/wellformed/atom/entry_summary.xml   |    9 -
 .../wellformed/atom/entry_summary_base64.xml  |   11 -
 .../atom/entry_summary_base64_2.xml           |   11 -
 .../entry_summary_content_mode_base64.xml     |   11 -
 .../entry_summary_content_mode_escaped.xml    |    9 -
 .../atom/entry_summary_content_type.xml       |    9 -
 .../entry_summary_content_type_text_plain.xml |    9 -
 .../atom/entry_summary_content_value.xml      |    9 -
 .../atom/entry_summary_escaped_markup.xml     |    9 -
 .../atom/entry_summary_inline_markup.xml      |    9 -
 .../atom/entry_summary_inline_markup_2.xml    |    9 -
 .../atom/entry_summary_naked_markup.xml       |    9 -
 .../atom/entry_summary_text_plain.xml         |    9 -
 .../tests/wellformed/atom/entry_title.xml     |    9 -
 .../wellformed/atom/entry_title_base64.xml    |   11 -
 .../wellformed/atom/entry_title_base64_2.xml  |   11 -
 .../atom/entry_title_content_mode_base64.xml  |   11 -
 .../atom/entry_title_content_mode_escaped.xml |    9 -
 .../atom/entry_title_content_type.xml         |    9 -
 .../entry_title_content_type_text_plain.xml   |    9 -
 .../atom/entry_title_content_value.xml        |    9 -
 .../atom/entry_title_escaped_markup.xml       |    9 -
 .../atom/entry_title_inline_markup.xml        |    9 -
 .../atom/entry_title_inline_markup_2.xml      |    9 -
 .../atom/entry_title_naked_markup.xml         |    9 -
 .../atom/entry_title_text_plain.xml           |    9 -
 .../atom/entry_title_text_plain_brackets.xml  |    9 -
 .../atom/entry_updated_multiple_values.xml    |   10 -
 .../wellformed/atom/entry_updated_parsed.xml  |    9 -
 .../wellformed/atom/feed_author_email.xml     |   11 -
 .../wellformed/atom/feed_author_homepage.xml  |   11 -
 .../atom/feed_author_map_author.xml           |   11 -
 .../atom/feed_author_map_author_2.xml         |   10 -
 .../wellformed/atom/feed_author_name.xml      |   11 -
 .../tests/wellformed/atom/feed_author_uri.xml |   11 -
 .../tests/wellformed/atom/feed_author_url.xml |   11 -
 .../atom/feed_contributor_email.xml           |   11 -
 .../atom/feed_contributor_homepage.xml        |   11 -
 .../atom/feed_contributor_multiple.xml        |   16 -
 .../wellformed/atom/feed_contributor_name.xml |   11 -
 .../wellformed/atom/feed_contributor_uri.xml  |   11 -
 .../wellformed/atom/feed_contributor_url.xml  |   11 -
 .../tests/wellformed/atom/feed_copyright.xml  |    7 -
 .../wellformed/atom/feed_copyright_base64.xml |    9 -
 .../atom/feed_copyright_base64_2.xml          |    9 -
 .../feed_copyright_content_mode_base64.xml    |    9 -
 .../feed_copyright_content_mode_escaped.xml   |    7 -
 .../atom/feed_copyright_content_type.xml      |    7 -
 ...feed_copyright_content_type_text_plain.xml |    7 -
 .../atom/feed_copyright_content_value.xml     |    7 -
 .../atom/feed_copyright_escaped_markup.xml    |    7 -
 .../atom/feed_copyright_inline_markup.xml     |    7 -
 .../atom/feed_copyright_inline_markup_2.xml   |    7 -
 .../atom/feed_copyright_naked_markup.xml      |    7 -
 .../atom/feed_copyright_text_plain.xml        |    7 -
 .../tests/wellformed/atom/feed_generator.xml  |    7 -
 .../wellformed/atom/feed_generator_name.xml   |    7 -
 .../wellformed/atom/feed_generator_url.xml    |    7 -
 .../atom/feed_generator_version.xml           |    7 -
 .../tests/wellformed/atom/feed_id.xml         |    7 -
 .../wellformed/atom/feed_id_map_guid.xml      |    7 -
 .../tests/wellformed/atom/feed_info.xml       |    7 -
 .../wellformed/atom/feed_info_base64.xml      |    9 -
 .../wellformed/atom/feed_info_base64_2.xml    |    9 -
 .../atom/feed_info_content_mode_base64.xml    |    9 -
 .../atom/feed_info_content_mode_escaped.xml   |    7 -
 .../atom/feed_info_content_type.xml           |    7 -
 .../feed_info_content_type_text_plain.xml     |    7 -
 .../atom/feed_info_content_value.xml          |    7 -
 .../atom/feed_info_escaped_markup.xml         |    7 -
 .../atom/feed_info_inline_markup.xml          |    7 -
 .../atom/feed_info_inline_markup_2.xml        |    7 -
 .../atom/feed_info_naked_markup.xml           |    7 -
 .../wellformed/atom/feed_info_text_plain.xml  |    7 -
 .../atom/feed_link_alternate_map_link.xml     |    7 -
 .../atom/feed_link_alternate_map_link_2.xml   |    7 -
 .../tests/wellformed/atom/feed_link_href.xml  |    7 -
 .../wellformed/atom/feed_link_multiple.xml    |    8 -
 .../tests/wellformed/atom/feed_link_rel.xml   |    7 -
 .../tests/wellformed/atom/feed_link_title.xml |    7 -
 .../tests/wellformed/atom/feed_link_type.xml  |    7 -
 .../tests/wellformed/atom/feed_modified.xml   |    9 -
 .../atom/feed_modified_map_updated_parsed.xml |    9 -
 .../tests/wellformed/atom/feed_tagline.xml    |    7 -
 .../wellformed/atom/feed_tagline_base64.xml   |    9 -
 .../wellformed/atom/feed_tagline_base64_2.xml |    9 -
 .../atom/feed_tagline_content_mode_base64.xml |    9 -
 .../feed_tagline_content_mode_escaped.xml     |    7 -
 .../atom/feed_tagline_content_type.xml        |    7 -
 .../feed_tagline_content_type_text_plain.xml  |    7 -
 .../atom/feed_tagline_content_value.xml       |    7 -
 .../atom/feed_tagline_escaped_markup.xml      |    7 -
 .../atom/feed_tagline_inline_markup.xml       |    7 -
 .../atom/feed_tagline_inline_markup_2.xml     |    7 -
 .../atom/feed_tagline_naked_markup.xml        |    7 -
 .../atom/feed_tagline_text_plain.xml          |    7 -
 .../tests/wellformed/atom/feed_title.xml      |    7 -
 .../wellformed/atom/feed_title_base64.xml     |    9 -
 .../wellformed/atom/feed_title_base64_2.xml   |    9 -
 .../atom/feed_title_content_mode_base64.xml   |    9 -
 .../atom/feed_title_content_mode_escaped.xml  |    7 -
 .../atom/feed_title_content_type.xml          |    7 -
 .../feed_title_content_type_text_plain.xml    |    7 -
 .../atom/feed_title_content_value.xml         |    7 -
 .../atom/feed_title_escaped_markup.xml        |    7 -
 .../atom/feed_title_inline_markup.xml         |    7 -
 .../atom/feed_title_inline_markup_2.xml       |    7 -
 .../atom/feed_title_naked_markup.xml          |    7 -
 .../wellformed/atom/feed_title_text_plain.xml |    7 -
 .../wellformed/atom/feed_updated_parsed.xml   |    7 -
 .../tests/wellformed/atom/media_player1.xml   |   10 -
 .../tests/wellformed/atom/media_thumbnail.xml |   11 -
 .../tests/wellformed/atom/relative_uri.xml    |    7 -
 .../wellformed/atom/relative_uri_inherit.xml  |    7 -
 .../atom/relative_uri_inherit_2.xml           |    7 -
 .../wellformed/atom10/ampersand_in_attr.xml   |    7 -
 .../wellformed/atom10/atom10_namespace.xml    |    7 -
 .../wellformed/atom10/atom10_version.xml      |    6 -
 .../wellformed/atom10/entry_author_email.xml  |   13 -
 .../atom10/entry_author_map_author.xml        |   13 -
 .../atom10/entry_author_map_author_2.xml      |   12 -
 .../wellformed/atom10/entry_author_name.xml   |   13 -
 .../wellformed/atom10/entry_author_uri.xml    |   13 -
 .../wellformed/atom10/entry_author_url.xml    |   13 -
 .../wellformed/atom10/entry_authors_email.xml |   15 -
 .../wellformed/atom10/entry_authors_name.xml  |   15 -
 .../wellformed/atom10/entry_authors_uri.xml   |   15 -
 .../wellformed/atom10/entry_authors_url.xml   |   15 -
 .../atom10/entry_category_label.xml           |    9 -
 .../atom10/entry_category_scheme.xml          |    9 -
 .../wellformed/atom10/entry_category_term.xml |    9 -
 .../atom10/entry_category_term_non_ascii.xml  |    9 -
 .../atom10/entry_content_application_xml.xml  |    9 -
 .../atom10/entry_content_base64.xml           |   11 -
 .../atom10/entry_content_base64_2.xml         |   11 -
 .../entry_content_div_escaped_markup.xml      |    9 -
 .../atom10/entry_content_escaped_markup.xml   |    9 -
 .../atom10/entry_content_inline_markup.xml    |    9 -
 .../atom10/entry_content_inline_markup_2.xml  |    9 -
 .../wellformed/atom10/entry_content_src.xml   |    9 -
 .../atom10/entry_content_text_plain.xml       |    9 -
 .../entry_content_text_plain_brackets.xml     |    9 -
 .../wellformed/atom10/entry_content_type.xml  |    9 -
 .../atom10/entry_content_type_text.xml        |    9 -
 .../wellformed/atom10/entry_content_value.xml |    9 -
 .../atom10/entry_contributor_email.xml        |   13 -
 .../atom10/entry_contributor_multiple.xml     |   18 -
 .../atom10/entry_contributor_name.xml         |   13 -
 .../atom10/entry_contributor_uri.xml          |   13 -
 .../atom10/entry_contributor_url.xml          |   13 -
 .../tests/wellformed/atom10/entry_id.xml      |    9 -
 .../wellformed/atom10/entry_id_map_guid.xml   |    9 -
 .../atom10/entry_id_no_normalization_1.xml    |    9 -
 .../atom10/entry_id_no_normalization_2.xml    |    9 -
 .../atom10/entry_id_no_normalization_3.xml    |    9 -
 .../atom10/entry_id_no_normalization_4.xml    |    9 -
 .../atom10/entry_id_no_normalization_5.xml    |    9 -
 .../atom10/entry_id_no_normalization_6.xml    |    9 -
 .../atom10/entry_id_no_normalization_7.xml    |    9 -
 .../atom10/entry_id_with_attributes.xml       |    9 -
 .../atom10/entry_link_alternate_map_link.xml  |    9 -
 .../entry_link_alternate_map_link_2.xml       |    9 -
 .../entry_link_alternate_map_link_3.xml       |   11 -
 .../wellformed/atom10/entry_link_href.xml     |    9 -
 .../wellformed/atom10/entry_link_hreflang.xml |    9 -
 .../wellformed/atom10/entry_link_length.xml   |    9 -
 .../wellformed/atom10/entry_link_multiple.xml |   10 -
 .../wellformed/atom10/entry_link_no_rel.xml   |    9 -
 .../wellformed/atom10/entry_link_rel.xml      |    9 -
 .../atom10/entry_link_rel_enclosure.xml       |    9 -
 ...ink_rel_enclosure_map_enclosure_length.xml |    9 -
 ..._link_rel_enclosure_map_enclosure_type.xml |    9 -
 ...y_link_rel_enclosure_map_enclosure_url.xml |    9 -
 .../atom10/entry_link_rel_license.xml         |    9 -
 .../atom10/entry_link_rel_other.xml           |    9 -
 .../atom10/entry_link_rel_related.xml         |    9 -
 .../wellformed/atom10/entry_link_rel_self.xml |    9 -
 .../wellformed/atom10/entry_link_rel_via.xml  |    9 -
 .../wellformed/atom10/entry_link_title.xml    |    9 -
 .../wellformed/atom10/entry_link_type.xml     |    9 -
 .../tests/wellformed/atom10/entry_rights.xml  |    9 -
 .../atom10/entry_rights_content_value.xml     |    9 -
 .../atom10/entry_rights_escaped_markup.xml    |    9 -
 .../atom10/entry_rights_inline_markup.xml     |    9 -
 .../atom10/entry_rights_inline_markup_2.xml   |    9 -
 .../atom10/entry_rights_text_plain.xml        |    9 -
 .../entry_rights_text_plain_brackets.xml      |    9 -
 .../atom10/entry_rights_type_default.xml      |    9 -
 .../atom10/entry_rights_type_text.xml         |    9 -
 .../atom10/entry_source_author_email.xml      |   15 -
 .../atom10/entry_source_author_map_author.xml |   15 -
 .../entry_source_author_map_author_2.xml      |   14 -
 .../atom10/entry_source_author_name.xml       |   15 -
 .../atom10/entry_source_author_uri.xml        |   15 -
 .../atom10/entry_source_authors_email.xml     |   17 -
 .../atom10/entry_source_authors_name.xml      |   17 -
 .../atom10/entry_source_authors_uri.xml       |   17 -
 .../atom10/entry_source_authors_url.xml       |   17 -
 .../atom10/entry_source_category_label.xml    |   11 -
 .../atom10/entry_source_category_scheme.xml   |   11 -
 .../atom10/entry_source_category_term.xml     |   11 -
 .../entry_source_category_term_non_ascii.xml  |   11 -
 .../atom10/entry_source_contributor_email.xml |   15 -
 .../entry_source_contributor_multiple.xml     |   20 -
 .../atom10/entry_source_contributor_name.xml  |   15 -
 .../atom10/entry_source_contributor_uri.xml   |   15 -
 .../atom10/entry_source_generator.xml         |   11 -
 .../atom10/entry_source_generator_name.xml    |   11 -
 .../atom10/entry_source_generator_uri.xml     |   11 -
 .../atom10/entry_source_generator_version.xml |   11 -
 .../wellformed/atom10/entry_source_icon.xml   |   11 -
 .../wellformed/atom10/entry_source_id.xml     |   11 -
 .../entry_source_link_alternate_map_link.xml  |   11 -
 ...entry_source_link_alternate_map_link_2.xml |   11 -
 .../atom10/entry_source_link_href.xml         |   11 -
 .../atom10/entry_source_link_hreflang.xml     |   11 -
 .../atom10/entry_source_link_length.xml       |   11 -
 .../atom10/entry_source_link_multiple.xml     |   12 -
 .../atom10/entry_source_link_no_rel.xml       |   11 -
 .../atom10/entry_source_link_rel.xml          |   11 -
 .../atom10/entry_source_link_rel_other.xml    |   11 -
 .../atom10/entry_source_link_rel_related.xml  |   11 -
 .../atom10/entry_source_link_rel_self.xml     |   11 -
 .../atom10/entry_source_link_rel_via.xml      |   11 -
 .../atom10/entry_source_link_title.xml        |   11 -
 .../atom10/entry_source_link_type.xml         |   11 -
 .../wellformed/atom10/entry_source_logo.xml   |   11 -
 .../wellformed/atom10/entry_source_rights.xml |   11 -
 .../atom10/entry_source_rights_base64.xml     |   13 -
 .../atom10/entry_source_rights_base64_2.xml   |   13 -
 .../entry_source_rights_content_type.xml      |   11 -
 .../entry_source_rights_content_type_text.xml |   11 -
 .../entry_source_rights_content_value.xml     |   11 -
 .../entry_source_rights_escaped_markup.xml    |   11 -
 .../entry_source_rights_inline_markup.xml     |   11 -
 .../entry_source_rights_inline_markup_2.xml   |   11 -
 .../atom10/entry_source_rights_text_plain.xml |   11 -
 ...ntry_source_subittle_content_type_text.xml |   11 -
 .../atom10/entry_source_subtitle.xml          |   11 -
 .../atom10/entry_source_subtitle_base64.xml   |   13 -
 .../atom10/entry_source_subtitle_base64_2.xml |   13 -
 .../entry_source_subtitle_content_type.xml    |   11 -
 .../entry_source_subtitle_content_value.xml   |   11 -
 .../entry_source_subtitle_escaped_markup.xml  |   11 -
 .../entry_source_subtitle_inline_markup.xml   |   11 -
 .../entry_source_subtitle_inline_markup_2.xml |   11 -
 .../entry_source_subtitle_text_plain.xml      |   11 -
 .../wellformed/atom10/entry_source_title.xml  |   11 -
 .../atom10/entry_source_title_base64.xml      |   13 -
 .../atom10/entry_source_title_base64_2.xml    |   13 -
 .../entry_source_title_content_type.xml       |   11 -
 .../entry_source_title_content_type_text.xml  |   11 -
 .../entry_source_title_content_value.xml      |   11 -
 .../entry_source_title_escaped_markup.xml     |   11 -
 .../entry_source_title_inline_markup.xml      |   11 -
 .../entry_source_title_inline_markup_2.xml    |   11 -
 .../atom10/entry_source_title_text_plain.xml  |   11 -
 .../tests/wellformed/atom10/entry_summary.xml |    9 -
 .../atom10/entry_summary_base64.xml           |   11 -
 .../atom10/entry_summary_base64_2.xml         |   11 -
 .../atom10/entry_summary_content_value.xml    |    9 -
 .../atom10/entry_summary_escaped_markup.xml   |    9 -
 .../atom10/entry_summary_inline_markup.xml    |    9 -
 .../atom10/entry_summary_inline_markup_2.xml  |    9 -
 .../atom10/entry_summary_text_plain.xml       |    9 -
 .../atom10/entry_summary_type_default.xml     |    9 -
 .../atom10/entry_summary_type_text.xml        |    9 -
 .../tests/wellformed/atom10/entry_title.xml   |    9 -
 .../wellformed/atom10/entry_title_base64.xml  |   11 -
 .../atom10/entry_title_base64_2.xml           |   11 -
 .../atom10/entry_title_content_value.xml      |    9 -
 .../atom10/entry_title_escaped_markup.xml     |    9 -
 .../atom10/entry_title_inline_markup.xml      |    9 -
 .../atom10/entry_title_inline_markup_2.xml    |    9 -
 .../atom10/entry_title_text_plain.xml         |    9 -
 .../entry_title_text_plain_brackets.xml       |    9 -
 .../atom10/entry_title_type_default.xml       |    9 -
 .../atom10/entry_title_type_text.xml          |    9 -
 .../wellformed/atom10/feed_author_email.xml   |   11 -
 .../atom10/feed_author_map_author.xml         |   11 -
 .../atom10/feed_author_map_author_2.xml       |   10 -
 .../wellformed/atom10/feed_author_name.xml    |   11 -
 .../wellformed/atom10/feed_author_uri.xml     |   11 -
 .../wellformed/atom10/feed_author_url.xml     |   11 -
 .../wellformed/atom10/feed_authors_email.xml  |   13 -
 .../wellformed/atom10/feed_authors_name.xml   |   13 -
 .../wellformed/atom10/feed_authors_uri.xml    |   13 -
 .../wellformed/atom10/feed_authors_url.xml    |   13 -
 .../atom10/feed_contributor_email.xml         |   11 -
 .../atom10/feed_contributor_multiple.xml      |   16 -
 .../atom10/feed_contributor_name.xml          |   11 -
 .../atom10/feed_contributor_uri.xml           |   11 -
 .../atom10/feed_contributor_url.xml           |   11 -
 .../wellformed/atom10/feed_generator.xml      |    7 -
 .../wellformed/atom10/feed_generator_name.xml |    7 -
 .../wellformed/atom10/feed_generator_url.xml  |    7 -
 .../atom10/feed_generator_version.xml         |    7 -
 .../tests/wellformed/atom10/feed_icon.xml     |    7 -
 .../tests/wellformed/atom10/feed_id.xml       |    7 -
 .../wellformed/atom10/feed_id_map_guid.xml    |    7 -
 .../atom10/feed_link_alternate_map_link.xml   |    7 -
 .../atom10/feed_link_alternate_map_link_2.xml |    7 -
 .../wellformed/atom10/feed_link_href.xml      |    7 -
 .../wellformed/atom10/feed_link_hreflang.xml  |    7 -
 .../wellformed/atom10/feed_link_length.xml    |    7 -
 .../wellformed/atom10/feed_link_multiple.xml  |    8 -
 .../wellformed/atom10/feed_link_no_rel.xml    |    7 -
 .../tests/wellformed/atom10/feed_link_rel.xml |    7 -
 .../wellformed/atom10/feed_link_rel_other.xml |    7 -
 .../atom10/feed_link_rel_related.xml          |    7 -
 .../wellformed/atom10/feed_link_rel_self.xml  |    7 -
 .../feed_link_rel_self_default_type.xml       |    7 -
 .../wellformed/atom10/feed_link_rel_via.xml   |    7 -
 .../wellformed/atom10/feed_link_title.xml     |    7 -
 .../wellformed/atom10/feed_link_type.xml      |    7 -
 .../tests/wellformed/atom10/feed_logo.xml     |    7 -
 .../tests/wellformed/atom10/feed_rights.xml   |    7 -
 .../wellformed/atom10/feed_rights_base64.xml  |    9 -
 .../atom10/feed_rights_base64_2.xml           |    9 -
 .../atom10/feed_rights_content_type.xml       |    7 -
 .../atom10/feed_rights_content_type_text.xml  |    7 -
 .../atom10/feed_rights_content_value.xml      |    7 -
 .../atom10/feed_rights_escaped_markup.xml     |    7 -
 .../atom10/feed_rights_inline_markup.xml      |    7 -
 .../atom10/feed_rights_inline_markup_2.xml    |    7 -
 .../atom10/feed_rights_text_plain.xml         |    7 -
 .../tests/wellformed/atom10/feed_subtitle.xml |    7 -
 .../atom10/feed_subtitle_base64.xml           |    9 -
 .../atom10/feed_subtitle_base64_2.xml         |    9 -
 .../atom10/feed_subtitle_content_type.xml     |    7 -
 .../feed_subtitle_content_type_text.xml       |    7 -
 .../atom10/feed_subtitle_content_value.xml    |    7 -
 .../atom10/feed_subtitle_escaped_markup.xml   |    7 -
 .../atom10/feed_subtitle_inline_markup.xml    |    7 -
 .../atom10/feed_subtitle_inline_markup_2.xml  |    7 -
 .../atom10/feed_subtitle_text_plain.xml       |    7 -
 .../tests/wellformed/atom10/feed_title.xml    |    7 -
 .../wellformed/atom10/feed_title_base64.xml   |    9 -
 .../wellformed/atom10/feed_title_base64_2.xml |    9 -
 .../atom10/feed_title_content_type.xml        |    7 -
 .../atom10/feed_title_content_type_text.xml   |    7 -
 .../atom10/feed_title_content_value.xml       |    7 -
 .../atom10/feed_title_escaped_markup.xml      |    7 -
 .../atom10/feed_title_inline_markup.xml       |    7 -
 .../atom10/feed_title_inline_markup_2.xml     |    7 -
 .../atom10/feed_title_text_plain.xml          |    7 -
 .../atom10/item_media_category_label.xml      |   11 -
 .../atom10/item_media_category_multiple.xml   |   12 -
 .../atom10/item_media_category_scheme1.xml    |   11 -
 .../atom10/item_media_category_scheme2.xml    |   11 -
 .../atom10/item_media_category_term.xml       |   11 -
 .../atom10/item_media_title_type_plain.xml    |   11 -
 .../atom10/missing_quote_in_attr.xml          |    7 -
 .../tests/wellformed/atom10/qna.xml           |    9 -
 .../tests/wellformed/atom10/quote_in_attr.xml |    7 -
 .../tests/wellformed/atom10/relative_uri.xml  |    7 -
 .../atom10/relative_uri_inherit.xml           |    7 -
 .../atom10/relative_uri_inherit_2.xml         |    7 -
 .../tests/wellformed/atom10/tag_in_attr.xml   |    7 -
 .../base/cdf_item_abstract_xml_base.xml       |   18 -
 .../base/entry_content_xml_base.xml           |    9 -
 .../base/entry_content_xml_base_inherit.xml   |    9 -
 .../base/entry_content_xml_base_inherit_2.xml |    9 -
 .../base/entry_content_xml_base_inherit_3.xml |   10 -
 .../base/entry_content_xml_base_inherit_4.xml |   10 -
 .../base/entry_summary_xml_base.xml           |    9 -
 .../base/entry_summary_xml_base_inherit.xml   |    9 -
 .../base/entry_summary_xml_base_inherit_2.xml |    9 -
 .../base/entry_summary_xml_base_inherit_3.xml |   10 -
 .../base/entry_summary_xml_base_inherit_4.xml |   10 -
 .../wellformed/base/entry_title_xml_base.xml  |    9 -
 .../base/entry_title_xml_base_inherit.xml     |    9 -
 .../base/entry_title_xml_base_inherit_2.xml   |    9 -
 .../base/entry_title_xml_base_inherit_3.xml   |   10 -
 .../base/entry_title_xml_base_inherit_4.xml   |   10 -
 .../base/feed_copyright_xml_base.xml          |    7 -
 .../base/feed_copyright_xml_base_inherit.xml  |    7 -
 .../feed_copyright_xml_base_inherit_2.xml     |    7 -
 .../feed_copyright_xml_base_inherit_3.xml     |    8 -
 .../feed_copyright_xml_base_inherit_4.xml     |    8 -
 .../wellformed/base/feed_info_xml_base.xml    |    7 -
 .../base/feed_info_xml_base_inherit.xml       |    7 -
 .../base/feed_info_xml_base_inherit_2.xml     |    7 -
 .../base/feed_info_xml_base_inherit_3.xml     |    8 -
 .../base/feed_info_xml_base_inherit_4.xml     |    8 -
 .../base/feed_link_xml_base_iri.xml           |    7 -
 .../wellformed/base/feed_tagline_xml_base.xml |    7 -
 .../base/feed_tagline_xml_base_inherit.xml    |    7 -
 .../base/feed_tagline_xml_base_inherit_2.xml  |    7 -
 .../base/feed_tagline_xml_base_inherit_3.xml  |    8 -
 .../base/feed_tagline_xml_base_inherit_4.xml  |    8 -
 .../wellformed/base/feed_title_xml_base.xml   |    7 -
 .../base/feed_title_xml_base_inherit.xml      |    7 -
 .../base/feed_title_xml_base_inherit_2.xml    |    7 -
 .../base/feed_title_xml_base_inherit_3.xml    |    8 -
 .../base/feed_title_xml_base_inherit_4.xml    |    8 -
 ...ttp_channel_docs_base_content_location.xml |   10 -
 .../base/http_channel_docs_base_docuri.xml    |    9 -
 ...ttp_channel_link_base_content_location.xml |   10 -
 .../base/http_channel_link_base_docuri.xml    |    9 -
 ...entry_author_url_base_content_location.xml |   12 -
 .../http_entry_author_url_base_docuri.xml     |   11 -
 ...y_content_base64_base_content_location.xml |   12 -
 .../http_entry_content_base64_base_docuri.xml |   11 -
 ...tp_entry_content_base_content_location.xml |   10 -
 .../base/http_entry_content_base_docuri.xml   |    9 -
 ...y_content_inline_base_content_location.xml |   10 -
 .../http_entry_content_inline_base_docuri.xml |    9 -
 ..._contributor_url_base_content_location.xml |   12 -
 ...http_entry_contributor_url_base_docuri.xml |   11 -
 .../http_entry_id_base_content_location.xml   |   10 -
 .../base/http_entry_id_base_docuri.xml        |    9 -
 .../http_entry_link_base_content_location.xml |   10 -
 .../base/http_entry_link_base_docuri.xml      |    9 -
 ...y_summary_base64_base_content_location.xml |   12 -
 .../http_entry_summary_base64_base_docuri.xml |   11 -
 ...tp_entry_summary_base_content_location.xml |   10 -
 .../base/http_entry_summary_base_docuri.xml   |    9 -
 ...y_summary_inline_base_content_location.xml |   10 -
 .../http_entry_summary_inline_base_docuri.xml |    9 -
 ...try_title_base64_base_content_location.xml |   12 -
 .../http_entry_title_base64_base_docuri.xml   |   11 -
 ...http_entry_title_base_content_location.xml |   10 -
 .../base/http_entry_title_base_docuri.xml     |    9 -
 ...try_title_inline_base_content_location.xml |   10 -
 .../http_entry_title_inline_base_docuri.xml   |    9 -
 ..._feed_author_url_base_content_location.xml |   10 -
 .../base/http_feed_author_url_base_docuri.xml |    9 -
 ..._contributor_url_base_content_location.xml |   10 -
 .../http_feed_contributor_url_base_docuri.xml |    9 -
 ...copyright_base64_base_content_location.xml |   10 -
 ...http_feed_copyright_base64_base_docuri.xml |    9 -
 ...p_feed_copyright_base_content_location.xml |    8 -
 .../base/http_feed_copyright_base_docuri.xml  |    7 -
 ...copyright_inline_base_content_location.xml |    8 -
 ...http_feed_copyright_inline_base_docuri.xml |    7 -
 ...ed_generator_url_base_content_location.xml |    8 -
 .../http_feed_generator_url_base_docuri.xml   |    7 -
 .../http_feed_id_base_content_location.xml    |    8 -
 .../base/http_feed_id_base_docuri.xml         |    7 -
 ...feed_info_base64_base_content_location.xml |   10 -
 .../http_feed_info_base64_base_docuri.xml     |    9 -
 .../http_feed_info_base_content_location.xml  |    8 -
 .../base/http_feed_info_base_docuri.xml       |    7 -
 ...feed_info_inline_base_content_location.xml |    8 -
 .../http_feed_info_inline_base_docuri.xml     |    7 -
 .../http_feed_link_base_content_location.xml  |    8 -
 .../base/http_feed_link_base_docuri.xml       |    7 -
 ...d_tagline_base64_base_content_location.xml |   10 -
 .../http_feed_tagline_base64_base_docuri.xml  |    9 -
 ...ttp_feed_tagline_base_content_location.xml |    8 -
 .../base/http_feed_tagline_base_docuri.xml    |    7 -
 ...d_tagline_inline_base_content_location.xml |    8 -
 .../http_feed_tagline_inline_base_docuri.xml  |    7 -
 ...eed_title_base64_base_content_location.xml |   10 -
 .../http_feed_title_base64_base_docuri.xml    |    9 -
 .../http_feed_title_base_content_location.xml |    8 -
 .../base/http_feed_title_base_docuri.xml      |    7 -
 ...eed_title_inline_base_content_location.xml |    8 -
 .../http_feed_title_inline_base_docuri.xml    |    7 -
 .../http_item_body_base_content_location.xml  |   12 -
 .../base/http_item_body_base_docuri.xml       |   11 -
 ...tp_item_comments_base_content_location.xml |   12 -
 .../base/http_item_comments_base_docuri.xml   |   11 -
 ..._content_encoded_base_content_location.xml |   12 -
 .../http_item_content_encoded_base_docuri.xml |   11 -
 ...item_description_base_content_location.xml |   12 -
 .../http_item_description_base_docuri.xml     |   11 -
 .../base/http_item_description_spaces.xml     |   11 -
 ...tp_item_fullitem_base_content_location.xml |   12 -
 .../base/http_item_fullitem_base_docuri.xml   |   11 -
 .../http_item_link_base_content_location.xml  |   12 -
 .../base/http_item_link_base_docuri.xml       |   11 -
 ...m_wfw_commentRSS_base_content_location.xml |   12 -
 .../http_item_wfw_commentRSS_base_docuri.xml  |   11 -
 ...item_wfw_comment_base_content_location.xml |   12 -
 .../http_item_wfw_comment_base_docuri.xml     |   11 -
 ..._item_xhtml_body_base_content_location.xml |   12 -
 .../base/http_item_xhtml_body_base_docuri.xml |   11 -
 .../base/http_relative_xml_base.xml           |   10 -
 .../base/http_relative_xml_base_2.xml         |   10 -
 .../wellformed/base/item_media_title1.xml     |   11 -
 .../wellformed/base/item_media_title2.xml     |   12 -
 .../wellformed/base/item_media_title3.xml     |   12 -
 .../tests/wellformed/base/malformed_base.xml  |    9 -
 .../base/rel_uri_with_unicode_character.xml   |   11 -
 .../wellformed/base/relative_xml_base.xml     |    9 -
 .../wellformed/base/relative_xml_base_2.xml   |    9 -
 .../tests/wellformed/base/unsafe_base.xml     |   10 -
 .../cdf/channel_abstract_map_description.xml  |    7 -
 .../cdf/channel_abstract_map_tagline.xml      |    7 -
 .../wellformed/cdf/channel_href_map_link.xml  |    6 -
 .../wellformed/cdf/channel_href_map_links.xml |    6 -
 .../tests/wellformed/cdf/channel_lastmod.xml  |    6 -
 .../wellformed/cdf/channel_lastmod_parsed.xml |    6 -
 .../tests/wellformed/cdf/channel_title.xml    |    7 -
 .../cdf/item_abstract_map_description.xml     |    9 -
 .../cdf/item_abstract_map_summary.xml         |    9 -
 .../wellformed/cdf/item_href_map_link.xml     |    8 -
 .../wellformed/cdf/item_href_map_links.xml    |    8 -
 .../tests/wellformed/cdf/item_lastmod.xml     |    8 -
 .../wellformed/cdf/item_lastmod_parsed.xml    |    8 -
 .../tests/wellformed/cdf/item_title.xml       |    9 -
 .../feedburner/feedburner_browserfriendly.xml |    9 -
 .../headers_content_location-relative.xml     |    8 -
 .../http/headers_content_location-unsafe.xml  |    9 -
 .../tests/wellformed/http/headers_etag.xml    |    7 -
 .../tests/wellformed/http/headers_foo.xml     |    7 -
 .../tests/wellformed/http/headers_no_etag.xml |    7 -
 .../itunes/itunes_channel_block.xml           |    9 -
 .../itunes/itunes_channel_block_false.xml     |    9 -
 .../itunes/itunes_channel_block_no.xml        |    9 -
 .../itunes/itunes_channel_block_true.xml      |    9 -
 .../itunes/itunes_channel_block_uppercase.xml |    9 -
 .../itunes_channel_block_whitespace.xml       |    9 -
 .../itunes/itunes_channel_category.xml        |    9 -
 .../itunes/itunes_channel_category_nested.xml |   11 -
 .../itunes/itunes_channel_category_scheme.xml |    9 -
 .../itunes/itunes_channel_explicit.xml        |    9 -
 .../itunes/itunes_channel_explicit_clean.xml  |    9 -
 .../itunes/itunes_channel_explicit_false.xml  |    9 -
 .../itunes/itunes_channel_explicit_no.xml     |    9 -
 .../itunes/itunes_channel_explicit_true.xml   |    9 -
 .../itunes_channel_explicit_uppercase.xml     |    9 -
 .../itunes_channel_explicit_whitespace.xml    |    9 -
 .../itunes/itunes_channel_image.xml           |    9 -
 .../itunes/itunes_channel_image_no_href.xml   |   12 -
 .../itunes/itunes_channel_image_url.xml       |    9 -
 .../itunes/itunes_channel_keywords.xml        |    9 -
 .../itunes_channel_keywords_duplicate.xml     |    9 -
 .../itunes_channel_keywords_duplicate_2.xml   |   10 -
 .../itunes_channel_keywords_multiple.xml      |    9 -
 .../itunes/itunes_channel_link_image.xml      |    9 -
 .../itunes/itunes_channel_owner_email.xml     |   12 -
 .../itunes/itunes_channel_owner_name.xml      |   12 -
 .../itunes/itunes_channel_subtitle.xml        |    9 -
 .../itunes/itunes_channel_summary.xml         |    9 -
 .../itunes/itunes_core_element_uppercase.xml  |    9 -
 .../itunes/itunes_item_author_map_author.xml  |   11 -
 .../wellformed/itunes/itunes_item_block.xml   |   11 -
 .../itunes/itunes_item_block_false.xml        |   11 -
 .../itunes/itunes_item_block_no.xml           |   11 -
 .../itunes/itunes_item_block_true.xml         |   11 -
 .../itunes/itunes_item_block_uppercase.xml    |   11 -
 .../itunes/itunes_item_block_whitespace.xml   |   11 -
 .../itunes/itunes_item_category.xml           |   11 -
 .../itunes/itunes_item_category_nested.xml    |   13 -
 .../itunes/itunes_item_category_scheme.xml    |   11 -
 .../itunes/itunes_item_duration.xml           |   11 -
 .../itunes/itunes_item_explicit.xml           |   11 -
 .../itunes/itunes_item_explicit_clean.xml     |   11 -
 .../itunes/itunes_item_explicit_false.xml     |   11 -
 .../itunes/itunes_item_explicit_no.xml        |   11 -
 .../itunes/itunes_item_explicit_true.xml      |   11 -
 .../itunes/itunes_item_explicit_uppercase.xml |   11 -
 .../itunes_item_explicit_whitespace.xml       |   11 -
 .../wellformed/itunes/itunes_item_image.xml   |   11 -
 .../itunes/itunes_item_image_url.xml          |   11 -
 .../itunes/itunes_item_link_image.xml         |   11 -
 .../itunes/itunes_item_subtitle.xml           |   11 -
 .../wellformed/itunes/itunes_item_summary.xml |   11 -
 .../wellformed/itunes/itunes_namespace.xml    |    9 -
 .../itunes/itunes_namespace_example.xml       |    9 -
 .../itunes/itunes_namespace_lowercase.xml     |    9 -
 .../itunes/itunes_namespace_uppercase.xml     |    9 -
 .../wellformed/lang/channel_dc_language.xml   |    9 -
 .../wellformed/lang/channel_language.xml      |    9 -
 .../lang/entry_content_xml_lang.xml           |    9 -
 .../lang/entry_content_xml_lang_blank.xml     |    9 -
 .../lang/entry_content_xml_lang_blank_2.xml   |    9 -
 .../lang/entry_content_xml_lang_blank_3.xml   |   12 -
 .../lang/entry_content_xml_lang_inherit.xml   |    9 -
 .../lang/entry_content_xml_lang_inherit_2.xml |    9 -
 .../lang/entry_content_xml_lang_inherit_3.xml |   10 -
 .../lang/entry_content_xml_lang_inherit_4.xml |   10 -
 .../entry_content_xml_lang_underscore.xml     |    9 -
 .../lang/entry_summary_xml_lang.xml           |    9 -
 .../lang/entry_summary_xml_lang_blank.xml     |    9 -
 .../lang/entry_summary_xml_lang_inherit.xml   |    9 -
 .../lang/entry_summary_xml_lang_inherit_2.xml |    9 -
 .../lang/entry_summary_xml_lang_inherit_3.xml |   10 -
 .../lang/entry_summary_xml_lang_inherit_4.xml |   10 -
 .../wellformed/lang/entry_title_xml_lang.xml  |    9 -
 .../lang/entry_title_xml_lang_blank.xml       |    9 -
 .../lang/entry_title_xml_lang_inherit.xml     |    9 -
 .../lang/entry_title_xml_lang_inherit_2.xml   |    9 -
 .../lang/entry_title_xml_lang_inherit_3.xml   |   10 -
 .../lang/entry_title_xml_lang_inherit_4.xml   |   10 -
 .../lang/feed_copyright_xml_lang.xml          |    7 -
 .../lang/feed_copyright_xml_lang_blank.xml    |    7 -
 .../lang/feed_copyright_xml_lang_inherit.xml  |    7 -
 .../feed_copyright_xml_lang_inherit_2.xml     |    7 -
 .../feed_copyright_xml_lang_inherit_3.xml     |    8 -
 .../feed_copyright_xml_lang_inherit_4.xml     |    8 -
 .../wellformed/lang/feed_info_xml_lang.xml    |    7 -
 .../lang/feed_info_xml_lang_blank.xml         |    7 -
 .../lang/feed_info_xml_lang_inherit.xml       |    7 -
 .../lang/feed_info_xml_lang_inherit_2.xml     |    7 -
 .../lang/feed_info_xml_lang_inherit_3.xml     |    8 -
 .../lang/feed_info_xml_lang_inherit_4.xml     |    8 -
 .../tests/wellformed/lang/feed_language.xml   |    9 -
 .../lang/feed_language_override.xml           |    9 -
 .../wellformed/lang/feed_not_xml_lang.xml     |    7 -
 .../wellformed/lang/feed_not_xml_lang_2.xml   |    7 -
 .../wellformed/lang/feed_tagline_xml_lang.xml |    7 -
 .../lang/feed_tagline_xml_lang_blank.xml      |    7 -
 .../lang/feed_tagline_xml_lang_inherit.xml    |    7 -
 .../lang/feed_tagline_xml_lang_inherit_2.xml  |    7 -
 .../lang/feed_tagline_xml_lang_inherit_3.xml  |    8 -
 .../lang/feed_tagline_xml_lang_inherit_4.xml  |    8 -
 .../wellformed/lang/feed_title_xml_lang.xml   |    7 -
 .../lang/feed_title_xml_lang_blank.xml        |    7 -
 .../lang/feed_title_xml_lang_inherit.xml      |    7 -
 .../lang/feed_title_xml_lang_inherit_2.xml    |    7 -
 .../lang/feed_title_xml_lang_inherit_3.xml    |    8 -
 .../lang/feed_title_xml_lang_inherit_4.xml    |    8 -
 .../tests/wellformed/lang/feed_xml_lang.xml   |    6 -
 .../lang/feed_xml_lang_underscore.xml         |    6 -
 .../wellformed/lang/http_content_language.xml |    7 -
 ...p_content_language_entry_title_inherit.xml |   10 -
 ...content_language_entry_title_inherit_2.xml |   11 -
 .../http_content_language_feed_language.xml   |   10 -
 .../http_content_language_feed_xml_lang.xml   |    7 -
 .../lang/item_content_encoded_xml_lang.xml    |   11 -
 .../item_content_encoded_xml_lang_inherit.xml |   11 -
 .../wellformed/lang/item_dc_language.xml      |   11 -
 .../lang/item_fullitem_xml_lang.xml           |   11 -
 .../lang/item_fullitem_xml_lang_inherit.xml   |   11 -
 .../lang/item_xhtml_body_xml_lang.xml         |   13 -
 .../lang/item_xhtml_body_xml_lang_inherit.xml |   13 -
 .../wellformed/mf_hcard/3-5-5-org-unicode.xml |   14 -
 .../mf_rel_tag/rel_tag_term_no_term.xml       |   12 -
 .../tests/wellformed/namespace/atommathml.xml |    9 -
 .../tests/wellformed/namespace/atomsvg.xml    |    9 -
 .../wellformed/namespace/atomsvgdctitle.xml   |   36 -
 .../wellformed/namespace/atomsvgdesc.xml      |    9 -
 .../wellformed/namespace/atomsvgtitle.xml     |    9 -
 .../wellformed/namespace/atomthreading.xml    |    5 -
 .../namespace/atomthreadingwithentry.xml      |    6 -
 .../tests/wellformed/namespace/atomxlink.xml  |    9 -
 .../namespace/rss1.0withModules.xml           |   47 -
 .../namespace/rss1.0withModulesNoDefNS.xml    |   48 -
 ...rss1.0withModulesNoDefNSLocalNameClash.xml |   53 -
 .../namespace/rss2.0NSwithModules.xml         |   50 -
 .../namespace/rss2.0NSwithModulesNoDefNS.xml  |   50 -
 ...s2.0NSwithModulesNoDefNSLocalNameClash.xml |   58 -
 .../wellformed/namespace/rss2.0mathml.xml     |   11 -
 .../namespace/rss2.0noNSwithModules.xml       |   49 -
 .../rss2.0noNSwithModulesLocalNameClash.xml   |   57 -
 .../tests/wellformed/namespace/rss2.0svg.xml  |   11 -
 .../tests/wellformed/namespace/rss2.0svg5.xml |   11 -
 .../wellformed/namespace/rss2.0svgtitle.xml   |   11 -
 .../wellformed/namespace/rss2.0withAtomNS.xml |   27 -
 .../wellformed/namespace/rss2.0xlink.xml      |   11 -
 .../atom10_arbitrary_element.xml              |   18 -
 .../wellformed/node_precedence/atom10_id.xml  |   18 -
 .../node_precedence/atom10_title.xml          |   18 -
 .../rdf/doctype_contains_entity_decl.xml      |   17 -
 .../rdf/rdf_channel_description.xml           |    9 -
 .../tests/wellformed/rdf/rdf_channel_link.xml |    9 -
 .../wellformed/rdf/rdf_channel_title.xml      |    9 -
 .../wellformed/rdf/rdf_item_description.xml   |   16 -
 .../tests/wellformed/rdf/rdf_item_link.xml    |   16 -
 .../wellformed/rdf/rdf_item_rdf_about.xml     |   15 -
 .../tests/wellformed/rdf/rdf_item_title.xml   |   16 -
 .../wellformed/rdf/rss090_channel_title.xml   |   12 -
 .../wellformed/rdf/rss090_item_title.xml      |   12 -
 .../tests/wellformed/rdf/rss_version_10.xml   |    6 -
 .../rdf/rss_version_10_not_default_ns.xml     |    8 -
 .../tests/wellformed/rss/aaa_wellformed.xml   |    6 -
 .../tests/wellformed/rss/channel_author.xml   |    9 -
 ...channel_author_map_author_detail_email.xml |    9 -
 ...annel_author_map_author_detail_email_2.xml |    9 -
 ...annel_author_map_author_detail_email_3.xml |    9 -
 .../channel_author_map_author_detail_name.xml |    9 -
 ...hannel_author_map_author_detail_name_2.xml |    9 -
 .../tests/wellformed/rss/channel_category.xml |    9 -
 .../rss/channel_category_domain.xml           |    9 -
 .../rss/channel_category_multiple.xml         |   10 -
 .../rss/channel_category_multiple_2.xml       |   10 -
 .../wellformed/rss/channel_cloud_domain.xml   |    9 -
 .../wellformed/rss/channel_cloud_path.xml     |    9 -
 .../wellformed/rss/channel_cloud_port.xml     |    9 -
 .../wellformed/rss/channel_cloud_protocol.xml |    9 -
 .../rss/channel_cloud_registerProcedure.xml   |    9 -
 .../wellformed/rss/channel_copyright.xml      |    9 -
 .../wellformed/rss/channel_dc_author.xml      |    9 -
 ...nnel_dc_author_map_author_detail_email.xml |    9 -
 ...annel_dc_author_map_author_detail_name.xml |    9 -
 .../wellformed/rss/channel_dc_contributor.xml |    9 -
 .../wellformed/rss/channel_dc_creator.xml     |    9 -
 ...nel_dc_creator_map_author_detail_email.xml |    9 -
 ...nnel_dc_creator_map_author_detail_name.xml |    9 -
 .../tests/wellformed/rss/channel_dc_date.xml  |    9 -
 .../wellformed/rss/channel_dc_date_parsed.xml |    9 -
 .../wellformed/rss/channel_dc_publisher.xml   |    9 -
 .../rss/channel_dc_publisher_email.xml        |    9 -
 .../rss/channel_dc_publisher_name.xml         |    9 -
 .../wellformed/rss/channel_dc_rights.xml      |    9 -
 .../wellformed/rss/channel_dc_subject.xml     |    9 -
 .../wellformed/rss/channel_dc_subject_2.xml   |    9 -
 .../rss/channel_dc_subject_multiple.xml       |   10 -
 .../tests/wellformed/rss/channel_dc_title.xml |    9 -
 .../rss/channel_dcterms_created.xml           |    9 -
 .../rss/channel_dcterms_created_parsed.xml    |    9 -
 .../wellformed/rss/channel_dcterms_issued.xml |    9 -
 .../rss/channel_dcterms_issued_parsed.xml     |    9 -
 .../rss/channel_dcterms_modified.xml          |    9 -
 .../rss/channel_dcterms_modified_parsed.xml   |    9 -
 .../wellformed/rss/channel_description.xml    |    9 -
 .../channel_description_escaped_markup.xml    |    9 -
 .../rss/channel_description_map_tagline.xml   |    9 -
 .../rss/channel_description_naked_markup.xml  |    9 -
 .../rss/channel_description_shorttag.xml      |   10 -
 .../tests/wellformed/rss/channel_docs.xml     |    9 -
 .../wellformed/rss/channel_generator.xml      |    9 -
 .../rss/channel_image_description.xml         |   16 -
 .../wellformed/rss/channel_image_height.xml   |   16 -
 .../wellformed/rss/channel_image_link.xml     |   16 -
 .../rss/channel_image_link_bleed.xml          |   12 -
 .../rss/channel_image_link_conflict.xml       |   12 -
 .../wellformed/rss/channel_image_title.xml    |   16 -
 .../rss/channel_image_title_conflict.xml      |   12 -
 .../wellformed/rss/channel_image_url.xml      |   16 -
 .../wellformed/rss/channel_image_width.xml    |   16 -
 .../wellformed/rss/channel_lastBuildDate.xml  |    9 -
 .../rss/channel_lastBuildDate_parsed.xml      |    9 -
 .../tests/wellformed/rss/channel_link.xml     |    9 -
 .../wellformed/rss/channel_managingEditor.xml |    9 -
 ...managingEditor_map_author_detail_email.xml |    9 -
 ..._managingEditor_map_author_detail_name.xml |    9 -
 .../tests/wellformed/rss/channel_pubDate.xml  |    9 -
 .../channel_pubDate_map_updated_parsed.xml    |    9 -
 .../rss/channel_textInput_description.xml     |   14 -
 ...channel_textInput_description_conflict.xml |   12 -
 .../wellformed/rss/channel_textInput_link.xml |   12 -
 .../rss/channel_textInput_link_bleed.xml      |   12 -
 .../rss/channel_textInput_link_conflict.xml   |   12 -
 .../wellformed/rss/channel_textInput_name.xml |   11 -
 .../rss/channel_textInput_title.xml           |   12 -
 .../rss/channel_textInput_title_conflict.xml  |   12 -
 .../tests/wellformed/rss/channel_title.xml    |    9 -
 .../wellformed/rss/channel_title_apos.xml     |    9 -
 .../tests/wellformed/rss/channel_title_gt.xml |    9 -
 .../tests/wellformed/rss/channel_title_lt.xml |    9 -
 .../tests/wellformed/rss/channel_ttl.xml      |    9 -
 .../wellformed/rss/channel_webMaster.xml      |    9 -
 .../rss/channel_webMaster_email.xml           |    9 -
 .../wellformed/rss/channel_webMaster_name.xml |    9 -
 .../wellformed/rss/entity_in_doctype.xml      |   16 -
 .../tests/wellformed/rss/item_author.xml      |   11 -
 .../item_author_map_author_detail_email.xml   |   11 -
 .../item_author_map_author_detail_email2.xml  |   11 -
 .../item_author_map_author_detail_email3.xml  |   11 -
 .../item_author_map_author_detail_name.xml    |   11 -
 .../item_author_map_author_detail_name2.xml   |   11 -
 .../item_author_map_author_detail_name3.xml   |   11 -
 .../tests/wellformed/rss/item_category.xml    |   11 -
 .../wellformed/rss/item_category_domain.xml   |   11 -
 .../wellformed/rss/item_category_image.xml    |   17 -
 .../wellformed/rss/item_category_multiple.xml |   12 -
 .../rss/item_category_multiple_2.xml          |   12 -
 .../tests/wellformed/rss/item_cc_license.xml  |   12 -
 .../tests/wellformed/rss/item_comments.xml    |   11 -
 .../wellformed/rss/item_content_encoded.xml   |   11 -
 .../rss/item_content_encoded_mode.xml         |   11 -
 .../rss/item_content_encoded_type.xml         |   11 -
 .../rss/item_creativeCommons_license.xml      |   12 -
 .../tests/wellformed/rss/item_dc_author.xml   |   11 -
 ...item_dc_author_map_author_detail_email.xml |   11 -
 .../item_dc_author_map_author_detail_name.xml |   11 -
 .../wellformed/rss/item_dc_contributor.xml    |   11 -
 .../tests/wellformed/rss/item_dc_creator.xml  |   11 -
 ...tem_dc_creator_map_author_detail_email.xml |   11 -
 ...item_dc_creator_map_author_detail_name.xml |   11 -
 .../tests/wellformed/rss/item_dc_date.xml     |   11 -
 .../wellformed/rss/item_dc_date_parsed.xml    |   11 -
 .../wellformed/rss/item_dc_description.xml    |   11 -
 .../wellformed/rss/item_dc_publisher.xml      |   11 -
 .../rss/item_dc_publisher_email.xml           |   11 -
 .../wellformed/rss/item_dc_publisher_name.xml |   11 -
 .../tests/wellformed/rss/item_dc_rights.xml   |   11 -
 .../tests/wellformed/rss/item_dc_subject.xml  |   11 -
 .../wellformed/rss/item_dc_subject_2.xml      |   11 -
 .../rss/item_dc_subject_multiple.xml          |   12 -
 .../tests/wellformed/rss/item_dc_title.xml    |   11 -
 .../wellformed/rss/item_dcterms_created.xml   |   11 -
 .../rss/item_dcterms_created_parsed.xml       |   11 -
 .../wellformed/rss/item_dcterms_issued.xml    |   11 -
 .../rss/item_dcterms_issued_parsed.xml        |   11 -
 .../wellformed/rss/item_dcterms_modified.xml  |   11 -
 .../rss/item_dcterms_modified_parsed.xml      |   11 -
 .../tests/wellformed/rss/item_description.xml |   11 -
 .../rss/item_description_and_summary.xml      |   12 -
 .../wellformed/rss/item_description_br.xml    |   11 -
 .../rss/item_description_br_shorttag.xml      |   12 -
 .../rss/item_description_code_br.xml          |   12 -
 .../rss/item_description_escaped_markup.xml   |   11 -
 .../rss/item_description_map_summary.xml      |   11 -
 .../rss/item_description_naked_markup.xml     |   11 -
 .../rss/item_description_not_a_doctype.xml    |    9 -
 .../rss/item_description_not_a_doctype2.xml   |    9 -
 .../wellformed/rss/item_enclosure_length.xml  |   12 -
 .../rss/item_enclosure_multiple.xml           |   13 -
 .../wellformed/rss/item_enclosure_type.xml    |   12 -
 .../wellformed/rss/item_enclosure_url.xml     |   12 -
 .../wellformed/rss/item_expirationDate.xml    |   11 -
 .../item_expirationDate_multiple_values.xml   |   12 -
 .../rss/item_expirationDate_parsed.xml        |   11 -
 .../tests/wellformed/rss/item_fullitem.xml    |   11 -
 .../wellformed/rss/item_fullitem_mode.xml     |   11 -
 .../wellformed/rss/item_fullitem_type.xml     |   11 -
 .../tests/wellformed/rss/item_guid.xml        |   11 -
 .../rss/item_guid_conflict_link.xml           |   12 -
 .../wellformed/rss/item_guid_guidislink.xml   |   11 -
 .../item_guid_isPermaLink_conflict_link.xml   |   12 -
 ...PermaLink_conflict_link_not_guidislink.xml |   12 -
 .../rss/item_guid_isPermaLink_guidislink.xml  |   11 -
 .../rss/item_guid_isPermaLink_map_link.xml    |   11 -
 .../wellformed/rss/item_guid_map_link.xml     |   11 -
 .../rss/item_guid_not_permalink.xml           |   11 -
 .../item_guid_not_permalink_conflict_link.xml |   12 -
 ...item_guid_not_permalink_not_guidislink.xml |   11 -
 ...em_guid_not_permalink_not_guidislink_2.xml |   12 -
 .../rss/item_guid_not_permalink_not_url.xml   |   11 -
 .../wellformed/rss/item_image_link_bleed.xml  |   14 -
 .../rss/item_image_link_conflict.xml          |   14 -
 .../tests/wellformed/rss/item_link.xml        |   11 -
 .../tests/wellformed/rss/item_pubDate.xml     |   11 -
 .../rss/item_pubDate_map_updated_parsed.xml   |   11 -
 .../tests/wellformed/rss/item_source.xml      |   11 -
 .../tests/wellformed/rss/item_source_url.xml  |   11 -
 .../rss/item_summary_and_description.xml      |   12 -
 .../tests/wellformed/rss/item_title.xml       |   11 -
 .../tests/wellformed/rss/item_xhtml_body.xml  |   13 -
 .../wellformed/rss/item_xhtml_body_mode.xml   |   13 -
 .../wellformed/rss/item_xhtml_body_type.xml   |   13 -
 .../tests/wellformed/rss/newlocation.xml      |    9 -
 .../tests/wellformed/rss/rss_namespace_1.xml  |    9 -
 .../tests/wellformed/rss/rss_namespace_2.xml  |    9 -
 .../tests/wellformed/rss/rss_namespace_3.xml  |    9 -
 .../tests/wellformed/rss/rss_namespace_4.xml  |    9 -
 .../tests/wellformed/rss/rss_version_090.xml  |    6 -
 .../rss/rss_version_091_netscape.xml          |    7 -
 .../rss/rss_version_091_userland.xml          |    6 -
 .../tests/wellformed/rss/rss_version_092.xml  |    6 -
 .../tests/wellformed/rss/rss_version_093.xml  |    6 -
 .../tests/wellformed/rss/rss_version_094.xml  |    6 -
 .../tests/wellformed/rss/rss_version_20.xml   |    6 -
 .../tests/wellformed/rss/rss_version_201.xml  |    6 -
 .../tests/wellformed/rss/rss_version_21.xml   |    6 -
 .../wellformed/rss/rss_version_missing.xml    |    9 -
 .../sanitize/acceptable_attribute_abbr.xml    |    9 -
 .../acceptable_attribute_accept-charset.xml   |    9 -
 .../sanitize/acceptable_attribute_accept.xml  |    9 -
 .../acceptable_attribute_accesskey.xml        |    9 -
 .../sanitize/acceptable_attribute_action.xml  |    9 -
 .../sanitize/acceptable_attribute_align.xml   |    9 -
 .../sanitize/acceptable_attribute_alt.xml     |    9 -
 .../acceptable_attribute_autocomplete.xml     |    9 -
 .../acceptable_attribute_autofocus.xml        |    9 -
 .../acceptable_attribute_autoplay.xml         |    9 -
 .../sanitize/acceptable_attribute_axis.xml    |    9 -
 .../acceptable_attribute_background.xml       |    9 -
 .../sanitize/acceptable_attribute_balance.xml |    9 -
 .../sanitize/acceptable_attribute_bgcolor.xml |    9 -
 .../acceptable_attribute_bgproperties.xml     |    9 -
 .../sanitize/acceptable_attribute_border.xml  |    9 -
 .../acceptable_attribute_bordercolor.xml      |    9 -
 .../acceptable_attribute_bordercolordark.xml  |    9 -
 .../acceptable_attribute_bordercolorlight.xml |    9 -
 .../acceptable_attribute_bottompadding.xml    |    9 -
 .../acceptable_attribute_cellpadding.xml      |    9 -
 .../acceptable_attribute_cellspacing.xml      |    9 -
 .../sanitize/acceptable_attribute_ch.xml      |    9 -
 .../acceptable_attribute_challenge.xml        |    9 -
 .../sanitize/acceptable_attribute_char.xml    |    9 -
 .../sanitize/acceptable_attribute_charoff.xml |    9 -
 .../sanitize/acceptable_attribute_charset.xml |    9 -
 .../sanitize/acceptable_attribute_checked.xml |    9 -
 .../sanitize/acceptable_attribute_choff.xml   |    9 -
 .../sanitize/acceptable_attribute_cite.xml    |    9 -
 .../sanitize/acceptable_attribute_class.xml   |    9 -
 .../sanitize/acceptable_attribute_clear.xml   |    9 -
 .../sanitize/acceptable_attribute_color.xml   |    9 -
 .../sanitize/acceptable_attribute_cols.xml    |    9 -
 .../sanitize/acceptable_attribute_colspan.xml |    9 -
 .../sanitize/acceptable_attribute_compact.xml |    9 -
 .../acceptable_attribute_contenteditable.xml  |    9 -
 .../sanitize/acceptable_attribute_coords.xml  |    9 -
 .../sanitize/acceptable_attribute_data.xml    |    9 -
 .../sanitize/acceptable_attribute_datafld.xml |    9 -
 .../acceptable_attribute_datapagesize.xml     |    9 -
 .../sanitize/acceptable_attribute_datasrc.xml |    9 -
 .../acceptable_attribute_datetime.xml         |    9 -
 .../sanitize/acceptable_attribute_default.xml |    9 -
 .../sanitize/acceptable_attribute_delay.xml   |    9 -
 .../sanitize/acceptable_attribute_dir.xml     |    9 -
 .../acceptable_attribute_disabled.xml         |    9 -
 .../acceptable_attribute_draggable.xml        |    9 -
 .../sanitize/acceptable_attribute_dynsrc.xml  |    9 -
 .../sanitize/acceptable_attribute_enctype.xml |    9 -
 .../sanitize/acceptable_attribute_end.xml     |    9 -
 .../sanitize/acceptable_attribute_face.xml    |    9 -
 .../sanitize/acceptable_attribute_for.xml     |    9 -
 .../sanitize/acceptable_attribute_form.xml    |    9 -
 .../sanitize/acceptable_attribute_frame.xml   |    9 -
 .../acceptable_attribute_galleryimg.xml       |    9 -
 .../sanitize/acceptable_attribute_gutter.xml  |    9 -
 .../sanitize/acceptable_attribute_headers.xml |    9 -
 .../sanitize/acceptable_attribute_height.xml  |    9 -
 .../sanitize/acceptable_attribute_hidden.xml  |    9 -
 .../acceptable_attribute_hidefocus.xml        |    9 -
 .../sanitize/acceptable_attribute_high.xml    |    9 -
 .../sanitize/acceptable_attribute_href.xml    |    9 -
 .../acceptable_attribute_hreflang.xml         |    9 -
 .../sanitize/acceptable_attribute_hspace.xml  |    9 -
 .../sanitize/acceptable_attribute_icon.xml    |    9 -
 .../sanitize/acceptable_attribute_id.xml      |    9 -
 .../acceptable_attribute_inputmode.xml        |    9 -
 .../sanitize/acceptable_attribute_ismap.xml   |    9 -
 .../sanitize/acceptable_attribute_keytype.xml |    9 -
 .../sanitize/acceptable_attribute_label.xml   |    9 -
 .../sanitize/acceptable_attribute_lang.xml    |    9 -
 .../acceptable_attribute_leftspacing.xml      |    9 -
 .../sanitize/acceptable_attribute_list.xml    |    9 -
 .../acceptable_attribute_longdesc.xml         |    9 -
 .../sanitize/acceptable_attribute_loop.xml    |    9 -
 .../acceptable_attribute_loopcount.xml        |    9 -
 .../sanitize/acceptable_attribute_loopend.xml |    9 -
 .../acceptable_attribute_loopstart.xml        |    9 -
 .../sanitize/acceptable_attribute_low.xml     |    9 -
 .../sanitize/acceptable_attribute_lowsrc.xml  |    9 -
 .../sanitize/acceptable_attribute_max.xml     |    9 -
 .../acceptable_attribute_maxlength.xml        |    9 -
 .../sanitize/acceptable_attribute_media.xml   |    9 -
 .../sanitize/acceptable_attribute_method.xml  |    9 -
 .../sanitize/acceptable_attribute_min.xml     |    9 -
 .../acceptable_attribute_multiple.xml         |    9 -
 .../sanitize/acceptable_attribute_name.xml    |    9 -
 .../sanitize/acceptable_attribute_nohref.xml  |    9 -
 .../sanitize/acceptable_attribute_noshade.xml |    9 -
 .../sanitize/acceptable_attribute_nowrap.xml  |    9 -
 .../sanitize/acceptable_attribute_open.xml    |    9 -
 .../sanitize/acceptable_attribute_optimum.xml |    9 -
 .../sanitize/acceptable_attribute_pattern.xml |    9 -
 .../sanitize/acceptable_attribute_ping.xml    |    9 -
 .../acceptable_attribute_point-size.xml       |    9 -
 .../sanitize/acceptable_attribute_poster.xml  |    9 -
 .../sanitize/acceptable_attribute_pqg.xml     |    9 -
 .../sanitize/acceptable_attribute_preload.xml |    9 -
 .../sanitize/acceptable_attribute_prompt.xml  |    9 -
 .../acceptable_attribute_radiogroup.xml       |    9 -
 .../acceptable_attribute_readonly.xml         |    9 -
 .../sanitize/acceptable_attribute_rel.xml     |    9 -
 .../acceptable_attribute_repeat-max.xml       |    9 -
 .../acceptable_attribute_repeat-min.xml       |    9 -
 .../sanitize/acceptable_attribute_replace.xml |    9 -
 .../acceptable_attribute_required.xml         |    9 -
 .../sanitize/acceptable_attribute_rev.xml     |    9 -
 .../acceptable_attribute_rightspacing.xml     |    9 -
 .../sanitize/acceptable_attribute_rows.xml    |    9 -
 .../sanitize/acceptable_attribute_rowspan.xml |    9 -
 .../sanitize/acceptable_attribute_rules.xml   |    9 -
 .../sanitize/acceptable_attribute_scope.xml   |    9 -
 .../acceptable_attribute_selected.xml         |    9 -
 .../sanitize/acceptable_attribute_shape.xml   |    9 -
 .../sanitize/acceptable_attribute_size.xml    |    9 -
 .../sanitize/acceptable_attribute_span.xml    |    9 -
 .../sanitize/acceptable_attribute_src.xml     |    9 -
 .../sanitize/acceptable_attribute_start.xml   |    9 -
 .../sanitize/acceptable_attribute_step.xml    |    9 -
 .../sanitize/acceptable_attribute_summary.xml |    9 -
 .../acceptable_attribute_suppress.xml         |    9 -
 .../acceptable_attribute_tabindex.xml         |    9 -
 .../sanitize/acceptable_attribute_target.xml  |    9 -
 .../acceptable_attribute_template.xml         |    9 -
 .../sanitize/acceptable_attribute_title.xml   |    9 -
 .../acceptable_attribute_toppadding.xml       |    9 -
 .../sanitize/acceptable_attribute_type.xml    |    9 -
 .../acceptable_attribute_unselectable.xml     |    9 -
 .../sanitize/acceptable_attribute_urn.xml     |    9 -
 .../sanitize/acceptable_attribute_usemap.xml  |    9 -
 .../sanitize/acceptable_attribute_valign.xml  |    9 -
 .../sanitize/acceptable_attribute_value.xml   |    9 -
 .../acceptable_attribute_variable.xml         |    9 -
 .../sanitize/acceptable_attribute_volume.xml  |    9 -
 .../sanitize/acceptable_attribute_vrml.xml    |    9 -
 .../sanitize/acceptable_attribute_vspace.xml  |    9 -
 .../sanitize/acceptable_attribute_width.xml   |    9 -
 .../sanitize/acceptable_attribute_wrap.xml    |    9 -
 .../sanitize/acceptable_element_a.xml         |    9 -
 .../sanitize/acceptable_element_abbr.xml      |    9 -
 .../sanitize/acceptable_element_acronym.xml   |    9 -
 .../sanitize/acceptable_element_address.xml   |    9 -
 .../sanitize/acceptable_element_area.xml      |    9 -
 .../sanitize/acceptable_element_article.xml   |    9 -
 .../sanitize/acceptable_element_aside.xml     |    9 -
 .../sanitize/acceptable_element_audio.xml     |    9 -
 .../sanitize/acceptable_element_b.xml         |    9 -
 .../sanitize/acceptable_element_big.xml       |    9 -
 .../acceptable_element_blockquote.xml         |    9 -
 .../sanitize/acceptable_element_br.xml        |    9 -
 .../sanitize/acceptable_element_button.xml    |    9 -
 .../sanitize/acceptable_element_canvas.xml    |    9 -
 .../sanitize/acceptable_element_caption.xml   |    9 -
 .../sanitize/acceptable_element_center.xml    |    9 -
 .../sanitize/acceptable_element_cite.xml      |    9 -
 .../sanitize/acceptable_element_code.xml      |    9 -
 .../sanitize/acceptable_element_col.xml       |    9 -
 .../sanitize/acceptable_element_colgroup.xml  |    9 -
 .../sanitize/acceptable_element_command.xml   |    9 -
 .../sanitize/acceptable_element_datagrid.xml  |    9 -
 .../sanitize/acceptable_element_datalist.xml  |    9 -
 .../sanitize/acceptable_element_dd.xml        |    9 -
 .../sanitize/acceptable_element_del.xml       |    9 -
 .../sanitize/acceptable_element_details.xml   |    9 -
 .../sanitize/acceptable_element_dfn.xml       |    9 -
 .../sanitize/acceptable_element_dialog.xml    |    9 -
 .../sanitize/acceptable_element_dir.xml       |    9 -
 .../sanitize/acceptable_element_div.xml       |    9 -
 .../sanitize/acceptable_element_dl.xml        |    9 -
 .../sanitize/acceptable_element_dt.xml        |    9 -
 .../sanitize/acceptable_element_em.xml        |    9 -
 .../acceptable_element_event-source.xml       |    9 -
 .../sanitize/acceptable_element_fieldset.xml  |    9 -
 .../sanitize/acceptable_element_figure.xml    |    9 -
 .../sanitize/acceptable_element_font.xml      |    9 -
 .../sanitize/acceptable_element_footer.xml    |    9 -
 .../sanitize/acceptable_element_form.xml      |    9 -
 .../sanitize/acceptable_element_h1.xml        |    9 -
 .../sanitize/acceptable_element_h2.xml        |    9 -
 .../sanitize/acceptable_element_h3.xml        |    9 -
 .../sanitize/acceptable_element_h4.xml        |    9 -
 .../sanitize/acceptable_element_h5.xml        |    9 -
 .../sanitize/acceptable_element_h6.xml        |    9 -
 .../sanitize/acceptable_element_header.xml    |    9 -
 .../sanitize/acceptable_element_hr.xml        |    9 -
 .../sanitize/acceptable_element_i.xml         |    9 -
 .../sanitize/acceptable_element_img.xml       |    9 -
 .../sanitize/acceptable_element_input.xml     |    9 -
 .../sanitize/acceptable_element_ins.xml       |    9 -
 .../sanitize/acceptable_element_kbd.xml       |    9 -
 .../sanitize/acceptable_element_keygen.xml    |    9 -
 .../sanitize/acceptable_element_label.xml     |    9 -
 .../sanitize/acceptable_element_legend.xml    |    9 -
 .../sanitize/acceptable_element_li.xml        |    9 -
 .../sanitize/acceptable_element_m.xml         |    9 -
 .../sanitize/acceptable_element_map.xml       |    9 -
 .../sanitize/acceptable_element_menu.xml      |    9 -
 .../sanitize/acceptable_element_meter.xml     |    9 -
 .../sanitize/acceptable_element_multicol.xml  |    9 -
 .../sanitize/acceptable_element_nav.xml       |    9 -
 .../sanitize/acceptable_element_nextid.xml    |    9 -
 .../sanitize/acceptable_element_noscript.xml  |    9 -
 .../sanitize/acceptable_element_ol.xml        |    9 -
 .../sanitize/acceptable_element_optgroup.xml  |    9 -
 .../sanitize/acceptable_element_option.xml    |    9 -
 .../sanitize/acceptable_element_output.xml    |    9 -
 .../sanitize/acceptable_element_p.xml         |    9 -
 .../sanitize/acceptable_element_pre.xml       |    9 -
 .../sanitize/acceptable_element_progress.xml  |    9 -
 .../sanitize/acceptable_element_q.xml         |    9 -
 .../sanitize/acceptable_element_s.xml         |    9 -
 .../sanitize/acceptable_element_samp.xml      |    9 -
 .../sanitize/acceptable_element_section.xml   |    9 -
 .../sanitize/acceptable_element_select.xml    |    9 -
 .../sanitize/acceptable_element_small.xml     |    9 -
 .../sanitize/acceptable_element_sound.xml     |    9 -
 .../sanitize/acceptable_element_source.xml    |    9 -
 .../sanitize/acceptable_element_spacer.xml    |    9 -
 .../sanitize/acceptable_element_span.xml      |    9 -
 .../sanitize/acceptable_element_strike.xml    |    9 -
 .../sanitize/acceptable_element_strong.xml    |    9 -
 .../sanitize/acceptable_element_sub.xml       |    9 -
 .../sanitize/acceptable_element_sup.xml       |    9 -
 .../sanitize/acceptable_element_table.xml     |    9 -
 .../sanitize/acceptable_element_tbody.xml     |    9 -
 .../sanitize/acceptable_element_td.xml        |    9 -
 .../sanitize/acceptable_element_textarea.xml  |    9 -
 .../sanitize/acceptable_element_tfoot.xml     |    9 -
 .../sanitize/acceptable_element_th.xml        |    9 -
 .../sanitize/acceptable_element_thead.xml     |    9 -
 .../sanitize/acceptable_element_time.xml      |    9 -
 .../sanitize/acceptable_element_tr.xml        |    9 -
 .../sanitize/acceptable_element_tt.xml        |    9 -
 .../sanitize/acceptable_element_u.xml         |    9 -
 .../sanitize/acceptable_element_ul.xml        |    9 -
 .../sanitize/acceptable_element_var.xml       |    9 -
 .../sanitize/acceptable_element_video.xml     |    9 -
 .../blogger_dollar_sign_in_attribute.xml      |   11 -
 .../sanitize/entry_content_applet.xml         |    9 -
 .../sanitize/entry_content_blink.xml          |    9 -
 .../sanitize/entry_content_crazy.xml          |   75 -
 .../sanitize/entry_content_embed.xml          |    9 -
 .../sanitize/entry_content_frame.xml          |    9 -
 .../sanitize/entry_content_iframe.xml         |    9 -
 .../sanitize/entry_content_link.xml           |    9 -
 .../sanitize/entry_content_meta.xml           |    9 -
 .../sanitize/entry_content_object.xml         |    9 -
 .../sanitize/entry_content_onabort.xml        |    9 -
 .../sanitize/entry_content_onblur.xml         |    9 -
 .../sanitize/entry_content_onchange.xml       |    9 -
 .../sanitize/entry_content_onclick.xml        |    9 -
 .../sanitize/entry_content_ondblclick.xml     |    9 -
 .../sanitize/entry_content_onerror.xml        |    9 -
 .../sanitize/entry_content_onfocus.xml        |    9 -
 .../sanitize/entry_content_onkeydown.xml      |    9 -
 .../sanitize/entry_content_onkeypress.xml     |    9 -
 .../sanitize/entry_content_onkeyup.xml        |    9 -
 .../sanitize/entry_content_onload.xml         |    9 -
 .../sanitize/entry_content_onmousedown.xml    |    9 -
 .../sanitize/entry_content_onmouseout.xml     |    9 -
 .../sanitize/entry_content_onmouseover.xml    |    9 -
 .../sanitize/entry_content_onmouseup.xml      |    9 -
 .../sanitize/entry_content_onreset.xml        |    9 -
 .../sanitize/entry_content_onresize.xml       |    9 -
 .../sanitize/entry_content_onsubmit.xml       |    9 -
 .../sanitize/entry_content_onunload.xml       |    9 -
 .../sanitize/entry_content_script.xml         |    9 -
 .../sanitize/entry_content_script_base64.xml  |   12 -
 .../sanitize/entry_content_script_cdata.xml   |    9 -
 .../sanitize/entry_content_script_inline.xml  |    9 -
 .../sanitize/entry_content_style.xml          |    9 -
 .../sanitize/entry_content_style_tag.xml      |    9 -
 .../sanitize/entry_summary_applet.xml         |    9 -
 .../sanitize/entry_summary_blink.xml          |    9 -
 .../sanitize/entry_summary_crazy.xml          |   75 -
 .../sanitize/entry_summary_embed.xml          |    9 -
 .../sanitize/entry_summary_frame.xml          |    9 -
 .../sanitize/entry_summary_iframe.xml         |    9 -
 .../sanitize/entry_summary_link.xml           |    9 -
 .../sanitize/entry_summary_meta.xml           |    9 -
 .../sanitize/entry_summary_object.xml         |    9 -
 .../sanitize/entry_summary_onabort.xml        |    9 -
 .../sanitize/entry_summary_onblur.xml         |    9 -
 .../sanitize/entry_summary_onchange.xml       |    9 -
 .../sanitize/entry_summary_onclick.xml        |    9 -
 .../sanitize/entry_summary_ondblclick.xml     |    9 -
 .../sanitize/entry_summary_onerror.xml        |    9 -
 .../sanitize/entry_summary_onfocus.xml        |    9 -
 .../sanitize/entry_summary_onkeydown.xml      |    9 -
 .../sanitize/entry_summary_onkeypress.xml     |    9 -
 .../sanitize/entry_summary_onkeyup.xml        |    9 -
 .../sanitize/entry_summary_onload.xml         |    9 -
 .../sanitize/entry_summary_onmousedown.xml    |    9 -
 .../sanitize/entry_summary_onmouseout.xml     |    9 -
 .../sanitize/entry_summary_onmouseover.xml    |    9 -
 .../sanitize/entry_summary_onmouseup.xml      |    9 -
 .../sanitize/entry_summary_onreset.xml        |    9 -
 .../sanitize/entry_summary_onresize.xml       |    9 -
 .../sanitize/entry_summary_onsubmit.xml       |    9 -
 .../sanitize/entry_summary_onunload.xml       |    9 -
 .../sanitize/entry_summary_script.xml         |    9 -
 .../sanitize/entry_summary_script_base64.xml  |   12 -
 .../sanitize/entry_summary_script_cdata.xml   |    9 -
 .../sanitize/entry_summary_script_inline.xml  |    9 -
 .../entry_summary_script_map_description.xml  |    9 -
 .../sanitize/entry_summary_style.xml          |    9 -
 .../sanitize/entry_title_applet.xml           |    9 -
 .../wellformed/sanitize/entry_title_blink.xml |    9 -
 .../wellformed/sanitize/entry_title_crazy.xml |   75 -
 .../wellformed/sanitize/entry_title_embed.xml |    9 -
 .../wellformed/sanitize/entry_title_frame.xml |    9 -
 .../sanitize/entry_title_iframe.xml           |    9 -
 .../wellformed/sanitize/entry_title_link.xml  |    9 -
 .../wellformed/sanitize/entry_title_meta.xml  |    9 -
 .../sanitize/entry_title_object.xml           |    9 -
 .../sanitize/entry_title_onabort.xml          |    9 -
 .../sanitize/entry_title_onblur.xml           |    9 -
 .../sanitize/entry_title_onchange.xml         |    9 -
 .../sanitize/entry_title_onclick.xml          |    9 -
 .../sanitize/entry_title_ondblclick.xml       |    9 -
 .../sanitize/entry_title_onerror.xml          |    9 -
 .../sanitize/entry_title_onfocus.xml          |    9 -
 .../sanitize/entry_title_onkeydown.xml        |    9 -
 .../sanitize/entry_title_onkeypress.xml       |    9 -
 .../sanitize/entry_title_onkeyup.xml          |    9 -
 .../sanitize/entry_title_onload.xml           |    9 -
 .../sanitize/entry_title_onmousedown.xml      |    9 -
 .../sanitize/entry_title_onmouseout.xml       |    9 -
 .../sanitize/entry_title_onmouseover.xml      |    9 -
 .../sanitize/entry_title_onmouseup.xml        |    9 -
 .../sanitize/entry_title_onreset.xml          |    9 -
 .../sanitize/entry_title_onresize.xml         |    9 -
 .../sanitize/entry_title_onsubmit.xml         |    9 -
 .../sanitize/entry_title_onunload.xml         |    9 -
 .../sanitize/entry_title_script.xml           |    9 -
 .../sanitize/entry_title_script_cdata.xml     |    9 -
 .../sanitize/entry_title_script_inline.xml    |    9 -
 .../wellformed/sanitize/entry_title_style.xml |    9 -
 .../sanitize/feed_copyright_applet.xml        |    7 -
 .../sanitize/feed_copyright_blink.xml         |    7 -
 .../sanitize/feed_copyright_crazy.xml         |   73 -
 .../sanitize/feed_copyright_embed.xml         |    7 -
 .../sanitize/feed_copyright_frame.xml         |    7 -
 .../sanitize/feed_copyright_iframe.xml        |    7 -
 .../sanitize/feed_copyright_link.xml          |    7 -
 .../sanitize/feed_copyright_meta.xml          |    7 -
 .../sanitize/feed_copyright_object.xml        |    7 -
 .../sanitize/feed_copyright_onabort.xml       |    7 -
 .../sanitize/feed_copyright_onblur.xml        |    7 -
 .../sanitize/feed_copyright_onchange.xml      |    7 -
 .../sanitize/feed_copyright_onclick.xml       |    7 -
 .../sanitize/feed_copyright_ondblclick.xml    |    7 -
 .../sanitize/feed_copyright_onerror.xml       |    7 -
 .../sanitize/feed_copyright_onfocus.xml       |    7 -
 .../sanitize/feed_copyright_onkeydown.xml     |    7 -
 .../sanitize/feed_copyright_onkeypress.xml    |    7 -
 .../sanitize/feed_copyright_onkeyup.xml       |    7 -
 .../sanitize/feed_copyright_onload.xml        |    7 -
 .../sanitize/feed_copyright_onmousedown.xml   |    7 -
 .../sanitize/feed_copyright_onmouseout.xml    |    7 -
 .../sanitize/feed_copyright_onmouseover.xml   |    7 -
 .../sanitize/feed_copyright_onmouseup.xml     |    7 -
 .../sanitize/feed_copyright_onreset.xml       |    7 -
 .../sanitize/feed_copyright_onresize.xml      |    7 -
 .../sanitize/feed_copyright_onsubmit.xml      |    7 -
 .../sanitize/feed_copyright_onunload.xml      |    7 -
 .../sanitize/feed_copyright_script.xml        |    7 -
 .../sanitize/feed_copyright_script_cdata.xml  |    7 -
 .../sanitize/feed_copyright_script_inline.xml |    7 -
 .../sanitize/feed_copyright_style.xml         |    7 -
 .../wellformed/sanitize/feed_info_applet.xml  |    7 -
 .../wellformed/sanitize/feed_info_blink.xml   |    7 -
 .../wellformed/sanitize/feed_info_crazy.xml   |   73 -
 .../wellformed/sanitize/feed_info_embed.xml   |    7 -
 .../wellformed/sanitize/feed_info_frame.xml   |    7 -
 .../wellformed/sanitize/feed_info_iframe.xml  |    7 -
 .../wellformed/sanitize/feed_info_link.xml    |    7 -
 .../wellformed/sanitize/feed_info_meta.xml    |    7 -
 .../wellformed/sanitize/feed_info_object.xml  |    7 -
 .../wellformed/sanitize/feed_info_onabort.xml |    7 -
 .../wellformed/sanitize/feed_info_onblur.xml  |    7 -
 .../sanitize/feed_info_onchange.xml           |    7 -
 .../wellformed/sanitize/feed_info_onclick.xml |    7 -
 .../sanitize/feed_info_ondblclick.xml         |    7 -
 .../wellformed/sanitize/feed_info_onerror.xml |    7 -
 .../wellformed/sanitize/feed_info_onfocus.xml |    7 -
 .../sanitize/feed_info_onkeydown.xml          |    7 -
 .../sanitize/feed_info_onkeypress.xml         |    7 -
 .../wellformed/sanitize/feed_info_onkeyup.xml |    7 -
 .../wellformed/sanitize/feed_info_onload.xml  |    7 -
 .../sanitize/feed_info_onmousedown.xml        |    7 -
 .../sanitize/feed_info_onmouseout.xml         |    7 -
 .../sanitize/feed_info_onmouseover.xml        |    7 -
 .../sanitize/feed_info_onmouseup.xml          |    7 -
 .../wellformed/sanitize/feed_info_onreset.xml |    7 -
 .../sanitize/feed_info_onresize.xml           |    7 -
 .../sanitize/feed_info_onsubmit.xml           |    7 -
 .../sanitize/feed_info_onunload.xml           |    7 -
 .../wellformed/sanitize/feed_info_script.xml  |    7 -
 .../sanitize/feed_info_script_cdata.xml       |    7 -
 .../sanitize/feed_info_script_inline.xml      |    7 -
 .../wellformed/sanitize/feed_info_style.xml   |    7 -
 .../sanitize/feed_subtitle_applet.xml         |    7 -
 .../sanitize/feed_subtitle_blink.xml          |    7 -
 .../sanitize/feed_subtitle_crazy.xml          |   73 -
 .../sanitize/feed_subtitle_embed.xml          |    7 -
 .../sanitize/feed_subtitle_frame.xml          |    7 -
 .../sanitize/feed_subtitle_iframe.xml         |    7 -
 .../sanitize/feed_subtitle_link.xml           |    7 -
 .../sanitize/feed_subtitle_meta.xml           |    7 -
 .../sanitize/feed_subtitle_object.xml         |    7 -
 .../sanitize/feed_subtitle_onabort.xml        |    7 -
 .../sanitize/feed_subtitle_onblur.xml         |    7 -
 .../sanitize/feed_subtitle_onchange.xml       |    7 -
 .../sanitize/feed_subtitle_onclick.xml        |    7 -
 .../sanitize/feed_subtitle_ondblclick.xml     |    7 -
 .../sanitize/feed_subtitle_onerror.xml        |    7 -
 .../sanitize/feed_subtitle_onfocus.xml        |    7 -
 .../sanitize/feed_subtitle_onkeydown.xml      |    7 -
 .../sanitize/feed_subtitle_onkeypress.xml     |    7 -
 .../sanitize/feed_subtitle_onkeyup.xml        |    7 -
 .../sanitize/feed_subtitle_onload.xml         |    7 -
 .../sanitize/feed_subtitle_onmousedown.xml    |    7 -
 .../sanitize/feed_subtitle_onmouseout.xml     |    7 -
 .../sanitize/feed_subtitle_onmouseover.xml    |    7 -
 .../sanitize/feed_subtitle_onmouseup.xml      |    7 -
 .../sanitize/feed_subtitle_onreset.xml        |    7 -
 .../sanitize/feed_subtitle_onresize.xml       |    7 -
 .../sanitize/feed_subtitle_onsubmit.xml       |    7 -
 .../sanitize/feed_subtitle_onunload.xml       |    7 -
 .../sanitize/feed_subtitle_script.xml         |    7 -
 .../sanitize/feed_subtitle_script_cdata.xml   |    7 -
 .../sanitize/feed_subtitle_script_inline.xml  |    7 -
 .../sanitize/feed_subtitle_style.xml          |    7 -
 .../sanitize/feed_tagline_applet.xml          |    7 -
 .../sanitize/feed_tagline_blink.xml           |    7 -
 .../sanitize/feed_tagline_crazy.xml           |   73 -
 .../sanitize/feed_tagline_embed.xml           |    7 -
 .../sanitize/feed_tagline_frame.xml           |    7 -
 .../sanitize/feed_tagline_iframe.xml          |    7 -
 .../wellformed/sanitize/feed_tagline_link.xml |    7 -
 .../wellformed/sanitize/feed_tagline_meta.xml |    7 -
 .../sanitize/feed_tagline_object.xml          |    7 -
 .../sanitize/feed_tagline_onabort.xml         |    7 -
 .../sanitize/feed_tagline_onblur.xml          |    7 -
 .../sanitize/feed_tagline_onchange.xml        |    7 -
 .../sanitize/feed_tagline_onclick.xml         |    7 -
 .../sanitize/feed_tagline_ondblclick.xml      |    7 -
 .../sanitize/feed_tagline_onerror.xml         |    7 -
 .../sanitize/feed_tagline_onfocus.xml         |    7 -
 .../sanitize/feed_tagline_onkeydown.xml       |    7 -
 .../sanitize/feed_tagline_onkeypress.xml      |    7 -
 .../sanitize/feed_tagline_onkeyup.xml         |    7 -
 .../sanitize/feed_tagline_onload.xml          |    7 -
 .../sanitize/feed_tagline_onmousedown.xml     |    7 -
 .../sanitize/feed_tagline_onmouseout.xml      |    7 -
 .../sanitize/feed_tagline_onmouseover.xml     |    7 -
 .../sanitize/feed_tagline_onmouseup.xml       |    7 -
 .../sanitize/feed_tagline_onreset.xml         |    7 -
 .../sanitize/feed_tagline_onresize.xml        |    7 -
 .../sanitize/feed_tagline_onsubmit.xml        |    7 -
 .../sanitize/feed_tagline_onunload.xml        |    7 -
 .../sanitize/feed_tagline_script.xml          |    7 -
 .../sanitize/feed_tagline_script_cdata.xml    |    7 -
 .../sanitize/feed_tagline_script_inline.xml   |    7 -
 .../feed_tagline_script_map_description.xml   |    7 -
 .../sanitize/feed_tagline_style.xml           |    7 -
 .../wellformed/sanitize/feed_title_applet.xml |    7 -
 .../wellformed/sanitize/feed_title_blink.xml  |    7 -
 .../wellformed/sanitize/feed_title_crazy.xml  |   73 -
 .../wellformed/sanitize/feed_title_embed.xml  |    7 -
 .../wellformed/sanitize/feed_title_frame.xml  |    7 -
 .../wellformed/sanitize/feed_title_iframe.xml |    7 -
 .../wellformed/sanitize/feed_title_link.xml   |    7 -
 .../wellformed/sanitize/feed_title_meta.xml   |    7 -
 .../wellformed/sanitize/feed_title_object.xml |    7 -
 .../sanitize/feed_title_onabort.xml           |    7 -
 .../wellformed/sanitize/feed_title_onblur.xml |    7 -
 .../sanitize/feed_title_onchange.xml          |    7 -
 .../sanitize/feed_title_onclick.xml           |    7 -
 .../sanitize/feed_title_ondblclick.xml        |    7 -
 .../sanitize/feed_title_onerror.xml           |    7 -
 .../sanitize/feed_title_onfocus.xml           |    7 -
 .../sanitize/feed_title_onkeydown.xml         |    7 -
 .../sanitize/feed_title_onkeypress.xml        |    7 -
 .../sanitize/feed_title_onkeyup.xml           |    7 -
 .../wellformed/sanitize/feed_title_onload.xml |    7 -
 .../sanitize/feed_title_onmousedown.xml       |    7 -
 .../sanitize/feed_title_onmouseout.xml        |    7 -
 .../sanitize/feed_title_onmouseover.xml       |    7 -
 .../sanitize/feed_title_onmouseup.xml         |    7 -
 .../sanitize/feed_title_onreset.xml           |    7 -
 .../sanitize/feed_title_onresize.xml          |    7 -
 .../sanitize/feed_title_onsubmit.xml          |    7 -
 .../sanitize/feed_title_onunload.xml          |    7 -
 .../wellformed/sanitize/feed_title_script.xml |    7 -
 .../sanitize/feed_title_script_cdata.xml      |    7 -
 .../sanitize/feed_title_script_inline.xml     |    7 -
 .../wellformed/sanitize/feed_title_style.xml  |    7 -
 .../sanitize/feed_title_unacceptable_uri.xml  |    7 -
 .../wellformed/sanitize/item_body_applet.xml  |   11 -
 .../wellformed/sanitize/item_body_blink.xml   |   11 -
 .../wellformed/sanitize/item_body_embed.xml   |   11 -
 .../wellformed/sanitize/item_body_frame.xml   |   11 -
 .../wellformed/sanitize/item_body_iframe.xml  |   11 -
 .../wellformed/sanitize/item_body_link.xml    |   11 -
 .../wellformed/sanitize/item_body_meta.xml    |   11 -
 .../wellformed/sanitize/item_body_object.xml  |   11 -
 .../wellformed/sanitize/item_body_onabort.xml |   11 -
 .../wellformed/sanitize/item_body_onblur.xml  |   11 -
 .../sanitize/item_body_onchange.xml           |   11 -
 .../wellformed/sanitize/item_body_onclick.xml |   11 -
 .../sanitize/item_body_ondblclick.xml         |   11 -
 .../wellformed/sanitize/item_body_onerror.xml |   11 -
 .../wellformed/sanitize/item_body_onfocus.xml |   11 -
 .../sanitize/item_body_onkeydown.xml          |   11 -
 .../sanitize/item_body_onkeypress.xml         |   11 -
 .../wellformed/sanitize/item_body_onkeyup.xml |   11 -
 .../wellformed/sanitize/item_body_onload.xml  |   11 -
 .../sanitize/item_body_onmousedown.xml        |   11 -
 .../sanitize/item_body_onmouseout.xml         |   11 -
 .../sanitize/item_body_onmouseover.xml        |   11 -
 .../sanitize/item_body_onmouseup.xml          |   11 -
 .../wellformed/sanitize/item_body_onreset.xml |   11 -
 .../sanitize/item_body_onresize.xml           |   11 -
 .../sanitize/item_body_onsubmit.xml           |   11 -
 .../sanitize/item_body_onunload.xml           |   11 -
 .../wellformed/sanitize/item_body_script.xml  |   11 -
 .../sanitize/item_body_script_map_content.xml |   11 -
 .../wellformed/sanitize/item_body_style.xml   |   11 -
 .../sanitize/item_content_encoded_applet.xml  |   11 -
 .../sanitize/item_content_encoded_blink.xml   |   11 -
 .../sanitize/item_content_encoded_crazy.xml   |   77 -
 .../sanitize/item_content_encoded_embed.xml   |   11 -
 .../sanitize/item_content_encoded_frame.xml   |   11 -
 .../sanitize/item_content_encoded_iframe.xml  |   11 -
 .../sanitize/item_content_encoded_link.xml    |   11 -
 .../item_content_encoded_map_content.xml      |   11 -
 .../sanitize/item_content_encoded_meta.xml    |   11 -
 .../sanitize/item_content_encoded_object.xml  |   11 -
 .../sanitize/item_content_encoded_onabort.xml |   11 -
 .../sanitize/item_content_encoded_onblur.xml  |   11 -
 .../item_content_encoded_onchange.xml         |   11 -
 .../sanitize/item_content_encoded_onclick.xml |   11 -
 .../item_content_encoded_ondblclick.xml       |   11 -
 .../sanitize/item_content_encoded_onerror.xml |   11 -
 .../sanitize/item_content_encoded_onfocus.xml |   11 -
 .../item_content_encoded_onkeydown.xml        |   11 -
 .../item_content_encoded_onkeypress.xml       |   11 -
 .../sanitize/item_content_encoded_onkeyup.xml |   11 -
 .../sanitize/item_content_encoded_onload.xml  |   11 -
 .../item_content_encoded_onmousedown.xml      |   11 -
 .../item_content_encoded_onmouseout.xml       |   11 -
 .../item_content_encoded_onmouseover.xml      |   11 -
 .../item_content_encoded_onmouseup.xml        |   11 -
 .../sanitize/item_content_encoded_onreset.xml |   11 -
 .../item_content_encoded_onresize.xml         |   11 -
 .../item_content_encoded_onsubmit.xml         |   11 -
 .../item_content_encoded_onunload.xml         |   11 -
 .../sanitize/item_content_encoded_script.xml  |   11 -
 .../item_content_encoded_script_cdata.xml     |   11 -
 ...tem_content_encoded_script_map_content.xml |   11 -
 ...em_content_encoded_script_nested_cdata.xml |   11 -
 .../sanitize/item_content_encoded_style.xml   |   11 -
 .../sanitize/item_description_applet.xml      |   11 -
 .../sanitize/item_description_blink.xml       |   11 -
 .../sanitize/item_description_crazy.xml       |   81 -
 .../sanitize/item_description_embed.xml       |   11 -
 .../sanitize/item_description_frame.xml       |   11 -
 .../sanitize/item_description_iframe.xml      |   11 -
 .../sanitize/item_description_link.xml        |   11 -
 .../sanitize/item_description_meta.xml        |   11 -
 .../sanitize/item_description_object.xml      |   11 -
 .../sanitize/item_description_onabort.xml     |   11 -
 .../sanitize/item_description_onblur.xml      |   11 -
 .../sanitize/item_description_onchange.xml    |   11 -
 .../sanitize/item_description_onclick.xml     |   11 -
 .../sanitize/item_description_ondblclick.xml  |   11 -
 .../sanitize/item_description_onerror.xml     |   11 -
 .../sanitize/item_description_onfocus.xml     |   11 -
 .../sanitize/item_description_onkeydown.xml   |   11 -
 .../sanitize/item_description_onkeypress.xml  |   11 -
 .../sanitize/item_description_onkeyup.xml     |   11 -
 .../sanitize/item_description_onload.xml      |   11 -
 .../sanitize/item_description_onmousedown.xml |   11 -
 .../sanitize/item_description_onmouseout.xml  |   11 -
 .../sanitize/item_description_onmouseover.xml |   11 -
 .../sanitize/item_description_onmouseup.xml   |   11 -
 .../sanitize/item_description_onreset.xml     |   11 -
 .../sanitize/item_description_onresize.xml    |   11 -
 .../sanitize/item_description_onsubmit.xml    |   11 -
 .../sanitize/item_description_onunload.xml    |   11 -
 .../sanitize/item_description_script.xml      |   11 -
 .../item_description_script_cdata.xml         |   11 -
 .../item_description_script_map_summary.xml   |   11 -
 .../sanitize/item_description_style.xml       |   11 -
 .../sanitize/item_fullitem_applet.xml         |   11 -
 .../sanitize/item_fullitem_blink.xml          |   11 -
 .../sanitize/item_fullitem_crazy.xml          |   77 -
 .../sanitize/item_fullitem_embed.xml          |   11 -
 .../sanitize/item_fullitem_frame.xml          |   11 -
 .../sanitize/item_fullitem_iframe.xml         |   11 -
 .../sanitize/item_fullitem_link.xml           |   11 -
 .../sanitize/item_fullitem_meta.xml           |   11 -
 .../sanitize/item_fullitem_object.xml         |   11 -
 .../sanitize/item_fullitem_onabort.xml        |   11 -
 .../sanitize/item_fullitem_onblur.xml         |   11 -
 .../sanitize/item_fullitem_onchange.xml       |   11 -
 .../sanitize/item_fullitem_onclick.xml        |   11 -
 .../sanitize/item_fullitem_ondblclick.xml     |   11 -
 .../sanitize/item_fullitem_onerror.xml        |   11 -
 .../sanitize/item_fullitem_onfocus.xml        |   11 -
 .../sanitize/item_fullitem_onkeydown.xml      |   11 -
 .../sanitize/item_fullitem_onkeypress.xml     |   11 -
 .../sanitize/item_fullitem_onkeyup.xml        |   11 -
 .../sanitize/item_fullitem_onload.xml         |   11 -
 .../sanitize/item_fullitem_onmousedown.xml    |   11 -
 .../sanitize/item_fullitem_onmouseout.xml     |   11 -
 .../sanitize/item_fullitem_onmouseover.xml    |   11 -
 .../sanitize/item_fullitem_onmouseup.xml      |   11 -
 .../sanitize/item_fullitem_onreset.xml        |   11 -
 .../sanitize/item_fullitem_onresize.xml       |   11 -
 .../sanitize/item_fullitem_onsubmit.xml       |   11 -
 .../sanitize/item_fullitem_onunload.xml       |   11 -
 .../sanitize/item_fullitem_script.xml         |   11 -
 .../sanitize/item_fullitem_script_cdata.xml   |   11 -
 .../item_fullitem_script_map_summary.xml      |   11 -
 .../sanitize/item_fullitem_style.xml          |   11 -
 .../sanitize/item_xhtml_body_applet.xml       |   11 -
 .../sanitize/item_xhtml_body_blink.xml        |   11 -
 .../sanitize/item_xhtml_body_embed.xml        |   11 -
 .../sanitize/item_xhtml_body_frame.xml        |   11 -
 .../sanitize/item_xhtml_body_iframe.xml       |   11 -
 .../sanitize/item_xhtml_body_link.xml         |   11 -
 .../sanitize/item_xhtml_body_meta.xml         |   11 -
 .../sanitize/item_xhtml_body_object.xml       |   11 -
 .../sanitize/item_xhtml_body_onabort.xml      |   11 -
 .../sanitize/item_xhtml_body_onblur.xml       |   11 -
 .../sanitize/item_xhtml_body_onchange.xml     |   11 -
 .../sanitize/item_xhtml_body_onclick.xml      |   11 -
 .../sanitize/item_xhtml_body_ondblclick.xml   |   11 -
 .../sanitize/item_xhtml_body_onerror.xml      |   11 -
 .../sanitize/item_xhtml_body_onfocus.xml      |   11 -
 .../sanitize/item_xhtml_body_onkeydown.xml    |   11 -
 .../sanitize/item_xhtml_body_onkeypress.xml   |   11 -
 .../sanitize/item_xhtml_body_onkeyup.xml      |   11 -
 .../sanitize/item_xhtml_body_onload.xml       |   11 -
 .../sanitize/item_xhtml_body_onmousedown.xml  |   11 -
 .../sanitize/item_xhtml_body_onmouseout.xml   |   11 -
 .../sanitize/item_xhtml_body_onmouseover.xml  |   11 -
 .../sanitize/item_xhtml_body_onmouseup.xml    |   11 -
 .../sanitize/item_xhtml_body_onreset.xml      |   11 -
 .../sanitize/item_xhtml_body_onresize.xml     |   11 -
 .../sanitize/item_xhtml_body_onsubmit.xml     |   11 -
 .../sanitize/item_xhtml_body_onunload.xml     |   11 -
 .../sanitize/item_xhtml_body_script.xml       |   11 -
 .../item_xhtml_body_script_map_content.xml    |   11 -
 .../sanitize/item_xhtml_body_style.xml        |   11 -
 ..._atom_feed_that_needs_css_sanitisation.xml |  528 ---
 .../style_background_repeat_repeat_x.xml      |   11 -
 .../sanitize/style_background_url.xml         |   11 -
 .../sanitize/style_background_yellow.xml      |   11 -
 .../wellformed/sanitize/style_border_0.xml    |   11 -
 .../style_border_1px_solid_rgb_0_0_0_.xml     |   11 -
 .../sanitize/style_border_3px_solid_ccc.xml   |   11 -
 .../sanitize/style_border_bottom_0pt.xml      |   11 -
 .../sanitize/style_border_bottom_dashed.xml   |   11 -
 .../sanitize/style_border_bottom_dotted.xml   |   11 -
 .../style_border_collapse_collapse.xml        |   11 -
 .../sanitize/style_border_left_0pt.xml        |   11 -
 .../sanitize/style_border_medium_none_.xml    |   11 -
 .../sanitize/style_border_none_important.xml  |   11 -
 .../sanitize/style_border_right_0pt.xml       |   11 -
 .../style_border_solid_2px_000000.xml         |   11 -
 .../sanitize/style_border_top_0pt.xml         |   11 -
 .../wellformed/sanitize/style_clear_both.xml  |   11 -
 .../sanitize/style_color_000080.xml           |   11 -
 .../wellformed/sanitize/style_color_008.xml   |   11 -
 .../sanitize/style_color_999999.xml           |   11 -
 .../wellformed/sanitize/style_color_blue.xml  |   11 -
 .../sanitize/style_color_maroon.xml           |   11 -
 .../wellformed/sanitize/style_color_red.xml   |   11 -
 .../sanitize/style_color_rgb_0_128_0_.xml     |   11 -
 .../wellformed/sanitize/style_color_teal.xml  |   11 -
 .../sanitize/style_cursor_pointer.xml         |   11 -
 .../sanitize/style_display_block.xml          |   11 -
 .../wellformed/sanitize/style_float_left.xml  |   11 -
 .../wellformed/sanitize/style_float_right.xml |   11 -
 .../style_font_family__comic_sans_ms.xml      |   11 -
 .../style_font_family_arial_sans_serif.xml    |   11 -
 .../style_font_family_lucida_console_.xml     |   11 -
 .../sanitize/style_font_family_symbol.xml     |   11 -
 .../sanitize/style_font_size_0_9em.xml        |   11 -
 .../sanitize/style_font_size_10pt.xml         |   11 -
 .../sanitize/style_font_size_10px.xml         |   11 -
 .../sanitize/style_font_size_smaller.xml      |   11 -
 .../sanitize/style_font_style_italic.xml      |   11 -
 .../sanitize/style_font_weight_bold.xml       |   11 -
 .../sanitize/style_height_100px.xml           |   11 -
 .../wellformed/sanitize/style_height_2px.xml  |   11 -
 .../sanitize/style_letter_spacing_1px.xml     |   11 -
 .../sanitize/style_line_height_normal.xml     |   11 -
 .../wellformed/sanitize/style_margin_0.xml    |   11 -
 .../sanitize/style_margin_0_15px_0_0.xml      |   11 -
 .../sanitize/style_margin_0px_important.xml   |   11 -
 .../wellformed/sanitize/style_margin_5px.xml  |   11 -
 .../sanitize/style_margin_99999em.xml         |   11 -
 .../sanitize/style_margin_bottom_0pt.xml      |   11 -
 .../sanitize/style_margin_bottom_10px.xml     |   11 -
 .../sanitize/style_margin_left_5px.xml        |   11 -
 .../sanitize/style_margin_right_0px.xml       |   11 -
 .../sanitize/style_margin_top_0in.xml         |   11 -
 .../sanitize/style_margin_top_10px.xml        |   11 -
 .../style_moz_background_clip_initial.xml     |   11 -
 .../sanitize/style_mso_ansi_language_nl.xml   |   11 -
 .../style_mso_bidi_font_weight_normal.xml     |   11 -
 .../sanitize/style_mso_highlight_yellow.xml   |   11 -
 .../style_mso_layout_grid_align_none.xml      |   11 -
 .../style_mso_list_l0_level1_lfo1.xml         |   11 -
 .../sanitize/style_mso_no_proof_yes.xml       |   11 -
 .../sanitize/style_mso_spacerun_yes.xml       |   11 -
 .../sanitize/style_mso_tab_count_3.xml        |   11 -
 .../sanitize/style_overflow_auto.xml          |   11 -
 .../wellformed/sanitize/style_padding_0.xml   |   11 -
 .../sanitize/style_padding_0_0_12px_12px.xml  |   11 -
 .../wellformed/sanitize/style_padding_2ex.xml |   11 -
 .../sanitize/style_padding_99999em.xml        |   11 -
 .../sanitize/style_padding_left_4px.xml       |   11 -
 .../sanitize/style_padding_right_0in.xml      |   11 -
 .../sanitize/style_position_absolute.xml      |   11 -
 .../sanitize/style_tab_stops_list_5in.xml     |   11 -
 .../sanitize/style_text_align_center.xml      |   11 -
 .../sanitize/style_text_align_left.xml        |   11 -
 .../sanitize/style_text_align_right.xml       |   11 -
 .../style_text_decoration_underline.xml       |   11 -
 .../sanitize/style_text_indent_0_5in.xml      |   11 -
 .../sanitize/style_vertical_align_bottom.xml  |   11 -
 .../sanitize/style_vertical_align_top.xml     |   11 -
 .../sanitize/style_white_space_nowrap.xml     |   11 -
 .../sanitize/style_white_space_top.xml        |   11 -
 .../wellformed/sanitize/style_width_300px.xml |   11 -
 .../xml_declaration_unexpected_character.xml  |    7 -
 .../sanitize/xml_malicious_comment.xml        |    7 -
 .../sanitize/xml_unclosed_comment.xml         |    7 -
 .../wellformed/sgml/charref_uppercase_x.xml   |    9 -
 .../tests/wellformed/xml/empty_xmlns_uri.xml  |    9 -
 .../tests/wellformed/xml/escaped_apos.xml     |   10 -
 .../wellformed/xml/xlink_ns_no_prefix.xml     |   10 -
 lib/feedparser/urls.py                        |  131 +
 lib/feedparser/util.py                        |  144 +
 2389 files changed, 4755 insertions(+), 30610 deletions(-)
 delete mode 100644 lib/feedcache/__init__.py
 delete mode 100644 lib/feedcache/cache.py
 delete mode 100644 lib/feedcache/cachestoragelock.py
 delete mode 100644 lib/feedcache/example.py
 delete mode 100644 lib/feedcache/example_threads.py
 delete mode 100644 lib/feedcache/test_cache.py
 delete mode 100644 lib/feedcache/test_cachestoragelock.py
 delete mode 100644 lib/feedcache/test_server.py
 delete mode 100644 lib/feedcache/test_shovefilesystem.py
 create mode 100644 lib/feedparser/api.py
 create mode 100644 lib/feedparser/datetimes/__init__.py
 create mode 100644 lib/feedparser/datetimes/asctime.py
 create mode 100644 lib/feedparser/datetimes/greek.py
 create mode 100644 lib/feedparser/datetimes/hungarian.py
 create mode 100644 lib/feedparser/datetimes/iso8601.py
 create mode 100644 lib/feedparser/datetimes/korean.py
 create mode 100644 lib/feedparser/datetimes/perforce.py
 create mode 100644 lib/feedparser/datetimes/rfc822.py
 create mode 100644 lib/feedparser/datetimes/w3dtf.py
 create mode 100644 lib/feedparser/encodings.py
 create mode 100644 lib/feedparser/exceptions.py
 delete mode 100644 lib/feedparser/feedparser.py
 delete mode 100644 lib/feedparser/feedparsertest.py
 create mode 100644 lib/feedparser/html.py
 create mode 100644 lib/feedparser/http.py
 create mode 100644 lib/feedparser/mixin.py
 create mode 100644 lib/feedparser/namespaces/__init__.py
 create mode 100644 lib/feedparser/namespaces/_base.py
 create mode 100644 lib/feedparser/namespaces/admin.py
 create mode 100644 lib/feedparser/namespaces/cc.py
 create mode 100644 lib/feedparser/namespaces/dc.py
 create mode 100644 lib/feedparser/namespaces/georss.py
 create mode 100644 lib/feedparser/namespaces/itunes.py
 create mode 100644 lib/feedparser/namespaces/mediarss.py
 create mode 100644 lib/feedparser/namespaces/psc.py
 create mode 100644 lib/feedparser/parsers/__init__.py
 create mode 100644 lib/feedparser/parsers/loose.py
 create mode 100644 lib/feedparser/parsers/strict.py
 create mode 100644 lib/feedparser/sanitizer.py
 create mode 100644 lib/feedparser/sgml.py
 delete mode 100644 lib/feedparser/sgmllib.py
 delete mode 100644 lib/feedparser/tests/compression/deflate-no-headers.z
 delete mode 100644 lib/feedparser/tests/compression/deflate-not-compressed.z
 delete mode 100644 lib/feedparser/tests/compression/deflate.z
 delete mode 100644 lib/feedparser/tests/compression/gzip-not-compressed.gz
 delete mode 100644 lib/feedparser/tests/compression/gzip-struct-error.gz
 delete mode 100644 lib/feedparser/tests/compression/gzip.gz
 delete mode 100644 lib/feedparser/tests/compression/sample.xml
 delete mode 100644 lib/feedparser/tests/encoding/big5.xml
 delete mode 100644 lib/feedparser/tests/encoding/bozo_bogus_encoding.xml
 delete mode 100644 lib/feedparser/tests/encoding/bozo_double-encoded-html.xml
 delete mode 100644 lib/feedparser/tests/encoding/bozo_encoding_mismatch_crash.xml
 delete mode 100644 lib/feedparser/tests/encoding/bozo_http_i18n.xml
 delete mode 100644 lib/feedparser/tests/encoding/bozo_http_text_plain.xml
 delete mode 100644 lib/feedparser/tests/encoding/bozo_http_text_plain_charset.xml
 delete mode 100644 lib/feedparser/tests/encoding/bozo_invalid-bytes-with-bom.xml
 delete mode 100644 lib/feedparser/tests/encoding/bozo_linenoise.xml
 delete mode 100644 lib/feedparser/tests/encoding/csucs4.xml
 delete mode 100644 lib/feedparser/tests/encoding/csunicode.xml
 delete mode 100644 lib/feedparser/tests/encoding/demoronize-1.xml
 delete mode 100644 lib/feedparser/tests/encoding/demoronize-2.xml
 delete mode 100644 lib/feedparser/tests/encoding/demoronize-3.xml
 delete mode 100644 lib/feedparser/tests/encoding/double-encoded-html.xml
 delete mode 100644 lib/feedparser/tests/encoding/encoding_attribute_crash.xml
 delete mode 100644 lib/feedparser/tests/encoding/encoding_attribute_crash_2.xml
 delete mode 100644 lib/feedparser/tests/encoding/euc-kr-attribute.xml
 delete mode 100644 lib/feedparser/tests/encoding/euc-kr-item.xml
 delete mode 100644 lib/feedparser/tests/encoding/euc-kr.xml
 delete mode 100644 lib/feedparser/tests/encoding/http_application_atom_xml_charset.xml
 delete mode 100644 lib/feedparser/tests/encoding/http_application_atom_xml_charset_overrides_encoding.xml
 delete mode 100644 lib/feedparser/tests/encoding/http_application_atom_xml_default.xml
 delete mode 100644 lib/feedparser/tests/encoding/http_application_atom_xml_encoding.xml
 delete mode 100644 lib/feedparser/tests/encoding/http_application_atom_xml_gb2312_charset.xml
 delete mode 100644 lib/feedparser/tests/encoding/http_application_atom_xml_gb2312_charset_overrides_encoding.xml
 delete mode 100644 lib/feedparser/tests/encoding/http_application_atom_xml_gb2312_encoding.xml
 delete mode 100644 lib/feedparser/tests/encoding/http_application_rss_xml_charset.xml
 delete mode 100644 lib/feedparser/tests/encoding/http_application_rss_xml_charset_overrides_encoding.xml
 delete mode 100644 lib/feedparser/tests/encoding/http_application_rss_xml_default.xml
 delete mode 100644 lib/feedparser/tests/encoding/http_application_rss_xml_encoding.xml
 delete mode 100644 lib/feedparser/tests/encoding/http_application_xml_charset.xml
 delete mode 100644 lib/feedparser/tests/encoding/http_application_xml_charset_overrides_encoding.xml
 delete mode 100644 lib/feedparser/tests/encoding/http_application_xml_default.xml
 delete mode 100644 lib/feedparser/tests/encoding/http_application_xml_dtd_charset.xml
 delete mode 100644 lib/feedparser/tests/encoding/http_application_xml_dtd_charset_overrides_encoding.xml
 delete mode 100644 lib/feedparser/tests/encoding/http_application_xml_dtd_default.xml
 delete mode 100644 lib/feedparser/tests/encoding/http_application_xml_dtd_encoding.xml
 delete mode 100644 lib/feedparser/tests/encoding/http_application_xml_encoding.xml
 delete mode 100644 lib/feedparser/tests/encoding/http_application_xml_epe_charset.xml
 delete mode 100644 lib/feedparser/tests/encoding/http_application_xml_epe_charset_overrides_encoding.xml
 delete mode 100644 lib/feedparser/tests/encoding/http_application_xml_epe_default.xml
 delete mode 100644 lib/feedparser/tests/encoding/http_application_xml_epe_encoding.xml
 delete mode 100644 lib/feedparser/tests/encoding/http_encoding_attribute_crash.xml
 delete mode 100644 lib/feedparser/tests/encoding/http_i18n.xml
 delete mode 100644 lib/feedparser/tests/encoding/http_text_atom_xml_charset.xml
 delete mode 100644 lib/feedparser/tests/encoding/http_text_atom_xml_charset_overrides_encoding.xml
 delete mode 100644 lib/feedparser/tests/encoding/http_text_atom_xml_default.xml
 delete mode 100644 lib/feedparser/tests/encoding/http_text_atom_xml_encoding.xml
 delete mode 100644 lib/feedparser/tests/encoding/http_text_rss_xml_charset.xml
 delete mode 100644 lib/feedparser/tests/encoding/http_text_rss_xml_charset_overrides_encoding.xml
 delete mode 100644 lib/feedparser/tests/encoding/http_text_rss_xml_default.xml
 delete mode 100644 lib/feedparser/tests/encoding/http_text_rss_xml_encoding.xml
 delete mode 100644 lib/feedparser/tests/encoding/http_text_xml_bogus_charset.xml
 delete mode 100644 lib/feedparser/tests/encoding/http_text_xml_bogus_param.xml
 delete mode 100644 lib/feedparser/tests/encoding/http_text_xml_charset.xml
 delete mode 100644 lib/feedparser/tests/encoding/http_text_xml_charset_2.xml
 delete mode 100644 lib/feedparser/tests/encoding/http_text_xml_charset_overrides_encoding.xml
 delete mode 100644 lib/feedparser/tests/encoding/http_text_xml_charset_overrides_encoding_2.xml
 delete mode 100644 lib/feedparser/tests/encoding/http_text_xml_default.xml
 delete mode 100644 lib/feedparser/tests/encoding/http_text_xml_epe_charset.xml
 delete mode 100644 lib/feedparser/tests/encoding/http_text_xml_epe_charset_overrides_encoding.xml
 delete mode 100644 lib/feedparser/tests/encoding/http_text_xml_epe_default.xml
 delete mode 100644 lib/feedparser/tests/encoding/http_text_xml_epe_encoding.xml
 delete mode 100644 lib/feedparser/tests/encoding/http_text_xml_qs.xml
 delete mode 100644 lib/feedparser/tests/encoding/iso-10646-ucs-2.xml
 delete mode 100644 lib/feedparser/tests/encoding/iso-10646-ucs-4.xml
 delete mode 100644 lib/feedparser/tests/encoding/no_content_type_default.xml
 delete mode 100644 lib/feedparser/tests/encoding/no_content_type_encoding.xml
 delete mode 100644 lib/feedparser/tests/encoding/u16.xml
 delete mode 100644 lib/feedparser/tests/encoding/ucs-2.xml
 delete mode 100644 lib/feedparser/tests/encoding/ucs-4.xml
 delete mode 100644 lib/feedparser/tests/encoding/utf-16be-autodetect.xml
 delete mode 100644 lib/feedparser/tests/encoding/utf-16be-bom.xml
 delete mode 100644 lib/feedparser/tests/encoding/utf-16be.xml
 delete mode 100644 lib/feedparser/tests/encoding/utf-16le-autodetect.xml
 delete mode 100644 lib/feedparser/tests/encoding/utf-16le-bom.xml
 delete mode 100644 lib/feedparser/tests/encoding/utf-16le.xml
 delete mode 100644 lib/feedparser/tests/encoding/utf-32be-autodetect.xml
 delete mode 100644 lib/feedparser/tests/encoding/utf-32be-bom.xml
 delete mode 100644 lib/feedparser/tests/encoding/utf-32be.xml
 delete mode 100644 lib/feedparser/tests/encoding/utf-32le-autodetect.xml
 delete mode 100644 lib/feedparser/tests/encoding/utf-32le-bom.xml
 delete mode 100644 lib/feedparser/tests/encoding/utf-32le.xml
 delete mode 100644 lib/feedparser/tests/encoding/utf-8-bom.xml
 delete mode 100644 lib/feedparser/tests/encoding/utf16.xml
 delete mode 100644 lib/feedparser/tests/encoding/utf_16.xml
 delete mode 100644 lib/feedparser/tests/encoding/utf_32.xml
 delete mode 100644 lib/feedparser/tests/encoding/x80_437.xml
 delete mode 100644 lib/feedparser/tests/encoding/x80_850.xml
 delete mode 100644 lib/feedparser/tests/encoding/x80_852.xml
 delete mode 100644 lib/feedparser/tests/encoding/x80_855.xml
 delete mode 100644 lib/feedparser/tests/encoding/x80_857.xml
 delete mode 100644 lib/feedparser/tests/encoding/x80_860.xml
 delete mode 100644 lib/feedparser/tests/encoding/x80_861.xml
 delete mode 100644 lib/feedparser/tests/encoding/x80_862.xml
 delete mode 100644 lib/feedparser/tests/encoding/x80_863.xml
 delete mode 100644 lib/feedparser/tests/encoding/x80_865.xml
 delete mode 100644 lib/feedparser/tests/encoding/x80_866.xml
 delete mode 100644 lib/feedparser/tests/encoding/x80_cp037.xml
 delete mode 100644 lib/feedparser/tests/encoding/x80_cp1125.xml
 delete mode 100644 lib/feedparser/tests/encoding/x80_cp1250.xml
 delete mode 100644 lib/feedparser/tests/encoding/x80_cp1251.xml
 delete mode 100644 lib/feedparser/tests/encoding/x80_cp1252.xml
 delete mode 100644 lib/feedparser/tests/encoding/x80_cp1253.xml
 delete mode 100644 lib/feedparser/tests/encoding/x80_cp1254.xml
 delete mode 100644 lib/feedparser/tests/encoding/x80_cp1255.xml
 delete mode 100644 lib/feedparser/tests/encoding/x80_cp1256.xml
 delete mode 100644 lib/feedparser/tests/encoding/x80_cp1257.xml
 delete mode 100644 lib/feedparser/tests/encoding/x80_cp1258.xml
 delete mode 100644 lib/feedparser/tests/encoding/x80_cp437.xml
 delete mode 100644 lib/feedparser/tests/encoding/x80_cp500.xml
 delete mode 100644 lib/feedparser/tests/encoding/x80_cp737.xml
 delete mode 100644 lib/feedparser/tests/encoding/x80_cp775.xml
 delete mode 100644 lib/feedparser/tests/encoding/x80_cp850.xml
 delete mode 100644 lib/feedparser/tests/encoding/x80_cp852.xml
 delete mode 100644 lib/feedparser/tests/encoding/x80_cp855.xml
 delete mode 100644 lib/feedparser/tests/encoding/x80_cp856.xml
 delete mode 100644 lib/feedparser/tests/encoding/x80_cp857.xml
 delete mode 100644 lib/feedparser/tests/encoding/x80_cp860.xml
 delete mode 100644 lib/feedparser/tests/encoding/x80_cp861.xml
 delete mode 100644 lib/feedparser/tests/encoding/x80_cp862.xml
 delete mode 100644 lib/feedparser/tests/encoding/x80_cp863.xml
 delete mode 100644 lib/feedparser/tests/encoding/x80_cp864.xml
 delete mode 100644 lib/feedparser/tests/encoding/x80_cp865.xml
 delete mode 100644 lib/feedparser/tests/encoding/x80_cp866.xml
 delete mode 100644 lib/feedparser/tests/encoding/x80_cp874.xml
 delete mode 100644 lib/feedparser/tests/encoding/x80_cp875.xml
 delete mode 100644 lib/feedparser/tests/encoding/x80_cp_is.xml
 delete mode 100644 lib/feedparser/tests/encoding/x80_csibm037.xml
 delete mode 100644 lib/feedparser/tests/encoding/x80_csibm500.xml
 delete mode 100644 lib/feedparser/tests/encoding/x80_csibm855.xml
 delete mode 100644 lib/feedparser/tests/encoding/x80_csibm857.xml
 delete mode 100644 lib/feedparser/tests/encoding/x80_csibm860.xml
 delete mode 100644 lib/feedparser/tests/encoding/x80_csibm861.xml
 delete mode 100644 lib/feedparser/tests/encoding/x80_csibm863.xml
 delete mode 100644 lib/feedparser/tests/encoding/x80_csibm864.xml
 delete mode 100644 lib/feedparser/tests/encoding/x80_csibm865.xml
 delete mode 100644 lib/feedparser/tests/encoding/x80_csibm866.xml
 delete mode 100644 lib/feedparser/tests/encoding/x80_cskoi8r.xml
 delete mode 100644 lib/feedparser/tests/encoding/x80_csmacintosh.xml
 delete mode 100644 lib/feedparser/tests/encoding/x80_cspc775baltic.xml
 delete mode 100644 lib/feedparser/tests/encoding/x80_cspc850multilingual.xml
 delete mode 100644 lib/feedparser/tests/encoding/x80_cspc862latinhebrew.xml
 delete mode 100644 lib/feedparser/tests/encoding/x80_cspc8codepage437.xml
 delete mode 100644 lib/feedparser/tests/encoding/x80_cspcp852.xml
 delete mode 100644 lib/feedparser/tests/encoding/x80_dbcs.xml
 delete mode 100644 lib/feedparser/tests/encoding/x80_ebcdic-cp-be.xml
 delete mode 100644 lib/feedparser/tests/encoding/x80_ebcdic-cp-ca.xml
 delete mode 100644 lib/feedparser/tests/encoding/x80_ebcdic-cp-ch.xml
 delete mode 100644 lib/feedparser/tests/encoding/x80_ebcdic-cp-nl.xml
 delete mode 100644 lib/feedparser/tests/encoding/x80_ebcdic-cp-us.xml
 delete mode 100644 lib/feedparser/tests/encoding/x80_ebcdic-cp-wt.xml
 delete mode 100644 lib/feedparser/tests/encoding/x80_ebcdic_cp_be.xml
 delete mode 100644 lib/feedparser/tests/encoding/x80_ebcdic_cp_ca.xml
 delete mode 100644 lib/feedparser/tests/encoding/x80_ebcdic_cp_ch.xml
 delete mode 100644 lib/feedparser/tests/encoding/x80_ebcdic_cp_nl.xml
 delete mode 100644 lib/feedparser/tests/encoding/x80_ebcdic_cp_us.xml
 delete mode 100644 lib/feedparser/tests/encoding/x80_ebcdic_cp_wt.xml
 delete mode 100644 lib/feedparser/tests/encoding/x80_ibm037.xml
 delete mode 100644 lib/feedparser/tests/encoding/x80_ibm039.xml
 delete mode 100644 lib/feedparser/tests/encoding/x80_ibm1140.xml
 delete mode 100644 lib/feedparser/tests/encoding/x80_ibm437.xml
 delete mode 100644 lib/feedparser/tests/encoding/x80_ibm500.xml
 delete mode 100644 lib/feedparser/tests/encoding/x80_ibm775.xml
 delete mode 100644 lib/feedparser/tests/encoding/x80_ibm850.xml
 delete mode 100644 lib/feedparser/tests/encoding/x80_ibm852.xml
 delete mode 100644 lib/feedparser/tests/encoding/x80_ibm855.xml
 delete mode 100644 lib/feedparser/tests/encoding/x80_ibm857.xml
 delete mode 100644 lib/feedparser/tests/encoding/x80_ibm860.xml
 delete mode 100644 lib/feedparser/tests/encoding/x80_ibm861.xml
 delete mode 100644 lib/feedparser/tests/encoding/x80_ibm862.xml
 delete mode 100644 lib/feedparser/tests/encoding/x80_ibm863.xml
 delete mode 100644 lib/feedparser/tests/encoding/x80_ibm864.xml
 delete mode 100644 lib/feedparser/tests/encoding/x80_ibm865.xml
 delete mode 100644 lib/feedparser/tests/encoding/x80_ibm866.xml
 delete mode 100644 lib/feedparser/tests/encoding/x80_koi8-r.xml
 delete mode 100644 lib/feedparser/tests/encoding/x80_koi8-t.xml
 delete mode 100644 lib/feedparser/tests/encoding/x80_koi8-u.xml
 delete mode 100644 lib/feedparser/tests/encoding/x80_mac-cyrillic.xml
 delete mode 100644 lib/feedparser/tests/encoding/x80_mac.xml
 delete mode 100644 lib/feedparser/tests/encoding/x80_maccentraleurope.xml
 delete mode 100644 lib/feedparser/tests/encoding/x80_maccyrillic.xml
 delete mode 100644 lib/feedparser/tests/encoding/x80_macgreek.xml
 delete mode 100644 lib/feedparser/tests/encoding/x80_maciceland.xml
 delete mode 100644 lib/feedparser/tests/encoding/x80_macintosh.xml
 delete mode 100644 lib/feedparser/tests/encoding/x80_maclatin2.xml
 delete mode 100644 lib/feedparser/tests/encoding/x80_macroman.xml
 delete mode 100644 lib/feedparser/tests/encoding/x80_macturkish.xml
 delete mode 100644 lib/feedparser/tests/encoding/x80_ms-ansi.xml
 delete mode 100644 lib/feedparser/tests/encoding/x80_ms-arab.xml
 delete mode 100644 lib/feedparser/tests/encoding/x80_ms-cyrl.xml
 delete mode 100644 lib/feedparser/tests/encoding/x80_ms-ee.xml
 delete mode 100644 lib/feedparser/tests/encoding/x80_ms-greek.xml
 delete mode 100644 lib/feedparser/tests/encoding/x80_ms-hebr.xml
 delete mode 100644 lib/feedparser/tests/encoding/x80_ms-turk.xml
 delete mode 100644 lib/feedparser/tests/encoding/x80_tcvn-5712.xml
 delete mode 100644 lib/feedparser/tests/encoding/x80_tcvn.xml
 delete mode 100644 lib/feedparser/tests/encoding/x80_tcvn5712-1.xml
 delete mode 100644 lib/feedparser/tests/encoding/x80_viscii.xml
 delete mode 100644 lib/feedparser/tests/encoding/x80_winbaltrim.xml
 delete mode 100644 lib/feedparser/tests/encoding/x80_windows-1250.xml
 delete mode 100644 lib/feedparser/tests/encoding/x80_windows-1251.xml
 delete mode 100644 lib/feedparser/tests/encoding/x80_windows-1252.xml
 delete mode 100644 lib/feedparser/tests/encoding/x80_windows-1253.xml
 delete mode 100644 lib/feedparser/tests/encoding/x80_windows-1254.xml
 delete mode 100644 lib/feedparser/tests/encoding/x80_windows-1255.xml
 delete mode 100644 lib/feedparser/tests/encoding/x80_windows-1256.xml
 delete mode 100644 lib/feedparser/tests/encoding/x80_windows-1257.xml
 delete mode 100644 lib/feedparser/tests/encoding/x80_windows-1258.xml
 delete mode 100644 lib/feedparser/tests/encoding/x80_windows_1250.xml
 delete mode 100644 lib/feedparser/tests/encoding/x80_windows_1251.xml
 delete mode 100644 lib/feedparser/tests/encoding/x80_windows_1252.xml
 delete mode 100644 lib/feedparser/tests/encoding/x80_windows_1253.xml
 delete mode 100644 lib/feedparser/tests/encoding/x80_windows_1254.xml
 delete mode 100644 lib/feedparser/tests/encoding/x80_windows_1255.xml
 delete mode 100644 lib/feedparser/tests/encoding/x80_windows_1256.xml
 delete mode 100644 lib/feedparser/tests/encoding/x80_windows_1257.xml
 delete mode 100644 lib/feedparser/tests/encoding/x80_windows_1258.xml
 delete mode 100644 lib/feedparser/tests/entities/160.xml
 delete mode 100644 lib/feedparser/tests/entities/732.xml
 delete mode 100644 lib/feedparser/tests/entities/8216.xml
 delete mode 100644 lib/feedparser/tests/entities/8217.xml
 delete mode 100644 lib/feedparser/tests/entities/8220.xml
 delete mode 100644 lib/feedparser/tests/entities/8221.xml
 delete mode 100644 lib/feedparser/tests/entities/9830.xml
 delete mode 100644 lib/feedparser/tests/entities/aacute.xml
 delete mode 100644 lib/feedparser/tests/entities/acirc.xml
 delete mode 100644 lib/feedparser/tests/entities/acute.xml
 delete mode 100644 lib/feedparser/tests/entities/aelig.xml
 delete mode 100644 lib/feedparser/tests/entities/agrave.xml
 delete mode 100644 lib/feedparser/tests/entities/alefsym.xml
 delete mode 100644 lib/feedparser/tests/entities/alpha.xml
 delete mode 100644 lib/feedparser/tests/entities/and.xml
 delete mode 100644 lib/feedparser/tests/entities/ang.xml
 delete mode 100644 lib/feedparser/tests/entities/aring.xml
 delete mode 100644 lib/feedparser/tests/entities/asymp.xml
 delete mode 100644 lib/feedparser/tests/entities/atilde.xml
 delete mode 100644 lib/feedparser/tests/entities/attr_amp.xml
 delete mode 100644 lib/feedparser/tests/entities/auml.xml
 delete mode 100644 lib/feedparser/tests/entities/bdquo.xml
 delete mode 100644 lib/feedparser/tests/entities/beta.xml
 delete mode 100644 lib/feedparser/tests/entities/brvbar.xml
 delete mode 100644 lib/feedparser/tests/entities/bull.xml
 delete mode 100644 lib/feedparser/tests/entities/cap.xml
 delete mode 100644 lib/feedparser/tests/entities/ccedil.xml
 delete mode 100644 lib/feedparser/tests/entities/cedil.xml
 delete mode 100644 lib/feedparser/tests/entities/cent.xml
 delete mode 100644 lib/feedparser/tests/entities/chi.xml
 delete mode 100644 lib/feedparser/tests/entities/circ.xml
 delete mode 100644 lib/feedparser/tests/entities/clubs.xml
 delete mode 100644 lib/feedparser/tests/entities/cong.xml
 delete mode 100644 lib/feedparser/tests/entities/copy.xml
 delete mode 100644 lib/feedparser/tests/entities/crarr.xml
 delete mode 100644 lib/feedparser/tests/entities/cup.xml
 delete mode 100644 lib/feedparser/tests/entities/curren.xml
 delete mode 100644 lib/feedparser/tests/entities/dagger.xml
 delete mode 100644 lib/feedparser/tests/entities/darr.xml
 delete mode 100644 lib/feedparser/tests/entities/deg.xml
 delete mode 100644 lib/feedparser/tests/entities/delta.xml
 delete mode 100644 lib/feedparser/tests/entities/diams.xml
 delete mode 100644 lib/feedparser/tests/entities/divide.xml
 delete mode 100644 lib/feedparser/tests/entities/doesnotexist.xml
 delete mode 100644 lib/feedparser/tests/entities/eacute.xml
 delete mode 100644 lib/feedparser/tests/entities/ecirc.xml
 delete mode 100644 lib/feedparser/tests/entities/egrave.xml
 delete mode 100644 lib/feedparser/tests/entities/empty.xml
 delete mode 100644 lib/feedparser/tests/entities/emsp.xml
 delete mode 100644 lib/feedparser/tests/entities/ensp.xml
 delete mode 100644 lib/feedparser/tests/entities/epsilon.xml
 delete mode 100644 lib/feedparser/tests/entities/equiv.xml
 delete mode 100644 lib/feedparser/tests/entities/eta.xml
 delete mode 100644 lib/feedparser/tests/entities/eth.xml
 delete mode 100644 lib/feedparser/tests/entities/euml.xml
 delete mode 100644 lib/feedparser/tests/entities/euro.xml
 delete mode 100644 lib/feedparser/tests/entities/exist.xml
 delete mode 100644 lib/feedparser/tests/entities/fnof.xml
 delete mode 100644 lib/feedparser/tests/entities/forall.xml
 delete mode 100644 lib/feedparser/tests/entities/frac12.xml
 delete mode 100644 lib/feedparser/tests/entities/frac14.xml
 delete mode 100644 lib/feedparser/tests/entities/frac34.xml
 delete mode 100644 lib/feedparser/tests/entities/frasl.xml
 delete mode 100644 lib/feedparser/tests/entities/gamma.xml
 delete mode 100644 lib/feedparser/tests/entities/ge.xml
 delete mode 100644 lib/feedparser/tests/entities/hArr.xml
 delete mode 100644 lib/feedparser/tests/entities/hearts.xml
 delete mode 100644 lib/feedparser/tests/entities/hellip.xml
 delete mode 100644 lib/feedparser/tests/entities/hex_entity_x_lowercase.xml
 delete mode 100644 lib/feedparser/tests/entities/hex_entity_x_uppercase.xml
 delete mode 100644 lib/feedparser/tests/entities/iacute.xml
 delete mode 100644 lib/feedparser/tests/entities/icirc.xml
 delete mode 100644 lib/feedparser/tests/entities/iexcl.xml
 delete mode 100644 lib/feedparser/tests/entities/igrave.xml
 delete mode 100644 lib/feedparser/tests/entities/image.xml
 delete mode 100644 lib/feedparser/tests/entities/infin.xml
 delete mode 100644 lib/feedparser/tests/entities/int.xml
 delete mode 100644 lib/feedparser/tests/entities/iota.xml
 delete mode 100644 lib/feedparser/tests/entities/iquest.xml
 delete mode 100644 lib/feedparser/tests/entities/isin.xml
 delete mode 100644 lib/feedparser/tests/entities/iuml.xml
 delete mode 100644 lib/feedparser/tests/entities/kappa.xml
 delete mode 100644 lib/feedparser/tests/entities/lArr.xml
 delete mode 100644 lib/feedparser/tests/entities/lambda.xml
 delete mode 100644 lib/feedparser/tests/entities/lang.xml
 delete mode 100644 lib/feedparser/tests/entities/laquo.xml
 delete mode 100644 lib/feedparser/tests/entities/lceil.xml
 delete mode 100644 lib/feedparser/tests/entities/ldquo.xml
 delete mode 100644 lib/feedparser/tests/entities/le.xml
 delete mode 100644 lib/feedparser/tests/entities/lfloor.xml
 delete mode 100644 lib/feedparser/tests/entities/lowast.xml
 delete mode 100644 lib/feedparser/tests/entities/loz.xml
 delete mode 100644 lib/feedparser/tests/entities/lrm.xml
 delete mode 100644 lib/feedparser/tests/entities/lsaquo.xml
 delete mode 100644 lib/feedparser/tests/entities/lsquo.xml
 delete mode 100644 lib/feedparser/tests/entities/macr.xml
 delete mode 100644 lib/feedparser/tests/entities/mdash.xml
 delete mode 100644 lib/feedparser/tests/entities/micro.xml
 delete mode 100644 lib/feedparser/tests/entities/middot.xml
 delete mode 100644 lib/feedparser/tests/entities/minus.xml
 delete mode 100644 lib/feedparser/tests/entities/mu.xml
 delete mode 100644 lib/feedparser/tests/entities/nabla.xml
 delete mode 100644 lib/feedparser/tests/entities/nbsp.xml
 delete mode 100644 lib/feedparser/tests/entities/ndash.xml
 delete mode 100644 lib/feedparser/tests/entities/ne.xml
 delete mode 100644 lib/feedparser/tests/entities/ni.xml
 delete mode 100644 lib/feedparser/tests/entities/not.xml
 delete mode 100644 lib/feedparser/tests/entities/notin.xml
 delete mode 100644 lib/feedparser/tests/entities/nsub.xml
 delete mode 100644 lib/feedparser/tests/entities/ntilde.xml
 delete mode 100644 lib/feedparser/tests/entities/nu.xml
 delete mode 100644 lib/feedparser/tests/entities/oacute.xml
 delete mode 100644 lib/feedparser/tests/entities/ocirc.xml
 delete mode 100644 lib/feedparser/tests/entities/oelig.xml
 delete mode 100644 lib/feedparser/tests/entities/ograve.xml
 delete mode 100644 lib/feedparser/tests/entities/oline.xml
 delete mode 100644 lib/feedparser/tests/entities/omega.xml
 delete mode 100644 lib/feedparser/tests/entities/omicron.xml
 delete mode 100644 lib/feedparser/tests/entities/oplus.xml
 delete mode 100644 lib/feedparser/tests/entities/or.xml
 delete mode 100644 lib/feedparser/tests/entities/ordf.xml
 delete mode 100644 lib/feedparser/tests/entities/ordm.xml
 delete mode 100644 lib/feedparser/tests/entities/oslash.xml
 delete mode 100644 lib/feedparser/tests/entities/otilde.xml
 delete mode 100644 lib/feedparser/tests/entities/otimes.xml
 delete mode 100644 lib/feedparser/tests/entities/ouml.xml
 delete mode 100644 lib/feedparser/tests/entities/para.xml
 delete mode 100644 lib/feedparser/tests/entities/part.xml
 delete mode 100644 lib/feedparser/tests/entities/permil.xml
 delete mode 100644 lib/feedparser/tests/entities/perp.xml
 delete mode 100644 lib/feedparser/tests/entities/phi.xml
 delete mode 100644 lib/feedparser/tests/entities/pi.xml
 delete mode 100644 lib/feedparser/tests/entities/piv.xml
 delete mode 100644 lib/feedparser/tests/entities/plusmn.xml
 delete mode 100644 lib/feedparser/tests/entities/pound.xml
 delete mode 100644 lib/feedparser/tests/entities/prime.xml
 delete mode 100644 lib/feedparser/tests/entities/prod.xml
 delete mode 100644 lib/feedparser/tests/entities/prop.xml
 delete mode 100644 lib/feedparser/tests/entities/psi.xml
 delete mode 100644 lib/feedparser/tests/entities/query_variable_entry.xml
 delete mode 100644 lib/feedparser/tests/entities/query_variable_feed.xml
 delete mode 100644 lib/feedparser/tests/entities/radic.xml
 delete mode 100644 lib/feedparser/tests/entities/rang.xml
 delete mode 100644 lib/feedparser/tests/entities/raquo.xml
 delete mode 100644 lib/feedparser/tests/entities/rarr.xml
 delete mode 100644 lib/feedparser/tests/entities/rceil.xml
 delete mode 100644 lib/feedparser/tests/entities/rdquo.xml
 delete mode 100644 lib/feedparser/tests/entities/real.xml
 delete mode 100644 lib/feedparser/tests/entities/reg.xml
 delete mode 100644 lib/feedparser/tests/entities/rfloor.xml
 delete mode 100644 lib/feedparser/tests/entities/rho.xml
 delete mode 100644 lib/feedparser/tests/entities/rlm.xml
 delete mode 100644 lib/feedparser/tests/entities/rsaquo.xml
 delete mode 100644 lib/feedparser/tests/entities/rsquo.xml
 delete mode 100644 lib/feedparser/tests/entities/sbquo.xml
 delete mode 100644 lib/feedparser/tests/entities/scaron.xml
 delete mode 100644 lib/feedparser/tests/entities/sdot.xml
 delete mode 100644 lib/feedparser/tests/entities/sect.xml
 delete mode 100644 lib/feedparser/tests/entities/shy.xml
 delete mode 100644 lib/feedparser/tests/entities/sigma.xml
 delete mode 100644 lib/feedparser/tests/entities/sigmaf.xml
 delete mode 100644 lib/feedparser/tests/entities/sim.xml
 delete mode 100644 lib/feedparser/tests/entities/spades.xml
 delete mode 100644 lib/feedparser/tests/entities/sub.xml
 delete mode 100644 lib/feedparser/tests/entities/sube.xml
 delete mode 100644 lib/feedparser/tests/entities/sum.xml
 delete mode 100644 lib/feedparser/tests/entities/sup.xml
 delete mode 100644 lib/feedparser/tests/entities/sup1.xml
 delete mode 100644 lib/feedparser/tests/entities/sup2.xml
 delete mode 100644 lib/feedparser/tests/entities/sup3.xml
 delete mode 100644 lib/feedparser/tests/entities/supe.xml
 delete mode 100644 lib/feedparser/tests/entities/szlig.xml
 delete mode 100644 lib/feedparser/tests/entities/tau.xml
 delete mode 100644 lib/feedparser/tests/entities/there4.xml
 delete mode 100644 lib/feedparser/tests/entities/theta.xml
 delete mode 100644 lib/feedparser/tests/entities/thetasym.xml
 delete mode 100644 lib/feedparser/tests/entities/thinsp.xml
 delete mode 100644 lib/feedparser/tests/entities/thorn.xml
 delete mode 100644 lib/feedparser/tests/entities/tilde.xml
 delete mode 100644 lib/feedparser/tests/entities/times.xml
 delete mode 100644 lib/feedparser/tests/entities/trade.xml
 delete mode 100644 lib/feedparser/tests/entities/uacute.xml
 delete mode 100644 lib/feedparser/tests/entities/uarr.xml
 delete mode 100644 lib/feedparser/tests/entities/ucirc.xml
 delete mode 100644 lib/feedparser/tests/entities/ugrave.xml
 delete mode 100644 lib/feedparser/tests/entities/uml.xml
 delete mode 100644 lib/feedparser/tests/entities/upper_AElig.xml
 delete mode 100644 lib/feedparser/tests/entities/upper_Aacute.xml
 delete mode 100644 lib/feedparser/tests/entities/upper_Acirc.xml
 delete mode 100644 lib/feedparser/tests/entities/upper_Agrave.xml
 delete mode 100644 lib/feedparser/tests/entities/upper_Alpha.xml
 delete mode 100644 lib/feedparser/tests/entities/upper_Aring.xml
 delete mode 100644 lib/feedparser/tests/entities/upper_Atilde.xml
 delete mode 100644 lib/feedparser/tests/entities/upper_Auml.xml
 delete mode 100644 lib/feedparser/tests/entities/upper_Beta.xml
 delete mode 100644 lib/feedparser/tests/entities/upper_Ccedil.xml
 delete mode 100644 lib/feedparser/tests/entities/upper_Chi.xml
 delete mode 100644 lib/feedparser/tests/entities/upper_Dagger.xml
 delete mode 100644 lib/feedparser/tests/entities/upper_Delta.xml
 delete mode 100644 lib/feedparser/tests/entities/upper_ETH.xml
 delete mode 100644 lib/feedparser/tests/entities/upper_Eacute.xml
 delete mode 100644 lib/feedparser/tests/entities/upper_Ecirc.xml
 delete mode 100644 lib/feedparser/tests/entities/upper_Egrave.xml
 delete mode 100644 lib/feedparser/tests/entities/upper_Epsilon.xml
 delete mode 100644 lib/feedparser/tests/entities/upper_Eta.xml
 delete mode 100644 lib/feedparser/tests/entities/upper_Euml.xml
 delete mode 100644 lib/feedparser/tests/entities/upper_Gamma.xml
 delete mode 100644 lib/feedparser/tests/entities/upper_Iacute.xml
 delete mode 100644 lib/feedparser/tests/entities/upper_Icirc.xml
 delete mode 100644 lib/feedparser/tests/entities/upper_Igrave.xml
 delete mode 100644 lib/feedparser/tests/entities/upper_Iota.xml
 delete mode 100644 lib/feedparser/tests/entities/upper_Iuml.xml
 delete mode 100644 lib/feedparser/tests/entities/upper_Kappa.xml
 delete mode 100644 lib/feedparser/tests/entities/upper_Lambda.xml
 delete mode 100644 lib/feedparser/tests/entities/upper_Mu.xml
 delete mode 100644 lib/feedparser/tests/entities/upper_Ntilde.xml
 delete mode 100644 lib/feedparser/tests/entities/upper_Nu.xml
 delete mode 100644 lib/feedparser/tests/entities/upper_OElig.xml
 delete mode 100644 lib/feedparser/tests/entities/upper_Oacute.xml
 delete mode 100644 lib/feedparser/tests/entities/upper_Ocirc.xml
 delete mode 100644 lib/feedparser/tests/entities/upper_Ograve.xml
 delete mode 100644 lib/feedparser/tests/entities/upper_Omega.xml
 delete mode 100644 lib/feedparser/tests/entities/upper_Omicron.xml
 delete mode 100644 lib/feedparser/tests/entities/upper_Oslash.xml
 delete mode 100644 lib/feedparser/tests/entities/upper_Otilde.xml
 delete mode 100644 lib/feedparser/tests/entities/upper_Ouml.xml
 delete mode 100644 lib/feedparser/tests/entities/upper_Phi.xml
 delete mode 100644 lib/feedparser/tests/entities/upper_Pi.xml
 delete mode 100644 lib/feedparser/tests/entities/upper_Prime.xml
 delete mode 100644 lib/feedparser/tests/entities/upper_Psi.xml
 delete mode 100644 lib/feedparser/tests/entities/upper_Rho.xml
 delete mode 100644 lib/feedparser/tests/entities/upper_Scaron.xml
 delete mode 100644 lib/feedparser/tests/entities/upper_Sigma.xml
 delete mode 100644 lib/feedparser/tests/entities/upper_THORN.xml
 delete mode 100644 lib/feedparser/tests/entities/upper_Tau.xml
 delete mode 100644 lib/feedparser/tests/entities/upper_Theta.xml
 delete mode 100644 lib/feedparser/tests/entities/upper_Uacute.xml
 delete mode 100644 lib/feedparser/tests/entities/upper_Ucirc.xml
 delete mode 100644 lib/feedparser/tests/entities/upper_Ugrave.xml
 delete mode 100644 lib/feedparser/tests/entities/upper_Upsilon.xml
 delete mode 100644 lib/feedparser/tests/entities/upper_Uuml.xml
 delete mode 100644 lib/feedparser/tests/entities/upper_Xi.xml
 delete mode 100644 lib/feedparser/tests/entities/upper_Yacute.xml
 delete mode 100644 lib/feedparser/tests/entities/upper_Yuml.xml
 delete mode 100644 lib/feedparser/tests/entities/upper_Zeta.xml
 delete mode 100644 lib/feedparser/tests/entities/upsih.xml
 delete mode 100644 lib/feedparser/tests/entities/upsilon.xml
 delete mode 100644 lib/feedparser/tests/entities/uuml.xml
 delete mode 100644 lib/feedparser/tests/entities/weierp.xml
 delete mode 100644 lib/feedparser/tests/entities/xi.xml
 delete mode 100644 lib/feedparser/tests/entities/yacute.xml
 delete mode 100644 lib/feedparser/tests/entities/yen.xml
 delete mode 100644 lib/feedparser/tests/entities/yuml.xml
 delete mode 100644 lib/feedparser/tests/entities/zeta.xml
 delete mode 100644 lib/feedparser/tests/entities/zwj.xml
 delete mode 100644 lib/feedparser/tests/entities/zwnj.xml
 delete mode 100644 lib/feedparser/tests/http/http_redirect_to_304.xml
 delete mode 100644 lib/feedparser/tests/http/http_status_301.xml
 delete mode 100644 lib/feedparser/tests/http/http_status_302.xml
 delete mode 100644 lib/feedparser/tests/http/http_status_303.xml
 delete mode 100644 lib/feedparser/tests/http/http_status_304.xml
 delete mode 100644 lib/feedparser/tests/http/http_status_307.xml
 delete mode 100644 lib/feedparser/tests/http/http_status_404.xml
 delete mode 100644 lib/feedparser/tests/http/http_status_9001.xml
 delete mode 100644 lib/feedparser/tests/http/target.xml
 delete mode 100644 lib/feedparser/tests/illformed/aaa_illformed.xml
 delete mode 100644 lib/feedparser/tests/illformed/always_strip_doctype.xml
 delete mode 100644 lib/feedparser/tests/illformed/chardet/big5.xml
 delete mode 100644 lib/feedparser/tests/illformed/chardet/eucjp.xml
 delete mode 100644 lib/feedparser/tests/illformed/chardet/euckr.xml
 delete mode 100644 lib/feedparser/tests/illformed/chardet/gb2312.xml
 delete mode 100644 lib/feedparser/tests/illformed/chardet/koi8r.xml
 delete mode 100644 lib/feedparser/tests/illformed/chardet/shiftjis.xml
 delete mode 100644 lib/feedparser/tests/illformed/chardet/tis620.xml
 delete mode 100644 lib/feedparser/tests/illformed/chardet/windows1255.xml
 delete mode 100644 lib/feedparser/tests/illformed/http_high_bit_date.xml
 delete mode 100644 lib/feedparser/tests/illformed/non-ascii-tag.xml
 delete mode 100644 lib/feedparser/tests/illformed/rdf_channel_empty_textinput.xml
 delete mode 100644 lib/feedparser/tests/illformed/rss_empty_document.xml
 delete mode 100644 lib/feedparser/tests/illformed/rss_incomplete_cdata.xml
 delete mode 100644 lib/feedparser/tests/illformed/undeclared_namespace.xml
 delete mode 100644 lib/feedparser/tests/microformats/hcard/2-4-2-vcard.xml
 delete mode 100644 lib/feedparser/tests/microformats/hcard/3-1-1-fn-unicode-char.xml
 delete mode 100644 lib/feedparser/tests/microformats/hcard/3-1-1-fn.xml
 delete mode 100644 lib/feedparser/tests/microformats/hcard/3-1-2-n-2-plural.xml
 delete mode 100644 lib/feedparser/tests/microformats/hcard/3-1-2-n-2-singular.xml
 delete mode 100644 lib/feedparser/tests/microformats/hcard/3-1-2-n-plural.xml
 delete mode 100644 lib/feedparser/tests/microformats/hcard/3-1-2-n-singular.xml
 delete mode 100644 lib/feedparser/tests/microformats/hcard/3-1-3-nickname-2-plural.xml
 delete mode 100644 lib/feedparser/tests/microformats/hcard/3-1-3-nickname-2-singular.xml
 delete mode 100644 lib/feedparser/tests/microformats/hcard/3-1-3-nickname.xml
 delete mode 100644 lib/feedparser/tests/microformats/hcard/3-1-4-photo-inline.xml
 delete mode 100644 lib/feedparser/tests/microformats/hcard/3-1-4-photo.xml
 delete mode 100644 lib/feedparser/tests/microformats/hcard/3-1-5-bday-2.xml
 delete mode 100644 lib/feedparser/tests/microformats/hcard/3-1-5-bday-3.xml
 delete mode 100644 lib/feedparser/tests/microformats/hcard/3-1-5-bday.xml
 delete mode 100644 lib/feedparser/tests/microformats/hcard/3-2-1-adr.xml
 delete mode 100644 lib/feedparser/tests/microformats/hcard/3-2-2-label.xml
 delete mode 100644 lib/feedparser/tests/microformats/hcard/3-3-1-tel.xml
 delete mode 100644 lib/feedparser/tests/microformats/hcard/3-3-2-email-2.xml
 delete mode 100644 lib/feedparser/tests/microformats/hcard/3-3-2-email-3.xml
 delete mode 100644 lib/feedparser/tests/microformats/hcard/3-3-2-email.xml
 delete mode 100644 lib/feedparser/tests/microformats/hcard/3-3-3-mailer.xml
 delete mode 100644 lib/feedparser/tests/microformats/hcard/3-4-1-tz-2.xml
 delete mode 100644 lib/feedparser/tests/microformats/hcard/3-4-1-tz.xml
 delete mode 100644 lib/feedparser/tests/microformats/hcard/3-4-2-geo.xml
 delete mode 100644 lib/feedparser/tests/microformats/hcard/3-5-1-title.xml
 delete mode 100644 lib/feedparser/tests/microformats/hcard/3-5-2-role.xml
 delete mode 100644 lib/feedparser/tests/microformats/hcard/3-5-3-logo-2.xml
 delete mode 100644 lib/feedparser/tests/microformats/hcard/3-5-3-logo.xml
 delete mode 100644 lib/feedparser/tests/microformats/hcard/3-5-4-agent-2.xml
 delete mode 100644 lib/feedparser/tests/microformats/hcard/3-5-4-agent.xml
 delete mode 100644 lib/feedparser/tests/microformats/hcard/3-5-5-org.xml
 delete mode 100644 lib/feedparser/tests/microformats/hcard/3-6-1-categories-2-plural.xml
 delete mode 100644 lib/feedparser/tests/microformats/hcard/3-6-1-categories-2-singular.xml
 delete mode 100644 lib/feedparser/tests/microformats/hcard/3-6-1-categories.xml
 delete mode 100644 lib/feedparser/tests/microformats/hcard/3-6-2-note.xml
 delete mode 100644 lib/feedparser/tests/microformats/hcard/3-6-4-rev-2.xml
 delete mode 100644 lib/feedparser/tests/microformats/hcard/3-6-4-rev.xml
 delete mode 100644 lib/feedparser/tests/microformats/hcard/3-6-5-sort-string-2.xml
 delete mode 100644 lib/feedparser/tests/microformats/hcard/3-6-5-sort-string-3.xml
 delete mode 100644 lib/feedparser/tests/microformats/hcard/3-6-5-sort-string-4.xml
 delete mode 100644 lib/feedparser/tests/microformats/hcard/3-6-5-sort-string-5.xml
 delete mode 100644 lib/feedparser/tests/microformats/hcard/3-6-5-sort-string.xml
 delete mode 100644 lib/feedparser/tests/microformats/hcard/3-6-6-sound-2.xml
 delete mode 100644 lib/feedparser/tests/microformats/hcard/3-6-6-sound.xml
 delete mode 100644 lib/feedparser/tests/microformats/hcard/3-6-7-uid.xml
 delete mode 100644 lib/feedparser/tests/microformats/hcard/3-6-8-url.xml
 delete mode 100644 lib/feedparser/tests/microformats/hcard/3-7-1-class-2.xml
 delete mode 100644 lib/feedparser/tests/microformats/hcard/3-7-1-class-3.xml
 delete mode 100644 lib/feedparser/tests/microformats/hcard/3-7-1-class.xml
 delete mode 100644 lib/feedparser/tests/microformats/hcard/3-7-2-key.xml
 delete mode 100644 lib/feedparser/tests/microformats/hcard/7-authors.xml
 delete mode 100644 lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href.xml
 delete mode 100644 lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_avi.xml
 delete mode 100644 lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_bin.xml
 delete mode 100644 lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_bz2.xml
 delete mode 100644 lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_deb.xml
 delete mode 100644 lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_dmg.xml
 delete mode 100644 lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_exe.xml
 delete mode 100644 lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_gz.xml
 delete mode 100644 lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_hqx.xml
 delete mode 100644 lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_img.xml
 delete mode 100644 lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_iso.xml
 delete mode 100644 lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_jar.xml
 delete mode 100644 lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_m4a.xml
 delete mode 100644 lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_m4v.xml
 delete mode 100644 lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_mp2.xml
 delete mode 100644 lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_mp3.xml
 delete mode 100644 lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_mp4.xml
 delete mode 100644 lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_msi.xml
 delete mode 100644 lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_ogg.xml
 delete mode 100644 lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_rar.xml
 delete mode 100644 lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_rpm.xml
 delete mode 100644 lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_sit.xml
 delete mode 100644 lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_sitx.xml
 delete mode 100644 lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_tar.xml
 delete mode 100644 lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_tbz2.xml
 delete mode 100644 lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_tgz.xml
 delete mode 100644 lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_wma.xml
 delete mode 100644 lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_wmv.xml
 delete mode 100644 lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_z.xml
 delete mode 100644 lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_zip.xml
 delete mode 100644 lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_type_application_ogg.xml
 delete mode 100644 lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_type_audio.xml
 delete mode 100644 lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_type_video.xml
 delete mode 100644 lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_invalid.xml
 delete mode 100644 lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_no_autodetect.xml
 delete mode 100644 lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_no_autodetect_xml.xml
 delete mode 100644 lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_title.xml
 delete mode 100644 lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_title_from_link_text.xml
 delete mode 100644 lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_title_overrides_link_text.xml
 delete mode 100644 lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_type.xml
 delete mode 100644 lib/feedparser/tests/microformats/rel_tag/rel_tag_duplicate.xml
 delete mode 100644 lib/feedparser/tests/microformats/rel_tag/rel_tag_label.xml
 delete mode 100644 lib/feedparser/tests/microformats/rel_tag/rel_tag_scheme.xml
 delete mode 100644 lib/feedparser/tests/microformats/rel_tag/rel_tag_term.xml
 delete mode 100644 lib/feedparser/tests/microformats/rel_tag/rel_tag_term_trailing_slash.xml
 delete mode 100644 lib/feedparser/tests/microformats/xfn/xfn_acquaintance.xml
 delete mode 100644 lib/feedparser/tests/microformats/xfn/xfn_brother.xml
 delete mode 100644 lib/feedparser/tests/microformats/xfn/xfn_child.xml
 delete mode 100644 lib/feedparser/tests/microformats/xfn/xfn_co-resident.xml
 delete mode 100644 lib/feedparser/tests/microformats/xfn/xfn_co-worker.xml
 delete mode 100644 lib/feedparser/tests/microformats/xfn/xfn_colleague.xml
 delete mode 100644 lib/feedparser/tests/microformats/xfn/xfn_contact.xml
 delete mode 100644 lib/feedparser/tests/microformats/xfn/xfn_coresident.xml
 delete mode 100644 lib/feedparser/tests/microformats/xfn/xfn_coworker.xml
 delete mode 100644 lib/feedparser/tests/microformats/xfn/xfn_crush.xml
 delete mode 100644 lib/feedparser/tests/microformats/xfn/xfn_date.xml
 delete mode 100644 lib/feedparser/tests/microformats/xfn/xfn_friend.xml
 delete mode 100644 lib/feedparser/tests/microformats/xfn/xfn_href.xml
 delete mode 100644 lib/feedparser/tests/microformats/xfn/xfn_husband.xml
 delete mode 100644 lib/feedparser/tests/microformats/xfn/xfn_kin.xml
 delete mode 100644 lib/feedparser/tests/microformats/xfn/xfn_me.xml
 delete mode 100644 lib/feedparser/tests/microformats/xfn/xfn_met.xml
 delete mode 100644 lib/feedparser/tests/microformats/xfn/xfn_multiple.xml
 delete mode 100644 lib/feedparser/tests/microformats/xfn/xfn_muse.xml
 delete mode 100644 lib/feedparser/tests/microformats/xfn/xfn_name.xml
 delete mode 100644 lib/feedparser/tests/microformats/xfn/xfn_neighbor.xml
 delete mode 100644 lib/feedparser/tests/microformats/xfn/xfn_parent.xml
 delete mode 100644 lib/feedparser/tests/microformats/xfn/xfn_relative.xml
 delete mode 100644 lib/feedparser/tests/microformats/xfn/xfn_sibling.xml
 delete mode 100644 lib/feedparser/tests/microformats/xfn/xfn_sister.xml
 delete mode 100644 lib/feedparser/tests/microformats/xfn/xfn_spouse.xml
 delete mode 100644 lib/feedparser/tests/microformats/xfn/xfn_sweetheart.xml
 delete mode 100644 lib/feedparser/tests/microformats/xfn/xfn_wife.xml
 delete mode 100644 lib/feedparser/tests/wellformed/amp/amp01.xml
 delete mode 100644 lib/feedparser/tests/wellformed/amp/amp02.xml
 delete mode 100644 lib/feedparser/tests/wellformed/amp/amp03.xml
 delete mode 100644 lib/feedparser/tests/wellformed/amp/amp04.xml
 delete mode 100644 lib/feedparser/tests/wellformed/amp/amp05.xml
 delete mode 100644 lib/feedparser/tests/wellformed/amp/amp06.xml
 delete mode 100644 lib/feedparser/tests/wellformed/amp/amp07.xml
 delete mode 100644 lib/feedparser/tests/wellformed/amp/amp08.xml
 delete mode 100644 lib/feedparser/tests/wellformed/amp/amp09.xml
 delete mode 100644 lib/feedparser/tests/wellformed/amp/amp10.xml
 delete mode 100644 lib/feedparser/tests/wellformed/amp/amp11.xml
 delete mode 100644 lib/feedparser/tests/wellformed/amp/amp12.xml
 delete mode 100644 lib/feedparser/tests/wellformed/amp/amp13.xml
 delete mode 100644 lib/feedparser/tests/wellformed/amp/amp14.xml
 delete mode 100644 lib/feedparser/tests/wellformed/amp/amp15.xml
 delete mode 100644 lib/feedparser/tests/wellformed/amp/amp16.xml
 delete mode 100644 lib/feedparser/tests/wellformed/amp/amp17.xml
 delete mode 100644 lib/feedparser/tests/wellformed/amp/amp18.xml
 delete mode 100644 lib/feedparser/tests/wellformed/amp/amp19.xml
 delete mode 100644 lib/feedparser/tests/wellformed/amp/amp20.xml
 delete mode 100644 lib/feedparser/tests/wellformed/amp/amp21.xml
 delete mode 100644 lib/feedparser/tests/wellformed/amp/amp22.xml
 delete mode 100644 lib/feedparser/tests/wellformed/amp/amp23.xml
 delete mode 100644 lib/feedparser/tests/wellformed/amp/amp24.xml
 delete mode 100644 lib/feedparser/tests/wellformed/amp/amp25.xml
 delete mode 100644 lib/feedparser/tests/wellformed/amp/amp26.xml
 delete mode 100644 lib/feedparser/tests/wellformed/amp/amp27.xml
 delete mode 100644 lib/feedparser/tests/wellformed/amp/amp28.xml
 delete mode 100644 lib/feedparser/tests/wellformed/amp/amp29.xml
 delete mode 100644 lib/feedparser/tests/wellformed/amp/amp30.xml
 delete mode 100644 lib/feedparser/tests/wellformed/amp/amp31.xml
 delete mode 100644 lib/feedparser/tests/wellformed/amp/amp32.xml
 delete mode 100644 lib/feedparser/tests/wellformed/amp/amp33.xml
 delete mode 100644 lib/feedparser/tests/wellformed/amp/amp34.xml
 delete mode 100644 lib/feedparser/tests/wellformed/amp/amp35.xml
 delete mode 100644 lib/feedparser/tests/wellformed/amp/amp36.xml
 delete mode 100644 lib/feedparser/tests/wellformed/amp/amp37.xml
 delete mode 100644 lib/feedparser/tests/wellformed/amp/amp38.xml
 delete mode 100644 lib/feedparser/tests/wellformed/amp/amp39.xml
 delete mode 100644 lib/feedparser/tests/wellformed/amp/amp40.xml
 delete mode 100644 lib/feedparser/tests/wellformed/amp/amp41.xml
 delete mode 100644 lib/feedparser/tests/wellformed/amp/amp42.xml
 delete mode 100644 lib/feedparser/tests/wellformed/amp/amp43.xml
 delete mode 100644 lib/feedparser/tests/wellformed/amp/amp44.xml
 delete mode 100644 lib/feedparser/tests/wellformed/amp/amp45.xml
 delete mode 100644 lib/feedparser/tests/wellformed/amp/amp46.xml
 delete mode 100644 lib/feedparser/tests/wellformed/amp/amp47.xml
 delete mode 100644 lib/feedparser/tests/wellformed/amp/amp48.xml
 delete mode 100644 lib/feedparser/tests/wellformed/amp/amp49.xml
 delete mode 100644 lib/feedparser/tests/wellformed/amp/amp50.xml
 delete mode 100644 lib/feedparser/tests/wellformed/amp/amp51.xml
 delete mode 100644 lib/feedparser/tests/wellformed/amp/amp52.xml
 delete mode 100644 lib/feedparser/tests/wellformed/amp/amp53.xml
 delete mode 100644 lib/feedparser/tests/wellformed/amp/amp54.xml
 delete mode 100644 lib/feedparser/tests/wellformed/amp/amp55.xml
 delete mode 100644 lib/feedparser/tests/wellformed/amp/amp56.xml
 delete mode 100644 lib/feedparser/tests/wellformed/amp/amp57.xml
 delete mode 100644 lib/feedparser/tests/wellformed/amp/amp58.xml
 delete mode 100644 lib/feedparser/tests/wellformed/amp/amp59.xml
 delete mode 100644 lib/feedparser/tests/wellformed/amp/amp60.xml
 delete mode 100644 lib/feedparser/tests/wellformed/amp/amp61.xml
 delete mode 100644 lib/feedparser/tests/wellformed/amp/amp62.xml
 delete mode 100644 lib/feedparser/tests/wellformed/amp/amp63.xml
 delete mode 100644 lib/feedparser/tests/wellformed/amp/amp64.xml
 delete mode 100644 lib/feedparser/tests/wellformed/amp/attr01.xml
 delete mode 100644 lib/feedparser/tests/wellformed/amp/attr02.xml
 delete mode 100644 lib/feedparser/tests/wellformed/amp/attr03.xml
 delete mode 100644 lib/feedparser/tests/wellformed/amp/attr04.xml
 delete mode 100644 lib/feedparser/tests/wellformed/amp/attr05.xml
 delete mode 100644 lib/feedparser/tests/wellformed/amp/attr06.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/atom_namespace_1.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/atom_namespace_2.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/atom_namespace_3.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/atom_namespace_4.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/atom_namespace_5.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/entry_author_email.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/entry_author_homepage.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/entry_author_map_author.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/entry_author_map_author_2.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/entry_author_name.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/entry_author_uri.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/entry_author_url.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/entry_content_mode_base64.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/entry_content_mode_escaped.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/entry_content_type.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/entry_content_type_text_plain.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/entry_content_value.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/entry_contributor_email.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/entry_contributor_homepage.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/entry_contributor_multiple.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/entry_contributor_name.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/entry_contributor_uri.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/entry_contributor_url.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/entry_created.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/entry_created_multiple_values.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/entry_created_parsed.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/entry_id.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/entry_id_map_guid.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/entry_issued.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/entry_issued_parsed.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/entry_link_alternate_map_link.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/entry_link_alternate_map_link_2.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/entry_link_href.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/entry_link_multiple.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/entry_link_rel.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/entry_link_title.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/entry_link_type.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/entry_modified.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/entry_modified_map_updated_parsed.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/entry_published_parsed.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/entry_published_parsed_date_overwriting.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/entry_source_updated_parsed.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/entry_summary.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/entry_summary_base64.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/entry_summary_base64_2.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/entry_summary_content_mode_base64.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/entry_summary_content_mode_escaped.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/entry_summary_content_type.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/entry_summary_content_type_text_plain.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/entry_summary_content_value.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/entry_summary_escaped_markup.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/entry_summary_inline_markup.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/entry_summary_inline_markup_2.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/entry_summary_naked_markup.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/entry_summary_text_plain.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/entry_title.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/entry_title_base64.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/entry_title_base64_2.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/entry_title_content_mode_base64.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/entry_title_content_mode_escaped.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/entry_title_content_type.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/entry_title_content_type_text_plain.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/entry_title_content_value.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/entry_title_escaped_markup.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/entry_title_inline_markup.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/entry_title_inline_markup_2.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/entry_title_naked_markup.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/entry_title_text_plain.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/entry_title_text_plain_brackets.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/entry_updated_multiple_values.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/entry_updated_parsed.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/feed_author_email.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/feed_author_homepage.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/feed_author_map_author.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/feed_author_map_author_2.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/feed_author_name.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/feed_author_uri.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/feed_author_url.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/feed_contributor_email.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/feed_contributor_homepage.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/feed_contributor_multiple.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/feed_contributor_name.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/feed_contributor_uri.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/feed_contributor_url.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/feed_copyright.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/feed_copyright_base64.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/feed_copyright_base64_2.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/feed_copyright_content_mode_base64.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/feed_copyright_content_mode_escaped.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/feed_copyright_content_type.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/feed_copyright_content_type_text_plain.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/feed_copyright_content_value.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/feed_copyright_escaped_markup.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/feed_copyright_inline_markup.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/feed_copyright_inline_markup_2.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/feed_copyright_naked_markup.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/feed_copyright_text_plain.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/feed_generator.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/feed_generator_name.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/feed_generator_url.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/feed_generator_version.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/feed_id.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/feed_id_map_guid.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/feed_info.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/feed_info_base64.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/feed_info_base64_2.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/feed_info_content_mode_base64.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/feed_info_content_mode_escaped.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/feed_info_content_type.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/feed_info_content_type_text_plain.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/feed_info_content_value.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/feed_info_escaped_markup.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/feed_info_inline_markup.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/feed_info_inline_markup_2.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/feed_info_naked_markup.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/feed_info_text_plain.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/feed_link_alternate_map_link.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/feed_link_alternate_map_link_2.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/feed_link_href.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/feed_link_multiple.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/feed_link_rel.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/feed_link_title.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/feed_link_type.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/feed_modified.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/feed_modified_map_updated_parsed.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/feed_tagline.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/feed_tagline_base64.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/feed_tagline_base64_2.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/feed_tagline_content_mode_base64.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/feed_tagline_content_mode_escaped.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/feed_tagline_content_type.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/feed_tagline_content_type_text_plain.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/feed_tagline_content_value.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/feed_tagline_escaped_markup.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/feed_tagline_inline_markup.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/feed_tagline_inline_markup_2.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/feed_tagline_naked_markup.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/feed_tagline_text_plain.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/feed_title.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/feed_title_base64.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/feed_title_base64_2.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/feed_title_content_mode_base64.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/feed_title_content_mode_escaped.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/feed_title_content_type.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/feed_title_content_type_text_plain.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/feed_title_content_value.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/feed_title_escaped_markup.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/feed_title_inline_markup.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/feed_title_inline_markup_2.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/feed_title_naked_markup.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/feed_title_text_plain.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/feed_updated_parsed.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/media_player1.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/media_thumbnail.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/relative_uri.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/relative_uri_inherit.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom/relative_uri_inherit_2.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/ampersand_in_attr.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/atom10_namespace.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/atom10_version.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_author_email.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_author_map_author.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_author_map_author_2.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_author_name.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_author_uri.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_author_url.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_authors_email.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_authors_name.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_authors_uri.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_authors_url.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_category_label.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_category_scheme.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_category_term.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_category_term_non_ascii.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_content_application_xml.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_content_base64.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_content_base64_2.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_content_div_escaped_markup.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_content_escaped_markup.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_content_inline_markup.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_content_inline_markup_2.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_content_src.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_content_text_plain.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_content_text_plain_brackets.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_content_type.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_content_type_text.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_content_value.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_contributor_email.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_contributor_multiple.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_contributor_name.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_contributor_uri.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_contributor_url.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_id.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_id_map_guid.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_id_no_normalization_1.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_id_no_normalization_2.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_id_no_normalization_3.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_id_no_normalization_4.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_id_no_normalization_5.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_id_no_normalization_6.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_id_no_normalization_7.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_id_with_attributes.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_link_alternate_map_link.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_link_alternate_map_link_2.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_link_alternate_map_link_3.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_link_href.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_link_hreflang.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_link_length.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_link_multiple.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_link_no_rel.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_link_rel.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_link_rel_enclosure.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_link_rel_enclosure_map_enclosure_length.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_link_rel_enclosure_map_enclosure_type.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_link_rel_enclosure_map_enclosure_url.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_link_rel_license.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_link_rel_other.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_link_rel_related.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_link_rel_self.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_link_rel_via.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_link_title.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_link_type.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_rights.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_rights_content_value.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_rights_escaped_markup.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_rights_inline_markup.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_rights_inline_markup_2.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_rights_text_plain.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_rights_text_plain_brackets.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_rights_type_default.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_rights_type_text.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_source_author_email.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_source_author_map_author.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_source_author_map_author_2.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_source_author_name.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_source_author_uri.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_source_authors_email.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_source_authors_name.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_source_authors_uri.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_source_authors_url.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_source_category_label.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_source_category_scheme.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_source_category_term.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_source_category_term_non_ascii.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_source_contributor_email.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_source_contributor_multiple.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_source_contributor_name.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_source_contributor_uri.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_source_generator.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_source_generator_name.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_source_generator_uri.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_source_generator_version.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_source_icon.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_source_id.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_source_link_alternate_map_link.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_source_link_alternate_map_link_2.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_source_link_href.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_source_link_hreflang.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_source_link_length.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_source_link_multiple.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_source_link_no_rel.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_source_link_rel.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_source_link_rel_other.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_source_link_rel_related.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_source_link_rel_self.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_source_link_rel_via.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_source_link_title.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_source_link_type.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_source_logo.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_source_rights.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_source_rights_base64.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_source_rights_base64_2.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_source_rights_content_type.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_source_rights_content_type_text.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_source_rights_content_value.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_source_rights_escaped_markup.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_source_rights_inline_markup.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_source_rights_inline_markup_2.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_source_rights_text_plain.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_source_subittle_content_type_text.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_source_subtitle.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_source_subtitle_base64.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_source_subtitle_base64_2.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_source_subtitle_content_type.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_source_subtitle_content_value.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_source_subtitle_escaped_markup.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_source_subtitle_inline_markup.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_source_subtitle_inline_markup_2.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_source_subtitle_text_plain.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_source_title.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_source_title_base64.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_source_title_base64_2.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_source_title_content_type.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_source_title_content_type_text.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_source_title_content_value.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_source_title_escaped_markup.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_source_title_inline_markup.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_source_title_inline_markup_2.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_source_title_text_plain.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_summary.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_summary_base64.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_summary_base64_2.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_summary_content_value.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_summary_escaped_markup.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_summary_inline_markup.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_summary_inline_markup_2.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_summary_text_plain.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_summary_type_default.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_summary_type_text.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_title.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_title_base64.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_title_base64_2.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_title_content_value.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_title_escaped_markup.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_title_inline_markup.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_title_inline_markup_2.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_title_text_plain.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_title_text_plain_brackets.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_title_type_default.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/entry_title_type_text.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/feed_author_email.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/feed_author_map_author.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/feed_author_map_author_2.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/feed_author_name.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/feed_author_uri.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/feed_author_url.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/feed_authors_email.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/feed_authors_name.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/feed_authors_uri.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/feed_authors_url.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/feed_contributor_email.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/feed_contributor_multiple.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/feed_contributor_name.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/feed_contributor_uri.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/feed_contributor_url.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/feed_generator.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/feed_generator_name.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/feed_generator_url.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/feed_generator_version.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/feed_icon.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/feed_id.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/feed_id_map_guid.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/feed_link_alternate_map_link.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/feed_link_alternate_map_link_2.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/feed_link_href.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/feed_link_hreflang.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/feed_link_length.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/feed_link_multiple.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/feed_link_no_rel.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/feed_link_rel.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/feed_link_rel_other.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/feed_link_rel_related.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/feed_link_rel_self.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/feed_link_rel_self_default_type.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/feed_link_rel_via.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/feed_link_title.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/feed_link_type.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/feed_logo.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/feed_rights.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/feed_rights_base64.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/feed_rights_base64_2.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/feed_rights_content_type.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/feed_rights_content_type_text.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/feed_rights_content_value.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/feed_rights_escaped_markup.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/feed_rights_inline_markup.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/feed_rights_inline_markup_2.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/feed_rights_text_plain.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/feed_subtitle.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/feed_subtitle_base64.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/feed_subtitle_base64_2.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/feed_subtitle_content_type.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/feed_subtitle_content_type_text.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/feed_subtitle_content_value.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/feed_subtitle_escaped_markup.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/feed_subtitle_inline_markup.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/feed_subtitle_inline_markup_2.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/feed_subtitle_text_plain.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/feed_title.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/feed_title_base64.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/feed_title_base64_2.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/feed_title_content_type.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/feed_title_content_type_text.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/feed_title_content_value.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/feed_title_escaped_markup.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/feed_title_inline_markup.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/feed_title_inline_markup_2.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/feed_title_text_plain.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/item_media_category_label.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/item_media_category_multiple.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/item_media_category_scheme1.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/item_media_category_scheme2.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/item_media_category_term.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/item_media_title_type_plain.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/missing_quote_in_attr.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/qna.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/quote_in_attr.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/relative_uri.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/relative_uri_inherit.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/relative_uri_inherit_2.xml
 delete mode 100644 lib/feedparser/tests/wellformed/atom10/tag_in_attr.xml
 delete mode 100644 lib/feedparser/tests/wellformed/base/cdf_item_abstract_xml_base.xml
 delete mode 100644 lib/feedparser/tests/wellformed/base/entry_content_xml_base.xml
 delete mode 100644 lib/feedparser/tests/wellformed/base/entry_content_xml_base_inherit.xml
 delete mode 100644 lib/feedparser/tests/wellformed/base/entry_content_xml_base_inherit_2.xml
 delete mode 100644 lib/feedparser/tests/wellformed/base/entry_content_xml_base_inherit_3.xml
 delete mode 100644 lib/feedparser/tests/wellformed/base/entry_content_xml_base_inherit_4.xml
 delete mode 100644 lib/feedparser/tests/wellformed/base/entry_summary_xml_base.xml
 delete mode 100644 lib/feedparser/tests/wellformed/base/entry_summary_xml_base_inherit.xml
 delete mode 100644 lib/feedparser/tests/wellformed/base/entry_summary_xml_base_inherit_2.xml
 delete mode 100644 lib/feedparser/tests/wellformed/base/entry_summary_xml_base_inherit_3.xml
 delete mode 100644 lib/feedparser/tests/wellformed/base/entry_summary_xml_base_inherit_4.xml
 delete mode 100644 lib/feedparser/tests/wellformed/base/entry_title_xml_base.xml
 delete mode 100644 lib/feedparser/tests/wellformed/base/entry_title_xml_base_inherit.xml
 delete mode 100644 lib/feedparser/tests/wellformed/base/entry_title_xml_base_inherit_2.xml
 delete mode 100644 lib/feedparser/tests/wellformed/base/entry_title_xml_base_inherit_3.xml
 delete mode 100644 lib/feedparser/tests/wellformed/base/entry_title_xml_base_inherit_4.xml
 delete mode 100644 lib/feedparser/tests/wellformed/base/feed_copyright_xml_base.xml
 delete mode 100644 lib/feedparser/tests/wellformed/base/feed_copyright_xml_base_inherit.xml
 delete mode 100644 lib/feedparser/tests/wellformed/base/feed_copyright_xml_base_inherit_2.xml
 delete mode 100644 lib/feedparser/tests/wellformed/base/feed_copyright_xml_base_inherit_3.xml
 delete mode 100644 lib/feedparser/tests/wellformed/base/feed_copyright_xml_base_inherit_4.xml
 delete mode 100644 lib/feedparser/tests/wellformed/base/feed_info_xml_base.xml
 delete mode 100644 lib/feedparser/tests/wellformed/base/feed_info_xml_base_inherit.xml
 delete mode 100644 lib/feedparser/tests/wellformed/base/feed_info_xml_base_inherit_2.xml
 delete mode 100644 lib/feedparser/tests/wellformed/base/feed_info_xml_base_inherit_3.xml
 delete mode 100644 lib/feedparser/tests/wellformed/base/feed_info_xml_base_inherit_4.xml
 delete mode 100644 lib/feedparser/tests/wellformed/base/feed_link_xml_base_iri.xml
 delete mode 100644 lib/feedparser/tests/wellformed/base/feed_tagline_xml_base.xml
 delete mode 100644 lib/feedparser/tests/wellformed/base/feed_tagline_xml_base_inherit.xml
 delete mode 100644 lib/feedparser/tests/wellformed/base/feed_tagline_xml_base_inherit_2.xml
 delete mode 100644 lib/feedparser/tests/wellformed/base/feed_tagline_xml_base_inherit_3.xml
 delete mode 100644 lib/feedparser/tests/wellformed/base/feed_tagline_xml_base_inherit_4.xml
 delete mode 100644 lib/feedparser/tests/wellformed/base/feed_title_xml_base.xml
 delete mode 100644 lib/feedparser/tests/wellformed/base/feed_title_xml_base_inherit.xml
 delete mode 100644 lib/feedparser/tests/wellformed/base/feed_title_xml_base_inherit_2.xml
 delete mode 100644 lib/feedparser/tests/wellformed/base/feed_title_xml_base_inherit_3.xml
 delete mode 100644 lib/feedparser/tests/wellformed/base/feed_title_xml_base_inherit_4.xml
 delete mode 100644 lib/feedparser/tests/wellformed/base/http_channel_docs_base_content_location.xml
 delete mode 100644 lib/feedparser/tests/wellformed/base/http_channel_docs_base_docuri.xml
 delete mode 100644 lib/feedparser/tests/wellformed/base/http_channel_link_base_content_location.xml
 delete mode 100644 lib/feedparser/tests/wellformed/base/http_channel_link_base_docuri.xml
 delete mode 100644 lib/feedparser/tests/wellformed/base/http_entry_author_url_base_content_location.xml
 delete mode 100644 lib/feedparser/tests/wellformed/base/http_entry_author_url_base_docuri.xml
 delete mode 100644 lib/feedparser/tests/wellformed/base/http_entry_content_base64_base_content_location.xml
 delete mode 100644 lib/feedparser/tests/wellformed/base/http_entry_content_base64_base_docuri.xml
 delete mode 100644 lib/feedparser/tests/wellformed/base/http_entry_content_base_content_location.xml
 delete mode 100644 lib/feedparser/tests/wellformed/base/http_entry_content_base_docuri.xml
 delete mode 100644 lib/feedparser/tests/wellformed/base/http_entry_content_inline_base_content_location.xml
 delete mode 100644 lib/feedparser/tests/wellformed/base/http_entry_content_inline_base_docuri.xml
 delete mode 100644 lib/feedparser/tests/wellformed/base/http_entry_contributor_url_base_content_location.xml
 delete mode 100644 lib/feedparser/tests/wellformed/base/http_entry_contributor_url_base_docuri.xml
 delete mode 100644 lib/feedparser/tests/wellformed/base/http_entry_id_base_content_location.xml
 delete mode 100644 lib/feedparser/tests/wellformed/base/http_entry_id_base_docuri.xml
 delete mode 100644 lib/feedparser/tests/wellformed/base/http_entry_link_base_content_location.xml
 delete mode 100644 lib/feedparser/tests/wellformed/base/http_entry_link_base_docuri.xml
 delete mode 100644 lib/feedparser/tests/wellformed/base/http_entry_summary_base64_base_content_location.xml
 delete mode 100644 lib/feedparser/tests/wellformed/base/http_entry_summary_base64_base_docuri.xml
 delete mode 100644 lib/feedparser/tests/wellformed/base/http_entry_summary_base_content_location.xml
 delete mode 100644 lib/feedparser/tests/wellformed/base/http_entry_summary_base_docuri.xml
 delete mode 100644 lib/feedparser/tests/wellformed/base/http_entry_summary_inline_base_content_location.xml
 delete mode 100644 lib/feedparser/tests/wellformed/base/http_entry_summary_inline_base_docuri.xml
 delete mode 100644 lib/feedparser/tests/wellformed/base/http_entry_title_base64_base_content_location.xml
 delete mode 100644 lib/feedparser/tests/wellformed/base/http_entry_title_base64_base_docuri.xml
 delete mode 100644 lib/feedparser/tests/wellformed/base/http_entry_title_base_content_location.xml
 delete mode 100644 lib/feedparser/tests/wellformed/base/http_entry_title_base_docuri.xml
 delete mode 100644 lib/feedparser/tests/wellformed/base/http_entry_title_inline_base_content_location.xml
 delete mode 100644 lib/feedparser/tests/wellformed/base/http_entry_title_inline_base_docuri.xml
 delete mode 100644 lib/feedparser/tests/wellformed/base/http_feed_author_url_base_content_location.xml
 delete mode 100644 lib/feedparser/tests/wellformed/base/http_feed_author_url_base_docuri.xml
 delete mode 100644 lib/feedparser/tests/wellformed/base/http_feed_contributor_url_base_content_location.xml
 delete mode 100644 lib/feedparser/tests/wellformed/base/http_feed_contributor_url_base_docuri.xml
 delete mode 100644 lib/feedparser/tests/wellformed/base/http_feed_copyright_base64_base_content_location.xml
 delete mode 100644 lib/feedparser/tests/wellformed/base/http_feed_copyright_base64_base_docuri.xml
 delete mode 100644 lib/feedparser/tests/wellformed/base/http_feed_copyright_base_content_location.xml
 delete mode 100644 lib/feedparser/tests/wellformed/base/http_feed_copyright_base_docuri.xml
 delete mode 100644 lib/feedparser/tests/wellformed/base/http_feed_copyright_inline_base_content_location.xml
 delete mode 100644 lib/feedparser/tests/wellformed/base/http_feed_copyright_inline_base_docuri.xml
 delete mode 100644 lib/feedparser/tests/wellformed/base/http_feed_generator_url_base_content_location.xml
 delete mode 100644 lib/feedparser/tests/wellformed/base/http_feed_generator_url_base_docuri.xml
 delete mode 100644 lib/feedparser/tests/wellformed/base/http_feed_id_base_content_location.xml
 delete mode 100644 lib/feedparser/tests/wellformed/base/http_feed_id_base_docuri.xml
 delete mode 100644 lib/feedparser/tests/wellformed/base/http_feed_info_base64_base_content_location.xml
 delete mode 100644 lib/feedparser/tests/wellformed/base/http_feed_info_base64_base_docuri.xml
 delete mode 100644 lib/feedparser/tests/wellformed/base/http_feed_info_base_content_location.xml
 delete mode 100644 lib/feedparser/tests/wellformed/base/http_feed_info_base_docuri.xml
 delete mode 100644 lib/feedparser/tests/wellformed/base/http_feed_info_inline_base_content_location.xml
 delete mode 100644 lib/feedparser/tests/wellformed/base/http_feed_info_inline_base_docuri.xml
 delete mode 100644 lib/feedparser/tests/wellformed/base/http_feed_link_base_content_location.xml
 delete mode 100644 lib/feedparser/tests/wellformed/base/http_feed_link_base_docuri.xml
 delete mode 100644 lib/feedparser/tests/wellformed/base/http_feed_tagline_base64_base_content_location.xml
 delete mode 100644 lib/feedparser/tests/wellformed/base/http_feed_tagline_base64_base_docuri.xml
 delete mode 100644 lib/feedparser/tests/wellformed/base/http_feed_tagline_base_content_location.xml
 delete mode 100644 lib/feedparser/tests/wellformed/base/http_feed_tagline_base_docuri.xml
 delete mode 100644 lib/feedparser/tests/wellformed/base/http_feed_tagline_inline_base_content_location.xml
 delete mode 100644 lib/feedparser/tests/wellformed/base/http_feed_tagline_inline_base_docuri.xml
 delete mode 100644 lib/feedparser/tests/wellformed/base/http_feed_title_base64_base_content_location.xml
 delete mode 100644 lib/feedparser/tests/wellformed/base/http_feed_title_base64_base_docuri.xml
 delete mode 100644 lib/feedparser/tests/wellformed/base/http_feed_title_base_content_location.xml
 delete mode 100644 lib/feedparser/tests/wellformed/base/http_feed_title_base_docuri.xml
 delete mode 100644 lib/feedparser/tests/wellformed/base/http_feed_title_inline_base_content_location.xml
 delete mode 100644 lib/feedparser/tests/wellformed/base/http_feed_title_inline_base_docuri.xml
 delete mode 100644 lib/feedparser/tests/wellformed/base/http_item_body_base_content_location.xml
 delete mode 100644 lib/feedparser/tests/wellformed/base/http_item_body_base_docuri.xml
 delete mode 100644 lib/feedparser/tests/wellformed/base/http_item_comments_base_content_location.xml
 delete mode 100644 lib/feedparser/tests/wellformed/base/http_item_comments_base_docuri.xml
 delete mode 100644 lib/feedparser/tests/wellformed/base/http_item_content_encoded_base_content_location.xml
 delete mode 100644 lib/feedparser/tests/wellformed/base/http_item_content_encoded_base_docuri.xml
 delete mode 100644 lib/feedparser/tests/wellformed/base/http_item_description_base_content_location.xml
 delete mode 100644 lib/feedparser/tests/wellformed/base/http_item_description_base_docuri.xml
 delete mode 100644 lib/feedparser/tests/wellformed/base/http_item_description_spaces.xml
 delete mode 100644 lib/feedparser/tests/wellformed/base/http_item_fullitem_base_content_location.xml
 delete mode 100644 lib/feedparser/tests/wellformed/base/http_item_fullitem_base_docuri.xml
 delete mode 100644 lib/feedparser/tests/wellformed/base/http_item_link_base_content_location.xml
 delete mode 100644 lib/feedparser/tests/wellformed/base/http_item_link_base_docuri.xml
 delete mode 100644 lib/feedparser/tests/wellformed/base/http_item_wfw_commentRSS_base_content_location.xml
 delete mode 100644 lib/feedparser/tests/wellformed/base/http_item_wfw_commentRSS_base_docuri.xml
 delete mode 100644 lib/feedparser/tests/wellformed/base/http_item_wfw_comment_base_content_location.xml
 delete mode 100644 lib/feedparser/tests/wellformed/base/http_item_wfw_comment_base_docuri.xml
 delete mode 100644 lib/feedparser/tests/wellformed/base/http_item_xhtml_body_base_content_location.xml
 delete mode 100644 lib/feedparser/tests/wellformed/base/http_item_xhtml_body_base_docuri.xml
 delete mode 100644 lib/feedparser/tests/wellformed/base/http_relative_xml_base.xml
 delete mode 100644 lib/feedparser/tests/wellformed/base/http_relative_xml_base_2.xml
 delete mode 100644 lib/feedparser/tests/wellformed/base/item_media_title1.xml
 delete mode 100644 lib/feedparser/tests/wellformed/base/item_media_title2.xml
 delete mode 100644 lib/feedparser/tests/wellformed/base/item_media_title3.xml
 delete mode 100644 lib/feedparser/tests/wellformed/base/malformed_base.xml
 delete mode 100644 lib/feedparser/tests/wellformed/base/rel_uri_with_unicode_character.xml
 delete mode 100644 lib/feedparser/tests/wellformed/base/relative_xml_base.xml
 delete mode 100644 lib/feedparser/tests/wellformed/base/relative_xml_base_2.xml
 delete mode 100644 lib/feedparser/tests/wellformed/base/unsafe_base.xml
 delete mode 100644 lib/feedparser/tests/wellformed/cdf/channel_abstract_map_description.xml
 delete mode 100644 lib/feedparser/tests/wellformed/cdf/channel_abstract_map_tagline.xml
 delete mode 100644 lib/feedparser/tests/wellformed/cdf/channel_href_map_link.xml
 delete mode 100644 lib/feedparser/tests/wellformed/cdf/channel_href_map_links.xml
 delete mode 100644 lib/feedparser/tests/wellformed/cdf/channel_lastmod.xml
 delete mode 100644 lib/feedparser/tests/wellformed/cdf/channel_lastmod_parsed.xml
 delete mode 100644 lib/feedparser/tests/wellformed/cdf/channel_title.xml
 delete mode 100644 lib/feedparser/tests/wellformed/cdf/item_abstract_map_description.xml
 delete mode 100644 lib/feedparser/tests/wellformed/cdf/item_abstract_map_summary.xml
 delete mode 100644 lib/feedparser/tests/wellformed/cdf/item_href_map_link.xml
 delete mode 100644 lib/feedparser/tests/wellformed/cdf/item_href_map_links.xml
 delete mode 100644 lib/feedparser/tests/wellformed/cdf/item_lastmod.xml
 delete mode 100644 lib/feedparser/tests/wellformed/cdf/item_lastmod_parsed.xml
 delete mode 100644 lib/feedparser/tests/wellformed/cdf/item_title.xml
 delete mode 100644 lib/feedparser/tests/wellformed/feedburner/feedburner_browserfriendly.xml
 delete mode 100644 lib/feedparser/tests/wellformed/http/headers_content_location-relative.xml
 delete mode 100644 lib/feedparser/tests/wellformed/http/headers_content_location-unsafe.xml
 delete mode 100644 lib/feedparser/tests/wellformed/http/headers_etag.xml
 delete mode 100644 lib/feedparser/tests/wellformed/http/headers_foo.xml
 delete mode 100644 lib/feedparser/tests/wellformed/http/headers_no_etag.xml
 delete mode 100644 lib/feedparser/tests/wellformed/itunes/itunes_channel_block.xml
 delete mode 100644 lib/feedparser/tests/wellformed/itunes/itunes_channel_block_false.xml
 delete mode 100644 lib/feedparser/tests/wellformed/itunes/itunes_channel_block_no.xml
 delete mode 100644 lib/feedparser/tests/wellformed/itunes/itunes_channel_block_true.xml
 delete mode 100644 lib/feedparser/tests/wellformed/itunes/itunes_channel_block_uppercase.xml
 delete mode 100644 lib/feedparser/tests/wellformed/itunes/itunes_channel_block_whitespace.xml
 delete mode 100644 lib/feedparser/tests/wellformed/itunes/itunes_channel_category.xml
 delete mode 100644 lib/feedparser/tests/wellformed/itunes/itunes_channel_category_nested.xml
 delete mode 100644 lib/feedparser/tests/wellformed/itunes/itunes_channel_category_scheme.xml
 delete mode 100644 lib/feedparser/tests/wellformed/itunes/itunes_channel_explicit.xml
 delete mode 100644 lib/feedparser/tests/wellformed/itunes/itunes_channel_explicit_clean.xml
 delete mode 100644 lib/feedparser/tests/wellformed/itunes/itunes_channel_explicit_false.xml
 delete mode 100644 lib/feedparser/tests/wellformed/itunes/itunes_channel_explicit_no.xml
 delete mode 100644 lib/feedparser/tests/wellformed/itunes/itunes_channel_explicit_true.xml
 delete mode 100644 lib/feedparser/tests/wellformed/itunes/itunes_channel_explicit_uppercase.xml
 delete mode 100644 lib/feedparser/tests/wellformed/itunes/itunes_channel_explicit_whitespace.xml
 delete mode 100644 lib/feedparser/tests/wellformed/itunes/itunes_channel_image.xml
 delete mode 100644 lib/feedparser/tests/wellformed/itunes/itunes_channel_image_no_href.xml
 delete mode 100644 lib/feedparser/tests/wellformed/itunes/itunes_channel_image_url.xml
 delete mode 100644 lib/feedparser/tests/wellformed/itunes/itunes_channel_keywords.xml
 delete mode 100644 lib/feedparser/tests/wellformed/itunes/itunes_channel_keywords_duplicate.xml
 delete mode 100644 lib/feedparser/tests/wellformed/itunes/itunes_channel_keywords_duplicate_2.xml
 delete mode 100644 lib/feedparser/tests/wellformed/itunes/itunes_channel_keywords_multiple.xml
 delete mode 100644 lib/feedparser/tests/wellformed/itunes/itunes_channel_link_image.xml
 delete mode 100644 lib/feedparser/tests/wellformed/itunes/itunes_channel_owner_email.xml
 delete mode 100644 lib/feedparser/tests/wellformed/itunes/itunes_channel_owner_name.xml
 delete mode 100644 lib/feedparser/tests/wellformed/itunes/itunes_channel_subtitle.xml
 delete mode 100644 lib/feedparser/tests/wellformed/itunes/itunes_channel_summary.xml
 delete mode 100644 lib/feedparser/tests/wellformed/itunes/itunes_core_element_uppercase.xml
 delete mode 100644 lib/feedparser/tests/wellformed/itunes/itunes_item_author_map_author.xml
 delete mode 100644 lib/feedparser/tests/wellformed/itunes/itunes_item_block.xml
 delete mode 100644 lib/feedparser/tests/wellformed/itunes/itunes_item_block_false.xml
 delete mode 100644 lib/feedparser/tests/wellformed/itunes/itunes_item_block_no.xml
 delete mode 100644 lib/feedparser/tests/wellformed/itunes/itunes_item_block_true.xml
 delete mode 100644 lib/feedparser/tests/wellformed/itunes/itunes_item_block_uppercase.xml
 delete mode 100644 lib/feedparser/tests/wellformed/itunes/itunes_item_block_whitespace.xml
 delete mode 100644 lib/feedparser/tests/wellformed/itunes/itunes_item_category.xml
 delete mode 100644 lib/feedparser/tests/wellformed/itunes/itunes_item_category_nested.xml
 delete mode 100644 lib/feedparser/tests/wellformed/itunes/itunes_item_category_scheme.xml
 delete mode 100644 lib/feedparser/tests/wellformed/itunes/itunes_item_duration.xml
 delete mode 100644 lib/feedparser/tests/wellformed/itunes/itunes_item_explicit.xml
 delete mode 100644 lib/feedparser/tests/wellformed/itunes/itunes_item_explicit_clean.xml
 delete mode 100644 lib/feedparser/tests/wellformed/itunes/itunes_item_explicit_false.xml
 delete mode 100644 lib/feedparser/tests/wellformed/itunes/itunes_item_explicit_no.xml
 delete mode 100644 lib/feedparser/tests/wellformed/itunes/itunes_item_explicit_true.xml
 delete mode 100644 lib/feedparser/tests/wellformed/itunes/itunes_item_explicit_uppercase.xml
 delete mode 100644 lib/feedparser/tests/wellformed/itunes/itunes_item_explicit_whitespace.xml
 delete mode 100644 lib/feedparser/tests/wellformed/itunes/itunes_item_image.xml
 delete mode 100644 lib/feedparser/tests/wellformed/itunes/itunes_item_image_url.xml
 delete mode 100644 lib/feedparser/tests/wellformed/itunes/itunes_item_link_image.xml
 delete mode 100644 lib/feedparser/tests/wellformed/itunes/itunes_item_subtitle.xml
 delete mode 100644 lib/feedparser/tests/wellformed/itunes/itunes_item_summary.xml
 delete mode 100644 lib/feedparser/tests/wellformed/itunes/itunes_namespace.xml
 delete mode 100644 lib/feedparser/tests/wellformed/itunes/itunes_namespace_example.xml
 delete mode 100644 lib/feedparser/tests/wellformed/itunes/itunes_namespace_lowercase.xml
 delete mode 100644 lib/feedparser/tests/wellformed/itunes/itunes_namespace_uppercase.xml
 delete mode 100644 lib/feedparser/tests/wellformed/lang/channel_dc_language.xml
 delete mode 100644 lib/feedparser/tests/wellformed/lang/channel_language.xml
 delete mode 100644 lib/feedparser/tests/wellformed/lang/entry_content_xml_lang.xml
 delete mode 100644 lib/feedparser/tests/wellformed/lang/entry_content_xml_lang_blank.xml
 delete mode 100644 lib/feedparser/tests/wellformed/lang/entry_content_xml_lang_blank_2.xml
 delete mode 100644 lib/feedparser/tests/wellformed/lang/entry_content_xml_lang_blank_3.xml
 delete mode 100644 lib/feedparser/tests/wellformed/lang/entry_content_xml_lang_inherit.xml
 delete mode 100644 lib/feedparser/tests/wellformed/lang/entry_content_xml_lang_inherit_2.xml
 delete mode 100644 lib/feedparser/tests/wellformed/lang/entry_content_xml_lang_inherit_3.xml
 delete mode 100644 lib/feedparser/tests/wellformed/lang/entry_content_xml_lang_inherit_4.xml
 delete mode 100644 lib/feedparser/tests/wellformed/lang/entry_content_xml_lang_underscore.xml
 delete mode 100644 lib/feedparser/tests/wellformed/lang/entry_summary_xml_lang.xml
 delete mode 100644 lib/feedparser/tests/wellformed/lang/entry_summary_xml_lang_blank.xml
 delete mode 100644 lib/feedparser/tests/wellformed/lang/entry_summary_xml_lang_inherit.xml
 delete mode 100644 lib/feedparser/tests/wellformed/lang/entry_summary_xml_lang_inherit_2.xml
 delete mode 100644 lib/feedparser/tests/wellformed/lang/entry_summary_xml_lang_inherit_3.xml
 delete mode 100644 lib/feedparser/tests/wellformed/lang/entry_summary_xml_lang_inherit_4.xml
 delete mode 100644 lib/feedparser/tests/wellformed/lang/entry_title_xml_lang.xml
 delete mode 100644 lib/feedparser/tests/wellformed/lang/entry_title_xml_lang_blank.xml
 delete mode 100644 lib/feedparser/tests/wellformed/lang/entry_title_xml_lang_inherit.xml
 delete mode 100644 lib/feedparser/tests/wellformed/lang/entry_title_xml_lang_inherit_2.xml
 delete mode 100644 lib/feedparser/tests/wellformed/lang/entry_title_xml_lang_inherit_3.xml
 delete mode 100644 lib/feedparser/tests/wellformed/lang/entry_title_xml_lang_inherit_4.xml
 delete mode 100644 lib/feedparser/tests/wellformed/lang/feed_copyright_xml_lang.xml
 delete mode 100644 lib/feedparser/tests/wellformed/lang/feed_copyright_xml_lang_blank.xml
 delete mode 100644 lib/feedparser/tests/wellformed/lang/feed_copyright_xml_lang_inherit.xml
 delete mode 100644 lib/feedparser/tests/wellformed/lang/feed_copyright_xml_lang_inherit_2.xml
 delete mode 100644 lib/feedparser/tests/wellformed/lang/feed_copyright_xml_lang_inherit_3.xml
 delete mode 100644 lib/feedparser/tests/wellformed/lang/feed_copyright_xml_lang_inherit_4.xml
 delete mode 100644 lib/feedparser/tests/wellformed/lang/feed_info_xml_lang.xml
 delete mode 100644 lib/feedparser/tests/wellformed/lang/feed_info_xml_lang_blank.xml
 delete mode 100644 lib/feedparser/tests/wellformed/lang/feed_info_xml_lang_inherit.xml
 delete mode 100644 lib/feedparser/tests/wellformed/lang/feed_info_xml_lang_inherit_2.xml
 delete mode 100644 lib/feedparser/tests/wellformed/lang/feed_info_xml_lang_inherit_3.xml
 delete mode 100644 lib/feedparser/tests/wellformed/lang/feed_info_xml_lang_inherit_4.xml
 delete mode 100644 lib/feedparser/tests/wellformed/lang/feed_language.xml
 delete mode 100644 lib/feedparser/tests/wellformed/lang/feed_language_override.xml
 delete mode 100644 lib/feedparser/tests/wellformed/lang/feed_not_xml_lang.xml
 delete mode 100644 lib/feedparser/tests/wellformed/lang/feed_not_xml_lang_2.xml
 delete mode 100644 lib/feedparser/tests/wellformed/lang/feed_tagline_xml_lang.xml
 delete mode 100644 lib/feedparser/tests/wellformed/lang/feed_tagline_xml_lang_blank.xml
 delete mode 100644 lib/feedparser/tests/wellformed/lang/feed_tagline_xml_lang_inherit.xml
 delete mode 100644 lib/feedparser/tests/wellformed/lang/feed_tagline_xml_lang_inherit_2.xml
 delete mode 100644 lib/feedparser/tests/wellformed/lang/feed_tagline_xml_lang_inherit_3.xml
 delete mode 100644 lib/feedparser/tests/wellformed/lang/feed_tagline_xml_lang_inherit_4.xml
 delete mode 100644 lib/feedparser/tests/wellformed/lang/feed_title_xml_lang.xml
 delete mode 100644 lib/feedparser/tests/wellformed/lang/feed_title_xml_lang_blank.xml
 delete mode 100644 lib/feedparser/tests/wellformed/lang/feed_title_xml_lang_inherit.xml
 delete mode 100644 lib/feedparser/tests/wellformed/lang/feed_title_xml_lang_inherit_2.xml
 delete mode 100644 lib/feedparser/tests/wellformed/lang/feed_title_xml_lang_inherit_3.xml
 delete mode 100644 lib/feedparser/tests/wellformed/lang/feed_title_xml_lang_inherit_4.xml
 delete mode 100644 lib/feedparser/tests/wellformed/lang/feed_xml_lang.xml
 delete mode 100644 lib/feedparser/tests/wellformed/lang/feed_xml_lang_underscore.xml
 delete mode 100644 lib/feedparser/tests/wellformed/lang/http_content_language.xml
 delete mode 100644 lib/feedparser/tests/wellformed/lang/http_content_language_entry_title_inherit.xml
 delete mode 100644 lib/feedparser/tests/wellformed/lang/http_content_language_entry_title_inherit_2.xml
 delete mode 100644 lib/feedparser/tests/wellformed/lang/http_content_language_feed_language.xml
 delete mode 100644 lib/feedparser/tests/wellformed/lang/http_content_language_feed_xml_lang.xml
 delete mode 100644 lib/feedparser/tests/wellformed/lang/item_content_encoded_xml_lang.xml
 delete mode 100644 lib/feedparser/tests/wellformed/lang/item_content_encoded_xml_lang_inherit.xml
 delete mode 100644 lib/feedparser/tests/wellformed/lang/item_dc_language.xml
 delete mode 100644 lib/feedparser/tests/wellformed/lang/item_fullitem_xml_lang.xml
 delete mode 100644 lib/feedparser/tests/wellformed/lang/item_fullitem_xml_lang_inherit.xml
 delete mode 100644 lib/feedparser/tests/wellformed/lang/item_xhtml_body_xml_lang.xml
 delete mode 100644 lib/feedparser/tests/wellformed/lang/item_xhtml_body_xml_lang_inherit.xml
 delete mode 100644 lib/feedparser/tests/wellformed/mf_hcard/3-5-5-org-unicode.xml
 delete mode 100644 lib/feedparser/tests/wellformed/mf_rel_tag/rel_tag_term_no_term.xml
 delete mode 100644 lib/feedparser/tests/wellformed/namespace/atommathml.xml
 delete mode 100644 lib/feedparser/tests/wellformed/namespace/atomsvg.xml
 delete mode 100644 lib/feedparser/tests/wellformed/namespace/atomsvgdctitle.xml
 delete mode 100644 lib/feedparser/tests/wellformed/namespace/atomsvgdesc.xml
 delete mode 100644 lib/feedparser/tests/wellformed/namespace/atomsvgtitle.xml
 delete mode 100644 lib/feedparser/tests/wellformed/namespace/atomthreading.xml
 delete mode 100644 lib/feedparser/tests/wellformed/namespace/atomthreadingwithentry.xml
 delete mode 100644 lib/feedparser/tests/wellformed/namespace/atomxlink.xml
 delete mode 100644 lib/feedparser/tests/wellformed/namespace/rss1.0withModules.xml
 delete mode 100644 lib/feedparser/tests/wellformed/namespace/rss1.0withModulesNoDefNS.xml
 delete mode 100644 lib/feedparser/tests/wellformed/namespace/rss1.0withModulesNoDefNSLocalNameClash.xml
 delete mode 100644 lib/feedparser/tests/wellformed/namespace/rss2.0NSwithModules.xml
 delete mode 100644 lib/feedparser/tests/wellformed/namespace/rss2.0NSwithModulesNoDefNS.xml
 delete mode 100644 lib/feedparser/tests/wellformed/namespace/rss2.0NSwithModulesNoDefNSLocalNameClash.xml
 delete mode 100644 lib/feedparser/tests/wellformed/namespace/rss2.0mathml.xml
 delete mode 100644 lib/feedparser/tests/wellformed/namespace/rss2.0noNSwithModules.xml
 delete mode 100644 lib/feedparser/tests/wellformed/namespace/rss2.0noNSwithModulesLocalNameClash.xml
 delete mode 100644 lib/feedparser/tests/wellformed/namespace/rss2.0svg.xml
 delete mode 100644 lib/feedparser/tests/wellformed/namespace/rss2.0svg5.xml
 delete mode 100644 lib/feedparser/tests/wellformed/namespace/rss2.0svgtitle.xml
 delete mode 100644 lib/feedparser/tests/wellformed/namespace/rss2.0withAtomNS.xml
 delete mode 100644 lib/feedparser/tests/wellformed/namespace/rss2.0xlink.xml
 delete mode 100644 lib/feedparser/tests/wellformed/node_precedence/atom10_arbitrary_element.xml
 delete mode 100644 lib/feedparser/tests/wellformed/node_precedence/atom10_id.xml
 delete mode 100644 lib/feedparser/tests/wellformed/node_precedence/atom10_title.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rdf/doctype_contains_entity_decl.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rdf/rdf_channel_description.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rdf/rdf_channel_link.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rdf/rdf_channel_title.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rdf/rdf_item_description.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rdf/rdf_item_link.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rdf/rdf_item_rdf_about.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rdf/rdf_item_title.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rdf/rss090_channel_title.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rdf/rss090_item_title.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rdf/rss_version_10.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rdf/rss_version_10_not_default_ns.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/aaa_wellformed.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/channel_author.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/channel_author_map_author_detail_email.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/channel_author_map_author_detail_email_2.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/channel_author_map_author_detail_email_3.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/channel_author_map_author_detail_name.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/channel_author_map_author_detail_name_2.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/channel_category.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/channel_category_domain.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/channel_category_multiple.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/channel_category_multiple_2.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/channel_cloud_domain.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/channel_cloud_path.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/channel_cloud_port.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/channel_cloud_protocol.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/channel_cloud_registerProcedure.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/channel_copyright.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/channel_dc_author.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/channel_dc_author_map_author_detail_email.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/channel_dc_author_map_author_detail_name.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/channel_dc_contributor.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/channel_dc_creator.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/channel_dc_creator_map_author_detail_email.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/channel_dc_creator_map_author_detail_name.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/channel_dc_date.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/channel_dc_date_parsed.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/channel_dc_publisher.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/channel_dc_publisher_email.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/channel_dc_publisher_name.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/channel_dc_rights.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/channel_dc_subject.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/channel_dc_subject_2.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/channel_dc_subject_multiple.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/channel_dc_title.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/channel_dcterms_created.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/channel_dcterms_created_parsed.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/channel_dcterms_issued.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/channel_dcterms_issued_parsed.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/channel_dcterms_modified.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/channel_dcterms_modified_parsed.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/channel_description.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/channel_description_escaped_markup.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/channel_description_map_tagline.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/channel_description_naked_markup.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/channel_description_shorttag.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/channel_docs.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/channel_generator.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/channel_image_description.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/channel_image_height.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/channel_image_link.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/channel_image_link_bleed.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/channel_image_link_conflict.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/channel_image_title.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/channel_image_title_conflict.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/channel_image_url.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/channel_image_width.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/channel_lastBuildDate.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/channel_lastBuildDate_parsed.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/channel_link.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/channel_managingEditor.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/channel_managingEditor_map_author_detail_email.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/channel_managingEditor_map_author_detail_name.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/channel_pubDate.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/channel_pubDate_map_updated_parsed.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/channel_textInput_description.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/channel_textInput_description_conflict.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/channel_textInput_link.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/channel_textInput_link_bleed.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/channel_textInput_link_conflict.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/channel_textInput_name.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/channel_textInput_title.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/channel_textInput_title_conflict.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/channel_title.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/channel_title_apos.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/channel_title_gt.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/channel_title_lt.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/channel_ttl.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/channel_webMaster.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/channel_webMaster_email.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/channel_webMaster_name.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/entity_in_doctype.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/item_author.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/item_author_map_author_detail_email.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/item_author_map_author_detail_email2.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/item_author_map_author_detail_email3.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/item_author_map_author_detail_name.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/item_author_map_author_detail_name2.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/item_author_map_author_detail_name3.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/item_category.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/item_category_domain.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/item_category_image.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/item_category_multiple.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/item_category_multiple_2.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/item_cc_license.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/item_comments.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/item_content_encoded.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/item_content_encoded_mode.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/item_content_encoded_type.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/item_creativeCommons_license.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/item_dc_author.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/item_dc_author_map_author_detail_email.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/item_dc_author_map_author_detail_name.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/item_dc_contributor.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/item_dc_creator.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/item_dc_creator_map_author_detail_email.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/item_dc_creator_map_author_detail_name.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/item_dc_date.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/item_dc_date_parsed.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/item_dc_description.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/item_dc_publisher.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/item_dc_publisher_email.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/item_dc_publisher_name.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/item_dc_rights.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/item_dc_subject.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/item_dc_subject_2.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/item_dc_subject_multiple.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/item_dc_title.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/item_dcterms_created.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/item_dcterms_created_parsed.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/item_dcterms_issued.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/item_dcterms_issued_parsed.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/item_dcterms_modified.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/item_dcterms_modified_parsed.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/item_description.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/item_description_and_summary.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/item_description_br.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/item_description_br_shorttag.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/item_description_code_br.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/item_description_escaped_markup.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/item_description_map_summary.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/item_description_naked_markup.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/item_description_not_a_doctype.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/item_description_not_a_doctype2.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/item_enclosure_length.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/item_enclosure_multiple.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/item_enclosure_type.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/item_enclosure_url.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/item_expirationDate.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/item_expirationDate_multiple_values.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/item_expirationDate_parsed.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/item_fullitem.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/item_fullitem_mode.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/item_fullitem_type.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/item_guid.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/item_guid_conflict_link.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/item_guid_guidislink.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/item_guid_isPermaLink_conflict_link.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/item_guid_isPermaLink_conflict_link_not_guidislink.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/item_guid_isPermaLink_guidislink.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/item_guid_isPermaLink_map_link.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/item_guid_map_link.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/item_guid_not_permalink.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/item_guid_not_permalink_conflict_link.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/item_guid_not_permalink_not_guidislink.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/item_guid_not_permalink_not_guidislink_2.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/item_guid_not_permalink_not_url.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/item_image_link_bleed.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/item_image_link_conflict.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/item_link.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/item_pubDate.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/item_pubDate_map_updated_parsed.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/item_source.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/item_source_url.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/item_summary_and_description.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/item_title.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/item_xhtml_body.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/item_xhtml_body_mode.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/item_xhtml_body_type.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/newlocation.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/rss_namespace_1.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/rss_namespace_2.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/rss_namespace_3.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/rss_namespace_4.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/rss_version_090.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/rss_version_091_netscape.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/rss_version_091_userland.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/rss_version_092.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/rss_version_093.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/rss_version_094.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/rss_version_20.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/rss_version_201.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/rss_version_21.xml
 delete mode 100644 lib/feedparser/tests/wellformed/rss/rss_version_missing.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_abbr.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_accept-charset.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_accept.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_accesskey.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_action.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_align.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_alt.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_autocomplete.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_autofocus.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_autoplay.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_axis.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_background.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_balance.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_bgcolor.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_bgproperties.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_border.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_bordercolor.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_bordercolordark.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_bordercolorlight.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_bottompadding.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_cellpadding.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_cellspacing.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_ch.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_challenge.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_char.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_charoff.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_charset.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_checked.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_choff.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_cite.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_class.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_clear.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_color.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_cols.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_colspan.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_compact.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_contenteditable.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_coords.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_data.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_datafld.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_datapagesize.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_datasrc.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_datetime.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_default.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_delay.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_dir.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_disabled.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_draggable.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_dynsrc.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_enctype.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_end.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_face.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_for.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_form.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_frame.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_galleryimg.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_gutter.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_headers.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_height.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_hidden.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_hidefocus.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_high.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_href.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_hreflang.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_hspace.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_icon.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_id.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_inputmode.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_ismap.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_keytype.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_label.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_lang.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_leftspacing.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_list.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_longdesc.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_loop.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_loopcount.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_loopend.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_loopstart.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_low.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_lowsrc.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_max.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_maxlength.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_media.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_method.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_min.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_multiple.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_name.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_nohref.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_noshade.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_nowrap.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_open.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_optimum.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_pattern.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_ping.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_point-size.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_poster.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_pqg.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_preload.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_prompt.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_radiogroup.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_readonly.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_rel.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_repeat-max.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_repeat-min.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_replace.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_required.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_rev.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_rightspacing.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_rows.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_rowspan.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_rules.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_scope.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_selected.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_shape.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_size.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_span.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_src.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_start.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_step.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_summary.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_suppress.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_tabindex.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_target.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_template.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_title.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_toppadding.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_type.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_unselectable.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_urn.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_usemap.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_valign.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_value.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_variable.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_volume.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_vrml.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_vspace.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_width.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_wrap.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_element_a.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_element_abbr.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_element_acronym.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_element_address.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_element_area.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_element_article.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_element_aside.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_element_audio.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_element_b.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_element_big.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_element_blockquote.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_element_br.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_element_button.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_element_canvas.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_element_caption.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_element_center.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_element_cite.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_element_code.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_element_col.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_element_colgroup.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_element_command.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_element_datagrid.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_element_datalist.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_element_dd.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_element_del.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_element_details.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_element_dfn.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_element_dialog.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_element_dir.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_element_div.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_element_dl.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_element_dt.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_element_em.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_element_event-source.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_element_fieldset.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_element_figure.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_element_font.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_element_footer.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_element_form.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_element_h1.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_element_h2.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_element_h3.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_element_h4.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_element_h5.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_element_h6.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_element_header.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_element_hr.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_element_i.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_element_img.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_element_input.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_element_ins.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_element_kbd.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_element_keygen.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_element_label.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_element_legend.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_element_li.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_element_m.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_element_map.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_element_menu.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_element_meter.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_element_multicol.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_element_nav.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_element_nextid.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_element_noscript.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_element_ol.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_element_optgroup.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_element_option.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_element_output.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_element_p.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_element_pre.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_element_progress.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_element_q.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_element_s.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_element_samp.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_element_section.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_element_select.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_element_small.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_element_sound.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_element_source.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_element_spacer.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_element_span.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_element_strike.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_element_strong.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_element_sub.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_element_sup.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_element_table.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_element_tbody.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_element_td.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_element_textarea.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_element_tfoot.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_element_th.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_element_thead.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_element_time.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_element_tr.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_element_tt.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_element_u.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_element_ul.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_element_var.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/acceptable_element_video.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/blogger_dollar_sign_in_attribute.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/entry_content_applet.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/entry_content_blink.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/entry_content_crazy.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/entry_content_embed.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/entry_content_frame.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/entry_content_iframe.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/entry_content_link.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/entry_content_meta.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/entry_content_object.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/entry_content_onabort.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/entry_content_onblur.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/entry_content_onchange.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/entry_content_onclick.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/entry_content_ondblclick.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/entry_content_onerror.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/entry_content_onfocus.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/entry_content_onkeydown.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/entry_content_onkeypress.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/entry_content_onkeyup.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/entry_content_onload.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/entry_content_onmousedown.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/entry_content_onmouseout.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/entry_content_onmouseover.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/entry_content_onmouseup.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/entry_content_onreset.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/entry_content_onresize.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/entry_content_onsubmit.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/entry_content_onunload.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/entry_content_script.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/entry_content_script_base64.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/entry_content_script_cdata.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/entry_content_script_inline.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/entry_content_style.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/entry_content_style_tag.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/entry_summary_applet.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/entry_summary_blink.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/entry_summary_crazy.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/entry_summary_embed.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/entry_summary_frame.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/entry_summary_iframe.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/entry_summary_link.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/entry_summary_meta.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/entry_summary_object.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/entry_summary_onabort.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/entry_summary_onblur.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/entry_summary_onchange.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/entry_summary_onclick.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/entry_summary_ondblclick.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/entry_summary_onerror.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/entry_summary_onfocus.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/entry_summary_onkeydown.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/entry_summary_onkeypress.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/entry_summary_onkeyup.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/entry_summary_onload.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/entry_summary_onmousedown.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/entry_summary_onmouseout.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/entry_summary_onmouseover.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/entry_summary_onmouseup.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/entry_summary_onreset.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/entry_summary_onresize.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/entry_summary_onsubmit.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/entry_summary_onunload.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/entry_summary_script.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/entry_summary_script_base64.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/entry_summary_script_cdata.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/entry_summary_script_inline.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/entry_summary_script_map_description.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/entry_summary_style.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/entry_title_applet.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/entry_title_blink.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/entry_title_crazy.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/entry_title_embed.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/entry_title_frame.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/entry_title_iframe.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/entry_title_link.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/entry_title_meta.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/entry_title_object.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/entry_title_onabort.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/entry_title_onblur.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/entry_title_onchange.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/entry_title_onclick.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/entry_title_ondblclick.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/entry_title_onerror.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/entry_title_onfocus.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/entry_title_onkeydown.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/entry_title_onkeypress.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/entry_title_onkeyup.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/entry_title_onload.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/entry_title_onmousedown.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/entry_title_onmouseout.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/entry_title_onmouseover.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/entry_title_onmouseup.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/entry_title_onreset.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/entry_title_onresize.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/entry_title_onsubmit.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/entry_title_onunload.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/entry_title_script.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/entry_title_script_cdata.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/entry_title_script_inline.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/entry_title_style.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_copyright_applet.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_copyright_blink.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_copyright_crazy.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_copyright_embed.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_copyright_frame.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_copyright_iframe.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_copyright_link.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_copyright_meta.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_copyright_object.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_copyright_onabort.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_copyright_onblur.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_copyright_onchange.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_copyright_onclick.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_copyright_ondblclick.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_copyright_onerror.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_copyright_onfocus.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_copyright_onkeydown.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_copyright_onkeypress.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_copyright_onkeyup.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_copyright_onload.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_copyright_onmousedown.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_copyright_onmouseout.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_copyright_onmouseover.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_copyright_onmouseup.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_copyright_onreset.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_copyright_onresize.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_copyright_onsubmit.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_copyright_onunload.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_copyright_script.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_copyright_script_cdata.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_copyright_script_inline.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_copyright_style.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_info_applet.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_info_blink.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_info_crazy.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_info_embed.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_info_frame.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_info_iframe.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_info_link.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_info_meta.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_info_object.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_info_onabort.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_info_onblur.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_info_onchange.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_info_onclick.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_info_ondblclick.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_info_onerror.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_info_onfocus.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_info_onkeydown.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_info_onkeypress.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_info_onkeyup.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_info_onload.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_info_onmousedown.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_info_onmouseout.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_info_onmouseover.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_info_onmouseup.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_info_onreset.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_info_onresize.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_info_onsubmit.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_info_onunload.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_info_script.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_info_script_cdata.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_info_script_inline.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_info_style.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_subtitle_applet.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_subtitle_blink.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_subtitle_crazy.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_subtitle_embed.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_subtitle_frame.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_subtitle_iframe.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_subtitle_link.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_subtitle_meta.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_subtitle_object.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onabort.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onblur.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onchange.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onclick.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_subtitle_ondblclick.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onerror.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onfocus.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onkeydown.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onkeypress.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onkeyup.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onload.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onmousedown.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onmouseout.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onmouseover.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onmouseup.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onreset.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onresize.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onsubmit.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onunload.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_subtitle_script.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_subtitle_script_cdata.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_subtitle_script_inline.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_subtitle_style.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_tagline_applet.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_tagline_blink.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_tagline_crazy.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_tagline_embed.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_tagline_frame.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_tagline_iframe.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_tagline_link.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_tagline_meta.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_tagline_object.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_tagline_onabort.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_tagline_onblur.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_tagline_onchange.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_tagline_onclick.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_tagline_ondblclick.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_tagline_onerror.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_tagline_onfocus.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_tagline_onkeydown.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_tagline_onkeypress.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_tagline_onkeyup.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_tagline_onload.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_tagline_onmousedown.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_tagline_onmouseout.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_tagline_onmouseover.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_tagline_onmouseup.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_tagline_onreset.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_tagline_onresize.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_tagline_onsubmit.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_tagline_onunload.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_tagline_script.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_tagline_script_cdata.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_tagline_script_inline.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_tagline_script_map_description.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_tagline_style.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_title_applet.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_title_blink.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_title_crazy.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_title_embed.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_title_frame.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_title_iframe.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_title_link.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_title_meta.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_title_object.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_title_onabort.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_title_onblur.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_title_onchange.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_title_onclick.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_title_ondblclick.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_title_onerror.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_title_onfocus.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_title_onkeydown.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_title_onkeypress.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_title_onkeyup.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_title_onload.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_title_onmousedown.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_title_onmouseout.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_title_onmouseover.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_title_onmouseup.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_title_onreset.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_title_onresize.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_title_onsubmit.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_title_onunload.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_title_script.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_title_script_cdata.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_title_script_inline.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_title_style.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/feed_title_unacceptable_uri.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_body_applet.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_body_blink.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_body_embed.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_body_frame.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_body_iframe.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_body_link.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_body_meta.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_body_object.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_body_onabort.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_body_onblur.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_body_onchange.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_body_onclick.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_body_ondblclick.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_body_onerror.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_body_onfocus.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_body_onkeydown.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_body_onkeypress.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_body_onkeyup.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_body_onload.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_body_onmousedown.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_body_onmouseout.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_body_onmouseover.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_body_onmouseup.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_body_onreset.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_body_onresize.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_body_onsubmit.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_body_onunload.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_body_script.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_body_script_map_content.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_body_style.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_content_encoded_applet.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_content_encoded_blink.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_content_encoded_crazy.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_content_encoded_embed.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_content_encoded_frame.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_content_encoded_iframe.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_content_encoded_link.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_content_encoded_map_content.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_content_encoded_meta.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_content_encoded_object.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onabort.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onblur.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onchange.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onclick.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_content_encoded_ondblclick.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onerror.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onfocus.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onkeydown.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onkeypress.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onkeyup.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onload.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onmousedown.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onmouseout.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onmouseover.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onmouseup.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onreset.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onresize.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onsubmit.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onunload.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_content_encoded_script.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_content_encoded_script_cdata.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_content_encoded_script_map_content.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_content_encoded_script_nested_cdata.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_content_encoded_style.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_description_applet.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_description_blink.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_description_crazy.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_description_embed.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_description_frame.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_description_iframe.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_description_link.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_description_meta.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_description_object.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_description_onabort.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_description_onblur.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_description_onchange.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_description_onclick.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_description_ondblclick.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_description_onerror.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_description_onfocus.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_description_onkeydown.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_description_onkeypress.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_description_onkeyup.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_description_onload.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_description_onmousedown.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_description_onmouseout.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_description_onmouseover.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_description_onmouseup.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_description_onreset.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_description_onresize.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_description_onsubmit.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_description_onunload.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_description_script.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_description_script_cdata.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_description_script_map_summary.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_description_style.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_fullitem_applet.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_fullitem_blink.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_fullitem_crazy.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_fullitem_embed.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_fullitem_frame.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_fullitem_iframe.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_fullitem_link.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_fullitem_meta.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_fullitem_object.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_fullitem_onabort.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_fullitem_onblur.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_fullitem_onchange.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_fullitem_onclick.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_fullitem_ondblclick.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_fullitem_onerror.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_fullitem_onfocus.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_fullitem_onkeydown.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_fullitem_onkeypress.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_fullitem_onkeyup.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_fullitem_onload.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_fullitem_onmousedown.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_fullitem_onmouseout.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_fullitem_onmouseover.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_fullitem_onmouseup.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_fullitem_onreset.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_fullitem_onresize.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_fullitem_onsubmit.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_fullitem_onunload.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_fullitem_script.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_fullitem_script_cdata.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_fullitem_script_map_summary.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_fullitem_style.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_applet.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_blink.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_embed.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_frame.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_iframe.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_link.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_meta.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_object.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onabort.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onblur.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onchange.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onclick.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_ondblclick.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onerror.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onfocus.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onkeydown.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onkeypress.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onkeyup.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onload.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onmousedown.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onmouseout.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onmouseover.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onmouseup.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onreset.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onresize.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onsubmit.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onunload.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_script.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_script_map_content.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_style.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/large_atom_feed_that_needs_css_sanitisation.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/style_background_repeat_repeat_x.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/style_background_url.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/style_background_yellow.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/style_border_0.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/style_border_1px_solid_rgb_0_0_0_.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/style_border_3px_solid_ccc.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/style_border_bottom_0pt.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/style_border_bottom_dashed.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/style_border_bottom_dotted.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/style_border_collapse_collapse.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/style_border_left_0pt.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/style_border_medium_none_.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/style_border_none_important.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/style_border_right_0pt.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/style_border_solid_2px_000000.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/style_border_top_0pt.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/style_clear_both.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/style_color_000080.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/style_color_008.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/style_color_999999.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/style_color_blue.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/style_color_maroon.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/style_color_red.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/style_color_rgb_0_128_0_.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/style_color_teal.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/style_cursor_pointer.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/style_display_block.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/style_float_left.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/style_float_right.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/style_font_family__comic_sans_ms.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/style_font_family_arial_sans_serif.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/style_font_family_lucida_console_.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/style_font_family_symbol.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/style_font_size_0_9em.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/style_font_size_10pt.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/style_font_size_10px.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/style_font_size_smaller.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/style_font_style_italic.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/style_font_weight_bold.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/style_height_100px.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/style_height_2px.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/style_letter_spacing_1px.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/style_line_height_normal.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/style_margin_0.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/style_margin_0_15px_0_0.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/style_margin_0px_important.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/style_margin_5px.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/style_margin_99999em.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/style_margin_bottom_0pt.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/style_margin_bottom_10px.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/style_margin_left_5px.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/style_margin_right_0px.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/style_margin_top_0in.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/style_margin_top_10px.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/style_moz_background_clip_initial.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/style_mso_ansi_language_nl.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/style_mso_bidi_font_weight_normal.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/style_mso_highlight_yellow.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/style_mso_layout_grid_align_none.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/style_mso_list_l0_level1_lfo1.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/style_mso_no_proof_yes.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/style_mso_spacerun_yes.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/style_mso_tab_count_3.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/style_overflow_auto.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/style_padding_0.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/style_padding_0_0_12px_12px.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/style_padding_2ex.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/style_padding_99999em.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/style_padding_left_4px.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/style_padding_right_0in.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/style_position_absolute.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/style_tab_stops_list_5in.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/style_text_align_center.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/style_text_align_left.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/style_text_align_right.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/style_text_decoration_underline.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/style_text_indent_0_5in.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/style_vertical_align_bottom.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/style_vertical_align_top.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/style_white_space_nowrap.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/style_white_space_top.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/style_width_300px.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/xml_declaration_unexpected_character.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/xml_malicious_comment.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sanitize/xml_unclosed_comment.xml
 delete mode 100644 lib/feedparser/tests/wellformed/sgml/charref_uppercase_x.xml
 delete mode 100644 lib/feedparser/tests/wellformed/xml/empty_xmlns_uri.xml
 delete mode 100644 lib/feedparser/tests/wellformed/xml/escaped_apos.xml
 delete mode 100644 lib/feedparser/tests/wellformed/xml/xlink_ns_no_prefix.xml
 create mode 100644 lib/feedparser/urls.py
 create mode 100644 lib/feedparser/util.py

diff --git a/lib/feedcache/__init__.py b/lib/feedcache/__init__.py
deleted file mode 100644
index 96ebc1020..000000000
--- a/lib/feedcache/__init__.py
+++ /dev/null
@@ -1,44 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright 2007 Doug Hellmann.
-#
-#
-#                         All Rights Reserved
-#
-# Permission to use, copy, modify, and distribute this software and
-# its documentation for any purpose and without fee is hereby
-# granted, provided that the above copyright notice appear in all
-# copies and that both that copyright notice and this permission
-# notice appear in supporting documentation, and that the name of Doug
-# Hellmann not be used in advertising or publicity pertaining to
-# distribution of the software without specific, written prior
-# permission.
-#
-# DOUG HELLMANN DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN
-# NO EVENT SHALL DOUG HELLMANN BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
-# OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
-# NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
-# CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-#
-
-"""
-
-"""
-
-__module_id__ = "$Id$"
-
-#
-# Import system modules
-#
-
-
-#
-# Import local modules
-#
-from cache import Cache
-
-#
-# Module
-#
diff --git a/lib/feedcache/cache.py b/lib/feedcache/cache.py
deleted file mode 100644
index 7520d51ae..000000000
--- a/lib/feedcache/cache.py
+++ /dev/null
@@ -1,212 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright 2007 Doug Hellmann.
-#
-#
-#                         All Rights Reserved
-#
-# Permission to use, copy, modify, and distribute this software and
-# its documentation for any purpose and without fee is hereby
-# granted, provided that the above copyright notice appear in all
-# copies and that both that copyright notice and this permission
-# notice appear in supporting documentation, and that the name of Doug
-# Hellmann not be used in advertising or publicity pertaining to
-# distribution of the software without specific, written prior
-# permission.
-#
-# DOUG HELLMANN DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN
-# NO EVENT SHALL DOUG HELLMANN BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
-# OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
-# NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
-# CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-#
-
-"""
-
-"""
-
-__module_id__ = "$Id$"
-
-#
-# Import system modules
-#
-from feedparser import feedparser
-
-import logging
-import time
-
-#
-# Import local modules
-#
-
-
-#
-# Module
-#
-
-logger = logging.getLogger('feedcache.cache')
-
-
-class Cache:
-    """A class to wrap Mark Pilgrim's Universal Feed Parser module
-    (http://www.feedparser.org) so that parameters can be used to
-    cache the feed results locally instead of fetching the feed every
-    time it is requested. Uses both etag and modified times for
-    caching.
-    """
-
-    def __init__(self, storage, timeToLiveSeconds=300, userAgent='feedcache'):
-        """
-        Arguments:
-
-          storage -- Backing store for the cache.  It should follow
-          the dictionary API, with URLs used as keys.  It should
-          persist data.
-
-          timeToLiveSeconds=300 -- The length of time content should
-          live in the cache before an update is attempted.
-
-          userAgent='feedcache' -- User agent string to be used when
-          fetching feed contents.
-
-        """
-        self.storage = storage
-        self.time_to_live = timeToLiveSeconds
-        self.user_agent = userAgent
-        return
-
-    def purge(self, olderThanSeconds):
-        """Remove cached data from the storage if the data is older than the
-        date given.  If olderThanSeconds is None, the entire cache is purged.
-        """
-        if olderThanSeconds is None:
-            logger.debug('purging the entire cache')
-            for key in self.storage.keys():
-                del self.storage[key]
-        else:
-            now = time.time()
-            # Iterate over the keys and load each item one at a time
-            # to avoid having the entire cache loaded into memory
-            # at one time.
-            for url in self.storage.keys():
-                (cached_time, cached_data) = self.storage[url]
-                age = now - cached_time
-                if age >= olderThanSeconds:
-                    logger.debug('removing %s with age %d', url, age)
-                    del self.storage[url]
-        return
-
-    def fetch(self, url, force_update=False, offline=False, request_headers=None, referrer=None, handlers=[]):
-        """Return the feed at url.
-
-        url - The URL of the feed.
-
-        force_update=False - When True, update the cache whether the
-                                           current contents have
-                                           exceeded their time-to-live
-                                           or not.
-
-        offline=False - When True, only return data from the local
-                                 cache and never access the remote
-                                 URL.
-
-        request_headers=None - Add addition request headers to request
-
-        referrer=None - Added a referrer to request
-
-        handlers=None - Urllib2 handlers
-
-        If there is data for that feed in the cache already, check
-        the expiration date before accessing the server.  If the
-        cached data has not expired, return it without accessing the
-        server.
-
-        In cases where the server is accessed, check for updates
-        before deciding what to return.  If the server reports a
-        status of 304, the previously cached content is returned.
-
-        The cache is only updated if the server returns a status of
-        200, to avoid holding redirected data in the cache.
-        """
-        logger.debug('url="%s"' % url)
-
-        # Convert the URL to a value we can use
-        # as a key for the storage backend.
-        key = url
-        if isinstance(key, unicode):
-            key = key.encode('utf-8')
-
-        modified = None
-        etag = None
-        now = time.time()
-
-        cached_time, cached_content = self.storage.get(key, (None, None))
-
-        # Offline mode support (no networked requests)
-        # so return whatever we found in the storage.
-        # If there is nothing in the storage, we'll be returning None.
-        if offline:
-            logger.debug('offline mode')
-            return cached_content
-
-        # Does the storage contain a version of the data
-        # which is older than the time-to-live?
-        logger.debug('cache modified time: %s' % str(cached_time))
-        if cached_time is not None and not force_update:
-            if self.time_to_live:
-                age = now - cached_time
-                if age <= self.time_to_live:
-                    logger.debug('cache contents still valid')
-                    return cached_content
-                else:
-                    logger.debug('cache contents older than TTL')
-            else:
-                logger.debug('no TTL value')
-
-            # The cache is out of date, but we have
-            # something.  Try to use the etag and modified_time
-            # values from the cached content.
-            etag = cached_content.get('etag')
-            modified = cached_content.get('modified')
-            logger.debug('cached etag=%s' % etag)
-            logger.debug('cached modified=%s' % str(modified))
-        else:
-            logger.debug('nothing in the cache, or forcing update')
-
-        # We know we need to fetch, so go ahead and do it.
-        logger.debug('fetching...')
-        parsed_result = feedparser.parse(url,
-                                         agent=self.user_agent,
-                                         modified=modified,
-                                         etag=etag,
-                                         referrer=referrer,
-                                         request_headers=request_headers,
-                                         handlers = handlers)
-
-        status = parsed_result.get('status', None)
-        logger.debug('HTTP status=%s' % status)
-        if status == 304:
-            # No new data, based on the etag or modified values.
-            # We need to update the modified time in the
-            # storage, though, so we know that what we have
-            # stored is up to date.
-            self.storage[key] = (now, cached_content)
-
-            # Return the data from the cache, since
-            # the parsed data will be empty.
-            parsed_result = cached_content
-        elif status == 200:
-            # There is new content, so store it unless there was an error.
-            error = parsed_result.get('bozo_exception')
-            if not error:
-                logger.debug('Updating stored data for %s' % url)
-                self.storage[key] = (now, parsed_result)
-            else:
-                logger.warning('Not storing data with exception: %s',
-                               error)
-        else:
-            logger.warning('Not updating cache with HTTP status %s', status)
-
-        return parsed_result
diff --git a/lib/feedcache/cachestoragelock.py b/lib/feedcache/cachestoragelock.py
deleted file mode 100644
index 05babde64..000000000
--- a/lib/feedcache/cachestoragelock.py
+++ /dev/null
@@ -1,69 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright 2007 Doug Hellmann.
-#
-#
-#                         All Rights Reserved
-#
-# Permission to use, copy, modify, and distribute this software and
-# its documentation for any purpose and without fee is hereby
-# granted, provided that the above copyright notice appear in all
-# copies and that both that copyright notice and this permission
-# notice appear in supporting documentation, and that the name of Doug
-# Hellmann not be used in advertising or publicity pertaining to
-# distribution of the software without specific, written prior
-# permission.
-#
-# DOUG HELLMANN DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN
-# NO EVENT SHALL DOUG HELLMANN BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
-# OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
-# NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
-# CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-#
-from __future__ import with_statement
-
-"""Lock wrapper for cache storage which do not permit multi-threaded access.
-
-"""
-
-__module_id__ = "$Id$"
-
-#
-# Import system modules
-#
-import threading
-
-#
-# Import local modules
-#
-
-
-#
-# Module
-#
-
-class CacheStorageLock:
-    """Lock wrapper for cache storage which do not permit multi-threaded access.
-    """
-
-    def __init__(self, shelf):
-        self.lock = threading.Lock()
-        self.shelf = shelf
-        return
-
-    def __getitem__(self, key):
-        with self.lock:
-            return self.shelf[key]
-
-    def get(self, key, default=None):
-        with self.lock:
-            try:
-                return self.shelf[key]
-            except KeyError:
-                return default
-
-    def __setitem__(self, key, value):
-        with self.lock:
-            self.shelf[key] = value
diff --git a/lib/feedcache/example.py b/lib/feedcache/example.py
deleted file mode 100644
index 4df7ab68b..000000000
--- a/lib/feedcache/example.py
+++ /dev/null
@@ -1,63 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright 2007 Doug Hellmann.
-#
-#
-#                         All Rights Reserved
-#
-# Permission to use, copy, modify, and distribute this software and
-# its documentation for any purpose and without fee is hereby
-# granted, provided that the above copyright notice appear in all
-# copies and that both that copyright notice and this permission
-# notice appear in supporting documentation, and that the name of Doug
-# Hellmann not be used in advertising or publicity pertaining to
-# distribution of the software without specific, written prior
-# permission.
-#
-# DOUG HELLMANN DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN
-# NO EVENT SHALL DOUG HELLMANN BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
-# OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
-# NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
-# CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-#
-
-"""Example use of feedcache.Cache.
-
-"""
-
-__module_id__ = "$Id$"
-
-#
-# Import system modules
-#
-import sys
-import shelve
-
-#
-# Import local modules
-#
-import cache
-
-#
-# Module
-#
-
-def main(urls=[]):
-    print 'Saving feed data to ./.feedcache'
-    storage = shelve.open('.feedcache')
-    try:
-        fc = cache.Cache(storage)
-        for url in urls:
-            parsed_data = fc.fetch(url)
-            print parsed_data.feed.title
-            for entry in parsed_data.entries:
-                print '\t', entry.title
-    finally:
-        storage.close()
-    return
-
-if __name__ == '__main__':
-    main(sys.argv[1:])
-
diff --git a/lib/feedcache/example_threads.py b/lib/feedcache/example_threads.py
deleted file mode 100644
index 2eb56d302..000000000
--- a/lib/feedcache/example_threads.py
+++ /dev/null
@@ -1,144 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright 2007 Doug Hellmann.
-#
-#
-#                         All Rights Reserved
-#
-# Permission to use, copy, modify, and distribute this software and
-# its documentation for any purpose and without fee is hereby
-# granted, provided that the above copyright notice appear in all
-# copies and that both that copyright notice and this permission
-# notice appear in supporting documentation, and that the name of Doug
-# Hellmann not be used in advertising or publicity pertaining to
-# distribution of the software without specific, written prior
-# permission.
-#
-# DOUG HELLMANN DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN
-# NO EVENT SHALL DOUG HELLMANN BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
-# OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
-# NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
-# CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-#
-
-"""Example use of feedcache.Cache combined with threads.
-
-"""
-
-__module_id__ = "$Id$"
-
-#
-# Import system modules
-#
-import Queue
-import sys
-import shove
-import threading
-
-#
-# Import local modules
-#
-import cache
-
-#
-# Module
-#
-
-MAX_THREADS=5
-OUTPUT_DIR='/tmp/feedcache_example'
-
-
-def main(urls=[]):
-
-    if not urls:
-        print 'Specify the URLs to a few RSS or Atom feeds on the command line.'
-        return
-
-    # Decide how many threads to start
-    num_threads = min(len(urls), MAX_THREADS)
-
-    # Add the URLs to a queue
-    url_queue = Queue.Queue()
-    for url in urls:
-        url_queue.put(url)
-
-    # Add poison pills to the url queue to cause
-    # the worker threads to break out of their loops
-    for i in range(num_threads):
-        url_queue.put(None)
-
-    # Track the entries in the feeds being fetched
-    entry_queue = Queue.Queue()
-
-    print 'Saving feed data to', OUTPUT_DIR
-    storage = shove.Shove('file://' + OUTPUT_DIR)
-    try:
-
-        # Start a few worker threads
-        worker_threads = []
-        for i in range(num_threads):
-            t = threading.Thread(target=fetch_urls, 
-                                 args=(storage, url_queue, entry_queue,))
-            worker_threads.append(t)
-            t.setDaemon(True)
-            t.start()
-
-        # Start a thread to print the results
-        printer_thread = threading.Thread(target=print_entries, args=(entry_queue,))
-        printer_thread.setDaemon(True)
-        printer_thread.start()
-
-        # Wait for all of the URLs to be processed
-        url_queue.join()
-
-        # Wait for the worker threads to finish
-        for t in worker_threads:
-            t.join()
-
-        # Poison the print thread and wait for it to exit
-        entry_queue.put((None,None))
-        entry_queue.join()
-        printer_thread.join()        
-        
-    finally:
-        storage.close()
-    return
-
-
-def fetch_urls(storage, input_queue, output_queue):
-    """Thread target for fetching feed data.
-    """
-    c = cache.Cache(storage)
-
-    while True:
-        next_url = input_queue.get()
-        if next_url is None: # None causes thread to exit
-            input_queue.task_done()
-            break
-
-        feed_data = c.fetch(next_url)
-        for entry in feed_data.entries:
-            output_queue.put( (feed_data.feed, entry) )
-        input_queue.task_done()
-    return
-
-
-def print_entries(input_queue):
-    """Thread target for printing the contents of the feeds.
-    """
-    while True:
-        feed, entry = input_queue.get()
-        if feed is None: # None causes thread to exist
-            input_queue.task_done()
-            break
-
-        print '%s: %s' % (feed.title, entry.title)
-        input_queue.task_done()
-    return
-
-
-if __name__ == '__main__':
-    main(sys.argv[1:])
-
diff --git a/lib/feedcache/test_cache.py b/lib/feedcache/test_cache.py
deleted file mode 100644
index 2c1ac0966..000000000
--- a/lib/feedcache/test_cache.py
+++ /dev/null
@@ -1,323 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright 2007 Doug Hellmann.
-#
-#
-#                         All Rights Reserved
-#
-# Permission to use, copy, modify, and distribute this software and
-# its documentation for any purpose and without fee is hereby
-# granted, provided that the above copyright notice appear in all
-# copies and that both that copyright notice and this permission
-# notice appear in supporting documentation, and that the name of Doug
-# Hellmann not be used in advertising or publicity pertaining to
-# distribution of the software without specific, written prior
-# permission.
-#
-# DOUG HELLMANN DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN
-# NO EVENT SHALL DOUG HELLMANN BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
-# OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
-# NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
-# CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-#
-
-"""Unittests for feedcache.cache
-
-"""
-
-__module_id__ = "$Id$"
-
-import logging
-logging.basicConfig(level=logging.DEBUG,
-                    format='%(asctime)s %(levelname)-8s %(name)s %(message)s',
-                    )
-logger = logging.getLogger('feedcache.test_cache')
-
-#
-# Import system modules
-#
-import copy
-import time
-import unittest
-import UserDict
-
-#
-# Import local modules
-#
-import cache
-from test_server import HTTPTestBase, TestHTTPServer
-
-#
-# Module
-#
-
-
-class CacheTestBase(HTTPTestBase):
-
-    CACHE_TTL = 30
-
-    def setUp(self):
-        HTTPTestBase.setUp(self)
-
-        self.storage = self.getStorage()
-        self.cache = cache.Cache(self.storage,
-                                 timeToLiveSeconds=self.CACHE_TTL,
-                                 userAgent='feedcache.test',
-                                 )
-        return
-
-    def getStorage(self):
-        "Return a cache storage for the test."
-        return {}
-
-
-class CacheTest(CacheTestBase):
-
-    CACHE_TTL = 30
-
-    def getServer(self):
-        "These tests do not want to use the ETag or If-Modified-Since headers"
-        return TestHTTPServer(applyModifiedHeaders=False)
-
-    def testRetrieveNotInCache(self):
-        # Retrieve data not already in the cache.
-        feed_data = self.cache.fetch(self.TEST_URL)
-        self.failUnless(feed_data)
-        self.failUnlessEqual(feed_data.feed.title, 'CacheTest test data')
-        return
-
-    def testRetrieveIsInCache(self):
-        # Retrieve data which is alread in the cache,
-        # and verify that the second copy is identitical
-        # to the first.
-
-        # First fetch
-        feed_data = self.cache.fetch(self.TEST_URL)
-
-        # Second fetch
-        feed_data2 = self.cache.fetch(self.TEST_URL)
-
-        # Since it is the in-memory storage, we should have the
-        # exact same object.
-        self.failUnless(feed_data is feed_data2)
-        return
-
-    def testExpireDataInCache(self):
-        # Retrieve data which is in the cache but which
-        # has expired and verify that the second copy
-        # is different from the first.
-
-        # First fetch
-        feed_data = self.cache.fetch(self.TEST_URL)
-
-        # Change the timeout and sleep to move the clock
-        self.cache.time_to_live = 0
-        time.sleep(1)
-
-        # Second fetch
-        feed_data2 = self.cache.fetch(self.TEST_URL)
-
-        # Since we reparsed, the cache response should be different.
-        self.failIf(feed_data is feed_data2)
-        return
-
-    def testForceUpdate(self):
-        # Force cache to retrieve data which is alread in the cache,
-        # and verify that the new data is different.
-
-        # Pre-populate the storage with bad data
-        self.cache.storage[self.TEST_URL] = (time.time() + 100, self.id())
-
-        # Fetch the data
-        feed_data = self.cache.fetch(self.TEST_URL, force_update=True)
-
-        self.failIfEqual(feed_data, self.id())
-        return
-
-    def testOfflineMode(self):
-        # Retrieve data which is alread in the cache,
-        # whether it is expired or not.
-
-        # Pre-populate the storage with data
-        self.cache.storage[self.TEST_URL] = (0, self.id())
-
-        # Fetch it
-        feed_data = self.cache.fetch(self.TEST_URL, offline=True)
-
-        self.failUnlessEqual(feed_data, self.id())
-        return
-
-    def testUnicodeURL(self):
-        # Pass in a URL which is unicode
-
-        url = unicode(self.TEST_URL)
-        feed_data = self.cache.fetch(url)
-
-        storage = self.cache.storage
-        key = unicode(self.TEST_URL).encode('UTF-8')
-
-        # Verify that the storage has a key
-        self.failUnless(key in storage)
-
-        # Now pull the data from the storage directly
-        storage_timeout, storage_data = self.cache.storage.get(key)
-        self.failUnlessEqual(feed_data, storage_data)
-        return
-
-
-class SingleWriteMemoryStorage(UserDict.UserDict):
-    """Cache storage which only allows the cache value
-    for a URL to be updated one time.
-    """
-
-    def __setitem__(self, url, data):
-        if url in self.keys():
-            modified, existing = self[url]
-            # Allow the modified time to change,
-            # but not the feed content.
-            if data[1] != existing:
-                raise AssertionError('Trying to update cache for %s to %s' \
-                                         % (url, data))
-        UserDict.UserDict.__setitem__(self, url, data)
-        return
-
-
-class CacheConditionalGETTest(CacheTestBase):
-
-    CACHE_TTL = 0
-
-    def getStorage(self):
-        return SingleWriteMemoryStorage()
-
-    def testFetchOnceForEtag(self):
-        # Fetch data which has a valid ETag value, and verify
-        # that while we hit the server twice the response
-        # codes cause us to use the same data.
-
-        # First fetch populates the cache
-        response1 = self.cache.fetch(self.TEST_URL)
-        self.failUnlessEqual(response1.feed.title, 'CacheTest test data')
-
-        # Remove the modified setting from the cache so we know
-        # the next time we check the etag will be used
-        # to check for updates.  Since we are using an in-memory
-        # cache, modifying response1 updates the cache storage
-        # directly.
-        response1['modified'] = None
-
-        # This should result in a 304 status, and no data from
-        # the server.  That means the cache won't try to
-        # update the storage, so our SingleWriteMemoryStorage
-        # should not raise and we should have the same
-        # response object.
-        response2 = self.cache.fetch(self.TEST_URL)
-        self.failUnless(response1 is response2)
-
-        # Should have hit the server twice
-        self.failUnlessEqual(self.server.getNumRequests(), 2)
-        return
-
-    def testFetchOnceForModifiedTime(self):
-        # Fetch data which has a valid Last-Modified value, and verify
-        # that while we hit the server twice the response
-        # codes cause us to use the same data.
-
-        # First fetch populates the cache
-        response1 = self.cache.fetch(self.TEST_URL)
-        self.failUnlessEqual(response1.feed.title, 'CacheTest test data')
-
-        # Remove the etag setting from the cache so we know
-        # the next time we check the modified time will be used
-        # to check for updates.  Since we are using an in-memory
-        # cache, modifying response1 updates the cache storage
-        # directly.
-        response1['etag'] = None
-
-        # This should result in a 304 status, and no data from
-        # the server.  That means the cache won't try to
-        # update the storage, so our SingleWriteMemoryStorage
-        # should not raise and we should have the same
-        # response object.
-        response2 = self.cache.fetch(self.TEST_URL)
-        self.failUnless(response1 is response2)
-
-        # Should have hit the server twice
-        self.failUnlessEqual(self.server.getNumRequests(), 2)
-        return
-
-
-class CacheRedirectHandlingTest(CacheTestBase):
-
-    def _test(self, response):
-        # Set up the server to redirect requests,
-        # then verify that the cache is not updated
-        # for the original or new URL and that the
-        # redirect status is fed back to us with
-        # the fetched data.
-
-        self.server.setResponse(response, '/redirected')
-
-        response1 = self.cache.fetch(self.TEST_URL)
-
-        # The response should include the status code we set
-        self.failUnlessEqual(response1.get('status'), response)
-
-        # The response should include the new URL, too
-        self.failUnlessEqual(response1.href, self.TEST_URL + 'redirected')
-
-        # The response should not have been cached under either URL
-        self.failIf(self.TEST_URL in self.storage)
-        self.failIf(self.TEST_URL + 'redirected' in self.storage)
-        return
-
-    def test301(self):
-        self._test(301)
-
-    def test302(self):
-        self._test(302)
-
-    def test303(self):
-        self._test(303)
-
-    def test307(self):
-        self._test(307)
-
-
-class CachePurgeTest(CacheTestBase):
-
-    def testPurgeAll(self):
-        # Remove everything from the cache
-
-        self.cache.fetch(self.TEST_URL)
-        self.failUnless(self.storage.keys(),
-                        'Have no data in the cache storage')
-
-        self.cache.purge(None)
-
-        self.failIf(self.storage.keys(),
-                    'Still have data in the cache storage')
-        return
-
-    def testPurgeByAge(self):
-        # Remove old content from the cache
-
-        self.cache.fetch(self.TEST_URL)
-        self.failUnless(self.storage.keys(),
-                        'have no data in the cache storage')
-
-        time.sleep(1)
-
-        remains = (time.time(), copy.deepcopy(self.storage[self.TEST_URL][1]))
-        self.storage['http://this.should.remain/'] = remains
-
-        self.cache.purge(1)
-
-        self.failUnlessEqual(self.storage.keys(),
-                             ['http://this.should.remain/'])
-        return
-
-
-if __name__ == '__main__':
-    unittest.main()
diff --git a/lib/feedcache/test_cachestoragelock.py b/lib/feedcache/test_cachestoragelock.py
deleted file mode 100644
index 741a39abe..000000000
--- a/lib/feedcache/test_cachestoragelock.py
+++ /dev/null
@@ -1,90 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright 2007 Doug Hellmann.
-#
-#
-#                         All Rights Reserved
-#
-# Permission to use, copy, modify, and distribute this software and
-# its documentation for any purpose and without fee is hereby
-# granted, provided that the above copyright notice appear in all
-# copies and that both that copyright notice and this permission
-# notice appear in supporting documentation, and that the name of Doug
-# Hellmann not be used in advertising or publicity pertaining to
-# distribution of the software without specific, written prior
-# permission.
-#
-# DOUG HELLMANN DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN
-# NO EVENT SHALL DOUG HELLMANN BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
-# OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
-# NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
-# CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-#
-
-"""Tests for shelflock.
-
-"""
-
-__module_id__ = "$Id$"
-
-#
-# Import system modules
-#
-import os
-import shelve
-import tempfile
-import threading
-import unittest
-
-#
-# Import local modules
-#
-from cache import Cache
-from cachestoragelock import CacheStorageLock
-from test_server import HTTPTestBase
-
-#
-# Module
-#
-
-class CacheShelveTest(HTTPTestBase):
-
-    def setUp(self):
-        HTTPTestBase.setUp(self)
-        handle, self.shelve_filename = tempfile.mkstemp('.shelve')
-        os.close(handle) # we just want the file name, so close the open handle
-        os.unlink(self.shelve_filename) # remove the empty file
-        return
-
-    def tearDown(self):
-        try:
-            os.unlink(self.shelve_filename)
-        except AttributeError:
-            pass
-        HTTPTestBase.tearDown(self)
-        return
-
-    def test(self):
-        storage = shelve.open(self.shelve_filename)
-        locking_storage = CacheStorageLock(storage)
-        try:
-            fc = Cache(locking_storage)
-
-            # First fetch the data through the cache
-            parsed_data = fc.fetch(self.TEST_URL)
-            self.failUnlessEqual(parsed_data.feed.title, 'CacheTest test data')
-
-            # Now retrieve the same data directly from the shelf
-            modified, shelved_data = storage[self.TEST_URL]
-            
-            # The data should be the same
-            self.failUnlessEqual(parsed_data, shelved_data)
-        finally:
-            storage.close()
-        return
-
-
-if __name__ == '__main__':
-    unittest.main()
diff --git a/lib/feedcache/test_server.py b/lib/feedcache/test_server.py
deleted file mode 100644
index f48be105b..000000000
--- a/lib/feedcache/test_server.py
+++ /dev/null
@@ -1,241 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright 2007 Doug Hellmann.
-#
-#
-#                         All Rights Reserved
-#
-# Permission to use, copy, modify, and distribute this software and
-# its documentation for any purpose and without fee is hereby
-# granted, provided that the above copyright notice appear in all
-# copies and that both that copyright notice and this permission
-# notice appear in supporting documentation, and that the name of Doug
-# Hellmann not be used in advertising or publicity pertaining to
-# distribution of the software without specific, written prior
-# permission.
-#
-# DOUG HELLMANN DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN
-# NO EVENT SHALL DOUG HELLMANN BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
-# OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
-# NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
-# CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-#
-
-"""Simple HTTP server for testing the feed cache.
-
-"""
-
-__module_id__ = "$Id$"
-
-#
-# Import system modules
-#
-import BaseHTTPServer
-import logging
-import md5
-import threading
-import time
-import unittest
-import urllib
-
-#
-# Import local modules
-#
-
-
-#
-# Module
-#
-logger = logging.getLogger('feedcache.test_server')
-
-
-def make_etag(data):
-    """Given a string containing data to be returned to the client,
-    compute an ETag value for the data.
-    """
-    _md5 = md5.new()
-    _md5.update(data)
-    return _md5.hexdigest()
-
-
-class TestHTTPHandler(BaseHTTPServer.BaseHTTPRequestHandler):
-    "HTTP request handler which serves the same feed data every time."
-
-    FEED_DATA = """<?xml version="1.0" encoding="utf-8"?>
-
-<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-us">
-  <title>CacheTest test data</title>
-  <link href="http://localhost/feedcache/" rel="alternate"></link>
-  <link href="http://localhost/feedcache/atom/" rel="self"></link>
-  <id>http://localhost/feedcache/</id>
-  <updated>2006-10-14T11:00:36Z</updated>
-  <entry>
-    <title>single test entry</title>
-    <link href="http://www.example.com/" rel="alternate"></link>
-    <updated>2006-10-14T11:00:36Z</updated>
-    <author>
-      <name>author goes here</name>
-      <email>authoremail@example.com</email>
-    </author>
-    <id>http://www.example.com/</id>
-    <summary type="html">description goes here</summary>
-    <link length="100" href="http://www.example.com/enclosure" type="text/html" rel="enclosure">
-    </link>
-  </entry>
-</feed>"""
-
-    # The data does not change, so save the ETag and modified times
-    # as class attributes.
-    ETAG = make_etag(FEED_DATA)
-    # Calculated using email.utils.formatdate(usegmt=True)
-    MODIFIED_TIME = 'Sun, 08 Apr 2012 20:16:48 GMT'
-
-    def do_GET(self):
-        "Handle GET requests."
-        logger.debug('GET %s', self.path)
-
-        if self.path == '/shutdown':
-            # Shortcut to handle stopping the server
-            logger.debug('Stopping server')
-            self.server.stop()
-            self.send_response(200)
-
-        else:
-            # Record the request for tests that count them
-            self.server.requests.append(self.path)
-            # Process the request
-            logger.debug('pre-defined response code: %d', self.server.response)
-            handler_method_name = 'do_GET_%d' % self.server.response
-            handler_method = getattr(self, handler_method_name)
-            handler_method()
-        return
-
-    def do_GET_3xx(self):
-        "Handle redirects"
-        if self.path.endswith('/redirected'):
-            logger.debug('already redirected')
-            # We have already redirected, so return the data.
-            return self.do_GET_200()
-        new_path = self.server.new_path
-        logger.debug('redirecting to %s', new_path)
-        self.send_response(self.server.response)
-        self.send_header('Location', new_path)
-        return
-
-    do_GET_301 = do_GET_3xx
-    do_GET_302 = do_GET_3xx
-    do_GET_303 = do_GET_3xx
-    do_GET_307 = do_GET_3xx
-
-    def do_GET_200(self):
-        logger.debug('Etag: %s' % self.ETAG)
-        logger.debug('Last-Modified: %s' % self.MODIFIED_TIME)
-
-        incoming_etag = self.headers.get('If-None-Match', None)
-        logger.debug('Incoming ETag: "%s"' % incoming_etag)
-
-        incoming_modified = self.headers.get('If-Modified-Since', None)
-        logger.debug('Incoming If-Modified-Since: %s' % incoming_modified)
-
-        send_data = True
-
-        # Does the client have the same version of the data we have?
-        if self.server.apply_modified_headers:
-            if incoming_etag == self.ETAG:
-                logger.debug('Response 304, etag')
-                self.send_response(304)
-                send_data = False
-
-            elif incoming_modified == self.MODIFIED_TIME:
-                logger.debug('Response 304, modified time')
-                self.send_response(304)
-                send_data = False
-
-        # Now optionally send the data, if the client needs it
-        if send_data:
-            logger.debug('Response 200')
-            self.send_response(200)
-
-            self.send_header('Content-Type', 'application/atom+xml')
-
-            logger.debug('Outgoing Etag: %s' % self.ETAG)
-            self.send_header('ETag', self.ETAG)
-
-            logger.debug('Outgoing modified time: %s' % self.MODIFIED_TIME)
-            self.send_header('Last-Modified', self.MODIFIED_TIME)
-
-            self.end_headers()
-
-            logger.debug('Sending data')
-            self.wfile.write(self.FEED_DATA)
-        return
-
-
-class TestHTTPServer(BaseHTTPServer.HTTPServer):
-    """HTTP Server which counts the number of requests made
-    and can stop based on client instructions.
-    """
-
-    def __init__(self, applyModifiedHeaders=True, handler=TestHTTPHandler):
-        self.apply_modified_headers = applyModifiedHeaders
-        self.keep_serving = True
-        self.requests = []
-        self.setResponse(200)
-        BaseHTTPServer.HTTPServer.__init__(self, ('', 9999), handler)
-        return
-
-    def setResponse(self, newResponse, newPath=None):
-        """Sets the response code to use for future requests, and a new
-        path to be used as a redirect target, if necessary.
-        """
-        self.response = newResponse
-        self.new_path = newPath
-        return
-
-    def getNumRequests(self):
-        "Return the number of requests which have been made on the server."
-        return len(self.requests)
-
-    def stop(self):
-        "Stop serving requests, after the next request."
-        self.keep_serving = False
-        return
-
-    def serve_forever(self):
-        "Main loop for server"
-        while self.keep_serving:
-            self.handle_request()
-        logger.debug('exiting')
-        return
-
-
-class HTTPTestBase(unittest.TestCase):
-    "Base class for tests that use a TestHTTPServer"
-
-    TEST_URL = 'http://localhost:9999/'
-
-    CACHE_TTL = 0
-
-    def setUp(self):
-        self.server = self.getServer()
-        self.server_thread = threading.Thread(target=self.server.serve_forever)
-        # set daemon flag so the tests don't hang if cleanup fails
-        self.server_thread.setDaemon(True)
-        self.server_thread.start()
-        return
-
-    def getServer(self):
-        "Return a web server for the test."
-        s = TestHTTPServer()
-        s.setResponse(200)
-        return s
-
-    def tearDown(self):
-        # Stop the server thread
-        urllib.urlretrieve(self.TEST_URL + 'shutdown')
-        time.sleep(1)
-        self.server.server_close()
-        self.server_thread.join()
-        return
diff --git a/lib/feedcache/test_shovefilesystem.py b/lib/feedcache/test_shovefilesystem.py
deleted file mode 100644
index 1a48deada..000000000
--- a/lib/feedcache/test_shovefilesystem.py
+++ /dev/null
@@ -1,89 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright 2007 Doug Hellmann.
-#
-#
-#                         All Rights Reserved
-#
-# Permission to use, copy, modify, and distribute this software and
-# its documentation for any purpose and without fee is hereby
-# granted, provided that the above copyright notice appear in all
-# copies and that both that copyright notice and this permission
-# notice appear in supporting documentation, and that the name of Doug
-# Hellmann not be used in advertising or publicity pertaining to
-# distribution of the software without specific, written prior
-# permission.
-#
-# DOUG HELLMANN DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN
-# NO EVENT SHALL DOUG HELLMANN BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
-# OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
-# NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
-# CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-#
-
-"""Tests with shove filesystem storage.
-
-"""
-
-__module_id__ = "$Id$"
-
-#
-# Import system modules
-#
-import os
-import shove
-import tempfile
-import threading
-import unittest
-
-#
-# Import local modules
-#
-from cache import Cache
-from test_server import HTTPTestBase
-
-#
-# Module
-#
-
-class CacheShoveTest(HTTPTestBase):
-
-    def setUp(self):
-        HTTPTestBase.setUp(self)
-        self.shove_dirname = tempfile.mkdtemp('shove')
-        return
-
-    def tearDown(self):
-        try:
-            os.system('rm -rf %s' % self.storage_dirname)
-        except AttributeError:
-            pass
-        HTTPTestBase.tearDown(self)
-        return
-
-    def test(self):
-        # First fetch the data through the cache
-        storage = shove.Shove('file://' + self.shove_dirname)
-        try:
-            fc = Cache(storage)
-            parsed_data = fc.fetch(self.TEST_URL)
-            self.failUnlessEqual(parsed_data.feed.title, 'CacheTest test data')
-        finally:
-            storage.close()
-
-        # Now retrieve the same data directly from the shelf
-        storage = shove.Shove('file://' + self.shove_dirname)
-        try:
-            modified, shelved_data = storage[self.TEST_URL]
-        finally:
-            storage.close()
-            
-        # The data should be the same
-        self.failUnlessEqual(parsed_data, shelved_data)
-        return
-
-
-if __name__ == '__main__':
-    unittest.main()
diff --git a/lib/feedparser/__init__.py b/lib/feedparser/__init__.py
index e69de29bb..a52b39a2b 100644
--- a/lib/feedparser/__init__.py
+++ b/lib/feedparser/__init__.py
@@ -0,0 +1,44 @@
+# Copyright 2010-2015 Kurt McKee <contactme@kurtmckee.org>
+# Copyright 2002-2008 Mark Pilgrim
+# All rights reserved.
+#
+# This file is part of feedparser.
+#
+# Redistribution and use in source and binary forms, with or without modification,
+# are permitted provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice,
+#   this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice,
+#   this list of conditions and the following disclaimer in the documentation
+#   and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE."""
+
+from __future__ import absolute_import, unicode_literals
+
+__author__ = 'Kurt McKee <contactme@kurtmckee.org>'
+__license__ = 'BSD 2-clause'
+__version__ = '5.2.1'
+
+# HTTP "User-Agent" header to send to servers when downloading feeds.
+# If you are embedding feedparser in a larger application, you should
+# change this to your application name and URL.
+USER_AGENT = "feedparser/%s +https://github.com/kurtmckee/feedparser/" % __version__
+
+from . import api
+from .api import parse
+from .datetimes import registerDateHandler
+from .exceptions import *
+
+api.USER_AGENT = USER_AGENT
diff --git a/lib/feedparser/api.py b/lib/feedparser/api.py
new file mode 100644
index 000000000..812880c38
--- /dev/null
+++ b/lib/feedparser/api.py
@@ -0,0 +1,247 @@
+# The public API for feedparser
+# Copyright 2010-2015 Kurt McKee <contactme@kurtmckee.org>
+# Copyright 2002-2008 Mark Pilgrim
+# All rights reserved.
+#
+# This file is a part of feedparser.
+#
+# Redistribution and use in source and binary forms, with or without modification,
+# are permitted provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice,
+#   this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice,
+#   this list of conditions and the following disclaimer in the documentation
+#   and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+
+from __future__ import absolute_import, unicode_literals
+
+import xml.sax
+
+try:
+    from io import BytesIO as _StringIO
+except ImportError:
+    try:
+        from cStringIO import StringIO as _StringIO
+    except ImportError:
+        from StringIO import StringIO as _StringIO
+
+try:
+    import urllib.parse
+except ImportError:
+    from urlparse import urlparse
+
+    class urllib(object):
+        class parse(object):
+            urlparse = staticmethod(urlparse)
+
+from .datetimes import registerDateHandler, _parse_date
+from .encodings import convert_to_utf8
+from .exceptions import *
+from .html import _BaseHTMLProcessor
+from . import http
+from . import mixin
+from .mixin import _FeedParserMixin
+from .parsers.loose import _LooseFeedParser
+from .parsers.strict import _StrictFeedParser
+from .sanitizer import replace_doctype
+from .sgml import *
+from .urls import _convert_to_idn, _makeSafeAbsoluteURI
+from .util import FeedParserDict
+
+bytes_ = type(b'')
+unicode_ = type('')
+try:
+    unichr
+    basestring
+except NameError:
+    unichr = chr
+    basestring = str
+
+# List of preferred XML parsers, by SAX driver name.  These will be tried first,
+# but if they're not installed, Python will keep searching through its own list
+# of pre-installed parsers until it finds one that supports everything we need.
+PREFERRED_XML_PARSERS = ["drv_libxml2"]
+
+# If you want feedparser to automatically resolve all relative URIs, set this
+# to 1.
+RESOLVE_RELATIVE_URIS = 1
+
+# If you want feedparser to automatically sanitize all potentially unsafe
+# HTML content, set this to 1.
+SANITIZE_HTML = 1
+
+_XML_AVAILABLE = True
+mixin.RESOLVE_RELATIVE_URIS = RESOLVE_RELATIVE_URIS
+mixin.SANITIZE_HTML = SANITIZE_HTML
+
+SUPPORTED_VERSIONS = {
+    '': 'unknown',
+    'rss090': 'RSS 0.90',
+    'rss091n': 'RSS 0.91 (Netscape)',
+    'rss091u': 'RSS 0.91 (Userland)',
+    'rss092': 'RSS 0.92',
+    'rss093': 'RSS 0.93',
+    'rss094': 'RSS 0.94',
+    'rss20': 'RSS 2.0',
+    'rss10': 'RSS 1.0',
+    'rss': 'RSS (unknown version)',
+    'atom01': 'Atom 0.1',
+    'atom02': 'Atom 0.2',
+    'atom03': 'Atom 0.3',
+    'atom10': 'Atom 1.0',
+    'atom': 'Atom (unknown version)',
+    'cdf': 'CDF',
+}
+
+def _open_resource(url_file_stream_or_string, etag, modified, agent, referrer, handlers, request_headers, result):
+    """URL, filename, or string --> stream
+
+    This function lets you define parsers that take any input source
+    (URL, pathname to local or network file, or actual data as a string)
+    and deal with it in a uniform manner.  Returned object is guaranteed
+    to have all the basic stdio read methods (read, readline, readlines).
+    Just .close() the object when you're done with it.
+
+    If the etag argument is supplied, it will be used as the value of an
+    If-None-Match request header.
+
+    If the modified argument is supplied, it can be a tuple of 9 integers
+    (as returned by gmtime() in the standard Python time module) or a date
+    string in any format supported by feedparser. Regardless, it MUST
+    be in GMT (Greenwich Mean Time). It will be reformatted into an
+    RFC 1123-compliant date and used as the value of an If-Modified-Since
+    request header.
+
+    If the agent argument is supplied, it will be used as the value of a
+    User-Agent request header.
+
+    If the referrer argument is supplied, it will be used as the value of a
+    Referer[sic] request header.
+
+    If handlers is supplied, it is a list of handlers used to build a
+    urllib2 opener.
+
+    if request_headers is supplied it is a dictionary of HTTP request headers
+    that will override the values generated by FeedParser.
+
+    :return: A :class:`StringIO.StringIO` or :class:`io.BytesIO`.
+    """
+
+    if hasattr(url_file_stream_or_string, 'read'):
+        return url_file_stream_or_string.read()
+
+    if isinstance(url_file_stream_or_string, basestring) \
+       and urllib.parse.urlparse(url_file_stream_or_string)[0] in ('http', 'https', 'ftp', 'file', 'feed'):
+        return http.get(url_file_stream_or_string, etag, modified, agent, referrer, handlers, request_headers, result)
+
+    # try to open with native open function (if url_file_stream_or_string is a filename)
+    try:
+        with open(url_file_stream_or_string, 'rb') as f:
+            data = f.read()
+    except (IOError, UnicodeEncodeError, TypeError):
+        # if url_file_stream_or_string is a unicode object that
+        # cannot be converted to the encoding returned by
+        # sys.getfilesystemencoding(), a UnicodeEncodeError
+        # will be thrown
+        # If url_file_stream_or_string is a string that contains NULL
+        # (such as an XML document encoded in UTF-32), TypeError will
+        # be thrown.
+        pass
+    else:
+        return data
+
+    # treat url_file_stream_or_string as string
+    if not isinstance(url_file_stream_or_string, bytes_):
+        return url_file_stream_or_string.encode('utf-8')
+    return url_file_stream_or_string
+
+LooseFeedParser = type(str('LooseFeedParser'), (
+    _LooseFeedParser, _FeedParserMixin, _BaseHTMLProcessor, object
+), {})
+StrictFeedParser = type(str('StrictFeedParser'), (
+    _StrictFeedParser, _FeedParserMixin, xml.sax.handler.ContentHandler, object
+), {})
+
+def parse(url_file_stream_or_string, etag=None, modified=None, agent=None, referrer=None, handlers=None, request_headers=None, response_headers=None):
+    '''Parse a feed from a URL, file, stream, or string.
+
+    request_headers, if given, is a dict from http header name to value to add
+    to the request; this overrides internally generated values.
+
+    :return: A :class:`FeedParserDict`.
+    '''
+
+    if not agent:
+        agent = USER_AGENT
+    result = FeedParserDict(
+        bozo = False,
+        entries = [],
+        feed = FeedParserDict(),
+        headers = {},
+    )
+
+    data = _open_resource(url_file_stream_or_string, etag, modified, agent, referrer, handlers, request_headers, result)
+
+    if not data:
+        return result
+
+    # overwrite existing headers using response_headers
+    result['headers'].update(response_headers or {})
+
+    data = convert_to_utf8(result['headers'], data, result)
+    use_strict_parser = result['encoding'] and True or False
+
+    result['version'], data, entities = replace_doctype(data)
+
+    # Ensure that baseuri is an absolute URI using an acceptable URI scheme.
+    contentloc = result['headers'].get('content-location', '')
+    href = result.get('href', '')
+    baseuri = _makeSafeAbsoluteURI(href, contentloc) or _makeSafeAbsoluteURI(contentloc) or href
+
+    baselang = result['headers'].get('content-language', None)
+    if isinstance(baselang, bytes_) and baselang is not None:
+        baselang = baselang.decode('utf-8', 'ignore')
+
+    if not _XML_AVAILABLE:
+        use_strict_parser = 0
+    if use_strict_parser:
+        # initialize the SAX parser
+        feedparser = StrictFeedParser(baseuri, baselang, 'utf-8')
+        saxparser = xml.sax.make_parser(PREFERRED_XML_PARSERS)
+        saxparser.setFeature(xml.sax.handler.feature_namespaces, 1)
+        try:
+            # disable downloading external doctype references, if possible
+            saxparser.setFeature(xml.sax.handler.feature_external_ges, 0)
+        except xml.sax.SAXNotSupportedException:
+            pass
+        saxparser.setContentHandler(feedparser)
+        saxparser.setErrorHandler(feedparser)
+        source = xml.sax.xmlreader.InputSource()
+        source.setByteStream(_StringIO(data))
+        try:
+            saxparser.parse(source)
+        except xml.sax.SAXException as e:
+            result['bozo'] = 1
+            result['bozo_exception'] = feedparser.exc or e
+            use_strict_parser = 0
+    if not use_strict_parser and _SGML_AVAILABLE:
+        feedparser = LooseFeedParser(baseuri, baselang, 'utf-8', entities)
+        feedparser.feed(data.decode('utf-8', 'replace'))
+    result['feed'] = feedparser.feeddata
+    result['entries'] = feedparser.entries
+    result['version'] = result['version'] or feedparser.version
+    result['namespaces'] = feedparser.namespacesInUse
+    return result
diff --git a/lib/feedparser/datetimes/__init__.py b/lib/feedparser/datetimes/__init__.py
new file mode 100644
index 000000000..96b45e9d8
--- /dev/null
+++ b/lib/feedparser/datetimes/__init__.py
@@ -0,0 +1,41 @@
+from __future__ import absolute_import
+
+from .asctime import _parse_date_asctime
+from .greek import _parse_date_greek
+from .hungarian import _parse_date_hungarian
+from .iso8601 import _parse_date_iso8601
+from .korean import _parse_date_onblog, _parse_date_nate
+from .perforce import _parse_date_perforce
+from .rfc822 import _parse_date_rfc822
+from .w3dtf import _parse_date_w3dtf
+
+_date_handlers = []
+def registerDateHandler(func):
+    '''Register a date handler function (takes string, returns 9-tuple date in GMT)'''
+    _date_handlers.insert(0, func)
+
+def _parse_date(dateString):
+    '''Parses a variety of date formats into a 9-tuple in GMT'''
+    if not dateString:
+        return None
+    for handler in _date_handlers:
+        try:
+            date9tuple = handler(dateString)
+        except (KeyError, OverflowError, ValueError):
+            continue
+        if not date9tuple:
+            continue
+        if len(date9tuple) != 9:
+            continue
+        return date9tuple
+    return None
+
+registerDateHandler(_parse_date_onblog)
+registerDateHandler(_parse_date_nate)
+registerDateHandler(_parse_date_greek)
+registerDateHandler(_parse_date_hungarian)
+registerDateHandler(_parse_date_perforce)
+registerDateHandler(_parse_date_asctime)
+registerDateHandler(_parse_date_iso8601)
+registerDateHandler(_parse_date_rfc822)
+registerDateHandler(_parse_date_w3dtf)
diff --git a/lib/feedparser/datetimes/asctime.py b/lib/feedparser/datetimes/asctime.py
new file mode 100644
index 000000000..54fc8cbbf
--- /dev/null
+++ b/lib/feedparser/datetimes/asctime.py
@@ -0,0 +1,32 @@
+from __future__ import absolute_import, unicode_literals
+
+from .rfc822 import _parse_date_rfc822
+
+_months = ['jan', 'feb', 'mar', 'apr', 'may', 'jun',
+           'jul', 'aug', 'sep', 'oct', 'nov', 'dec']
+def _parse_date_asctime(dt):
+    """Parse asctime-style dates.
+
+    Converts asctime to RFC822-compatible dates and uses the RFC822 parser
+    to do the actual parsing.
+
+    Supported formats (format is standardized to the first one listed):
+
+    * {weekday name} {month name} dd hh:mm:ss {+-tz} yyyy
+    * {weekday name} {month name} dd hh:mm:ss yyyy
+    """
+
+    parts = dt.split()
+
+    # Insert a GMT timezone, if needed.
+    if len(parts) == 5:
+        parts.insert(4, '+0000')
+
+    # Exit if there are not six parts.
+    if len(parts) != 6:
+        return None
+
+    # Reassemble the parts in an RFC822-compatible order and parse them.
+    return _parse_date_rfc822(' '.join([
+        parts[0], parts[2], parts[1], parts[5], parts[3], parts[4],
+    ]))
diff --git a/lib/feedparser/datetimes/greek.py b/lib/feedparser/datetimes/greek.py
new file mode 100644
index 000000000..e47d92152
--- /dev/null
+++ b/lib/feedparser/datetimes/greek.py
@@ -0,0 +1,56 @@
+from __future__ import absolute_import, unicode_literals
+
+import re
+
+from .rfc822 import _parse_date_rfc822
+
+# Unicode strings for Greek date strings
+_greek_months = \
+  { \
+   '\u0399\u03b1\u03bd': 'Jan',       # c9e1ed in iso-8859-7
+   '\u03a6\u03b5\u03b2': 'Feb',       # d6e5e2 in iso-8859-7
+   '\u039c\u03ac\u03ce': 'Mar',       # ccdcfe in iso-8859-7
+   '\u039c\u03b1\u03ce': 'Mar',       # cce1fe in iso-8859-7
+   '\u0391\u03c0\u03c1': 'Apr',       # c1f0f1 in iso-8859-7
+   '\u039c\u03ac\u03b9': 'May',       # ccdce9 in iso-8859-7
+   '\u039c\u03b1\u03ca': 'May',       # cce1fa in iso-8859-7
+   '\u039c\u03b1\u03b9': 'May',       # cce1e9 in iso-8859-7
+   '\u0399\u03bf\u03cd\u03bd': 'Jun', # c9effded in iso-8859-7
+   '\u0399\u03bf\u03bd': 'Jun',       # c9efed in iso-8859-7
+   '\u0399\u03bf\u03cd\u03bb': 'Jul', # c9effdeb in iso-8859-7
+   '\u0399\u03bf\u03bb': 'Jul',       # c9f9eb in iso-8859-7
+   '\u0391\u03cd\u03b3': 'Aug',       # c1fde3 in iso-8859-7
+   '\u0391\u03c5\u03b3': 'Aug',       # c1f5e3 in iso-8859-7
+   '\u03a3\u03b5\u03c0': 'Sep',       # d3e5f0 in iso-8859-7
+   '\u039f\u03ba\u03c4': 'Oct',       # cfeaf4 in iso-8859-7
+   '\u039d\u03bf\u03ad': 'Nov',       # cdefdd in iso-8859-7
+   '\u039d\u03bf\u03b5': 'Nov',       # cdefe5 in iso-8859-7
+   '\u0394\u03b5\u03ba': 'Dec',       # c4e5ea in iso-8859-7
+  }
+
+_greek_wdays = \
+  { \
+   '\u039a\u03c5\u03c1': 'Sun', # caf5f1 in iso-8859-7
+   '\u0394\u03b5\u03c5': 'Mon', # c4e5f5 in iso-8859-7
+   '\u03a4\u03c1\u03b9': 'Tue', # d4f1e9 in iso-8859-7
+   '\u03a4\u03b5\u03c4': 'Wed', # d4e5f4 in iso-8859-7
+   '\u03a0\u03b5\u03bc': 'Thu', # d0e5ec in iso-8859-7
+   '\u03a0\u03b1\u03c1': 'Fri', # d0e1f1 in iso-8859-7
+   '\u03a3\u03b1\u03b2': 'Sat', # d3e1e2 in iso-8859-7
+  }
+
+_greek_date_format_re = \
+    re.compile('([^,]+),\s+(\d{2})\s+([^\s]+)\s+(\d{4})\s+(\d{2}):(\d{2}):(\d{2})\s+([^\s]+)')
+
+def _parse_date_greek(dateString):
+    '''Parse a string according to a Greek 8-bit date format.'''
+    m = _greek_date_format_re.match(dateString)
+    if not m:
+        return
+    wday = _greek_wdays[m.group(1)]
+    month = _greek_months[m.group(3)]
+    rfc822date = '%(wday)s, %(day)s %(month)s %(year)s %(hour)s:%(minute)s:%(second)s %(zonediff)s' % \
+                 {'wday': wday, 'day': m.group(2), 'month': month, 'year': m.group(4),\
+                  'hour': m.group(5), 'minute': m.group(6), 'second': m.group(7),\
+                  'zonediff': m.group(8)}
+    return _parse_date_rfc822(rfc822date)
diff --git a/lib/feedparser/datetimes/hungarian.py b/lib/feedparser/datetimes/hungarian.py
new file mode 100644
index 000000000..11c56b451
--- /dev/null
+++ b/lib/feedparser/datetimes/hungarian.py
@@ -0,0 +1,43 @@
+from __future__ import absolute_import, unicode_literals
+
+import re
+
+from .w3dtf import _parse_date_w3dtf
+
+# Unicode strings for Hungarian date strings
+_hungarian_months = \
+  { \
+    'janu\u00e1r':   '01',  # e1 in iso-8859-2
+    'febru\u00e1ri': '02',  # e1 in iso-8859-2
+    'm\u00e1rcius':  '03',  # e1 in iso-8859-2
+    '\u00e1prilis':  '04',  # e1 in iso-8859-2
+    'm\u00e1ujus':   '05',  # e1 in iso-8859-2
+    'j\u00fanius':   '06',  # fa in iso-8859-2
+    'j\u00falius':   '07',  # fa in iso-8859-2
+    'augusztus':     '08',
+    'szeptember':    '09',
+    'okt\u00f3ber':  '10',  # f3 in iso-8859-2
+    'november':      '11',
+    'december':      '12',
+  }
+
+_hungarian_date_format_re = \
+  re.compile('(\d{4})-([^-]+)-(\d{,2})T(\d{,2}):(\d{2})((\+|-)(\d{,2}:\d{2}))')
+
+def _parse_date_hungarian(dateString):
+    '''Parse a string according to a Hungarian 8-bit date format.'''
+    m = _hungarian_date_format_re.match(dateString)
+    if not m or m.group(2) not in _hungarian_months:
+        return None
+    month = _hungarian_months[m.group(2)]
+    day = m.group(3)
+    if len(day) == 1:
+        day = '0' + day
+    hour = m.group(4)
+    if len(hour) == 1:
+        hour = '0' + hour
+    w3dtfdate = '%(year)s-%(month)s-%(day)sT%(hour)s:%(minute)s%(zonediff)s' % \
+                {'year': m.group(1), 'month': month, 'day': day,\
+                 'hour': hour, 'minute': m.group(5),\
+                 'zonediff': m.group(6)}
+    return _parse_date_w3dtf(w3dtfdate)
diff --git a/lib/feedparser/datetimes/iso8601.py b/lib/feedparser/datetimes/iso8601.py
new file mode 100644
index 000000000..eb36e2db9
--- /dev/null
+++ b/lib/feedparser/datetimes/iso8601.py
@@ -0,0 +1,120 @@
+from __future__ import absolute_import, unicode_literals
+
+import re
+import time
+
+# ISO-8601 date parsing routines written by Fazal Majid.
+# The ISO 8601 standard is very convoluted and irregular - a full ISO 8601
+# parser is beyond the scope of feedparser and would be a worthwhile addition
+# to the Python library.
+# A single regular expression cannot parse ISO 8601 date formats into groups
+# as the standard is highly irregular (for instance is 030104 2003-01-04 or
+# 0301-04-01), so we use templates instead.
+# Please note the order in templates is significant because we need a
+# greedy match.
+_iso8601_tmpl = ['YYYY-?MM-?DD', 'YYYY-0MM?-?DD', 'YYYY-MM', 'YYYY-?OOO',
+                'YY-?MM-?DD', 'YY-?OOO', 'YYYY',
+                '-YY-?MM', '-OOO', '-YY',
+                '--MM-?DD', '--MM',
+                '---DD',
+                'CC', '']
+_iso8601_re = [
+    tmpl.replace(
+    'YYYY', r'(?P<year>\d{4})').replace(
+    'YY', r'(?P<year>\d\d)').replace(
+    'MM', r'(?P<month>[01]\d)').replace(
+    'DD', r'(?P<day>[0123]\d)').replace(
+    'OOO', r'(?P<ordinal>[0123]\d\d)').replace(
+    'CC', r'(?P<century>\d\d$)')
+    + r'(T?(?P<hour>\d{2}):(?P<minute>\d{2})'
+    + r'(:(?P<second>\d{2}))?'
+    + r'(\.(?P<fracsecond>\d+))?'
+    + r'(?P<tz>[+-](?P<tzhour>\d{2})(:(?P<tzmin>\d{2}))?|Z)?)?'
+    for tmpl in _iso8601_tmpl]
+try:
+    del tmpl
+except NameError:
+    pass
+_iso8601_matches = [re.compile(regex).match for regex in _iso8601_re]
+try:
+    del regex
+except NameError:
+    pass
+
+def _parse_date_iso8601(dateString):
+    '''Parse a variety of ISO-8601-compatible formats like 20040105'''
+    m = None
+    for _iso8601_match in _iso8601_matches:
+        m = _iso8601_match(dateString)
+        if m:
+            break
+    if not m:
+        return
+    if m.span() == (0, 0):
+        return
+    params = m.groupdict()
+    ordinal = params.get('ordinal', 0)
+    if ordinal:
+        ordinal = int(ordinal)
+    else:
+        ordinal = 0
+    year = params.get('year', '--')
+    if not year or year == '--':
+        year = time.gmtime()[0]
+    elif len(year) == 2:
+        # ISO 8601 assumes current century, i.e. 93 -> 2093, NOT 1993
+        year = 100 * int(time.gmtime()[0] / 100) + int(year)
+    else:
+        year = int(year)
+    month = params.get('month', '-')
+    if not month or month == '-':
+        # ordinals are NOT normalized by mktime, we simulate them
+        # by setting month=1, day=ordinal
+        if ordinal:
+            month = 1
+        else:
+            month = time.gmtime()[1]
+    month = int(month)
+    day = params.get('day', 0)
+    if not day:
+        # see above
+        if ordinal:
+            day = ordinal
+        elif params.get('century', 0) or \
+                 params.get('year', 0) or params.get('month', 0):
+            day = 1
+        else:
+            day = time.gmtime()[2]
+    else:
+        day = int(day)
+    # special case of the century - is the first year of the 21st century
+    # 2000 or 2001 ? The debate goes on...
+    if 'century' in params:
+        year = (int(params['century']) - 1) * 100 + 1
+    # in ISO 8601 most fields are optional
+    for field in ['hour', 'minute', 'second', 'tzhour', 'tzmin']:
+        if not params.get(field, None):
+            params[field] = 0
+    hour = int(params.get('hour', 0))
+    minute = int(params.get('minute', 0))
+    second = int(float(params.get('second', 0)))
+    # weekday is normalized by mktime(), we can ignore it
+    weekday = 0
+    daylight_savings_flag = -1
+    tm = [year, month, day, hour, minute, second, weekday,
+          ordinal, daylight_savings_flag]
+    # ISO 8601 time zone adjustments
+    tz = params.get('tz')
+    if tz and tz != 'Z':
+        if tz[0] == '-':
+            tm[3] += int(params.get('tzhour', 0))
+            tm[4] += int(params.get('tzmin', 0))
+        elif tz[0] == '+':
+            tm[3] -= int(params.get('tzhour', 0))
+            tm[4] -= int(params.get('tzmin', 0))
+        else:
+            return None
+    # Python's time.mktime() is a wrapper around the ANSI C mktime(3c)
+    # which is guaranteed to normalize d/m/y/h/m/s.
+    # Many implementations have bugs, but we'll pretend they don't.
+    return time.localtime(time.mktime(tuple(tm)))
diff --git a/lib/feedparser/datetimes/korean.py b/lib/feedparser/datetimes/korean.py
new file mode 100644
index 000000000..7e6e0910e
--- /dev/null
+++ b/lib/feedparser/datetimes/korean.py
@@ -0,0 +1,47 @@
+from __future__ import absolute_import, unicode_literals
+
+import re
+
+from .w3dtf import _parse_date_w3dtf
+
+# 8-bit date handling routines written by ytrewq1.
+_korean_year  = '\ub144' # b3e2 in euc-kr
+_korean_month = '\uc6d4' # bff9 in euc-kr
+_korean_day   = '\uc77c' # c0cf in euc-kr
+_korean_am    = '\uc624\uc804' # bfc0 c0fc in euc-kr
+_korean_pm    = '\uc624\ud6c4' # bfc0 c8c4 in euc-kr
+
+_korean_onblog_date_re = \
+    re.compile('(\d{4})%s\s+(\d{2})%s\s+(\d{2})%s\s+(\d{2}):(\d{2}):(\d{2})' % \
+               (_korean_year, _korean_month, _korean_day))
+_korean_nate_date_re = \
+    re.compile('(\d{4})-(\d{2})-(\d{2})\s+(%s|%s)\s+(\d{,2}):(\d{,2}):(\d{,2})' % \
+               (_korean_am, _korean_pm))
+def _parse_date_onblog(dateString):
+    '''Parse a string according to the OnBlog 8-bit date format'''
+    m = _korean_onblog_date_re.match(dateString)
+    if not m:
+        return
+    w3dtfdate = '%(year)s-%(month)s-%(day)sT%(hour)s:%(minute)s:%(second)s%(zonediff)s' % \
+                {'year': m.group(1), 'month': m.group(2), 'day': m.group(3),\
+                 'hour': m.group(4), 'minute': m.group(5), 'second': m.group(6),\
+                 'zonediff': '+09:00'}
+    return _parse_date_w3dtf(w3dtfdate)
+
+def _parse_date_nate(dateString):
+    '''Parse a string according to the Nate 8-bit date format'''
+    m = _korean_nate_date_re.match(dateString)
+    if not m:
+        return
+    hour = int(m.group(5))
+    ampm = m.group(4)
+    if (ampm == _korean_pm):
+        hour += 12
+    hour = str(hour)
+    if len(hour) == 1:
+        hour = '0' + hour
+    w3dtfdate = '%(year)s-%(month)s-%(day)sT%(hour)s:%(minute)s:%(second)s%(zonediff)s' % \
+                {'year': m.group(1), 'month': m.group(2), 'day': m.group(3),\
+                 'hour': hour, 'minute': m.group(6), 'second': m.group(7),\
+                 'zonediff': '+09:00'}
+    return _parse_date_w3dtf(w3dtfdate)
diff --git a/lib/feedparser/datetimes/perforce.py b/lib/feedparser/datetimes/perforce.py
new file mode 100644
index 000000000..f5b7d8cc5
--- /dev/null
+++ b/lib/feedparser/datetimes/perforce.py
@@ -0,0 +1,25 @@
+from __future__ import absolute_import, unicode_literals
+
+try:
+    import rfc822
+except ImportError:
+    from email import _parseaddr as rfc822
+
+import re
+import time
+
+def _parse_date_perforce(aDateString):
+    """parse a date in yyyy/mm/dd hh:mm:ss TTT format"""
+    # Fri, 2006/09/15 08:19:53 EDT
+    _my_date_pattern = re.compile( \
+        r'(\w{,3}), (\d{,4})/(\d{,2})/(\d{2}) (\d{,2}):(\d{2}):(\d{2}) (\w{,3})')
+
+    m = _my_date_pattern.search(aDateString)
+    if m is None:
+        return None
+    dow, year, month, day, hour, minute, second, tz = m.groups()
+    months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
+    dateString = "%s, %s %s %s %s:%s:%s %s" % (dow, day, months[int(month) - 1], year, hour, minute, second, tz)
+    tm = rfc822.parsedate_tz(dateString)
+    if tm:
+        return time.gmtime(rfc822.mktime_tz(tm))
diff --git a/lib/feedparser/datetimes/rfc822.py b/lib/feedparser/datetimes/rfc822.py
new file mode 100644
index 000000000..0093bf654
--- /dev/null
+++ b/lib/feedparser/datetimes/rfc822.py
@@ -0,0 +1,109 @@
+from __future__ import absolute_import, unicode_literals
+
+import datetime
+
+timezonenames = {
+    'ut': 0, 'gmt': 0, 'z': 0,
+    'adt': -3, 'ast': -4, 'at': -4,
+    'edt': -4, 'est': -5, 'et': -5,
+    'cdt': -5, 'cst': -6, 'ct': -6,
+    'mdt': -6, 'mst': -7, 'mt': -7,
+    'pdt': -7, 'pst': -8, 'pt': -8,
+    'a': -1, 'n': 1,
+    'm': -12, 'y': 12,
+    'met': 1, 'mest': 2,
+}
+
+def _parse_date_rfc822(date):
+    """Parse RFC 822 dates and times
+    http://tools.ietf.org/html/rfc822#section-5
+
+    There are some formatting differences that are accounted for:
+    1. Years may be two or four digits.
+    2. The month and day can be swapped.
+    3. Additional timezone names are supported.
+    4. A default time and timezone are assumed if only a date is present.
+    """
+
+    daynames = set(['mon', 'tue', 'wed', 'thu', 'fri', 'sat', 'sun'])
+    months = {
+        'jan': 1, 'feb': 2, 'mar': 3, 'apr': 4, 'may': 5, 'jun': 6,
+        'jul': 7, 'aug': 8, 'sep': 9, 'oct': 10, 'nov': 11, 'dec': 12,
+    }
+
+    parts = date.lower().split()
+    if len(parts) < 5:
+        # Assume that the time and timezone are missing
+        parts.extend(('00:00:00', '0000'))
+    # Remove the day name
+    if parts[0][:3] in daynames:
+        parts = parts[1:]
+    if len(parts) < 5:
+        # If there are still fewer than five parts, there's not enough
+        # information to interpret this
+        return None
+    try:
+        day = int(parts[0])
+    except ValueError:
+        # Check if the day and month are swapped
+        if months.get(parts[0][:3]):
+            try:
+                day = int(parts[1])
+            except ValueError:
+                return None
+            else:
+                parts[1] = parts[0]
+        else:
+            return None
+    month = months.get(parts[1][:3])
+    if not month:
+        return None
+    try:
+        year = int(parts[2])
+    except ValueError:
+        return None
+    # Normalize two-digit years:
+    # Anything in the 90's is interpreted as 1990 and on
+    # Anything 89 or less is interpreted as 2089 or before
+    if len(parts[2]) <= 2:
+        year += (1900, 2000)[year < 90]
+    timeparts = parts[3].split(':')
+    timeparts = timeparts + ([0] * (3 - len(timeparts)))
+    try:
+        (hour, minute, second) = map(int, timeparts)
+    except ValueError:
+        return None
+    tzhour = 0
+    tzmin = 0
+    # Strip 'Etc/' from the timezone
+    if parts[4].startswith('etc/'):
+        parts[4] = parts[4][4:]
+    # Normalize timezones that start with 'gmt':
+    # GMT-05:00 => -0500
+    # GMT => GMT
+    if parts[4].startswith('gmt'):
+        parts[4] = ''.join(parts[4][3:].split(':')) or 'gmt'
+    # Handle timezones like '-0500', '+0500', and 'EST'
+    if parts[4] and parts[4][0] in ('-', '+'):
+        try:
+            tzhour = int(parts[4][1:3])
+            tzmin = int(parts[4][3:])
+        except ValueError:
+            return None
+        if parts[4].startswith('-'):
+            tzhour = tzhour * -1
+            tzmin = tzmin * -1
+    else:
+        tzhour = timezonenames.get(parts[4], 0)
+    # Create the datetime object and timezone delta objects
+    try:
+        stamp = datetime.datetime(year, month, day, hour, minute, second)
+    except ValueError:
+        return None
+    delta = datetime.timedelta(0, 0, 0, 0, tzmin, tzhour)
+    # Return the date and timestamp in a UTC 9-tuple
+    try:
+        return (stamp - delta).utctimetuple()
+    except (OverflowError, ValueError):
+        # IronPython throws ValueErrors instead of OverflowErrors
+        return None
diff --git a/lib/feedparser/datetimes/w3dtf.py b/lib/feedparser/datetimes/w3dtf.py
new file mode 100644
index 000000000..02bc712e9
--- /dev/null
+++ b/lib/feedparser/datetimes/w3dtf.py
@@ -0,0 +1,88 @@
+from __future__ import absolute_import, unicode_literals
+
+import datetime
+
+timezonenames = {
+    'ut': 0, 'gmt': 0, 'z': 0,
+    'adt': -3, 'ast': -4, 'at': -4,
+    'edt': -4, 'est': -5, 'et': -5,
+    'cdt': -5, 'cst': -6, 'ct': -6,
+    'mdt': -6, 'mst': -7, 'mt': -7,
+    'pdt': -7, 'pst': -8, 'pt': -8,
+    'a': -1, 'n': 1,
+    'm': -12, 'y': 12,
+}
+# W3 date and time format parser
+# http://www.w3.org/TR/NOTE-datetime
+# Also supports MSSQL-style datetimes as defined at:
+# http://msdn.microsoft.com/en-us/library/ms186724.aspx
+# (basically, allow a space as a date/time/timezone separator)
+def _parse_date_w3dtf(datestr):
+    if not datestr.strip():
+        return None
+    parts = datestr.lower().split('t')
+    if len(parts) == 1:
+        # This may be a date only, or may be an MSSQL-style date
+        parts = parts[0].split()
+        if len(parts) == 1:
+            # Treat this as a date only
+            parts.append('00:00:00z')
+    elif len(parts) > 2:
+        return None
+    date = parts[0].split('-', 2)
+    if not date or len(date[0]) != 4:
+        return None
+    # Ensure that `date` has 3 elements. Using '1' sets the default
+    # month to January and the default day to the 1st of the month.
+    date.extend(['1'] * (3 - len(date)))
+    try:
+        year, month, day = [int(i) for i in date]
+    except ValueError:
+        # `date` may have more than 3 elements or may contain
+        # non-integer strings.
+        return None
+    if parts[1].endswith('z'):
+        parts[1] = parts[1][:-1]
+        parts.append('z')
+    # Append the numeric timezone offset, if any, to parts.
+    # If this is an MSSQL-style date then parts[2] already contains
+    # the timezone information, so `append()` will not affect it.
+    # Add 1 to each value so that if `find()` returns -1 it will be
+    # treated as False.
+    loc = parts[1].find('-') + 1 or parts[1].find('+') + 1 or len(parts[1]) + 1
+    loc = loc - 1
+    parts.append(parts[1][loc:])
+    parts[1] = parts[1][:loc]
+    time = parts[1].split(':', 2)
+    # Ensure that time has 3 elements. Using '0' means that the
+    # minutes and seconds, if missing, will default to 0.
+    time.extend(['0'] * (3 - len(time)))
+    tzhour = 0
+    tzmin = 0
+    if parts[2][:1] in ('-', '+'):
+        try:
+            tzhour = int(parts[2][1:3])
+            tzmin = int(parts[2][4:])
+        except ValueError:
+            return None
+        if parts[2].startswith('-'):
+            tzhour = tzhour * -1
+            tzmin = tzmin * -1
+    else:
+        tzhour = timezonenames.get(parts[2], 0)
+    try:
+        hour, minute, second = [int(float(i)) for i in time]
+    except ValueError:
+        return None
+    # Create the datetime object and timezone delta objects
+    try:
+        stamp = datetime.datetime(year, month, day, hour, minute, second)
+    except ValueError:
+        return None
+    delta = datetime.timedelta(0, 0, 0, 0, tzmin, tzhour)
+    # Return the date and timestamp in a UTC 9-tuple
+    try:
+        return (stamp - delta).utctimetuple()
+    except (OverflowError, ValueError):
+        # IronPython throws ValueErrors instead of OverflowErrors
+        return None
diff --git a/lib/feedparser/encodings.py b/lib/feedparser/encodings.py
new file mode 100644
index 000000000..c4874be68
--- /dev/null
+++ b/lib/feedparser/encodings.py
@@ -0,0 +1,279 @@
+# Character encoding routines
+# Copyright 2010-2015 Kurt McKee <contactme@kurtmckee.org>
+# Copyright 2002-2008 Mark Pilgrim
+# All rights reserved.
+#
+# This file is a part of feedparser.
+#
+# Redistribution and use in source and binary forms, with or without modification,
+# are permitted provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice,
+#   this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice,
+#   this list of conditions and the following disclaimer in the documentation
+#   and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+
+from __future__ import absolute_import, unicode_literals
+
+import cgi
+import codecs
+import collections
+import re
+
+try:
+    import chardet
+except ImportError:
+    chardet = None
+    lazy_chardet_encoding = None
+else:
+    def lazy_chardet_encoding():
+        chardet_encoding = chardet.detect(data)['encoding']
+        if not chardet_encoding:
+            chardet_encoding = ''
+        if isinstance(chardet_encoding, bytes_):
+            chardet_encoding = chardet_encoding.encode('ascii', 'ignore')
+        return chardet_encoding
+
+from .exceptions import (
+    CharacterEncodingOverride, CharacterEncodingUnknown, NonXMLContentType,
+)
+
+bytes_ = type(b'')
+unicode_ = type('')
+
+# Each marker represents some of the characters of the opening XML
+# processing instruction ('<?xm') in the specified encoding.
+EBCDIC_MARKER = b'\x4C\x6F\xA7\x94'
+UTF16BE_MARKER = b'\x00\x3C\x00\x3F'
+UTF16LE_MARKER = b'\x3C\x00\x3F\x00'
+UTF32BE_MARKER = b'\x00\x00\x00\x3C'
+UTF32LE_MARKER = b'\x3C\x00\x00\x00'
+
+ZERO_BYTES = '\x00\x00'
+
+# Match the opening XML declaration.
+# Example: <?xml version="1.0" encoding="utf-8"?>
+RE_XML_DECLARATION = re.compile('^<\?xml[^>]*?>')
+
+# Capture the value of the XML processing instruction's encoding attribute.
+# Example: <?xml version="1.0" encoding="utf-8"?>
+RE_XML_PI_ENCODING = re.compile(b'^<\?.*encoding=[\'"](.*?)[\'"].*\?>')
+
+def convert_to_utf8(http_headers, data, result):
+    '''Detect and convert the character encoding to UTF-8.
+
+    http_headers is a dictionary
+    data is a raw string (not Unicode)'''
+
+    # This is so much trickier than it sounds, it's not even funny.
+    # According to RFC 3023 ('XML Media Types'), if the HTTP Content-Type
+    # is application/xml, application/*+xml,
+    # application/xml-external-parsed-entity, or application/xml-dtd,
+    # the encoding given in the charset parameter of the HTTP Content-Type
+    # takes precedence over the encoding given in the XML prefix within the
+    # document, and defaults to 'utf-8' if neither are specified.  But, if
+    # the HTTP Content-Type is text/xml, text/*+xml, or
+    # text/xml-external-parsed-entity, the encoding given in the XML prefix
+    # within the document is ALWAYS IGNORED and only the encoding given in
+    # the charset parameter of the HTTP Content-Type header should be
+    # respected, and it defaults to 'us-ascii' if not specified.
+
+    # Furthermore, discussion on the atom-syntax mailing list with the
+    # author of RFC 3023 leads me to the conclusion that any document
+    # served with a Content-Type of text/* and no charset parameter
+    # must be treated as us-ascii.  (We now do this.)  And also that it
+    # must always be flagged as non-well-formed.  (We now do this too.)
+
+    # If Content-Type is unspecified (input was local file or non-HTTP source)
+    # or unrecognized (server just got it totally wrong), then go by the
+    # encoding given in the XML prefix of the document and default to
+    # 'iso-8859-1' as per the HTTP specification (RFC 2616).
+
+    # Then, assuming we didn't find a character encoding in the HTTP headers
+    # (and the HTTP Content-type allowed us to look in the body), we need
+    # to sniff the first few bytes of the XML data and try to determine
+    # whether the encoding is ASCII-compatible.  Section F of the XML
+    # specification shows the way here:
+    # http://www.w3.org/TR/REC-xml/#sec-guessing-no-ext-info
+
+    # If the sniffed encoding is not ASCII-compatible, we need to make it
+    # ASCII compatible so that we can sniff further into the XML declaration
+    # to find the encoding attribute, which will tell us the true encoding.
+
+    # Of course, none of this guarantees that we will be able to parse the
+    # feed in the declared character encoding (assuming it was declared
+    # correctly, which many are not).  iconv_codec can help a lot;
+    # you should definitely install it if you can.
+    # http://cjkpython.i18n.org/
+
+    bom_encoding = ''
+    xml_encoding = ''
+    rfc3023_encoding = ''
+
+    # Look at the first few bytes of the document to guess what
+    # its encoding may be. We only need to decode enough of the
+    # document that we can use an ASCII-compatible regular
+    # expression to search for an XML encoding declaration.
+    # The heuristic follows the XML specification, section F:
+    # http://www.w3.org/TR/REC-xml/#sec-guessing-no-ext-info
+    # Check for BOMs first.
+    if data[:4] == codecs.BOM_UTF32_BE:
+        bom_encoding = 'utf-32be'
+        data = data[4:]
+    elif data[:4] == codecs.BOM_UTF32_LE:
+        bom_encoding = 'utf-32le'
+        data = data[4:]
+    elif data[:2] == codecs.BOM_UTF16_BE and data[2:4] != ZERO_BYTES:
+        bom_encoding = 'utf-16be'
+        data = data[2:]
+    elif data[:2] == codecs.BOM_UTF16_LE and data[2:4] != ZERO_BYTES:
+        bom_encoding = 'utf-16le'
+        data = data[2:]
+    elif data[:3] == codecs.BOM_UTF8:
+        bom_encoding = 'utf-8'
+        data = data[3:]
+    # Check for the characters '<?xm' in several encodings.
+    elif data[:4] == EBCDIC_MARKER:
+        bom_encoding = 'cp037'
+    elif data[:4] == UTF16BE_MARKER:
+        bom_encoding = 'utf-16be'
+    elif data[:4] == UTF16LE_MARKER:
+        bom_encoding = 'utf-16le'
+    elif data[:4] == UTF32BE_MARKER:
+        bom_encoding = 'utf-32be'
+    elif data[:4] == UTF32LE_MARKER:
+        bom_encoding = 'utf-32le'
+
+    tempdata = data
+    try:
+        if bom_encoding:
+            tempdata = data.decode(bom_encoding).encode('utf-8')
+    except (UnicodeDecodeError, LookupError):
+        # feedparser recognizes UTF-32 encodings that aren't
+        # available in Python 2.4 and 2.5, so it's possible to
+        # encounter a LookupError during decoding.
+        xml_encoding_match = None
+    else:
+        xml_encoding_match = RE_XML_PI_ENCODING.match(tempdata)
+
+    if xml_encoding_match:
+        xml_encoding = xml_encoding_match.groups()[0].decode('utf-8').lower()
+        # Normalize the xml_encoding if necessary.
+        if bom_encoding and (xml_encoding in (
+            'u16', 'utf-16', 'utf16', 'utf_16',
+            'u32', 'utf-32', 'utf32', 'utf_32',
+            'iso-10646-ucs-2', 'iso-10646-ucs-4',
+            'csucs4', 'csunicode', 'ucs-2', 'ucs-4'
+        )):
+            xml_encoding = bom_encoding
+
+    # Find the HTTP Content-Type and, hopefully, a character
+    # encoding provided by the server. The Content-Type is used
+    # to choose the "correct" encoding among the BOM encoding,
+    # XML declaration encoding, and HTTP encoding, following the
+    # heuristic defined in RFC 3023.
+    http_content_type = http_headers.get('content-type') or ''
+    http_content_type, params = cgi.parse_header(http_content_type)
+    http_encoding = params.get('charset', '').replace("'", "")
+    if isinstance(http_encoding, bytes_):
+        http_encoding = http_encoding.decode('utf-8', 'ignore')
+
+    acceptable_content_type = 0
+    application_content_types = ('application/xml', 'application/xml-dtd',
+                                 'application/xml-external-parsed-entity')
+    text_content_types = ('text/xml', 'text/xml-external-parsed-entity')
+    if (http_content_type in application_content_types) or \
+       (http_content_type.startswith('application/') and
+        http_content_type.endswith('+xml')):
+        acceptable_content_type = 1
+        rfc3023_encoding = http_encoding or xml_encoding or 'utf-8'
+    elif (http_content_type in text_content_types) or \
+         (http_content_type.startswith('text/') and
+          http_content_type.endswith('+xml')):
+        acceptable_content_type = 1
+        rfc3023_encoding = http_encoding or 'us-ascii'
+    elif http_content_type.startswith('text/'):
+        rfc3023_encoding = http_encoding or 'us-ascii'
+    elif http_headers and 'content-type' not in http_headers:
+        rfc3023_encoding = xml_encoding or 'iso-8859-1'
+    else:
+        rfc3023_encoding = xml_encoding or 'utf-8'
+    # gb18030 is a superset of gb2312, so always replace gb2312
+    # with gb18030 for greater compatibility.
+    if rfc3023_encoding.lower() == 'gb2312':
+        rfc3023_encoding = 'gb18030'
+    if xml_encoding.lower() == 'gb2312':
+        xml_encoding = 'gb18030'
+
+    # there are four encodings to keep track of:
+    # - http_encoding is the encoding declared in the Content-Type HTTP header
+    # - xml_encoding is the encoding declared in the <?xml declaration
+    # - bom_encoding is the encoding sniffed from the first 4 bytes of the XML data
+    # - rfc3023_encoding is the actual encoding, as per RFC 3023 and a variety of other conflicting specifications
+    error = None
+
+    if http_headers and (not acceptable_content_type):
+        if 'content-type' in http_headers:
+            msg = '%s is not an XML media type' % http_headers['content-type']
+        else:
+            msg = 'no Content-type specified'
+        error = NonXMLContentType(msg)
+
+    # determine character encoding
+    known_encoding = 0
+    tried_encodings = []
+    # try: HTTP encoding, declared XML encoding, encoding sniffed from BOM
+    for proposed_encoding in (rfc3023_encoding, xml_encoding, bom_encoding,
+                              lazy_chardet_encoding, 'utf-8', 'windows-1252', 'iso-8859-2'):
+        if isinstance(proposed_encoding, collections.Callable):
+            proposed_encoding = proposed_encoding()
+        if not proposed_encoding:
+            continue
+        if proposed_encoding in tried_encodings:
+            continue
+        tried_encodings.append(proposed_encoding)
+        try:
+            data = data.decode(proposed_encoding)
+        except (UnicodeDecodeError, LookupError):
+            pass
+        else:
+            known_encoding = 1
+            # Update the encoding in the opening XML processing instruction.
+            new_declaration = '''<?xml version='1.0' encoding='utf-8'?>'''
+            if RE_XML_DECLARATION.search(data):
+                data = RE_XML_DECLARATION.sub(new_declaration, data)
+            else:
+                data = new_declaration + '\n' + data
+            data = data.encode('utf-8')
+            break
+    # if still no luck, give up
+    if not known_encoding:
+        error = CharacterEncodingUnknown(
+            'document encoding unknown, I tried ' +
+            '%s, %s, utf-8, windows-1252, and iso-8859-2 but nothing worked' %
+            (rfc3023_encoding, xml_encoding))
+        rfc3023_encoding = ''
+    elif proposed_encoding != rfc3023_encoding:
+        error = CharacterEncodingOverride(
+            'document declared as %s, but parsed as %s' %
+            (rfc3023_encoding, proposed_encoding))
+        rfc3023_encoding = proposed_encoding
+
+    result['encoding'] = rfc3023_encoding
+    if error:
+        result['bozo'] = True
+        result['bozo_exception'] = error
+    return data
diff --git a/lib/feedparser/exceptions.py b/lib/feedparser/exceptions.py
new file mode 100644
index 000000000..9e57775de
--- /dev/null
+++ b/lib/feedparser/exceptions.py
@@ -0,0 +1,52 @@
+# Exceptions used throughout feedparser
+# Copyright 2010-2015 Kurt McKee <contactme@kurtmckee.org>
+# Copyright 2002-2008 Mark Pilgrim
+# All rights reserved.
+#
+# This file is a part of feedparser.
+#
+# Redistribution and use in source and binary forms, with or without modification,
+# are permitted provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice,
+#   this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice,
+#   this list of conditions and the following disclaimer in the documentation
+#   and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+
+from __future__ import absolute_import, unicode_literals
+
+__all__ = [
+    'ThingsNobodyCaresAboutButMe',
+    'CharacterEncodingOverride',
+    'CharacterEncodingUnknown',
+    'NonXMLContentType',
+    'UndeclaredNamespace',
+]
+
+class ThingsNobodyCaresAboutButMe(Exception):
+    pass
+
+class CharacterEncodingOverride(ThingsNobodyCaresAboutButMe):
+    pass
+
+class CharacterEncodingUnknown(ThingsNobodyCaresAboutButMe):
+    pass
+
+class NonXMLContentType(ThingsNobodyCaresAboutButMe):
+    pass
+
+class UndeclaredNamespace(Exception):
+    pass
diff --git a/lib/feedparser/feedparser.py b/lib/feedparser/feedparser.py
deleted file mode 100644
index ef4377fe9..000000000
--- a/lib/feedparser/feedparser.py
+++ /dev/null
@@ -1,3820 +0,0 @@
-"""Universal feed parser
-
-Handles RSS 0.9x, RSS 1.0, RSS 2.0, CDF, Atom 0.3, and Atom 1.0 feeds
-
-Visit https://code.google.com/p/feedparser/ for the latest version
-Visit http://packages.python.org/feedparser/ for the latest documentation
-
-Required: Python 2.4 or later
-Recommended: iconv_codec <http://cjkpython.i18n.org/>
-"""
-
-__version__ = "5.1.3"
-__license__ = """
-Copyright (c) 2010-2013 Kurt McKee <contactme@kurtmckee.org>
-Copyright (c) 2002-2008 Mark Pilgrim
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without modification,
-are permitted provided that the following conditions are met:
-
-* Redistributions of source code must retain the above copyright notice,
-  this list of conditions and the following disclaimer.
-* Redistributions in binary form must reproduce the above copyright notice,
-  this list of conditions and the following disclaimer in the documentation
-  and/or other materials provided with the distribution.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
-LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGE."""
-__author__ = "Mark Pilgrim <http://diveintomark.org/>"
-__contributors__ = ["Jason Diamond <http://injektilo.org/>",
-                    "John Beimler <http://john.beimler.org/>",
-                    "Fazal Majid <http://www.majid.info/mylos/weblog/>",
-                    "Aaron Swartz <http://aaronsw.com/>",
-                    "Kevin Marks <http://epeus.blogspot.com/>",
-                    "Sam Ruby <http://intertwingly.net/>",
-                    "Ade Oshineye <http://blog.oshineye.com/>",
-                    "Martin Pool <http://sourcefrog.net/>",
-                    "Kurt McKee <http://kurtmckee.org/>",
-                    "Bernd Schlapsi <https://github.com/brot>",]
-
-# HTTP "User-Agent" header to send to servers when downloading feeds.
-# If you are embedding feedparser in a larger application, you should
-# change this to your application name and URL.
-USER_AGENT = "UniversalFeedParser/%s +https://code.google.com/p/feedparser/" % __version__
-
-# HTTP "Accept" header to send to servers when downloading feeds.  If you don't
-# want to send an Accept header, set this to None.
-ACCEPT_HEADER = "application/atom+xml,application/rdf+xml,application/rss+xml,application/x-netcdf,application/xml;q=0.9,text/xml;q=0.2,*/*;q=0.1"
-
-# List of preferred XML parsers, by SAX driver name.  These will be tried first,
-# but if they're not installed, Python will keep searching through its own list
-# of pre-installed parsers until it finds one that supports everything we need.
-PREFERRED_XML_PARSERS = ["drv_libxml2"]
-
-# If you want feedparser to automatically resolve all relative URIs, set this
-# to 1.
-RESOLVE_RELATIVE_URIS = 1
-
-# If you want feedparser to automatically sanitize all potentially unsafe
-# HTML content, set this to 1.
-SANITIZE_HTML = 1
-
-# ---------- Python 3 modules (make it work if possible) ----------
-try:
-    import rfc822
-except ImportError:
-    from email import _parseaddr as rfc822
-
-try:
-    # Python 3.1 introduces bytes.maketrans and simultaneously
-    # deprecates string.maketrans; use bytes.maketrans if possible
-    _maketrans = bytes.maketrans
-except (NameError, AttributeError):
-    import string
-    _maketrans = string.maketrans
-
-# base64 support for Atom feeds that contain embedded binary data
-try:
-    import base64, binascii
-except ImportError:
-    base64 = binascii = None
-else:
-    # Python 3.1 deprecates decodestring in favor of decodebytes
-    _base64decode = getattr(base64, 'decodebytes', base64.decodestring)
-
-# _s2bytes: convert a UTF-8 str to bytes if the interpreter is Python 3
-# _l2bytes: convert a list of ints to bytes if the interpreter is Python 3
-try:
-    if bytes is str:
-        # In Python 2.5 and below, bytes doesn't exist (NameError)
-        # In Python 2.6 and above, bytes and str are the same type
-        raise NameError
-except NameError:
-    # Python 2
-    def _s2bytes(s):
-        return s
-    def _l2bytes(l):
-        return ''.join(map(chr, l))
-else:
-    # Python 3
-    def _s2bytes(s):
-        return bytes(s, 'utf8')
-    def _l2bytes(l):
-        return bytes(l)
-
-# If you want feedparser to allow all URL schemes, set this to ()
-# List culled from Python's urlparse documentation at:
-#   http://docs.python.org/library/urlparse.html
-# as well as from "URI scheme" at Wikipedia:
-#   https://secure.wikimedia.org/wikipedia/en/wiki/URI_scheme
-# Many more will likely need to be added!
-ACCEPTABLE_URI_SCHEMES = (
-    'file', 'ftp', 'gopher', 'h323', 'hdl', 'http', 'https', 'imap', 'magnet',
-    'mailto', 'mms', 'news', 'nntp', 'prospero', 'rsync', 'rtsp', 'rtspu',
-    'sftp', 'shttp', 'sip', 'sips', 'snews', 'svn', 'svn+ssh', 'telnet',
-    'wais',
-    # Additional common-but-unofficial schemes
-    'aim', 'callto', 'cvs', 'facetime', 'feed', 'git', 'gtalk', 'irc', 'ircs',
-    'irc6', 'itms', 'mms', 'msnim', 'skype', 'ssh', 'smb', 'svn', 'ymsg',
-)
-#ACCEPTABLE_URI_SCHEMES = ()
-
-# ---------- required modules (should come with any Python distribution) ----------
-import cgi
-import codecs
-import copy
-import datetime
-import itertools
-import re
-import struct
-import time
-import types
-import urllib
-import urllib2
-import urlparse
-import warnings
-
-from htmlentitydefs import name2codepoint, codepoint2name, entitydefs
-
-try:
-    from io import BytesIO as _StringIO
-except ImportError:
-    try:
-        from cStringIO import StringIO as _StringIO
-    except ImportError:
-        from StringIO import StringIO as _StringIO
-
-# ---------- optional modules (feedparser will work without these, but with reduced functionality) ----------
-
-# gzip is included with most Python distributions, but may not be available if you compiled your own
-try:
-    import gzip
-except ImportError:
-    gzip = None
-try:
-    import zlib
-except ImportError:
-    zlib = None
-
-# If a real XML parser is available, feedparser will attempt to use it.  feedparser has
-# been tested with the built-in SAX parser and libxml2.  On platforms where the
-# Python distribution does not come with an XML parser (such as Mac OS X 10.2 and some
-# versions of FreeBSD), feedparser will quietly fall back on regex-based parsing.
-try:
-    import xml.sax
-    from xml.sax.saxutils import escape as _xmlescape
-except ImportError:
-    _XML_AVAILABLE = 0
-    def _xmlescape(data,entities={}):
-        data = data.replace('&', '&amp;')
-        data = data.replace('>', '&gt;')
-        data = data.replace('<', '&lt;')
-        for char, entity in entities:
-            data = data.replace(char, entity)
-        return data
-else:
-    try:
-        xml.sax.make_parser(PREFERRED_XML_PARSERS) # test for valid parsers
-    except xml.sax.SAXReaderNotAvailable:
-        _XML_AVAILABLE = 0
-    else:
-        _XML_AVAILABLE = 1
-
-# sgmllib is not available by default in Python 3; if the end user doesn't have
-# it available then we'll lose illformed XML parsing and content santizing
-try:
-    import sgmllib
-except ImportError:
-    # This is probably Python 3, which doesn't include sgmllib anymore
-    _SGML_AVAILABLE = 0
-
-    # Mock sgmllib enough to allow subclassing later on
-    class sgmllib(object):
-        class SGMLParser(object):
-            def goahead(self, i):
-                pass
-            def parse_starttag(self, i):
-                pass
-else:
-    _SGML_AVAILABLE = 1
-
-    # sgmllib defines a number of module-level regular expressions that are
-    # insufficient for the XML parsing feedparser needs. Rather than modify
-    # the variables directly in sgmllib, they're defined here using the same
-    # names, and the compiled code objects of several sgmllib.SGMLParser
-    # methods are copied into _BaseHTMLProcessor so that they execute in
-    # feedparser's scope instead of sgmllib's scope.
-    charref = re.compile('&#(\d+|[xX][0-9a-fA-F]+);')
-    tagfind = re.compile('[a-zA-Z][-_.:a-zA-Z0-9]*')
-    attrfind = re.compile(
-        r'\s*([a-zA-Z_][-:.a-zA-Z_0-9]*)[$]?(\s*=\s*'
-        r'(\'[^\']*\'|"[^"]*"|[][\-a-zA-Z0-9./,:;+*%?!&$\(\)_#=~\'"@]*))?'
-    )
-
-    # Unfortunately, these must be copied over to prevent NameError exceptions
-    entityref = sgmllib.entityref
-    incomplete = sgmllib.incomplete
-    interesting = sgmllib.interesting
-    shorttag = sgmllib.shorttag
-    shorttagopen = sgmllib.shorttagopen
-    starttagopen = sgmllib.starttagopen
-
-    class _EndBracketRegEx:
-        def __init__(self):
-            # Overriding the built-in sgmllib.endbracket regex allows the
-            # parser to find angle brackets embedded in element attributes.
-            self.endbracket = re.compile('''([^'"<>]|"[^"]*"(?=>|/|\s|\w+=)|'[^']*'(?=>|/|\s|\w+=))*(?=[<>])|.*?(?=[<>])''')
-        def search(self, target, index=0):
-            match = self.endbracket.match(target, index)
-            if match is not None:
-                # Returning a new object in the calling thread's context
-                # resolves a thread-safety.
-                return EndBracketMatch(match)
-            return None
-    class EndBracketMatch:
-        def __init__(self, match):
-            self.match = match
-        def start(self, n):
-            return self.match.end(n)
-    endbracket = _EndBracketRegEx()
-
-
-# iconv_codec provides support for more character encodings.
-# It's available from http://cjkpython.i18n.org/
-try:
-    import iconv_codec
-except ImportError:
-    pass
-
-# chardet library auto-detects character encodings
-# Download from http://chardet.feedparser.org/
-try:
-    import chardet
-except ImportError:
-    chardet = None
-
-# ---------- don't touch these ----------
-class ThingsNobodyCaresAboutButMe(Exception): pass
-class CharacterEncodingOverride(ThingsNobodyCaresAboutButMe): pass
-class CharacterEncodingUnknown(ThingsNobodyCaresAboutButMe): pass
-class NonXMLContentType(ThingsNobodyCaresAboutButMe): pass
-class UndeclaredNamespace(Exception): pass
-
-SUPPORTED_VERSIONS = {'': u'unknown',
-                      'rss090': u'RSS 0.90',
-                      'rss091n': u'RSS 0.91 (Netscape)',
-                      'rss091u': u'RSS 0.91 (Userland)',
-                      'rss092': u'RSS 0.92',
-                      'rss093': u'RSS 0.93',
-                      'rss094': u'RSS 0.94',
-                      'rss20': u'RSS 2.0',
-                      'rss10': u'RSS 1.0',
-                      'rss': u'RSS (unknown version)',
-                      'atom01': u'Atom 0.1',
-                      'atom02': u'Atom 0.2',
-                      'atom03': u'Atom 0.3',
-                      'atom10': u'Atom 1.0',
-                      'atom': u'Atom (unknown version)',
-                      'cdf': u'CDF',
-                      }
-
-class FeedParserDict(dict):
-    keymap = {'channel': 'feed',
-              'items': 'entries',
-              'guid': 'id',
-              'date': 'updated',
-              'date_parsed': 'updated_parsed',
-              'description': ['summary', 'subtitle'],
-              'description_detail': ['summary_detail', 'subtitle_detail'],
-              'url': ['href'],
-              'modified': 'updated',
-              'modified_parsed': 'updated_parsed',
-              'issued': 'published',
-              'issued_parsed': 'published_parsed',
-              'copyright': 'rights',
-              'copyright_detail': 'rights_detail',
-              'tagline': 'subtitle',
-              'tagline_detail': 'subtitle_detail'}
-    def __getitem__(self, key):
-        if key == 'category':
-            try:
-                return dict.__getitem__(self, 'tags')[0]['term']
-            except IndexError:
-                raise KeyError, "object doesn't have key 'category'"
-        elif key == 'enclosures':
-            norel = lambda link: FeedParserDict([(name,value) for (name,value) in link.items() if name!='rel'])
-            return [norel(link) for link in dict.__getitem__(self, 'links') if link['rel']==u'enclosure']
-        elif key == 'license':
-            for link in dict.__getitem__(self, 'links'):
-                if link['rel']==u'license' and 'href' in link:
-                    return link['href']
-        elif key == 'updated':
-            # Temporarily help developers out by keeping the old
-            # broken behavior that was reported in issue 310.
-            # This fix was proposed in issue 328.
-            if not dict.__contains__(self, 'updated') and \
-                dict.__contains__(self, 'published'):
-                warnings.warn("To avoid breaking existing software while "
-                    "fixing issue 310, a temporary mapping has been created "
-                    "from `updated` to `published` if `updated` doesn't "
-                    "exist. This fallback will be removed in a future version "
-                    "of feedparser.", DeprecationWarning)
-                return dict.__getitem__(self, 'published')
-            return dict.__getitem__(self, 'updated')
-        elif key == 'updated_parsed':
-            if not dict.__contains__(self, 'updated_parsed') and \
-                dict.__contains__(self, 'published_parsed'):
-                warnings.warn("To avoid breaking existing software while "
-                    "fixing issue 310, a temporary mapping has been created "
-                    "from `updated_parsed` to `published_parsed` if "
-                    "`updated_parsed` doesn't exist. This fallback will be "
-                    "removed in a future version of feedparser.",
-                    DeprecationWarning)
-                return dict.__getitem__(self, 'published_parsed')
-            return dict.__getitem__(self, 'updated_parsed')
-        else:
-            realkey = self.keymap.get(key, key)
-            if isinstance(realkey, list):
-                for k in realkey:
-                    if dict.__contains__(self, k):
-                        return dict.__getitem__(self, k)
-            elif dict.__contains__(self, realkey):
-                return dict.__getitem__(self, realkey)
-        return dict.__getitem__(self, key)
-
-    def __contains__(self, key):
-        if key in ('updated', 'updated_parsed'):
-            # Temporarily help developers out by keeping the old
-            # broken behavior that was reported in issue 310.
-            # This fix was proposed in issue 328.
-            return dict.__contains__(self, key)
-        try:
-            self.__getitem__(key)
-        except KeyError:
-            return False
-        else:
-            return True
-
-    has_key = __contains__
-
-    def get(self, key, default=None):
-        try:
-            return self.__getitem__(key)
-        except KeyError:
-            return default
-
-    def __setitem__(self, key, value):
-        key = self.keymap.get(key, key)
-        if isinstance(key, list):
-            key = key[0]
-        return dict.__setitem__(self, key, value)
-
-    def setdefault(self, key, value):
-        if key not in self:
-            self[key] = value
-            return value
-        return self[key]
-
-    def __getattr__(self, key):
-        # __getattribute__() is called first; this will be called
-        # only if an attribute was not already found
-        try:
-            return self.__getitem__(key)
-        except KeyError:
-            raise AttributeError, "object has no attribute '%s'" % key
-
-    def __hash__(self):
-        return id(self)
-
-_cp1252 = {
-    128: unichr(8364), # euro sign
-    130: unichr(8218), # single low-9 quotation mark
-    131: unichr( 402), # latin small letter f with hook
-    132: unichr(8222), # double low-9 quotation mark
-    133: unichr(8230), # horizontal ellipsis
-    134: unichr(8224), # dagger
-    135: unichr(8225), # double dagger
-    136: unichr( 710), # modifier letter circumflex accent
-    137: unichr(8240), # per mille sign
-    138: unichr( 352), # latin capital letter s with caron
-    139: unichr(8249), # single left-pointing angle quotation mark
-    140: unichr( 338), # latin capital ligature oe
-    142: unichr( 381), # latin capital letter z with caron
-    145: unichr(8216), # left single quotation mark
-    146: unichr(8217), # right single quotation mark
-    147: unichr(8220), # left double quotation mark
-    148: unichr(8221), # right double quotation mark
-    149: unichr(8226), # bullet
-    150: unichr(8211), # en dash
-    151: unichr(8212), # em dash
-    152: unichr( 732), # small tilde
-    153: unichr(8482), # trade mark sign
-    154: unichr( 353), # latin small letter s with caron
-    155: unichr(8250), # single right-pointing angle quotation mark
-    156: unichr( 339), # latin small ligature oe
-    158: unichr( 382), # latin small letter z with caron
-    159: unichr( 376), # latin capital letter y with diaeresis
-}
-
-_urifixer = re.compile('^([A-Za-z][A-Za-z0-9+-.]*://)(/*)(.*?)')
-def _urljoin(base, uri):
-    uri = _urifixer.sub(r'\1\3', uri)
-    if not isinstance(uri, unicode):
-        uri = uri.decode('utf-8', 'ignore')
-    try:
-        uri = urlparse.urljoin(base, uri)
-    except ValueError:
-        uri = u''
-    if not isinstance(uri, unicode):
-        return uri.decode('utf-8', 'ignore')
-    return uri
-
-class _FeedParserMixin:
-    namespaces = {
-        '': '',
-        'http://backend.userland.com/rss': '',
-        'http://blogs.law.harvard.edu/tech/rss': '',
-        'http://purl.org/rss/1.0/': '',
-        'http://my.netscape.com/rdf/simple/0.9/': '',
-        'http://example.com/newformat#': '',
-        'http://example.com/necho': '',
-        'http://purl.org/echo/': '',
-        'uri/of/echo/namespace#': '',
-        'http://purl.org/pie/': '',
-        'http://purl.org/atom/ns#': '',
-        'http://www.w3.org/2005/Atom': '',
-        'http://purl.org/rss/1.0/modules/rss091#': '',
-
-        'http://webns.net/mvcb/':                                'admin',
-        'http://purl.org/rss/1.0/modules/aggregation/':          'ag',
-        'http://purl.org/rss/1.0/modules/annotate/':             'annotate',
-        'http://media.tangent.org/rss/1.0/':                     'audio',
-        'http://backend.userland.com/blogChannelModule':         'blogChannel',
-        'http://web.resource.org/cc/':                           'cc',
-        'http://backend.userland.com/creativeCommonsRssModule':  'creativeCommons',
-        'http://purl.org/rss/1.0/modules/company':               'co',
-        'http://purl.org/rss/1.0/modules/content/':              'content',
-        'http://my.theinfo.org/changed/1.0/rss/':                'cp',
-        'http://purl.org/dc/elements/1.1/':                      'dc',
-        'http://purl.org/dc/terms/':                             'dcterms',
-        'http://purl.org/rss/1.0/modules/email/':                'email',
-        'http://purl.org/rss/1.0/modules/event/':                'ev',
-        'http://rssnamespace.org/feedburner/ext/1.0':            'feedburner',
-        'http://freshmeat.net/rss/fm/':                          'fm',
-        'http://xmlns.com/foaf/0.1/':                            'foaf',
-        'http://www.w3.org/2003/01/geo/wgs84_pos#':              'geo',
-        'http://www.georss.org/georss':                          'georss',
-        'http://www.opengis.net/gml':                            'gml',
-        'http://postneo.com/icbm/':                              'icbm',
-        'http://purl.org/rss/1.0/modules/image/':                'image',
-        'http://www.itunes.com/DTDs/PodCast-1.0.dtd':            'itunes',
-        'http://example.com/DTDs/PodCast-1.0.dtd':               'itunes',
-        'http://purl.org/rss/1.0/modules/link/':                 'l',
-        'http://search.yahoo.com/mrss':                          'media',
-        # Version 1.1.2 of the Media RSS spec added the trailing slash on the namespace
-        'http://search.yahoo.com/mrss/':                         'media',
-        'http://madskills.com/public/xml/rss/module/pingback/':  'pingback',
-        'http://prismstandard.org/namespaces/1.2/basic/':        'prism',
-        'http://www.w3.org/1999/02/22-rdf-syntax-ns#':           'rdf',
-        'http://www.w3.org/2000/01/rdf-schema#':                 'rdfs',
-        'http://purl.org/rss/1.0/modules/reference/':            'ref',
-        'http://purl.org/rss/1.0/modules/richequiv/':            'reqv',
-        'http://purl.org/rss/1.0/modules/search/':               'search',
-        'http://purl.org/rss/1.0/modules/slash/':                'slash',
-        'http://schemas.xmlsoap.org/soap/envelope/':             'soap',
-        'http://purl.org/rss/1.0/modules/servicestatus/':        'ss',
-        'http://hacks.benhammersley.com/rss/streaming/':         'str',
-        'http://purl.org/rss/1.0/modules/subscription/':         'sub',
-        'http://purl.org/rss/1.0/modules/syndication/':          'sy',
-        'http://schemas.pocketsoap.com/rss/myDescModule/':       'szf',
-        'http://purl.org/rss/1.0/modules/taxonomy/':             'taxo',
-        'http://purl.org/rss/1.0/modules/threading/':            'thr',
-        'http://purl.org/rss/1.0/modules/textinput/':            'ti',
-        'http://madskills.com/public/xml/rss/module/trackback/': 'trackback',
-        'http://wellformedweb.org/commentAPI/':                  'wfw',
-        'http://purl.org/rss/1.0/modules/wiki/':                 'wiki',
-        'http://www.w3.org/1999/xhtml':                          'xhtml',
-        'http://www.w3.org/1999/xlink':                          'xlink',
-        'http://www.w3.org/XML/1998/namespace':                  'xml',
-        'http://podlove.org/simple-chapters':                    'psc',
-    }
-    _matchnamespaces = {}
-
-    can_be_relative_uri = set(['link', 'id', 'wfw_comment', 'wfw_commentrss', 'docs', 'url', 'href', 'comments', 'icon', 'logo'])
-    can_contain_relative_uris = set(['content', 'title', 'summary', 'info', 'tagline', 'subtitle', 'copyright', 'rights', 'description'])
-    can_contain_dangerous_markup = set(['content', 'title', 'summary', 'info', 'tagline', 'subtitle', 'copyright', 'rights', 'description'])
-    html_types = [u'text/html', u'application/xhtml+xml']
-
-    def __init__(self, baseuri=None, baselang=None, encoding=u'utf-8'):
-        if not self._matchnamespaces:
-            for k, v in self.namespaces.items():
-                self._matchnamespaces[k.lower()] = v
-        self.feeddata = FeedParserDict() # feed-level data
-        self.encoding = encoding # character encoding
-        self.entries = [] # list of entry-level data
-        self.version = u'' # feed type/version, see SUPPORTED_VERSIONS
-        self.namespacesInUse = {} # dictionary of namespaces defined by the feed
-
-        # the following are used internally to track state;
-        # this is really out of control and should be refactored
-        self.infeed = 0
-        self.inentry = 0
-        self.incontent = 0
-        self.intextinput = 0
-        self.inimage = 0
-        self.inauthor = 0
-        self.incontributor = 0
-        self.inpublisher = 0
-        self.insource = 0
-
-        # georss
-        self.ingeometry = 0
-
-        self.sourcedata = FeedParserDict()
-        self.contentparams = FeedParserDict()
-        self._summaryKey = None
-        self.namespacemap = {}
-        self.elementstack = []
-        self.basestack = []
-        self.langstack = []
-        self.baseuri = baseuri or u''
-        self.lang = baselang or None
-        self.svgOK = 0
-        self.title_depth = -1
-        self.depth = 0
-        # psc_chapters_flag prevents multiple psc_chapters from being
-        # captured in a single entry or item. The transition states are
-        # None -> True -> False. psc_chapter elements will only be
-        # captured while it is True.
-        self.psc_chapters_flag = None
-        if baselang:
-            self.feeddata['language'] = baselang.replace('_','-')
-
-        # A map of the following form:
-        #     {
-        #         object_that_value_is_set_on: {
-        #             property_name: depth_of_node_property_was_extracted_from,
-        #             other_property: depth_of_node_property_was_extracted_from,
-        #         },
-        #     }
-        self.property_depth_map = {}
-
-    def _normalize_attributes(self, kv):
-        k = kv[0].lower()
-        v = k in ('rel', 'type') and kv[1].lower() or kv[1]
-        # the sgml parser doesn't handle entities in attributes, nor
-        # does it pass the attribute values through as unicode, while
-        # strict xml parsers do -- account for this difference
-        if isinstance(self, _LooseFeedParser):
-            v = v.replace('&amp;', '&')
-            if not isinstance(v, unicode):
-                v = v.decode('utf-8')
-        return (k, v)
-
-    def unknown_starttag(self, tag, attrs):
-        # increment depth counter
-        self.depth += 1
-
-        # normalize attrs
-        attrs = map(self._normalize_attributes, attrs)
-
-        # track xml:base and xml:lang
-        attrsD = dict(attrs)
-        baseuri = attrsD.get('xml:base', attrsD.get('base')) or self.baseuri
-        if not isinstance(baseuri, unicode):
-            baseuri = baseuri.decode(self.encoding, 'ignore')
-        # ensure that self.baseuri is always an absolute URI that
-        # uses a whitelisted URI scheme (e.g. not `javscript:`)
-        if self.baseuri:
-            self.baseuri = _makeSafeAbsoluteURI(self.baseuri, baseuri) or self.baseuri
-        else:
-            self.baseuri = _urljoin(self.baseuri, baseuri)
-        lang = attrsD.get('xml:lang', attrsD.get('lang'))
-        if lang == '':
-            # xml:lang could be explicitly set to '', we need to capture that
-            lang = None
-        elif lang is None:
-            # if no xml:lang is specified, use parent lang
-            lang = self.lang
-        if lang:
-            if tag in ('feed', 'rss', 'rdf:RDF'):
-                self.feeddata['language'] = lang.replace('_','-')
-        self.lang = lang
-        self.basestack.append(self.baseuri)
-        self.langstack.append(lang)
-
-        # track namespaces
-        for prefix, uri in attrs:
-            if prefix.startswith('xmlns:'):
-                self.trackNamespace(prefix[6:], uri)
-            elif prefix == 'xmlns':
-                self.trackNamespace(None, uri)
-
-        # track inline content
-        if self.incontent and not self.contentparams.get('type', u'xml').endswith(u'xml'):
-            if tag in ('xhtml:div', 'div'):
-                return # typepad does this 10/2007
-            # element declared itself as escaped markup, but it isn't really
-            self.contentparams['type'] = u'application/xhtml+xml'
-        if self.incontent and self.contentparams.get('type') == u'application/xhtml+xml':
-            if tag.find(':') <> -1:
-                prefix, tag = tag.split(':', 1)
-                namespace = self.namespacesInUse.get(prefix, '')
-                if tag=='math' and namespace=='http://www.w3.org/1998/Math/MathML':
-                    attrs.append(('xmlns',namespace))
-                if tag=='svg' and namespace=='http://www.w3.org/2000/svg':
-                    attrs.append(('xmlns',namespace))
-            if tag == 'svg':
-                self.svgOK += 1
-            return self.handle_data('<%s%s>' % (tag, self.strattrs(attrs)), escape=0)
-
-        # match namespaces
-        if tag.find(':') <> -1:
-            prefix, suffix = tag.split(':', 1)
-        else:
-            prefix, suffix = '', tag
-        prefix = self.namespacemap.get(prefix, prefix)
-        if prefix:
-            prefix = prefix + '_'
-
-        # special hack for better tracking of empty textinput/image elements in illformed feeds
-        if (not prefix) and tag not in ('title', 'link', 'description', 'name'):
-            self.intextinput = 0
-        if (not prefix) and tag not in ('title', 'link', 'description', 'url', 'href', 'width', 'height'):
-            self.inimage = 0
-
-        # call special handler (if defined) or default handler
-        methodname = '_start_' + prefix + suffix
-        try:
-            method = getattr(self, methodname)
-            return method(attrsD)
-        except AttributeError as e:
-            # Since there's no handler or something has gone wrong we explicitly add the element and its attributes
-            unknown_tag = prefix + suffix
-            if len(attrsD) == 0:
-                # No attributes so merge it into the encosing dictionary
-                return self.push(unknown_tag, 1)
-            else:
-                # Has attributes so create it in its own dictionary
-                context = self._getContext()
-                context[unknown_tag] = attrsD
-
-    def unknown_endtag(self, tag):
-        # match namespaces
-        if tag.find(':') <> -1:
-            prefix, suffix = tag.split(':', 1)
-        else:
-            prefix, suffix = '', tag
-        prefix = self.namespacemap.get(prefix, prefix)
-        if prefix:
-            prefix = prefix + '_'
-        if suffix == 'svg' and self.svgOK:
-            self.svgOK -= 1
-
-        # call special handler (if defined) or default handler
-        methodname = '_end_' + prefix + suffix
-        try:
-            if self.svgOK:
-                raise AttributeError()
-            method = getattr(self, methodname)
-            method()
-        except AttributeError:
-            self.pop(prefix + suffix)
-
-        # track inline content
-        if self.incontent and not self.contentparams.get('type', u'xml').endswith(u'xml'):
-            # element declared itself as escaped markup, but it isn't really
-            if tag in ('xhtml:div', 'div'):
-                return # typepad does this 10/2007
-            self.contentparams['type'] = u'application/xhtml+xml'
-        if self.incontent and self.contentparams.get('type') == u'application/xhtml+xml':
-            tag = tag.split(':')[-1]
-            self.handle_data('</%s>' % tag, escape=0)
-
-        # track xml:base and xml:lang going out of scope
-        if self.basestack:
-            self.basestack.pop()
-            if self.basestack and self.basestack[-1]:
-                self.baseuri = self.basestack[-1]
-        if self.langstack:
-            self.langstack.pop()
-            if self.langstack: # and (self.langstack[-1] is not None):
-                self.lang = self.langstack[-1]
-
-        self.depth -= 1
-
-    def handle_charref(self, ref):
-        # called for each character reference, e.g. for '&#160;', ref will be '160'
-        if not self.elementstack:
-            return
-        ref = ref.lower()
-        if ref in ('34', '38', '39', '60', '62', 'x22', 'x26', 'x27', 'x3c', 'x3e'):
-            text = '&#%s;' % ref
-        else:
-            if ref[0] == 'x':
-                c = int(ref[1:], 16)
-            else:
-                c = int(ref)
-            text = unichr(c).encode('utf-8')
-        self.elementstack[-1][2].append(text)
-
-    def handle_entityref(self, ref):
-        # called for each entity reference, e.g. for '&copy;', ref will be 'copy'
-        if not self.elementstack:
-            return
-        if ref in ('lt', 'gt', 'quot', 'amp', 'apos'):
-            text = '&%s;' % ref
-        elif ref in self.entities:
-            text = self.entities[ref]
-            if text.startswith('&#') and text.endswith(';'):
-                return self.handle_entityref(text)
-        else:
-            try:
-                name2codepoint[ref]
-            except KeyError:
-                text = '&%s;' % ref
-            else:
-                text = unichr(name2codepoint[ref]).encode('utf-8')
-        self.elementstack[-1][2].append(text)
-
-    def handle_data(self, text, escape=1):
-        # called for each block of plain text, i.e. outside of any tag and
-        # not containing any character or entity references
-        if not self.elementstack:
-            return
-        if escape and self.contentparams.get('type') == u'application/xhtml+xml':
-            text = _xmlescape(text)
-        self.elementstack[-1][2].append(text)
-
-    def handle_comment(self, text):
-        # called for each comment, e.g. <!-- insert message here -->
-        pass
-
-    def handle_pi(self, text):
-        # called for each processing instruction, e.g. <?instruction>
-        pass
-
-    def handle_decl(self, text):
-        pass
-
-    def parse_declaration(self, i):
-        # override internal declaration handler to handle CDATA blocks
-        if self.rawdata[i:i+9] == '<![CDATA[':
-            k = self.rawdata.find(']]>', i)
-            if k == -1:
-                # CDATA block began but didn't finish
-                k = len(self.rawdata)
-                return k
-            self.handle_data(_xmlescape(self.rawdata[i+9:k]), 0)
-            return k+3
-        else:
-            k = self.rawdata.find('>', i)
-            if k >= 0:
-                return k+1
-            else:
-                # We have an incomplete CDATA block.
-                return k
-
-    def mapContentType(self, contentType):
-        contentType = contentType.lower()
-        if contentType == 'text' or contentType == 'plain':
-            contentType = u'text/plain'
-        elif contentType == 'html':
-            contentType = u'text/html'
-        elif contentType == 'xhtml':
-            contentType = u'application/xhtml+xml'
-        return contentType
-
-    def trackNamespace(self, prefix, uri):
-        loweruri = uri.lower()
-        if not self.version:
-            if (prefix, loweruri) == (None, 'http://my.netscape.com/rdf/simple/0.9/'):
-                self.version = u'rss090'
-            elif loweruri == 'http://purl.org/rss/1.0/':
-                self.version = u'rss10'
-            elif loweruri == 'http://www.w3.org/2005/atom':
-                self.version = u'atom10'
-        if loweruri.find(u'backend.userland.com/rss') <> -1:
-            # match any backend.userland.com namespace
-            uri = u'http://backend.userland.com/rss'
-            loweruri = uri
-        if loweruri in self._matchnamespaces:
-            self.namespacemap[prefix] = self._matchnamespaces[loweruri]
-            self.namespacesInUse[self._matchnamespaces[loweruri]] = uri
-        else:
-            self.namespacesInUse[prefix or ''] = uri
-
-    def resolveURI(self, uri):
-        return _urljoin(self.baseuri or u'', uri)
-
-    def decodeEntities(self, element, data):
-        return data
-
-    def strattrs(self, attrs):
-        return ''.join([' %s="%s"' % (t[0],_xmlescape(t[1],{'"':'&quot;'})) for t in attrs])
-
-    def push(self, element, expectingText):
-        self.elementstack.append([element, expectingText, []])
-
-    def pop(self, element, stripWhitespace=1):
-        if not self.elementstack:
-            return
-        if self.elementstack[-1][0] != element:
-            return
-
-        element, expectingText, pieces = self.elementstack.pop()
-
-        if self.version == u'atom10' and self.contentparams.get('type', u'text') == u'application/xhtml+xml':
-            # remove enclosing child element, but only if it is a <div> and
-            # only if all the remaining content is nested underneath it.
-            # This means that the divs would be retained in the following:
-            #    <div>foo</div><div>bar</div>
-            while pieces and len(pieces)>1 and not pieces[-1].strip():
-                del pieces[-1]
-            while pieces and len(pieces)>1 and not pieces[0].strip():
-                del pieces[0]
-            if pieces and (pieces[0] == '<div>' or pieces[0].startswith('<div ')) and pieces[-1]=='</div>':
-                depth = 0
-                for piece in pieces[:-1]:
-                    if piece.startswith('</'):
-                        depth -= 1
-                        if depth == 0:
-                            break
-                    elif piece.startswith('<') and not piece.endswith('/>'):
-                        depth += 1
-                else:
-                    pieces = pieces[1:-1]
-
-        # Ensure each piece is a str for Python 3
-        for (i, v) in enumerate(pieces):
-            if not isinstance(v, unicode):
-                pieces[i] = v.decode('utf-8')
-
-        output = u''.join(pieces)
-        if stripWhitespace:
-            output = output.strip()
-        if not expectingText:
-            return output
-
-        # decode base64 content
-        if base64 and self.contentparams.get('base64', 0):
-            try:
-                output = _base64decode(output)
-            except binascii.Error:
-                pass
-            except binascii.Incomplete:
-                pass
-            except TypeError:
-                # In Python 3, base64 takes and outputs bytes, not str
-                # This may not be the most correct way to accomplish this
-                output = _base64decode(output.encode('utf-8')).decode('utf-8')
-
-        # resolve relative URIs
-        if (element in self.can_be_relative_uri) and output:
-            # do not resolve guid elements with isPermalink="false"
-            if not element == 'id' or self.guidislink:
-                output = self.resolveURI(output)
-
-        # decode entities within embedded markup
-        if not self.contentparams.get('base64', 0):
-            output = self.decodeEntities(element, output)
-
-        # some feed formats require consumers to guess
-        # whether the content is html or plain text
-        if not self.version.startswith(u'atom') and self.contentparams.get('type') == u'text/plain':
-            if self.lookslikehtml(output):
-                self.contentparams['type'] = u'text/html'
-
-        # remove temporary cruft from contentparams
-        try:
-            del self.contentparams['mode']
-        except KeyError:
-            pass
-        try:
-            del self.contentparams['base64']
-        except KeyError:
-            pass
-
-        is_htmlish = self.mapContentType(self.contentparams.get('type', u'text/html')) in self.html_types
-        # resolve relative URIs within embedded markup
-        if is_htmlish and RESOLVE_RELATIVE_URIS:
-            if element in self.can_contain_relative_uris:
-                output = _resolveRelativeURIs(output, self.baseuri, self.encoding, self.contentparams.get('type', u'text/html'))
-
-        # sanitize embedded markup
-        if is_htmlish and SANITIZE_HTML:
-            if element in self.can_contain_dangerous_markup:
-                output = _sanitizeHTML(output, self.encoding, self.contentparams.get('type', u'text/html'))
-
-        if self.encoding and not isinstance(output, unicode):
-            output = output.decode(self.encoding, 'ignore')
-
-        # address common error where people take data that is already
-        # utf-8, presume that it is iso-8859-1, and re-encode it.
-        if self.encoding in (u'utf-8', u'utf-8_INVALID_PYTHON_3') and isinstance(output, unicode):
-            try:
-                output = output.encode('iso-8859-1').decode('utf-8')
-            except (UnicodeEncodeError, UnicodeDecodeError):
-                pass
-
-        # map win-1252 extensions to the proper code points
-        if isinstance(output, unicode):
-            output = output.translate(_cp1252)
-
-        # categories/tags/keywords/whatever are handled in _end_category
-        if element == 'category':
-            return output
-
-        if element == 'title' and -1 < self.title_depth <= self.depth:
-            return output
-
-        # store output in appropriate place(s)
-        if self.inentry and not self.insource:
-            if element == 'content':
-                self.entries[-1].setdefault(element, [])
-                contentparams = copy.deepcopy(self.contentparams)
-                contentparams['value'] = output
-                self.entries[-1][element].append(contentparams)
-            elif element == 'link':
-                if not self.inimage:
-                    # query variables in urls in link elements are improperly
-                    # converted from `?a=1&b=2` to `?a=1&b;=2` as if they're
-                    # unhandled character references. fix this special case.
-                    output = re.sub("&([A-Za-z0-9_]+);", "&\g<1>", output)
-                    self.entries[-1][element] = output
-                    if output:
-                        self.entries[-1]['links'][-1]['href'] = output
-            else:
-                if element == 'description':
-                    element = 'summary'
-                old_value_depth = self.property_depth_map.setdefault(self.entries[-1], {}).get(element)
-                if old_value_depth is None or self.depth <= old_value_depth:
-                    self.property_depth_map[self.entries[-1]][element] = self.depth
-                    self.entries[-1][element] = output
-                if self.incontent:
-                    contentparams = copy.deepcopy(self.contentparams)
-                    contentparams['value'] = output
-                    self.entries[-1][element + '_detail'] = contentparams
-        elif (self.infeed or self.insource):# and (not self.intextinput) and (not self.inimage):
-            context = self._getContext()
-            if element == 'description':
-                element = 'subtitle'
-            context[element] = output
-            if element == 'link':
-                # fix query variables; see above for the explanation
-                output = re.sub("&([A-Za-z0-9_]+);", "&\g<1>", output)
-                context[element] = output
-                context['links'][-1]['href'] = output
-            elif self.incontent:
-                contentparams = copy.deepcopy(self.contentparams)
-                contentparams['value'] = output
-                context[element + '_detail'] = contentparams
-        return output
-
-    def pushContent(self, tag, attrsD, defaultContentType, expectingText):
-        self.incontent += 1
-        if self.lang:
-            self.lang=self.lang.replace('_','-')
-        self.contentparams = FeedParserDict({
-            'type': self.mapContentType(attrsD.get('type', defaultContentType)),
-            'language': self.lang,
-            'base': self.baseuri})
-        self.contentparams['base64'] = self._isBase64(attrsD, self.contentparams)
-        self.push(tag, expectingText)
-
-    def popContent(self, tag):
-        value = self.pop(tag)
-        self.incontent -= 1
-        self.contentparams.clear()
-        return value
-
-    # a number of elements in a number of RSS variants are nominally plain
-    # text, but this is routinely ignored.  This is an attempt to detect
-    # the most common cases.  As false positives often result in silent
-    # data loss, this function errs on the conservative side.
-    @staticmethod
-    def lookslikehtml(s):
-        # must have a close tag or an entity reference to qualify
-        if not (re.search(r'</(\w+)>',s) or re.search("&#?\w+;",s)):
-            return
-
-        # all tags must be in a restricted subset of valid HTML tags
-        if filter(lambda t: t.lower() not in _HTMLSanitizer.acceptable_elements,
-            re.findall(r'</?(\w+)',s)):
-            return
-
-        # all entities must have been defined as valid HTML entities
-        if filter(lambda e: e not in entitydefs.keys(), re.findall(r'&(\w+);', s)):
-            return
-
-        return 1
-
-    def _mapToStandardPrefix(self, name):
-        colonpos = name.find(':')
-        if colonpos <> -1:
-            prefix = name[:colonpos]
-            suffix = name[colonpos+1:]
-            prefix = self.namespacemap.get(prefix, prefix)
-            name = prefix + ':' + suffix
-        return name
-
-    def _getAttribute(self, attrsD, name):
-        return attrsD.get(self._mapToStandardPrefix(name))
-
-    def _isBase64(self, attrsD, contentparams):
-        if attrsD.get('mode', '') == 'base64':
-            return 1
-        if self.contentparams['type'].startswith(u'text/'):
-            return 0
-        if self.contentparams['type'].endswith(u'+xml'):
-            return 0
-        if self.contentparams['type'].endswith(u'/xml'):
-            return 0
-        return 1
-
-    def _itsAnHrefDamnIt(self, attrsD):
-        href = attrsD.get('url', attrsD.get('uri', attrsD.get('href', None)))
-        if href:
-            try:
-                del attrsD['url']
-            except KeyError:
-                pass
-            try:
-                del attrsD['uri']
-            except KeyError:
-                pass
-            attrsD['href'] = href
-        return attrsD
-
-    def _save(self, key, value, overwrite=False):
-        context = self._getContext()
-        if overwrite:
-            context[key] = value
-        else:
-            context.setdefault(key, value)
-
-    def _start_rss(self, attrsD):
-        versionmap = {'0.91': u'rss091u',
-                      '0.92': u'rss092',
-                      '0.93': u'rss093',
-                      '0.94': u'rss094'}
-        #If we're here then this is an RSS feed.
-        #If we don't have a version or have a version that starts with something
-        #other than RSS then there's been a mistake. Correct it.
-        if not self.version or not self.version.startswith(u'rss'):
-            attr_version = attrsD.get('version', '')
-            version = versionmap.get(attr_version)
-            if version:
-                self.version = version
-            elif attr_version.startswith('2.'):
-                self.version = u'rss20'
-            else:
-                self.version = u'rss'
-
-    def _start_channel(self, attrsD):
-        self.infeed = 1
-        self._cdf_common(attrsD)
-
-    def _cdf_common(self, attrsD):
-        if 'lastmod' in attrsD:
-            self._start_modified({})
-            self.elementstack[-1][-1] = attrsD['lastmod']
-            self._end_modified()
-        if 'href' in attrsD:
-            self._start_link({})
-            self.elementstack[-1][-1] = attrsD['href']
-            self._end_link()
-
-    def _start_feed(self, attrsD):
-        self.infeed = 1
-        versionmap = {'0.1': u'atom01',
-                      '0.2': u'atom02',
-                      '0.3': u'atom03'}
-        if not self.version:
-            attr_version = attrsD.get('version')
-            version = versionmap.get(attr_version)
-            if version:
-                self.version = version
-            else:
-                self.version = u'atom'
-
-    def _end_channel(self):
-        self.infeed = 0
-    _end_feed = _end_channel
-
-    def _start_image(self, attrsD):
-        context = self._getContext()
-        if not self.inentry:
-            context.setdefault('image', FeedParserDict())
-        self.inimage = 1
-        self.title_depth = -1
-        self.push('image', 0)
-
-    def _end_image(self):
-        self.pop('image')
-        self.inimage = 0
-
-    def _start_textinput(self, attrsD):
-        context = self._getContext()
-        context.setdefault('textinput', FeedParserDict())
-        self.intextinput = 1
-        self.title_depth = -1
-        self.push('textinput', 0)
-    _start_textInput = _start_textinput
-
-    def _end_textinput(self):
-        self.pop('textinput')
-        self.intextinput = 0
-    _end_textInput = _end_textinput
-
-    def _start_author(self, attrsD):
-        self.inauthor = 1
-        self.push('author', 1)
-        # Append a new FeedParserDict when expecting an author
-        context = self._getContext()
-        context.setdefault('authors', [])
-        context['authors'].append(FeedParserDict())
-    _start_managingeditor = _start_author
-    _start_dc_author = _start_author
-    _start_dc_creator = _start_author
-    _start_itunes_author = _start_author
-
-    def _end_author(self):
-        self.pop('author')
-        self.inauthor = 0
-        self._sync_author_detail()
-    _end_managingeditor = _end_author
-    _end_dc_author = _end_author
-    _end_dc_creator = _end_author
-    _end_itunes_author = _end_author
-
-    def _start_itunes_owner(self, attrsD):
-        self.inpublisher = 1
-        self.push('publisher', 0)
-
-    def _end_itunes_owner(self):
-        self.pop('publisher')
-        self.inpublisher = 0
-        self._sync_author_detail('publisher')
-
-    def _start_contributor(self, attrsD):
-        self.incontributor = 1
-        context = self._getContext()
-        context.setdefault('contributors', [])
-        context['contributors'].append(FeedParserDict())
-        self.push('contributor', 0)
-
-    def _end_contributor(self):
-        self.pop('contributor')
-        self.incontributor = 0
-
-    def _start_dc_contributor(self, attrsD):
-        self.incontributor = 1
-        context = self._getContext()
-        context.setdefault('contributors', [])
-        context['contributors'].append(FeedParserDict())
-        self.push('name', 0)
-
-    def _end_dc_contributor(self):
-        self._end_name()
-        self.incontributor = 0
-
-    def _start_name(self, attrsD):
-        self.push('name', 0)
-    _start_itunes_name = _start_name
-
-    def _end_name(self):
-        value = self.pop('name')
-        if self.inpublisher:
-            self._save_author('name', value, 'publisher')
-        elif self.inauthor:
-            self._save_author('name', value)
-        elif self.incontributor:
-            self._save_contributor('name', value)
-        elif self.intextinput:
-            context = self._getContext()
-            context['name'] = value
-    _end_itunes_name = _end_name
-
-    def _start_width(self, attrsD):
-        self.push('width', 0)
-
-    def _end_width(self):
-        value = self.pop('width')
-        try:
-            value = int(value)
-        except ValueError:
-            value = 0
-        if self.inimage:
-            context = self._getContext()
-            context['width'] = value
-
-    def _start_height(self, attrsD):
-        self.push('height', 0)
-
-    def _end_height(self):
-        value = self.pop('height')
-        try:
-            value = int(value)
-        except ValueError:
-            value = 0
-        if self.inimage:
-            context = self._getContext()
-            context['height'] = value
-
-    def _start_url(self, attrsD):
-        self.push('href', 1)
-    _start_homepage = _start_url
-    _start_uri = _start_url
-
-    def _end_url(self):
-        value = self.pop('href')
-        if self.inauthor:
-            self._save_author('href', value)
-        elif self.incontributor:
-            self._save_contributor('href', value)
-    _end_homepage = _end_url
-    _end_uri = _end_url
-
-    def _start_email(self, attrsD):
-        self.push('email', 0)
-    _start_itunes_email = _start_email
-
-    def _end_email(self):
-        value = self.pop('email')
-        if self.inpublisher:
-            self._save_author('email', value, 'publisher')
-        elif self.inauthor:
-            self._save_author('email', value)
-        elif self.incontributor:
-            self._save_contributor('email', value)
-    _end_itunes_email = _end_email
-
-    def _getContext(self):
-        if self.insource:
-            context = self.sourcedata
-        elif self.inimage and 'image' in self.feeddata:
-            context = self.feeddata['image']
-        elif self.intextinput:
-            context = self.feeddata['textinput']
-        elif self.inentry:
-            context = self.entries[-1]
-        else:
-            context = self.feeddata
-        return context
-
-    def _save_author(self, key, value, prefix='author'):
-        context = self._getContext()
-        context.setdefault(prefix + '_detail', FeedParserDict())
-        context[prefix + '_detail'][key] = value
-        self._sync_author_detail()
-        context.setdefault('authors', [FeedParserDict()])
-        context['authors'][-1][key] = value
-
-    def _save_contributor(self, key, value):
-        context = self._getContext()
-        context.setdefault('contributors', [FeedParserDict()])
-        context['contributors'][-1][key] = value
-
-    def _sync_author_detail(self, key='author'):
-        context = self._getContext()
-        detail = context.get('%s_detail' % key)
-        if detail:
-            name = detail.get('name')
-            email = detail.get('email')
-            if name and email:
-                context[key] = u'%s (%s)' % (name, email)
-            elif name:
-                context[key] = name
-            elif email:
-                context[key] = email
-        else:
-            author, email = context.get(key), None
-            if not author:
-                return
-            emailmatch = re.search(ur'''(([a-zA-Z0-9\_\-\.\+]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?))(\?subject=\S+)?''', author)
-            if emailmatch:
-                email = emailmatch.group(0)
-                # probably a better way to do the following, but it passes all the tests
-                author = author.replace(email, u'')
-                author = author.replace(u'()', u'')
-                author = author.replace(u'<>', u'')
-                author = author.replace(u'&lt;&gt;', u'')
-                author = author.strip()
-                if author and (author[0] == u'('):
-                    author = author[1:]
-                if author and (author[-1] == u')'):
-                    author = author[:-1]
-                author = author.strip()
-            if author or email:
-                context.setdefault('%s_detail' % key, FeedParserDict())
-            if author:
-                context['%s_detail' % key]['name'] = author
-            if email:
-                context['%s_detail' % key]['email'] = email
-
-    def _start_subtitle(self, attrsD):
-        self.pushContent('subtitle', attrsD, u'text/plain', 1)
-    _start_tagline = _start_subtitle
-    _start_itunes_subtitle = _start_subtitle
-
-    def _end_subtitle(self):
-        self.popContent('subtitle')
-    _end_tagline = _end_subtitle
-    _end_itunes_subtitle = _end_subtitle
-
-    def _start_rights(self, attrsD):
-        self.pushContent('rights', attrsD, u'text/plain', 1)
-    _start_dc_rights = _start_rights
-    _start_copyright = _start_rights
-
-    def _end_rights(self):
-        self.popContent('rights')
-    _end_dc_rights = _end_rights
-    _end_copyright = _end_rights
-
-    def _start_item(self, attrsD):
-        self.entries.append(FeedParserDict())
-        self.push('item', 0)
-        self.inentry = 1
-        self.guidislink = 0
-        self.title_depth = -1
-        self.psc_chapters_flag = None
-        id = self._getAttribute(attrsD, 'rdf:about') or self._getAttribute(attrsD, 'id')
-        if id:
-            context = self._getContext()
-            context['id'] = id
-        self._cdf_common(attrsD)
-    _start_entry = _start_item
-
-    def _end_item(self):
-        self.pop('item')
-        self.inentry = 0
-    _end_entry = _end_item
-
-    def _start_dc_language(self, attrsD):
-        self.push('language', 1)
-    _start_language = _start_dc_language
-
-    def _end_dc_language(self):
-        self.lang = self.pop('language')
-    _end_language = _end_dc_language
-
-    def _start_dc_publisher(self, attrsD):
-        self.push('publisher', 1)
-    _start_webmaster = _start_dc_publisher
-
-    def _end_dc_publisher(self):
-        self.pop('publisher')
-        self._sync_author_detail('publisher')
-    _end_webmaster = _end_dc_publisher
-
-    def _start_published(self, attrsD):
-        self.push('published', 1)
-    _start_dcterms_issued = _start_published
-    _start_issued = _start_published
-    _start_pubdate = _start_published
-
-    def _end_published(self):
-        value = self.pop('published')
-        self._save('published_parsed', _parse_date(value), overwrite=True)
-    _end_dcterms_issued = _end_published
-    _end_issued = _end_published
-    _end_pubdate = _end_published
-
-    def _start_updated(self, attrsD):
-        self.push('updated', 1)
-    _start_modified = _start_updated
-    _start_dcterms_modified = _start_updated
-    _start_dc_date = _start_updated
-    _start_lastbuilddate = _start_updated
-
-    def _end_updated(self):
-        value = self.pop('updated')
-        parsed_value = _parse_date(value)
-        self._save('updated_parsed', parsed_value, overwrite=True)
-    _end_modified = _end_updated
-    _end_dcterms_modified = _end_updated
-    _end_dc_date = _end_updated
-    _end_lastbuilddate = _end_updated
-
-    def _start_created(self, attrsD):
-        self.push('created', 1)
-    _start_dcterms_created = _start_created
-
-    def _end_created(self):
-        value = self.pop('created')
-        self._save('created_parsed', _parse_date(value), overwrite=True)
-    _end_dcterms_created = _end_created
-
-    def _start_expirationdate(self, attrsD):
-        self.push('expired', 1)
-
-    def _end_expirationdate(self):
-        self._save('expired_parsed', _parse_date(self.pop('expired')), overwrite=True)
-
-    # geospatial location, or "where", from georss.org
-
-    def _start_georssgeom(self, attrsD):
-        self.push('geometry', 0)
-        context = self._getContext()
-        context['where'] = FeedParserDict()
-
-    _start_georss_point = _start_georssgeom
-    _start_georss_line = _start_georssgeom
-    _start_georss_polygon = _start_georssgeom
-    _start_georss_box = _start_georssgeom
-
-    def _save_where(self, geometry):
-        context = self._getContext()
-        context['where'].update(geometry)
-
-    def _end_georss_point(self):
-        geometry = _parse_georss_point(self.pop('geometry'))
-        if geometry:
-            self._save_where(geometry)
-
-    def _end_georss_line(self):
-        geometry = _parse_georss_line(self.pop('geometry'))
-        if geometry:
-            self._save_where(geometry)
-
-    def _end_georss_polygon(self):
-        this = self.pop('geometry')
-        geometry = _parse_georss_polygon(this)
-        if geometry:
-            self._save_where(geometry)
-
-    def _end_georss_box(self):
-        geometry = _parse_georss_box(self.pop('geometry'))
-        if geometry:
-            self._save_where(geometry)
-
-    def _start_where(self, attrsD):
-        self.push('where', 0)
-        context = self._getContext()
-        context['where'] = FeedParserDict()
-    _start_georss_where = _start_where
-
-    def _parse_srs_attrs(self, attrsD):
-        srsName = attrsD.get('srsname')
-        try:
-            srsDimension = int(attrsD.get('srsdimension', '2'))
-        except ValueError:
-            srsDimension = 2
-        context = self._getContext()
-        context['where']['srsName'] = srsName
-        context['where']['srsDimension'] = srsDimension
-
-    def _start_gml_point(self, attrsD):
-        self._parse_srs_attrs(attrsD)
-        self.ingeometry = 1
-        self.push('geometry', 0)
-
-    def _start_gml_linestring(self, attrsD):
-        self._parse_srs_attrs(attrsD)
-        self.ingeometry = 'linestring'
-        self.push('geometry', 0)
-
-    def _start_gml_polygon(self, attrsD):
-        self._parse_srs_attrs(attrsD)
-        self.push('geometry', 0)
-
-    def _start_gml_exterior(self, attrsD):
-        self.push('geometry', 0)
-
-    def _start_gml_linearring(self, attrsD):
-        self.ingeometry = 'polygon'
-        self.push('geometry', 0)
-
-    def _start_gml_pos(self, attrsD):
-        self.push('pos', 0)
-
-    def _end_gml_pos(self):
-        this = self.pop('pos')
-        context = self._getContext()
-        srsName = context['where'].get('srsName')
-        srsDimension = context['where'].get('srsDimension', 2)
-        swap = True
-        if srsName and "EPSG" in srsName:
-            epsg = int(srsName.split(":")[-1])
-            swap = bool(epsg in _geogCS)
-        geometry = _parse_georss_point(this, swap=swap, dims=srsDimension)
-        if geometry:
-            self._save_where(geometry)
-
-    def _start_gml_poslist(self, attrsD):
-        self.push('pos', 0)
-
-    def _end_gml_poslist(self):
-        this = self.pop('pos')
-        context = self._getContext()
-        srsName = context['where'].get('srsName')
-        srsDimension = context['where'].get('srsDimension', 2)
-        swap = True
-        if srsName and "EPSG" in srsName:
-            epsg = int(srsName.split(":")[-1])
-            swap = bool(epsg in _geogCS)
-        geometry = _parse_poslist(
-            this, self.ingeometry, swap=swap, dims=srsDimension)
-        if geometry:
-            self._save_where(geometry)
-
-    def _end_geom(self):
-        self.ingeometry = 0
-        self.pop('geometry')
-    _end_gml_point = _end_geom
-    _end_gml_linestring = _end_geom
-    _end_gml_linearring = _end_geom
-    _end_gml_exterior = _end_geom
-    _end_gml_polygon = _end_geom
-
-    def _end_where(self):
-        self.pop('where')
-    _end_georss_where = _end_where
-
-    # end geospatial
-
-    def _start_cc_license(self, attrsD):
-        context = self._getContext()
-        value = self._getAttribute(attrsD, 'rdf:resource')
-        attrsD = FeedParserDict()
-        attrsD['rel'] = u'license'
-        if value:
-            attrsD['href']=value
-        context.setdefault('links', []).append(attrsD)
-
-    def _start_creativecommons_license(self, attrsD):
-        self.push('license', 1)
-    _start_creativeCommons_license = _start_creativecommons_license
-
-    def _end_creativecommons_license(self):
-        value = self.pop('license')
-        context = self._getContext()
-        attrsD = FeedParserDict()
-        attrsD['rel'] = u'license'
-        if value:
-            attrsD['href'] = value
-        context.setdefault('links', []).append(attrsD)
-        del context['license']
-    _end_creativeCommons_license = _end_creativecommons_license
-
-    def _addTag(self, term, scheme, label):
-        context = self._getContext()
-        tags = context.setdefault('tags', [])
-        if (not term) and (not scheme) and (not label):
-            return
-        value = FeedParserDict({'term': term, 'scheme': scheme, 'label': label})
-        if value not in tags:
-            tags.append(value)
-
-    def _start_category(self, attrsD):
-        context = self._getContext()
-        categories = context.setdefault('categories', [])
-        id = attrsD.get('id')
-        name = attrsD.get('name')
-        if id and name:
-            value = FeedParserDict({'id': id, 'name': name})
-            if value not in categories:
-                categories.append(value)
-
-        term = attrsD.get('term')
-        scheme = attrsD.get('scheme', attrsD.get('domain'))
-        label = attrsD.get('label')
-        self._addTag(term, scheme, label)
-        self.push('category', 1)
-    _start_dc_subject = _start_category
-    _start_keywords = _start_category
-
-    def _start_subcat(self, attrsD):
-        context = self._getContext()
-        subcats = context['categories'][-1].setdefault('subcats', [])
-        id = attrsD.get('id')
-        name = attrsD.get('name')
-        if id and name:
-            value = FeedParserDict({'id': id, 'name': name})
-            if value not in subcats:
-                subcats.append(value)
-        self.push('category', 1)
-
-    def _start_media_category(self, attrsD):
-        attrsD.setdefault('scheme', u'http://search.yahoo.com/mrss/category_schema')
-        self._start_category(attrsD)
-
-    def _end_itunes_keywords(self):
-        for term in self.pop('itunes_keywords').split(','):
-            if term.strip():
-                self._addTag(term.strip(), u'http://www.itunes.com/', None)
-
-    def _start_itunes_category(self, attrsD):
-        self._addTag(attrsD.get('text'), u'http://www.itunes.com/', None)
-        self.push('category', 1)
-
-    def _end_category(self):
-        value = self.pop('category')
-        if not value:
-            return
-        context = self._getContext()
-        tags = context['tags']
-        if value and len(tags) and not tags[-1]['term']:
-            tags[-1]['term'] = value
-        else:
-            self._addTag(value, None, None)
-    _end_dc_subject = _end_category
-    _end_keywords = _end_category
-    _end_itunes_category = _end_category
-    _end_media_category = _end_category
-    _end_subcat = _end_category
-
-    def _start_cloud(self, attrsD):
-        self._getContext()['cloud'] = FeedParserDict(attrsD)
-
-    def _start_link(self, attrsD):
-        attrsD.setdefault('rel', u'alternate')
-        if attrsD['rel'] == u'self':
-            attrsD.setdefault('type', u'application/atom+xml')
-        else:
-            attrsD.setdefault('type', u'text/html')
-        context = self._getContext()
-        attrsD = self._itsAnHrefDamnIt(attrsD)
-        if 'href' in attrsD:
-            attrsD['href'] = self.resolveURI(attrsD['href'])
-        expectingText = self.infeed or self.inentry or self.insource
-        context.setdefault('links', [])
-        if not (self.inentry and self.inimage):
-            context['links'].append(FeedParserDict(attrsD))
-        if 'href' in attrsD:
-            expectingText = 0
-            if (attrsD.get('rel') == u'alternate') and (self.mapContentType(attrsD.get('type')) in self.html_types):
-                context['link'] = attrsD['href']
-        else:
-            self.push('link', expectingText)
-
-    def _end_link(self):
-        value = self.pop('link')
-
-    def _start_guid(self, attrsD):
-        self.guidislink = (attrsD.get('ispermalink', 'true') == 'true')
-        self.push('id', 1)
-    _start_id = _start_guid
-
-    def _end_guid(self):
-        value = self.pop('id')
-        self._save('guidislink', self.guidislink and 'link' not in self._getContext())
-        if self.guidislink:
-            # guid acts as link, but only if 'ispermalink' is not present or is 'true',
-            # and only if the item doesn't already have a link element
-            self._save('link', value)
-    _end_id = _end_guid
-
-    def _start_title(self, attrsD):
-        if self.svgOK:
-            return self.unknown_starttag('title', attrsD.items())
-        self.pushContent('title', attrsD, u'text/plain', self.infeed or self.inentry or self.insource)
-    _start_dc_title = _start_title
-    _start_media_title = _start_title
-
-    def _end_title(self):
-        if self.svgOK:
-            return
-        value = self.popContent('title')
-        if not value:
-            return
-        self.title_depth = self.depth
-    _end_dc_title = _end_title
-
-    def _end_media_title(self):
-        title_depth = self.title_depth
-        self._end_title()
-        self.title_depth = title_depth
-
-    def _start_description(self, attrsD):
-        context = self._getContext()
-        if 'summary' in context:
-            self._summaryKey = 'content'
-            self._start_content(attrsD)
-        else:
-            self.pushContent('description', attrsD, u'text/html', self.infeed or self.inentry or self.insource)
-    _start_dc_description = _start_description
-    _start_media_description = _start_description
-
-    def _start_abstract(self, attrsD):
-        self.pushContent('description', attrsD, u'text/plain', self.infeed or self.inentry or self.insource)
-
-    def _end_description(self):
-        if self._summaryKey == 'content':
-            self._end_content()
-        else:
-            value = self.popContent('description')
-        self._summaryKey = None
-    _end_abstract = _end_description
-    _end_dc_description = _end_description
-    _end_media_description = _end_description
-
-    def _start_info(self, attrsD):
-        self.pushContent('info', attrsD, u'text/plain', 1)
-    _start_feedburner_browserfriendly = _start_info
-
-    def _end_info(self):
-        self.popContent('info')
-    _end_feedburner_browserfriendly = _end_info
-
-    def _start_generator(self, attrsD):
-        if attrsD:
-            attrsD = self._itsAnHrefDamnIt(attrsD)
-            if 'href' in attrsD:
-                attrsD['href'] = self.resolveURI(attrsD['href'])
-        self._getContext()['generator_detail'] = FeedParserDict(attrsD)
-        self.push('generator', 1)
-
-    def _end_generator(self):
-        value = self.pop('generator')
-        context = self._getContext()
-        if 'generator_detail' in context:
-            context['generator_detail']['name'] = value
-
-    def _start_admin_generatoragent(self, attrsD):
-        self.push('generator', 1)
-        value = self._getAttribute(attrsD, 'rdf:resource')
-        if value:
-            self.elementstack[-1][2].append(value)
-        self.pop('generator')
-        self._getContext()['generator_detail'] = FeedParserDict({'href': value})
-
-    def _start_admin_errorreportsto(self, attrsD):
-        self.push('errorreportsto', 1)
-        value = self._getAttribute(attrsD, 'rdf:resource')
-        if value:
-            self.elementstack[-1][2].append(value)
-        self.pop('errorreportsto')
-
-    def _start_summary(self, attrsD):
-        context = self._getContext()
-        if 'summary' in context:
-            self._summaryKey = 'content'
-            self._start_content(attrsD)
-        else:
-            self._summaryKey = 'summary'
-            self.pushContent(self._summaryKey, attrsD, u'text/plain', 1)
-    _start_itunes_summary = _start_summary
-
-    def _end_summary(self):
-        if self._summaryKey == 'content':
-            self._end_content()
-        else:
-            self.popContent(self._summaryKey or 'summary')
-        self._summaryKey = None
-    _end_itunes_summary = _end_summary
-
-    def _start_enclosure(self, attrsD):
-        attrsD = self._itsAnHrefDamnIt(attrsD)
-        context = self._getContext()
-        attrsD['rel'] = u'enclosure'
-        context.setdefault('links', []).append(FeedParserDict(attrsD))
-
-    def _start_source(self, attrsD):
-        if 'url' in attrsD:
-            # This means that we're processing a source element from an RSS 2.0 feed
-            self.sourcedata['href'] = attrsD[u'url']
-        self.push('source', 1)
-        self.insource = 1
-        self.title_depth = -1
-
-    def _end_source(self):
-        self.insource = 0
-        value = self.pop('source')
-        if value:
-            self.sourcedata['title'] = value
-        self._getContext()['source'] = copy.deepcopy(self.sourcedata)
-        self.sourcedata.clear()
-
-    def _start_content(self, attrsD):
-        self.pushContent('content', attrsD, u'text/plain', 1)
-        src = attrsD.get('src')
-        if src:
-            self.contentparams['src'] = src
-        self.push('content', 1)
-
-    def _start_body(self, attrsD):
-        self.pushContent('content', attrsD, u'application/xhtml+xml', 1)
-    _start_xhtml_body = _start_body
-
-    def _start_content_encoded(self, attrsD):
-        self.pushContent('content', attrsD, u'text/html', 1)
-    _start_fullitem = _start_content_encoded
-
-    def _end_content(self):
-        copyToSummary = self.mapContentType(self.contentparams.get('type')) in ([u'text/plain'] + self.html_types)
-        value = self.popContent('content')
-        if copyToSummary:
-            self._save('summary', value)
-
-    _end_body = _end_content
-    _end_xhtml_body = _end_content
-    _end_content_encoded = _end_content
-    _end_fullitem = _end_content
-
-    def _start_itunes_image(self, attrsD):
-        self.push('itunes_image', 0)
-        if attrsD.get('href'):
-            self._getContext()['image'] = FeedParserDict({'href': attrsD.get('href')})
-        elif attrsD.get('url'):
-            self._getContext()['image'] = FeedParserDict({'href': attrsD.get('url')})
-    _start_itunes_link = _start_itunes_image
-
-    def _end_itunes_block(self):
-        value = self.pop('itunes_block', 0)
-        self._getContext()['itunes_block'] = (value == 'yes') and 1 or 0
-
-    def _end_itunes_explicit(self):
-        value = self.pop('itunes_explicit', 0)
-        # Convert 'yes' -> True, 'clean' to False, and any other value to None
-        # False and None both evaluate as False, so the difference can be ignored
-        # by applications that only need to know if the content is explicit.
-        self._getContext()['itunes_explicit'] = (None, False, True)[(value == 'yes' and 2) or value == 'clean' or 0]
-
-    def _start_media_group(self, attrsD):
-        # don't do anything, but don't break the enclosed tags either
-        pass
-
-    def _start_media_credit(self, attrsD):
-        context = self._getContext()
-        context.setdefault('media_credit', [])
-        context['media_credit'].append(attrsD)
-        self.push('credit', 1)
-
-    def _end_media_credit(self):
-        credit = self.pop('credit')
-        if credit != None and len(credit.strip()) != 0:
-            context = self._getContext()
-            context['media_credit'][-1]['content'] = credit
-
-    def _start_media_restriction(self, attrsD):
-        context = self._getContext()
-        context.setdefault('media_restriction', attrsD)
-        self.push('restriction', 1)
-
-    def _end_media_restriction(self):
-        restriction = self.pop('restriction')
-        if restriction != None and len(restriction.strip()) != 0:
-            context = self._getContext()
-            context['media_restriction']['content'] = restriction
-
-    def _start_media_license(self, attrsD):
-        context = self._getContext()
-        context.setdefault('media_license', attrsD)
-        self.push('license', 1)
-
-    def _end_media_license(self):
-        license = self.pop('license')
-        if license != None and len(license.strip()) != 0:
-            context = self._getContext()
-            context['media_license']['content'] = license
-
-    def _start_media_content(self, attrsD):
-        context = self._getContext()
-        context.setdefault('media_content', [])
-        context['media_content'].append(attrsD)
-
-    def _start_media_thumbnail(self, attrsD):
-        context = self._getContext()
-        context.setdefault('media_thumbnail', [])
-        self.push('url', 1) # new
-        context['media_thumbnail'].append(attrsD)
-
-    def _end_media_thumbnail(self):
-        url = self.pop('url')
-        context = self._getContext()
-        if url != None and len(url.strip()) != 0:
-            if 'url' not in context['media_thumbnail'][-1]:
-                context['media_thumbnail'][-1]['url'] = url
-
-    def _start_media_player(self, attrsD):
-        self.push('media_player', 0)
-        self._getContext()['media_player'] = FeedParserDict(attrsD)
-
-    def _end_media_player(self):
-        value = self.pop('media_player')
-        context = self._getContext()
-        context['media_player']['content'] = value
-
-    def _start_newlocation(self, attrsD):
-        self.push('newlocation', 1)
-
-    def _end_newlocation(self):
-        url = self.pop('newlocation')
-        context = self._getContext()
-        # don't set newlocation if the context isn't right
-        if context is not self.feeddata:
-            return
-        context['newlocation'] = _makeSafeAbsoluteURI(self.baseuri, url.strip())
-
-    def _start_psc_chapters(self, attrsD):
-        if self.psc_chapters_flag is None:
-	    # Transition from None -> True
-            self.psc_chapters_flag = True
-            attrsD['chapters'] = []
-            self._getContext()['psc_chapters'] = FeedParserDict(attrsD)
-
-    def _end_psc_chapters(self):
-        # Transition from True -> False
-        self.psc_chapters_flag = False
-
-    def _start_psc_chapter(self, attrsD):
-        if self.psc_chapters_flag:
-            start = self._getAttribute(attrsD, 'start')
-            attrsD['start_parsed'] = _parse_psc_chapter_start(start)
-
-            context = self._getContext()['psc_chapters']
-            context['chapters'].append(FeedParserDict(attrsD))
-
-
-if _XML_AVAILABLE:
-    class _StrictFeedParser(_FeedParserMixin, xml.sax.handler.ContentHandler):
-        def __init__(self, baseuri, baselang, encoding):
-            xml.sax.handler.ContentHandler.__init__(self)
-            _FeedParserMixin.__init__(self, baseuri, baselang, encoding)
-            self.bozo = 0
-            self.exc = None
-            self.decls = {}
-
-        def startPrefixMapping(self, prefix, uri):
-            if not uri:
-                return
-            # Jython uses '' instead of None; standardize on None
-            prefix = prefix or None
-            self.trackNamespace(prefix, uri)
-            if prefix and uri == 'http://www.w3.org/1999/xlink':
-                self.decls['xmlns:' + prefix] = uri
-
-        def startElementNS(self, name, qname, attrs):
-            namespace, localname = name
-            lowernamespace = str(namespace or '').lower()
-            if lowernamespace.find(u'backend.userland.com/rss') <> -1:
-                # match any backend.userland.com namespace
-                namespace = u'http://backend.userland.com/rss'
-                lowernamespace = namespace
-            if qname and qname.find(':') > 0:
-                givenprefix = qname.split(':')[0]
-            else:
-                givenprefix = None
-            prefix = self._matchnamespaces.get(lowernamespace, givenprefix)
-            if givenprefix and (prefix == None or (prefix == '' and lowernamespace == '')) and givenprefix not in self.namespacesInUse:
-                raise UndeclaredNamespace, "'%s' is not associated with a namespace" % givenprefix
-            localname = str(localname).lower()
-
-            # qname implementation is horribly broken in Python 2.1 (it
-            # doesn't report any), and slightly broken in Python 2.2 (it
-            # doesn't report the xml: namespace). So we match up namespaces
-            # with a known list first, and then possibly override them with
-            # the qnames the SAX parser gives us (if indeed it gives us any
-            # at all).  Thanks to MatejC for helping me test this and
-            # tirelessly telling me that it didn't work yet.
-            attrsD, self.decls = self.decls, {}
-            if localname=='math' and namespace=='http://www.w3.org/1998/Math/MathML':
-                attrsD['xmlns']=namespace
-            if localname=='svg' and namespace=='http://www.w3.org/2000/svg':
-                attrsD['xmlns']=namespace
-
-            if prefix:
-                localname = prefix.lower() + ':' + localname
-            elif namespace and not qname: #Expat
-                for name,value in self.namespacesInUse.items():
-                    if name and value == namespace:
-                        localname = name + ':' + localname
-                        break
-
-            for (namespace, attrlocalname), attrvalue in attrs.items():
-                lowernamespace = (namespace or '').lower()
-                prefix = self._matchnamespaces.get(lowernamespace, '')
-                if prefix:
-                    attrlocalname = prefix + ':' + attrlocalname
-                attrsD[str(attrlocalname).lower()] = attrvalue
-            for qname in attrs.getQNames():
-                attrsD[str(qname).lower()] = attrs.getValueByQName(qname)
-            localname = str(localname).lower()
-            self.unknown_starttag(localname, attrsD.items())
-
-        def characters(self, text):
-            self.handle_data(text)
-
-        def endElementNS(self, name, qname):
-            namespace, localname = name
-            lowernamespace = str(namespace or '').lower()
-            if qname and qname.find(':') > 0:
-                givenprefix = qname.split(':')[0]
-            else:
-                givenprefix = ''
-            prefix = self._matchnamespaces.get(lowernamespace, givenprefix)
-            if prefix:
-                localname = prefix + ':' + localname
-            elif namespace and not qname: #Expat
-                for name,value in self.namespacesInUse.items():
-                    if name and value == namespace:
-                        localname = name + ':' + localname
-                        break
-            localname = str(localname).lower()
-            self.unknown_endtag(localname)
-
-        def error(self, exc):
-            self.bozo = 1
-            self.exc = exc
-
-        # drv_libxml2 calls warning() in some cases
-        warning = error
-
-        def fatalError(self, exc):
-            self.error(exc)
-            raise exc
-
-class _BaseHTMLProcessor(sgmllib.SGMLParser):
-    special = re.compile('''[<>'"]''')
-    bare_ampersand = re.compile("&(?!#\d+;|#x[0-9a-fA-F]+;|\w+;)")
-    elements_no_end_tag = set([
-      'area', 'base', 'basefont', 'br', 'col', 'command', 'embed', 'frame',
-      'hr', 'img', 'input', 'isindex', 'keygen', 'link', 'meta', 'param',
-      'source', 'track', 'wbr'
-    ])
-
-    def __init__(self, encoding, _type):
-        self.encoding = encoding
-        self._type = _type
-        sgmllib.SGMLParser.__init__(self)
-
-    def reset(self):
-        self.pieces = []
-        sgmllib.SGMLParser.reset(self)
-
-    def _shorttag_replace(self, match):
-        tag = match.group(1)
-        if tag in self.elements_no_end_tag:
-            return '<' + tag + ' />'
-        else:
-            return '<' + tag + '></' + tag + '>'
-
-    # By declaring these methods and overriding their compiled code
-    # with the code from sgmllib, the original code will execute in
-    # feedparser's scope instead of sgmllib's. This means that the
-    # `tagfind` and `charref` regular expressions will be found as
-    # they're declared above, not as they're declared in sgmllib.
-    def goahead(self, i):
-        pass
-    goahead.func_code = sgmllib.SGMLParser.goahead.func_code
-
-    def __parse_starttag(self, i):
-        pass
-    __parse_starttag.func_code = sgmllib.SGMLParser.parse_starttag.func_code
-
-    def parse_starttag(self,i):
-        j = self.__parse_starttag(i)
-        if self._type == 'application/xhtml+xml':
-            if j>2 and self.rawdata[j-2:j]=='/>':
-                self.unknown_endtag(self.lasttag)
-        return j
-
-    def feed(self, data):
-        data = re.compile(r'<!((?!DOCTYPE|--|\[))', re.IGNORECASE).sub(r'&lt;!\1', data)
-        data = re.sub(r'<([^<>\s]+?)\s*/>', self._shorttag_replace, data)
-        data = data.replace('&#39;', "'")
-        data = data.replace('&#34;', '"')
-        try:
-            bytes
-            if bytes is str:
-                raise NameError
-            self.encoding = self.encoding + u'_INVALID_PYTHON_3'
-        except NameError:
-            if self.encoding and isinstance(data, unicode):
-                data = data.encode(self.encoding)
-        sgmllib.SGMLParser.feed(self, data)
-        sgmllib.SGMLParser.close(self)
-
-    def normalize_attrs(self, attrs):
-        if not attrs:
-            return attrs
-        # utility method to be called by descendants
-        attrs = dict([(k.lower(), v) for k, v in attrs]).items()
-        attrs = [(k, k in ('rel', 'type') and v.lower() or v) for k, v in attrs]
-        attrs.sort()
-        return attrs
-
-    def unknown_starttag(self, tag, attrs):
-        # called for each start tag
-        # attrs is a list of (attr, value) tuples
-        # e.g. for <pre class='screen'>, tag='pre', attrs=[('class', 'screen')]
-        uattrs = []
-        strattrs=''
-        if attrs:
-            for key, value in attrs:
-                value=value.replace('>','&gt;').replace('<','&lt;').replace('"','&quot;')
-                value = self.bare_ampersand.sub("&amp;", value)
-                # thanks to Kevin Marks for this breathtaking hack to deal with (valid) high-bit attribute values in UTF-8 feeds
-                if not isinstance(value, unicode):
-                    value = value.decode(self.encoding, 'ignore')
-                try:
-                    # Currently, in Python 3 the key is already a str, and cannot be decoded again
-                    uattrs.append((unicode(key, self.encoding), value))
-                except TypeError:
-                    uattrs.append((key, value))
-            strattrs = u''.join([u' %s="%s"' % (key, value) for key, value in uattrs])
-            if self.encoding:
-                try:
-                    strattrs = strattrs.encode(self.encoding)
-                except (UnicodeEncodeError, LookupError):
-                    pass
-        if tag in self.elements_no_end_tag:
-            self.pieces.append('<%s%s />' % (tag, strattrs))
-        else:
-            self.pieces.append('<%s%s>' % (tag, strattrs))
-
-    def unknown_endtag(self, tag):
-        # called for each end tag, e.g. for </pre>, tag will be 'pre'
-        # Reconstruct the original end tag.
-        if tag not in self.elements_no_end_tag:
-            self.pieces.append("</%s>" % tag)
-
-    def handle_charref(self, ref):
-        # called for each character reference, e.g. for '&#160;', ref will be '160'
-        # Reconstruct the original character reference.
-        ref = ref.lower()
-        if ref.startswith('x'):
-            value = int(ref[1:], 16)
-        else:
-            value = int(ref)
-
-        if value in _cp1252:
-            self.pieces.append('&#%s;' % hex(ord(_cp1252[value]))[1:])
-        else:
-            self.pieces.append('&#%s;' % ref)
-
-    def handle_entityref(self, ref):
-        # called for each entity reference, e.g. for '&copy;', ref will be 'copy'
-        # Reconstruct the original entity reference.
-        if ref in name2codepoint or ref == 'apos':
-            self.pieces.append('&%s;' % ref)
-        else:
-            self.pieces.append('&amp;%s' % ref)
-
-    def handle_data(self, text):
-        # called for each block of plain text, i.e. outside of any tag and
-        # not containing any character or entity references
-        # Store the original text verbatim.
-        self.pieces.append(text)
-
-    def handle_comment(self, text):
-        # called for each HTML comment, e.g. <!-- insert Javascript code here -->
-        # Reconstruct the original comment.
-        self.pieces.append('<!--%s-->' % text)
-
-    def handle_pi(self, text):
-        # called for each processing instruction, e.g. <?instruction>
-        # Reconstruct original processing instruction.
-        self.pieces.append('<?%s>' % text)
-
-    def handle_decl(self, text):
-        # called for the DOCTYPE, if present, e.g.
-        # <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
-        #     "http://www.w3.org/TR/html4/loose.dtd">
-        # Reconstruct original DOCTYPE
-        self.pieces.append('<!%s>' % text)
-
-    _new_declname_match = re.compile(r'[a-zA-Z][-_.a-zA-Z0-9:]*\s*').match
-    def _scan_name(self, i, declstartpos):
-        rawdata = self.rawdata
-        n = len(rawdata)
-        if i == n:
-            return None, -1
-        m = self._new_declname_match(rawdata, i)
-        if m:
-            s = m.group()
-            name = s.strip()
-            if (i + len(s)) == n:
-                return None, -1  # end of buffer
-            return name.lower(), m.end()
-        else:
-            self.handle_data(rawdata)
-#            self.updatepos(declstartpos, i)
-            return None, -1
-
-    def convert_charref(self, name):
-        return '&#%s;' % name
-
-    def convert_entityref(self, name):
-        return '&%s;' % name
-
-    def output(self):
-        '''Return processed HTML as a single string'''
-        return ''.join([str(p) for p in self.pieces])
-
-    def parse_declaration(self, i):
-        try:
-            return sgmllib.SGMLParser.parse_declaration(self, i)
-        except sgmllib.SGMLParseError:
-            # escape the doctype declaration and continue parsing
-            self.handle_data('&lt;')
-            return i+1
-
-class _LooseFeedParser(_FeedParserMixin, _BaseHTMLProcessor):
-    def __init__(self, baseuri, baselang, encoding, entities):
-        sgmllib.SGMLParser.__init__(self)
-        _FeedParserMixin.__init__(self, baseuri, baselang, encoding)
-        _BaseHTMLProcessor.__init__(self, encoding, 'application/xhtml+xml')
-        self.entities=entities
-
-    def decodeEntities(self, element, data):
-        data = data.replace('&#60;', '&lt;')
-        data = data.replace('&#x3c;', '&lt;')
-        data = data.replace('&#x3C;', '&lt;')
-        data = data.replace('&#62;', '&gt;')
-        data = data.replace('&#x3e;', '&gt;')
-        data = data.replace('&#x3E;', '&gt;')
-        data = data.replace('&#38;', '&amp;')
-        data = data.replace('&#x26;', '&amp;')
-        data = data.replace('&#34;', '&quot;')
-        data = data.replace('&#x22;', '&quot;')
-        data = data.replace('&#39;', '&apos;')
-        data = data.replace('&#x27;', '&apos;')
-        if not self.contentparams.get('type', u'xml').endswith(u'xml'):
-            data = data.replace('&lt;', '<')
-            data = data.replace('&gt;', '>')
-            data = data.replace('&amp;', '&')
-            data = data.replace('&quot;', '"')
-            data = data.replace('&apos;', "'")
-        return data
-
-    def strattrs(self, attrs):
-        return ''.join([' %s="%s"' % (n,v.replace('"','&quot;')) for n,v in attrs])
-
-class _RelativeURIResolver(_BaseHTMLProcessor):
-    relative_uris = set([('a', 'href'),
-                     ('applet', 'codebase'),
-                     ('area', 'href'),
-                     ('blockquote', 'cite'),
-                     ('body', 'background'),
-                     ('del', 'cite'),
-                     ('form', 'action'),
-                     ('frame', 'longdesc'),
-                     ('frame', 'src'),
-                     ('iframe', 'longdesc'),
-                     ('iframe', 'src'),
-                     ('head', 'profile'),
-                     ('img', 'longdesc'),
-                     ('img', 'src'),
-                     ('img', 'usemap'),
-                     ('input', 'src'),
-                     ('input', 'usemap'),
-                     ('ins', 'cite'),
-                     ('link', 'href'),
-                     ('object', 'classid'),
-                     ('object', 'codebase'),
-                     ('object', 'data'),
-                     ('object', 'usemap'),
-                     ('q', 'cite'),
-                     ('script', 'src'),
-                     ('video', 'poster')])
-
-    def __init__(self, baseuri, encoding, _type):
-        _BaseHTMLProcessor.__init__(self, encoding, _type)
-        self.baseuri = baseuri
-
-    def resolveURI(self, uri):
-        return _makeSafeAbsoluteURI(self.baseuri, uri.strip())
-
-    def unknown_starttag(self, tag, attrs):
-        attrs = self.normalize_attrs(attrs)
-        attrs = [(key, ((tag, key) in self.relative_uris) and self.resolveURI(value) or value) for key, value in attrs]
-        _BaseHTMLProcessor.unknown_starttag(self, tag, attrs)
-
-def _resolveRelativeURIs(htmlSource, baseURI, encoding, _type):
-    if not _SGML_AVAILABLE:
-        return htmlSource
-
-    p = _RelativeURIResolver(baseURI, encoding, _type)
-    p.feed(htmlSource)
-    return p.output()
-
-def _makeSafeAbsoluteURI(base, rel=None):
-    # bail if ACCEPTABLE_URI_SCHEMES is empty
-    if not ACCEPTABLE_URI_SCHEMES:
-        return _urljoin(base, rel or u'')
-    if not base:
-        return rel or u''
-    if not rel:
-        try:
-            scheme = urlparse.urlparse(base)[0]
-        except ValueError:
-            return u''
-        if not scheme or scheme in ACCEPTABLE_URI_SCHEMES:
-            return base
-        return u''
-    uri = _urljoin(base, rel)
-    if uri.strip().split(':', 1)[0] not in ACCEPTABLE_URI_SCHEMES:
-        return u''
-    return uri
-
-class _HTMLSanitizer(_BaseHTMLProcessor):
-    acceptable_elements = set(['a', 'abbr', 'acronym', 'address', 'area',
-        'article', 'aside', 'audio', 'b', 'big', 'blockquote', 'br', 'button',
-        'canvas', 'caption', 'center', 'cite', 'code', 'col', 'colgroup',
-        'command', 'datagrid', 'datalist', 'dd', 'del', 'details', 'dfn',
-        'dialog', 'dir', 'div', 'dl', 'dt', 'em', 'event-source', 'fieldset',
-        'figcaption', 'figure', 'footer', 'font', 'form', 'header', 'h1',
-        'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'i', 'img', 'input', 'ins',
-        'keygen', 'kbd', 'label', 'legend', 'li', 'm', 'map', 'menu', 'meter',
-        'multicol', 'nav', 'nextid', 'ol', 'output', 'optgroup', 'option',
-        'p', 'pre', 'progress', 'q', 's', 'samp', 'section', 'select',
-        'small', 'sound', 'source', 'spacer', 'span', 'strike', 'strong',
-        'sub', 'sup', 'table', 'tbody', 'td', 'textarea', 'time', 'tfoot',
-        'th', 'thead', 'tr', 'tt', 'u', 'ul', 'var', 'video', 'noscript'])
-
-    acceptable_attributes = set(['abbr', 'accept', 'accept-charset', 'accesskey',
-      'action', 'align', 'alt', 'autocomplete', 'autofocus', 'axis',
-      'background', 'balance', 'bgcolor', 'bgproperties', 'border',
-      'bordercolor', 'bordercolordark', 'bordercolorlight', 'bottompadding',
-      'cellpadding', 'cellspacing', 'ch', 'challenge', 'char', 'charoff',
-      'choff', 'charset', 'checked', 'cite', 'class', 'clear', 'color', 'cols',
-      'colspan', 'compact', 'contenteditable', 'controls', 'coords', 'data',
-      'datafld', 'datapagesize', 'datasrc', 'datetime', 'default', 'delay',
-      'dir', 'disabled', 'draggable', 'dynsrc', 'enctype', 'end', 'face', 'for',
-      'form', 'frame', 'galleryimg', 'gutter', 'headers', 'height', 'hidefocus',
-      'hidden', 'high', 'href', 'hreflang', 'hspace', 'icon', 'id', 'inputmode',
-      'ismap', 'keytype', 'label', 'leftspacing', 'lang', 'list', 'longdesc',
-      'loop', 'loopcount', 'loopend', 'loopstart', 'low', 'lowsrc', 'max',
-      'maxlength', 'media', 'method', 'min', 'multiple', 'name', 'nohref',
-      'noshade', 'nowrap', 'open', 'optimum', 'pattern', 'ping', 'point-size',
-      'poster', 'pqg', 'preload', 'prompt', 'radiogroup', 'readonly', 'rel',
-      'repeat-max', 'repeat-min', 'replace', 'required', 'rev', 'rightspacing',
-      'rows', 'rowspan', 'rules', 'scope', 'selected', 'shape', 'size', 'span',
-      'src', 'start', 'step', 'summary', 'suppress', 'tabindex', 'target',
-      'template', 'title', 'toppadding', 'type', 'unselectable', 'usemap',
-      'urn', 'valign', 'value', 'variable', 'volume', 'vspace', 'vrml',
-      'width', 'wrap', 'xml:lang'])
-
-    unacceptable_elements_with_end_tag = set(['script', 'applet', 'style'])
-
-    acceptable_css_properties = set(['azimuth', 'background-color',
-      'border-bottom-color', 'border-collapse', 'border-color',
-      'border-left-color', 'border-right-color', 'border-top-color', 'clear',
-      'color', 'cursor', 'direction', 'display', 'elevation', 'float', 'font',
-      'font-family', 'font-size', 'font-style', 'font-variant', 'font-weight',
-      'height', 'letter-spacing', 'line-height', 'overflow', 'pause',
-      'pause-after', 'pause-before', 'pitch', 'pitch-range', 'richness',
-      'speak', 'speak-header', 'speak-numeral', 'speak-punctuation',
-      'speech-rate', 'stress', 'text-align', 'text-decoration', 'text-indent',
-      'unicode-bidi', 'vertical-align', 'voice-family', 'volume',
-      'white-space', 'width'])
-
-    # survey of common keywords found in feeds
-    acceptable_css_keywords = set(['auto', 'aqua', 'black', 'block', 'blue',
-      'bold', 'both', 'bottom', 'brown', 'center', 'collapse', 'dashed',
-      'dotted', 'fuchsia', 'gray', 'green', '!important', 'italic', 'left',
-      'lime', 'maroon', 'medium', 'none', 'navy', 'normal', 'nowrap', 'olive',
-      'pointer', 'purple', 'red', 'right', 'solid', 'silver', 'teal', 'top',
-      'transparent', 'underline', 'white', 'yellow'])
-
-    valid_css_values = re.compile('^(#[0-9a-f]+|rgb\(\d+%?,\d*%?,?\d*%?\)?|' +
-      '\d{0,2}\.?\d{0,2}(cm|em|ex|in|mm|pc|pt|px|%|,|\))?)$')
-
-    mathml_elements = set(['annotation', 'annotation-xml', 'maction', 'math',
-      'merror', 'mfenced', 'mfrac', 'mi', 'mmultiscripts', 'mn', 'mo', 'mover', 'mpadded',
-      'mphantom', 'mprescripts', 'mroot', 'mrow', 'mspace', 'msqrt', 'mstyle',
-      'msub', 'msubsup', 'msup', 'mtable', 'mtd', 'mtext', 'mtr', 'munder',
-      'munderover', 'none', 'semantics'])
-
-    mathml_attributes = set(['actiontype', 'align', 'columnalign', 'columnalign',
-      'columnalign', 'close', 'columnlines', 'columnspacing', 'columnspan', 'depth',
-      'display', 'displaystyle', 'encoding', 'equalcolumns', 'equalrows',
-      'fence', 'fontstyle', 'fontweight', 'frame', 'height', 'linethickness',
-      'lspace', 'mathbackground', 'mathcolor', 'mathvariant', 'mathvariant',
-      'maxsize', 'minsize', 'open', 'other', 'rowalign', 'rowalign', 'rowalign',
-      'rowlines', 'rowspacing', 'rowspan', 'rspace', 'scriptlevel', 'selection',
-      'separator', 'separators', 'stretchy', 'width', 'width', 'xlink:href',
-      'xlink:show', 'xlink:type', 'xmlns', 'xmlns:xlink'])
-
-    # svgtiny - foreignObject + linearGradient + radialGradient + stop
-    svg_elements = set(['a', 'animate', 'animateColor', 'animateMotion',
-      'animateTransform', 'circle', 'defs', 'desc', 'ellipse', 'foreignObject',
-      'font-face', 'font-face-name', 'font-face-src', 'g', 'glyph', 'hkern',
-      'linearGradient', 'line', 'marker', 'metadata', 'missing-glyph', 'mpath',
-      'path', 'polygon', 'polyline', 'radialGradient', 'rect', 'set', 'stop',
-      'svg', 'switch', 'text', 'title', 'tspan', 'use'])
-
-    # svgtiny + class + opacity + offset + xmlns + xmlns:xlink
-    svg_attributes = set(['accent-height', 'accumulate', 'additive', 'alphabetic',
-       'arabic-form', 'ascent', 'attributeName', 'attributeType',
-       'baseProfile', 'bbox', 'begin', 'by', 'calcMode', 'cap-height',
-       'class', 'color', 'color-rendering', 'content', 'cx', 'cy', 'd', 'dx',
-       'dy', 'descent', 'display', 'dur', 'end', 'fill', 'fill-opacity',
-       'fill-rule', 'font-family', 'font-size', 'font-stretch', 'font-style',
-       'font-variant', 'font-weight', 'from', 'fx', 'fy', 'g1', 'g2',
-       'glyph-name', 'gradientUnits', 'hanging', 'height', 'horiz-adv-x',
-       'horiz-origin-x', 'id', 'ideographic', 'k', 'keyPoints', 'keySplines',
-       'keyTimes', 'lang', 'mathematical', 'marker-end', 'marker-mid',
-       'marker-start', 'markerHeight', 'markerUnits', 'markerWidth', 'max',
-       'min', 'name', 'offset', 'opacity', 'orient', 'origin',
-       'overline-position', 'overline-thickness', 'panose-1', 'path',
-       'pathLength', 'points', 'preserveAspectRatio', 'r', 'refX', 'refY',
-       'repeatCount', 'repeatDur', 'requiredExtensions', 'requiredFeatures',
-       'restart', 'rotate', 'rx', 'ry', 'slope', 'stemh', 'stemv',
-       'stop-color', 'stop-opacity', 'strikethrough-position',
-       'strikethrough-thickness', 'stroke', 'stroke-dasharray',
-       'stroke-dashoffset', 'stroke-linecap', 'stroke-linejoin',
-       'stroke-miterlimit', 'stroke-opacity', 'stroke-width', 'systemLanguage',
-       'target', 'text-anchor', 'to', 'transform', 'type', 'u1', 'u2',
-       'underline-position', 'underline-thickness', 'unicode', 'unicode-range',
-       'units-per-em', 'values', 'version', 'viewBox', 'visibility', 'width',
-       'widths', 'x', 'x-height', 'x1', 'x2', 'xlink:actuate', 'xlink:arcrole',
-       'xlink:href', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type',
-       'xml:base', 'xml:lang', 'xml:space', 'xmlns', 'xmlns:xlink', 'y', 'y1',
-       'y2', 'zoomAndPan'])
-
-    svg_attr_map = None
-    svg_elem_map = None
-
-    acceptable_svg_properties = set([ 'fill', 'fill-opacity', 'fill-rule',
-      'stroke', 'stroke-width', 'stroke-linecap', 'stroke-linejoin',
-      'stroke-opacity'])
-
-    def reset(self):
-        _BaseHTMLProcessor.reset(self)
-        self.unacceptablestack = 0
-        self.mathmlOK = 0
-        self.svgOK = 0
-
-    def unknown_starttag(self, tag, attrs):
-        acceptable_attributes = self.acceptable_attributes
-        keymap = {}
-        if not tag in self.acceptable_elements or self.svgOK:
-            if tag in self.unacceptable_elements_with_end_tag:
-                self.unacceptablestack += 1
-
-            # add implicit namespaces to html5 inline svg/mathml
-            if self._type.endswith('html'):
-                if not dict(attrs).get('xmlns'):
-                    if tag=='svg':
-                        attrs.append( ('xmlns','http://www.w3.org/2000/svg') )
-                    if tag=='math':
-                        attrs.append( ('xmlns','http://www.w3.org/1998/Math/MathML') )
-
-            # not otherwise acceptable, perhaps it is MathML or SVG?
-            if tag=='math' and ('xmlns','http://www.w3.org/1998/Math/MathML') in attrs:
-                self.mathmlOK += 1
-            if tag=='svg' and ('xmlns','http://www.w3.org/2000/svg') in attrs:
-                self.svgOK += 1
-
-            # chose acceptable attributes based on tag class, else bail
-            if  self.mathmlOK and tag in self.mathml_elements:
-                acceptable_attributes = self.mathml_attributes
-            elif self.svgOK and tag in self.svg_elements:
-                # for most vocabularies, lowercasing is a good idea.  Many
-                # svg elements, however, are camel case
-                if not self.svg_attr_map:
-                    lower=[attr.lower() for attr in self.svg_attributes]
-                    mix=[a for a in self.svg_attributes if a not in lower]
-                    self.svg_attributes = lower
-                    self.svg_attr_map = dict([(a.lower(),a) for a in mix])
-
-                    lower=[attr.lower() for attr in self.svg_elements]
-                    mix=[a for a in self.svg_elements if a not in lower]
-                    self.svg_elements = lower
-                    self.svg_elem_map = dict([(a.lower(),a) for a in mix])
-                acceptable_attributes = self.svg_attributes
-                tag = self.svg_elem_map.get(tag,tag)
-                keymap = self.svg_attr_map
-            elif not tag in self.acceptable_elements:
-                return
-
-        # declare xlink namespace, if needed
-        if self.mathmlOK or self.svgOK:
-            if filter(lambda (n,v): n.startswith('xlink:'),attrs):
-                if not ('xmlns:xlink','http://www.w3.org/1999/xlink') in attrs:
-                    attrs.append(('xmlns:xlink','http://www.w3.org/1999/xlink'))
-
-        clean_attrs = []
-        for key, value in self.normalize_attrs(attrs):
-            if key in acceptable_attributes:
-                key=keymap.get(key,key)
-                # make sure the uri uses an acceptable uri scheme
-                if key == u'href':
-                    value = _makeSafeAbsoluteURI(value)
-                clean_attrs.append((key,value))
-            elif key=='style':
-                clean_value = self.sanitize_style(value)
-                if clean_value:
-                    clean_attrs.append((key,clean_value))
-        _BaseHTMLProcessor.unknown_starttag(self, tag, clean_attrs)
-
-    def unknown_endtag(self, tag):
-        if not tag in self.acceptable_elements:
-            if tag in self.unacceptable_elements_with_end_tag:
-                self.unacceptablestack -= 1
-            if self.mathmlOK and tag in self.mathml_elements:
-                if tag == 'math' and self.mathmlOK:
-                    self.mathmlOK -= 1
-            elif self.svgOK and tag in self.svg_elements:
-                tag = self.svg_elem_map.get(tag,tag)
-                if tag == 'svg' and self.svgOK:
-                    self.svgOK -= 1
-            else:
-                return
-        _BaseHTMLProcessor.unknown_endtag(self, tag)
-
-    def handle_pi(self, text):
-        pass
-
-    def handle_decl(self, text):
-        pass
-
-    def handle_data(self, text):
-        if not self.unacceptablestack:
-            _BaseHTMLProcessor.handle_data(self, text)
-
-    def sanitize_style(self, style):
-        # disallow urls
-        style=re.compile('url\s*\(\s*[^\s)]+?\s*\)\s*').sub(' ',style)
-
-        # gauntlet
-        if not re.match("""^([:,;#%.\sa-zA-Z0-9!]|\w-\w|'[\s\w]+'|"[\s\w]+"|\([\d,\s]+\))*$""", style):
-            return ''
-        # This replaced a regexp that used re.match and was prone to pathological back-tracking.
-        if re.sub("\s*[-\w]+\s*:\s*[^:;]*;?", '', style).strip():
-            return ''
-
-        clean = []
-        for prop,value in re.findall("([-\w]+)\s*:\s*([^:;]*)",style):
-            if not value:
-                continue
-            if prop.lower() in self.acceptable_css_properties:
-                clean.append(prop + ': ' + value + ';')
-            elif prop.split('-')[0].lower() in ['background','border','margin','padding']:
-                for keyword in value.split():
-                    if not keyword in self.acceptable_css_keywords and \
-                        not self.valid_css_values.match(keyword):
-                        break
-                else:
-                    clean.append(prop + ': ' + value + ';')
-            elif self.svgOK and prop.lower() in self.acceptable_svg_properties:
-                clean.append(prop + ': ' + value + ';')
-
-        return ' '.join(clean)
-
-    def parse_comment(self, i, report=1):
-        ret = _BaseHTMLProcessor.parse_comment(self, i, report)
-        if ret >= 0:
-            return ret
-        # if ret == -1, this may be a malicious attempt to circumvent
-        # sanitization, or a page-destroying unclosed comment
-        match = re.compile(r'--[^>]*>').search(self.rawdata, i+4)
-        if match:
-            return match.end()
-        # unclosed comment; deliberately fail to handle_data()
-        return len(self.rawdata)
-
-
-def _sanitizeHTML(htmlSource, encoding, _type):
-    if not _SGML_AVAILABLE:
-        return htmlSource
-    p = _HTMLSanitizer(encoding, _type)
-    htmlSource = htmlSource.replace('<![CDATA[', '&lt;![CDATA[')
-    p.feed(htmlSource)
-    data = p.output()
-    data = data.strip().replace('\r\n', '\n')
-    return data
-
-class _FeedURLHandler(urllib2.HTTPDigestAuthHandler, urllib2.HTTPRedirectHandler, urllib2.HTTPDefaultErrorHandler):
-    def http_error_default(self, req, fp, code, msg, headers):
-        # The default implementation just raises HTTPError.
-        # Forget that.
-        fp.status = code
-        return fp
-
-    def http_error_301(self, req, fp, code, msg, hdrs):
-        result = urllib2.HTTPRedirectHandler.http_error_301(self, req, fp,
-                                                            code, msg, hdrs)
-        result.status = code
-        result.newurl = result.geturl()
-        return result
-    # The default implementations in urllib2.HTTPRedirectHandler
-    # are identical, so hardcoding a http_error_301 call above
-    # won't affect anything
-    http_error_300 = http_error_301
-    http_error_302 = http_error_301
-    http_error_303 = http_error_301
-    http_error_307 = http_error_301
-
-    def http_error_401(self, req, fp, code, msg, headers):
-        # Check if
-        # - server requires digest auth, AND
-        # - we tried (unsuccessfully) with basic auth, AND
-        # If all conditions hold, parse authentication information
-        # out of the Authorization header we sent the first time
-        # (for the username and password) and the WWW-Authenticate
-        # header the server sent back (for the realm) and retry
-        # the request with the appropriate digest auth headers instead.
-        # This evil genius hack has been brought to you by Aaron Swartz.
-        host = urlparse.urlparse(req.get_full_url())[1]
-        if base64 is None or 'Authorization' not in req.headers \
-                          or 'WWW-Authenticate' not in headers:
-            return self.http_error_default(req, fp, code, msg, headers)
-        auth = _base64decode(req.headers['Authorization'].split(' ')[1])
-        user, passw = auth.split(':')
-        realm = re.findall('realm="([^"]*)"', headers['WWW-Authenticate'])[0]
-        self.add_password(realm, host, user, passw)
-        retry = self.http_error_auth_reqed('www-authenticate', host, req, headers)
-        self.reset_retry_count()
-        return retry
-
-def _open_resource(url_file_stream_or_string, etag, modified, agent, referrer, handlers, request_headers):
-    """URL, filename, or string --> stream
-
-    This function lets you define parsers that take any input source
-    (URL, pathname to local or network file, or actual data as a string)
-    and deal with it in a uniform manner.  Returned object is guaranteed
-    to have all the basic stdio read methods (read, readline, readlines).
-    Just .close() the object when you're done with it.
-
-    If the etag argument is supplied, it will be used as the value of an
-    If-None-Match request header.
-
-    If the modified argument is supplied, it can be a tuple of 9 integers
-    (as returned by gmtime() in the standard Python time module) or a date
-    string in any format supported by feedparser. Regardless, it MUST
-    be in GMT (Greenwich Mean Time). It will be reformatted into an
-    RFC 1123-compliant date and used as the value of an If-Modified-Since
-    request header.
-
-    If the agent argument is supplied, it will be used as the value of a
-    User-Agent request header.
-
-    If the referrer argument is supplied, it will be used as the value of a
-    Referer[sic] request header.
-
-    If handlers is supplied, it is a list of handlers used to build a
-    urllib2 opener.
-
-    if request_headers is supplied it is a dictionary of HTTP request headers
-    that will override the values generated by FeedParser.
-    """
-
-    if hasattr(url_file_stream_or_string, 'read'):
-        return url_file_stream_or_string
-
-    if isinstance(url_file_stream_or_string, basestring) \
-       and urlparse.urlparse(url_file_stream_or_string)[0] in ('http', 'https', 'ftp', 'file', 'feed'):
-        # Deal with the feed URI scheme
-        if url_file_stream_or_string.startswith('feed:http'):
-            url_file_stream_or_string = url_file_stream_or_string[5:]
-        elif url_file_stream_or_string.startswith('feed:'):
-            url_file_stream_or_string = 'http:' + url_file_stream_or_string[5:]
-        if not agent:
-            agent = USER_AGENT
-        # Test for inline user:password credentials for HTTP basic auth
-        auth = None
-        if base64 and not url_file_stream_or_string.startswith('ftp:'):
-            urltype, rest = urllib.splittype(url_file_stream_or_string)
-            realhost, rest = urllib.splithost(rest)
-            if realhost:
-                user_passwd, realhost = urllib.splituser(realhost)
-                if user_passwd:
-                    url_file_stream_or_string = '%s://%s%s' % (urltype, realhost, rest)
-                    auth = base64.standard_b64encode(user_passwd).strip()
-
-        # iri support
-        if isinstance(url_file_stream_or_string, unicode):
-            url_file_stream_or_string = _convert_to_idn(url_file_stream_or_string)
-
-        # try to open with urllib2 (to use optional headers)
-        request = _build_urllib2_request(url_file_stream_or_string, agent, etag, modified, referrer, auth, request_headers)
-        opener = urllib2.build_opener(*tuple(handlers + [_FeedURLHandler()]))
-        opener.addheaders = [] # RMK - must clear so we only send our custom User-Agent
-        try:
-            return opener.open(request)
-        finally:
-            opener.close() # JohnD
-
-    # try to open with native open function (if url_file_stream_or_string is a filename)
-    try:
-        return open(url_file_stream_or_string, 'rb')
-    except (IOError, UnicodeEncodeError, TypeError):
-        # if url_file_stream_or_string is a unicode object that
-        # cannot be converted to the encoding returned by
-        # sys.getfilesystemencoding(), a UnicodeEncodeError
-        # will be thrown
-        # If url_file_stream_or_string is a string that contains NULL
-        # (such as an XML document encoded in UTF-32), TypeError will
-        # be thrown.
-        pass
-
-    # treat url_file_stream_or_string as string
-    if isinstance(url_file_stream_or_string, unicode):
-        return _StringIO(url_file_stream_or_string.encode('utf-8'))
-    return _StringIO(url_file_stream_or_string)
-
-def _convert_to_idn(url):
-    """Convert a URL to IDN notation"""
-    # this function should only be called with a unicode string
-    # strategy: if the host cannot be encoded in ascii, then
-    # it'll be necessary to encode it in idn form
-    parts = list(urlparse.urlsplit(url))
-    try:
-        parts[1].encode('ascii')
-    except UnicodeEncodeError:
-        # the url needs to be converted to idn notation
-        host = parts[1].rsplit(':', 1)
-        newhost = []
-        port = u''
-        if len(host) == 2:
-            port = host.pop()
-        for h in host[0].split('.'):
-            newhost.append(h.encode('idna').decode('utf-8'))
-        parts[1] = '.'.join(newhost)
-        if port:
-            parts[1] += ':' + port
-        return urlparse.urlunsplit(parts)
-    else:
-        return url
-
-def _build_urllib2_request(url, agent, etag, modified, referrer, auth, request_headers):
-    request = urllib2.Request(url)
-    request.add_header('User-Agent', agent)
-    if etag:
-        request.add_header('If-None-Match', etag)
-    if isinstance(modified, basestring):
-        modified = _parse_date(modified)
-    elif isinstance(modified, datetime.datetime):
-        modified = modified.utctimetuple()
-    if modified:
-        # format into an RFC 1123-compliant timestamp. We can't use
-        # time.strftime() since the %a and %b directives can be affected
-        # by the current locale, but RFC 2616 states that dates must be
-        # in English.
-        short_weekdays = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
-        months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
-        request.add_header('If-Modified-Since', '%s, %02d %s %04d %02d:%02d:%02d GMT' % (short_weekdays[modified[6]], modified[2], months[modified[1] - 1], modified[0], modified[3], modified[4], modified[5]))
-    if referrer:
-        request.add_header('Referer', referrer)
-    if gzip and zlib:
-        request.add_header('Accept-encoding', 'gzip, deflate')
-    elif gzip:
-        request.add_header('Accept-encoding', 'gzip')
-    elif zlib:
-        request.add_header('Accept-encoding', 'deflate')
-    else:
-        request.add_header('Accept-encoding', '')
-    if auth:
-        request.add_header('Authorization', 'Basic %s' % auth)
-    if ACCEPT_HEADER:
-        request.add_header('Accept', ACCEPT_HEADER)
-    # use this for whatever -- cookies, special headers, etc
-    # [('Cookie','Something'),('x-special-header','Another Value')]
-    for header_name, header_value in request_headers.items():
-        request.add_header(header_name, header_value)
-    request.add_header('A-IM', 'feed') # RFC 3229 support
-    return request
-
-def _parse_psc_chapter_start(start):
-    FORMAT = r'^((\d{2}):)?(\d{2}):(\d{2})(\.(\d{3}))?$'
-
-    m = re.compile(FORMAT).match(start)
-    if m is None:
-        return None
-
-    _, h, m, s, _, ms = m.groups()
-    h, m, s, ms = (int(h or 0), int(m), int(s), int(ms or 0))
-    return datetime.timedelta(0, h*60*60 + m*60 + s, ms*1000)
-
-_date_handlers = []
-def registerDateHandler(func):
-    '''Register a date handler function (takes string, returns 9-tuple date in GMT)'''
-    _date_handlers.insert(0, func)
-
-# ISO-8601 date parsing routines written by Fazal Majid.
-# The ISO 8601 standard is very convoluted and irregular - a full ISO 8601
-# parser is beyond the scope of feedparser and would be a worthwhile addition
-# to the Python library.
-# A single regular expression cannot parse ISO 8601 date formats into groups
-# as the standard is highly irregular (for instance is 030104 2003-01-04 or
-# 0301-04-01), so we use templates instead.
-# Please note the order in templates is significant because we need a
-# greedy match.
-_iso8601_tmpl = ['YYYY-?MM-?DD', 'YYYY-0MM?-?DD', 'YYYY-MM', 'YYYY-?OOO',
-                'YY-?MM-?DD', 'YY-?OOO', 'YYYY',
-                '-YY-?MM', '-OOO', '-YY',
-                '--MM-?DD', '--MM',
-                '---DD',
-                'CC', '']
-_iso8601_re = [
-    tmpl.replace(
-    'YYYY', r'(?P<year>\d{4})').replace(
-    'YY', r'(?P<year>\d\d)').replace(
-    'MM', r'(?P<month>[01]\d)').replace(
-    'DD', r'(?P<day>[0123]\d)').replace(
-    'OOO', r'(?P<ordinal>[0123]\d\d)').replace(
-    'CC', r'(?P<century>\d\d$)')
-    + r'(T?(?P<hour>\d{2}):(?P<minute>\d{2})'
-    + r'(:(?P<second>\d{2}))?'
-    + r'(\.(?P<fracsecond>\d+))?'
-    + r'(?P<tz>[+-](?P<tzhour>\d{2})(:(?P<tzmin>\d{2}))?|Z)?)?'
-    for tmpl in _iso8601_tmpl]
-try:
-    del tmpl
-except NameError:
-    pass
-_iso8601_matches = [re.compile(regex).match for regex in _iso8601_re]
-try:
-    del regex
-except NameError:
-    pass
-    
-def _parse_date_iso8601(dateString):
-    '''Parse a variety of ISO-8601-compatible formats like 20040105'''
-    m = None
-    for _iso8601_match in _iso8601_matches:
-        m = _iso8601_match(dateString)
-        if m:
-            break
-    if not m:
-        return
-    if m.span() == (0, 0):
-        return
-    params = m.groupdict()
-    ordinal = params.get('ordinal', 0)
-    if ordinal:
-        ordinal = int(ordinal)
-    else:
-        ordinal = 0
-    year = params.get('year', '--')
-    if not year or year == '--':
-        year = time.gmtime()[0]
-    elif len(year) == 2:
-        # ISO 8601 assumes current century, i.e. 93 -> 2093, NOT 1993
-        year = 100 * int(time.gmtime()[0] / 100) + int(year)
-    else:
-        year = int(year)
-    month = params.get('month', '-')
-    if not month or month == '-':
-        # ordinals are NOT normalized by mktime, we simulate them
-        # by setting month=1, day=ordinal
-        if ordinal:
-            month = 1
-        else:
-            month = time.gmtime()[1]
-    month = int(month)
-    day = params.get('day', 0)
-    if not day:
-        # see above
-        if ordinal:
-            day = ordinal
-        elif params.get('century', 0) or \
-                 params.get('year', 0) or params.get('month', 0):
-            day = 1
-        else:
-            day = time.gmtime()[2]
-    else:
-        day = int(day)
-    # special case of the century - is the first year of the 21st century
-    # 2000 or 2001 ? The debate goes on...
-    if 'century' in params:
-        year = (int(params['century']) - 1) * 100 + 1
-    # in ISO 8601 most fields are optional
-    for field in ['hour', 'minute', 'second', 'tzhour', 'tzmin']:
-        if not params.get(field, None):
-            params[field] = 0
-    hour = int(params.get('hour', 0))
-    minute = int(params.get('minute', 0))
-    second = int(float(params.get('second', 0)))
-    # weekday is normalized by mktime(), we can ignore it
-    weekday = 0
-    daylight_savings_flag = -1
-    tm = [year, month, day, hour, minute, second, weekday,
-          ordinal, daylight_savings_flag]
-    # ISO 8601 time zone adjustments
-    tz = params.get('tz')
-    if tz and tz != 'Z':
-        if tz[0] == '-':
-            tm[3] += int(params.get('tzhour', 0))
-            tm[4] += int(params.get('tzmin', 0))
-        elif tz[0] == '+':
-            tm[3] -= int(params.get('tzhour', 0))
-            tm[4] -= int(params.get('tzmin', 0))
-        else:
-            return None
-    # Python's time.mktime() is a wrapper around the ANSI C mktime(3c)
-    # which is guaranteed to normalize d/m/y/h/m/s.
-    # Many implementations have bugs, but we'll pretend they don't.
-    return time.localtime(time.mktime(tuple(tm)))
-registerDateHandler(_parse_date_iso8601)
-
-# 8-bit date handling routines written by ytrewq1.
-_korean_year  = u'\ub144' # b3e2 in euc-kr
-_korean_month = u'\uc6d4' # bff9 in euc-kr
-_korean_day   = u'\uc77c' # c0cf in euc-kr
-_korean_am    = u'\uc624\uc804' # bfc0 c0fc in euc-kr
-_korean_pm    = u'\uc624\ud6c4' # bfc0 c8c4 in euc-kr
-
-_korean_onblog_date_re = \
-    re.compile('(\d{4})%s\s+(\d{2})%s\s+(\d{2})%s\s+(\d{2}):(\d{2}):(\d{2})' % \
-               (_korean_year, _korean_month, _korean_day))
-_korean_nate_date_re = \
-    re.compile(u'(\d{4})-(\d{2})-(\d{2})\s+(%s|%s)\s+(\d{,2}):(\d{,2}):(\d{,2})' % \
-               (_korean_am, _korean_pm))
-def _parse_date_onblog(dateString):
-    '''Parse a string according to the OnBlog 8-bit date format'''
-    m = _korean_onblog_date_re.match(dateString)
-    if not m:
-        return
-    w3dtfdate = '%(year)s-%(month)s-%(day)sT%(hour)s:%(minute)s:%(second)s%(zonediff)s' % \
-                {'year': m.group(1), 'month': m.group(2), 'day': m.group(3),\
-                 'hour': m.group(4), 'minute': m.group(5), 'second': m.group(6),\
-                 'zonediff': '+09:00'}
-    return _parse_date_w3dtf(w3dtfdate)
-registerDateHandler(_parse_date_onblog)
-
-def _parse_date_nate(dateString):
-    '''Parse a string according to the Nate 8-bit date format'''
-    m = _korean_nate_date_re.match(dateString)
-    if not m:
-        return
-    hour = int(m.group(5))
-    ampm = m.group(4)
-    if (ampm == _korean_pm):
-        hour += 12
-    hour = str(hour)
-    if len(hour) == 1:
-        hour = '0' + hour
-    w3dtfdate = '%(year)s-%(month)s-%(day)sT%(hour)s:%(minute)s:%(second)s%(zonediff)s' % \
-                {'year': m.group(1), 'month': m.group(2), 'day': m.group(3),\
-                 'hour': hour, 'minute': m.group(6), 'second': m.group(7),\
-                 'zonediff': '+09:00'}
-    return _parse_date_w3dtf(w3dtfdate)
-registerDateHandler(_parse_date_nate)
-
-# Unicode strings for Greek date strings
-_greek_months = \
-  { \
-   u'\u0399\u03b1\u03bd': u'Jan',       # c9e1ed in iso-8859-7
-   u'\u03a6\u03b5\u03b2': u'Feb',       # d6e5e2 in iso-8859-7
-   u'\u039c\u03ac\u03ce': u'Mar',       # ccdcfe in iso-8859-7
-   u'\u039c\u03b1\u03ce': u'Mar',       # cce1fe in iso-8859-7
-   u'\u0391\u03c0\u03c1': u'Apr',       # c1f0f1 in iso-8859-7
-   u'\u039c\u03ac\u03b9': u'May',       # ccdce9 in iso-8859-7
-   u'\u039c\u03b1\u03ca': u'May',       # cce1fa in iso-8859-7
-   u'\u039c\u03b1\u03b9': u'May',       # cce1e9 in iso-8859-7
-   u'\u0399\u03bf\u03cd\u03bd': u'Jun', # c9effded in iso-8859-7
-   u'\u0399\u03bf\u03bd': u'Jun',       # c9efed in iso-8859-7
-   u'\u0399\u03bf\u03cd\u03bb': u'Jul', # c9effdeb in iso-8859-7
-   u'\u0399\u03bf\u03bb': u'Jul',       # c9f9eb in iso-8859-7
-   u'\u0391\u03cd\u03b3': u'Aug',       # c1fde3 in iso-8859-7
-   u'\u0391\u03c5\u03b3': u'Aug',       # c1f5e3 in iso-8859-7
-   u'\u03a3\u03b5\u03c0': u'Sep',       # d3e5f0 in iso-8859-7
-   u'\u039f\u03ba\u03c4': u'Oct',       # cfeaf4 in iso-8859-7
-   u'\u039d\u03bf\u03ad': u'Nov',       # cdefdd in iso-8859-7
-   u'\u039d\u03bf\u03b5': u'Nov',       # cdefe5 in iso-8859-7
-   u'\u0394\u03b5\u03ba': u'Dec',       # c4e5ea in iso-8859-7
-  }
-
-_greek_wdays = \
-  { \
-   u'\u039a\u03c5\u03c1': u'Sun', # caf5f1 in iso-8859-7
-   u'\u0394\u03b5\u03c5': u'Mon', # c4e5f5 in iso-8859-7
-   u'\u03a4\u03c1\u03b9': u'Tue', # d4f1e9 in iso-8859-7
-   u'\u03a4\u03b5\u03c4': u'Wed', # d4e5f4 in iso-8859-7
-   u'\u03a0\u03b5\u03bc': u'Thu', # d0e5ec in iso-8859-7
-   u'\u03a0\u03b1\u03c1': u'Fri', # d0e1f1 in iso-8859-7
-   u'\u03a3\u03b1\u03b2': u'Sat', # d3e1e2 in iso-8859-7
-  }
-
-_greek_date_format_re = \
-    re.compile(u'([^,]+),\s+(\d{2})\s+([^\s]+)\s+(\d{4})\s+(\d{2}):(\d{2}):(\d{2})\s+([^\s]+)')
-
-def _parse_date_greek(dateString):
-    '''Parse a string according to a Greek 8-bit date format.'''
-    m = _greek_date_format_re.match(dateString)
-    if not m:
-        return
-    wday = _greek_wdays[m.group(1)]
-    month = _greek_months[m.group(3)]
-    rfc822date = '%(wday)s, %(day)s %(month)s %(year)s %(hour)s:%(minute)s:%(second)s %(zonediff)s' % \
-                 {'wday': wday, 'day': m.group(2), 'month': month, 'year': m.group(4),\
-                  'hour': m.group(5), 'minute': m.group(6), 'second': m.group(7),\
-                  'zonediff': m.group(8)}
-    return _parse_date_rfc822(rfc822date)
-registerDateHandler(_parse_date_greek)
-
-# Unicode strings for Hungarian date strings
-_hungarian_months = \
-  { \
-    u'janu\u00e1r':   u'01',  # e1 in iso-8859-2
-    u'febru\u00e1ri': u'02',  # e1 in iso-8859-2
-    u'm\u00e1rcius':  u'03',  # e1 in iso-8859-2
-    u'\u00e1prilis':  u'04',  # e1 in iso-8859-2
-    u'm\u00e1ujus':   u'05',  # e1 in iso-8859-2
-    u'j\u00fanius':   u'06',  # fa in iso-8859-2
-    u'j\u00falius':   u'07',  # fa in iso-8859-2
-    u'augusztus':     u'08',
-    u'szeptember':    u'09',
-    u'okt\u00f3ber':  u'10',  # f3 in iso-8859-2
-    u'november':      u'11',
-    u'december':      u'12',
-  }
-
-_hungarian_date_format_re = \
-  re.compile(u'(\d{4})-([^-]+)-(\d{,2})T(\d{,2}):(\d{2})((\+|-)(\d{,2}:\d{2}))')
-
-def _parse_date_hungarian(dateString):
-    '''Parse a string according to a Hungarian 8-bit date format.'''
-    m = _hungarian_date_format_re.match(dateString)
-    if not m or m.group(2) not in _hungarian_months:
-        return None
-    month = _hungarian_months[m.group(2)]
-    day = m.group(3)
-    if len(day) == 1:
-        day = '0' + day
-    hour = m.group(4)
-    if len(hour) == 1:
-        hour = '0' + hour
-    w3dtfdate = '%(year)s-%(month)s-%(day)sT%(hour)s:%(minute)s%(zonediff)s' % \
-                {'year': m.group(1), 'month': month, 'day': day,\
-                 'hour': hour, 'minute': m.group(5),\
-                 'zonediff': m.group(6)}
-    return _parse_date_w3dtf(w3dtfdate)
-registerDateHandler(_parse_date_hungarian)
-
-timezonenames = {
-    'ut': 0, 'gmt': 0, 'z': 0,
-    'adt': -3, 'ast': -4, 'at': -4,
-    'edt': -4, 'est': -5, 'et': -5,
-    'cdt': -5, 'cst': -6, 'ct': -6,
-    'mdt': -6, 'mst': -7, 'mt': -7,
-    'pdt': -7, 'pst': -8, 'pt': -8,
-    'a': -1, 'n': 1,
-    'm': -12, 'y': 12,
-}
-# W3 date and time format parser
-# http://www.w3.org/TR/NOTE-datetime
-# Also supports MSSQL-style datetimes as defined at:
-# http://msdn.microsoft.com/en-us/library/ms186724.aspx
-# (basically, allow a space as a date/time/timezone separator)
-def _parse_date_w3dtf(datestr):
-    if not datestr.strip():
-        return None
-    parts = datestr.lower().split('t')
-    if len(parts) == 1:
-        # This may be a date only, or may be an MSSQL-style date
-        parts = parts[0].split()
-        if len(parts) == 1:
-            # Treat this as a date only
-            parts.append('00:00:00z')
-    elif len(parts) > 2:
-        return None
-    date = parts[0].split('-', 2) 
-    if not date or len(date[0]) != 4:
-        return None
-    # Ensure that `date` has 3 elements. Using '1' sets the default
-    # month to January and the default day to the 1st of the month.
-    date.extend(['1'] * (3 - len(date)))
-    try:
-        year, month, day = [int(i) for i in date]
-    except ValueError:
-        # `date` may have more than 3 elements or may contain
-        # non-integer strings.
-        return None
-    if parts[1].endswith('z'):
-        parts[1] = parts[1][:-1]
-        parts.append('z')
-    # Append the numeric timezone offset, if any, to parts.
-    # If this is an MSSQL-style date then parts[2] already contains
-    # the timezone information, so `append()` will not affect it.
-    # Add 1 to each value so that if `find()` returns -1 it will be
-    # treated as False.
-    loc = parts[1].find('-') + 1 or parts[1].find('+') + 1 or len(parts[1]) + 1
-    loc = loc - 1
-    parts.append(parts[1][loc:])
-    parts[1] = parts[1][:loc]
-    time = parts[1].split(':', 2)
-    # Ensure that time has 3 elements. Using '0' means that the
-    # minutes and seconds, if missing, will default to 0.
-    time.extend(['0'] * (3 - len(time)))
-    tzhour = 0
-    tzmin = 0
-    if parts[2][:1] in ('-', '+'):
-        try:
-            tzhour = int(parts[2][1:3])
-            tzmin = int(parts[2][4:])
-        except ValueError:
-            return None
-        if parts[2].startswith('-'):
-            tzhour = tzhour * -1
-            tzmin = tzmin * -1
-    else:
-        tzhour = timezonenames.get(parts[2], 0)
-    try:
-        hour, minute, second = [int(float(i)) for i in time]
-    except ValueError:
-        return None
-    # Create the datetime object and timezone delta objects
-    try:
-        stamp = datetime.datetime(year, month, day, hour, minute, second)
-    except ValueError:
-        return None
-    delta = datetime.timedelta(0, 0, 0, 0, tzmin, tzhour)
-    # Return the date and timestamp in a UTC 9-tuple
-    try:
-        return (stamp - delta).utctimetuple()
-    except (OverflowError, ValueError):
-        # IronPython throws ValueErrors instead of OverflowErrors
-        return None
-
-registerDateHandler(_parse_date_w3dtf)
-
-def _parse_date_rfc822(date):
-    """Parse RFC 822 dates and times
-    http://tools.ietf.org/html/rfc822#section-5
-
-    There are some formatting differences that are accounted for:
-    1. Years may be two or four digits.
-    2. The month and day can be swapped.
-    3. Additional timezone names are supported.
-    4. A default time and timezone are assumed if only a date is present.
-    """
-    daynames = set(['mon', 'tue', 'wed', 'thu', 'fri', 'sat', 'sun'])
-    months = {
-        'jan': 1, 'feb': 2, 'mar': 3, 'apr': 4, 'may': 5, 'jun': 6,
-        'jul': 7, 'aug': 8, 'sep': 9, 'oct': 10, 'nov': 11, 'dec': 12,
-    }
-
-    parts = date.lower().split()
-    if len(parts) < 5:
-        # Assume that the time and timezone are missing
-        parts.extend(('00:00:00', '0000'))
-    # Remove the day name
-    if parts[0][:3] in daynames:
-        parts = parts[1:]
-    if len(parts) < 5:
-        # If there are still fewer than five parts, there's not enough
-        # information to interpret this
-        return None
-    try:
-        day = int(parts[0])
-    except ValueError:
-        # Check if the day and month are swapped
-        if months.get(parts[0][:3]):
-            try:
-                day = int(parts[1])
-            except ValueError:
-                return None
-            else:
-                parts[1] = parts[0]
-        else:
-            return None
-    month = months.get(parts[1][:3])
-    if not month:
-        return None
-    try:
-        year = int(parts[2])
-    except ValueError:
-        return None
-    # Normalize two-digit years:
-    # Anything in the 90's is interpreted as 1990 and on
-    # Anything 89 or less is interpreted as 2089 or before
-    if len(parts[2]) <= 2:
-        year += (1900, 2000)[year < 90]
-    timeparts = parts[3].split(':')
-    timeparts = timeparts + ([0] * (3 - len(timeparts)))
-    try:
-        (hour, minute, second) = map(int, timeparts)
-    except ValueError:
-        return None
-    tzhour = 0
-    tzmin = 0
-    # Strip 'Etc/' from the timezone
-    if parts[4].startswith('etc/'):
-        parts[4] = parts[4][4:]
-    # Normalize timezones that start with 'gmt':
-    # GMT-05:00 => -0500
-    # GMT => GMT
-    if parts[4].startswith('gmt'):
-        parts[4] = ''.join(parts[4][3:].split(':')) or 'gmt'
-    # Handle timezones like '-0500', '+0500', and 'EST'
-    if parts[4] and parts[4][0] in ('-', '+'):
-        try:
-            tzhour = int(parts[4][1:3])
-            tzmin = int(parts[4][3:])
-        except ValueError:
-            return None
-        if parts[4].startswith('-'):
-            tzhour = tzhour * -1
-            tzmin = tzmin * -1
-    else:
-        tzhour = timezonenames.get(parts[4], 0)
-    # Create the datetime object and timezone delta objects
-    try:
-        stamp = datetime.datetime(year, month, day, hour, minute, second)
-    except ValueError:
-        return None
-    delta = datetime.timedelta(0, 0, 0, 0, tzmin, tzhour)
-    # Return the date and timestamp in a UTC 9-tuple
-    try:
-        return (stamp - delta).utctimetuple()
-    except (OverflowError, ValueError):
-        # IronPython throws ValueErrors instead of OverflowErrors
-        return None
-registerDateHandler(_parse_date_rfc822)
-
-_months = ['jan', 'feb', 'mar', 'apr', 'may', 'jun',
-           'jul', 'aug', 'sep', 'oct', 'nov', 'dec']
-def _parse_date_asctime(dt):
-    """Parse asctime-style dates"""
-    dayname, month, day, remainder = dt.split(None, 3)
-    # Convert month and day into zero-padded integers
-    month = '%02i ' % (_months.index(month.lower()) + 1)
-    day = '%02i ' % (int(day),)
-    dt = month + day + remainder
-    return time.strptime(dt, '%m %d %H:%M:%S %Y')[:-1] + (0, )
-registerDateHandler(_parse_date_asctime)
-
-def _parse_date_perforce(aDateString):
-    """parse a date in yyyy/mm/dd hh:mm:ss TTT format"""
-    # Fri, 2006/09/15 08:19:53 EDT
-    _my_date_pattern = re.compile( \
-        r'(\w{,3}), (\d{,4})/(\d{,2})/(\d{2}) (\d{,2}):(\d{2}):(\d{2}) (\w{,3})')
-
-    m = _my_date_pattern.search(aDateString)
-    if m is None:
-        return None
-    dow, year, month, day, hour, minute, second, tz = m.groups()
-    months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
-    dateString = "%s, %s %s %s %s:%s:%s %s" % (dow, day, months[int(month) - 1], year, hour, minute, second, tz)
-    tm = rfc822.parsedate_tz(dateString)
-    if tm:
-        return time.gmtime(rfc822.mktime_tz(tm))
-registerDateHandler(_parse_date_perforce)
-
-def _parse_date(dateString):
-    '''Parses a variety of date formats into a 9-tuple in GMT'''
-    if not dateString:
-        return None
-    for handler in _date_handlers:
-        try:
-            date9tuple = handler(dateString)
-        except (KeyError, OverflowError, ValueError):
-            continue
-        if not date9tuple:
-            continue
-        if len(date9tuple) != 9:
-            continue
-        return date9tuple
-    return None
-
-# Each marker represents some of the characters of the opening XML
-# processing instruction ('<?xm') in the specified encoding.
-EBCDIC_MARKER = _l2bytes([0x4C, 0x6F, 0xA7, 0x94])
-UTF16BE_MARKER = _l2bytes([0x00, 0x3C, 0x00, 0x3F])
-UTF16LE_MARKER = _l2bytes([0x3C, 0x00, 0x3F, 0x00])
-UTF32BE_MARKER = _l2bytes([0x00, 0x00, 0x00, 0x3C])
-UTF32LE_MARKER = _l2bytes([0x3C, 0x00, 0x00, 0x00])
-
-ZERO_BYTES = _l2bytes([0x00, 0x00])
-
-# Match the opening XML declaration.
-# Example: <?xml version="1.0" encoding="utf-8"?>
-RE_XML_DECLARATION = re.compile('^<\?xml[^>]*?>')
-
-# Capture the value of the XML processing instruction's encoding attribute.
-# Example: <?xml version="1.0" encoding="utf-8"?>
-RE_XML_PI_ENCODING = re.compile(_s2bytes('^<\?.*encoding=[\'"](.*?)[\'"].*\?>'))
-
-def convert_to_utf8(http_headers, data):
-    '''Detect and convert the character encoding to UTF-8.
-
-    http_headers is a dictionary
-    data is a raw string (not Unicode)'''
-
-    # This is so much trickier than it sounds, it's not even funny.
-    # According to RFC 3023 ('XML Media Types'), if the HTTP Content-Type
-    # is application/xml, application/*+xml,
-    # application/xml-external-parsed-entity, or application/xml-dtd,
-    # the encoding given in the charset parameter of the HTTP Content-Type
-    # takes precedence over the encoding given in the XML prefix within the
-    # document, and defaults to 'utf-8' if neither are specified.  But, if
-    # the HTTP Content-Type is text/xml, text/*+xml, or
-    # text/xml-external-parsed-entity, the encoding given in the XML prefix
-    # within the document is ALWAYS IGNORED and only the encoding given in
-    # the charset parameter of the HTTP Content-Type header should be
-    # respected, and it defaults to 'us-ascii' if not specified.
-
-    # Furthermore, discussion on the atom-syntax mailing list with the
-    # author of RFC 3023 leads me to the conclusion that any document
-    # served with a Content-Type of text/* and no charset parameter
-    # must be treated as us-ascii.  (We now do this.)  And also that it
-    # must always be flagged as non-well-formed.  (We now do this too.)
-
-    # If Content-Type is unspecified (input was local file or non-HTTP source)
-    # or unrecognized (server just got it totally wrong), then go by the
-    # encoding given in the XML prefix of the document and default to
-    # 'iso-8859-1' as per the HTTP specification (RFC 2616).
-
-    # Then, assuming we didn't find a character encoding in the HTTP headers
-    # (and the HTTP Content-type allowed us to look in the body), we need
-    # to sniff the first few bytes of the XML data and try to determine
-    # whether the encoding is ASCII-compatible.  Section F of the XML
-    # specification shows the way here:
-    # http://www.w3.org/TR/REC-xml/#sec-guessing-no-ext-info
-
-    # If the sniffed encoding is not ASCII-compatible, we need to make it
-    # ASCII compatible so that we can sniff further into the XML declaration
-    # to find the encoding attribute, which will tell us the true encoding.
-
-    # Of course, none of this guarantees that we will be able to parse the
-    # feed in the declared character encoding (assuming it was declared
-    # correctly, which many are not).  iconv_codec can help a lot;
-    # you should definitely install it if you can.
-    # http://cjkpython.i18n.org/
-
-    bom_encoding = u''
-    xml_encoding = u''
-    rfc3023_encoding = u''
-
-    # Look at the first few bytes of the document to guess what
-    # its encoding may be. We only need to decode enough of the
-    # document that we can use an ASCII-compatible regular
-    # expression to search for an XML encoding declaration.
-    # The heuristic follows the XML specification, section F:
-    # http://www.w3.org/TR/REC-xml/#sec-guessing-no-ext-info
-    # Check for BOMs first.
-    if data[:4] == codecs.BOM_UTF32_BE:
-        bom_encoding = u'utf-32be'
-        data = data[4:]
-    elif data[:4] == codecs.BOM_UTF32_LE:
-        bom_encoding = u'utf-32le'
-        data = data[4:]
-    elif data[:2] == codecs.BOM_UTF16_BE and data[2:4] != ZERO_BYTES:
-        bom_encoding = u'utf-16be'
-        data = data[2:]
-    elif data[:2] == codecs.BOM_UTF16_LE and data[2:4] != ZERO_BYTES:
-        bom_encoding = u'utf-16le'
-        data = data[2:]
-    elif data[:3] == codecs.BOM_UTF8:
-        bom_encoding = u'utf-8'
-        data = data[3:]
-    # Check for the characters '<?xm' in several encodings.
-    elif data[:4] == EBCDIC_MARKER:
-        bom_encoding = u'cp037'
-    elif data[:4] == UTF16BE_MARKER:
-        bom_encoding = u'utf-16be'
-    elif data[:4] == UTF16LE_MARKER:
-        bom_encoding = u'utf-16le'
-    elif data[:4] == UTF32BE_MARKER:
-        bom_encoding = u'utf-32be'
-    elif data[:4] == UTF32LE_MARKER:
-        bom_encoding = u'utf-32le'
-
-    tempdata = data
-    try:
-        if bom_encoding:
-            tempdata = data.decode(bom_encoding).encode('utf-8')
-    except (UnicodeDecodeError, LookupError):
-        # feedparser recognizes UTF-32 encodings that aren't
-        # available in Python 2.4 and 2.5, so it's possible to
-        # encounter a LookupError during decoding.
-        xml_encoding_match = None
-    else:
-        xml_encoding_match = RE_XML_PI_ENCODING.match(tempdata)
-
-    if xml_encoding_match:
-        xml_encoding = xml_encoding_match.groups()[0].decode('utf-8').lower()
-        # Normalize the xml_encoding if necessary.
-        if bom_encoding and (xml_encoding in (
-            u'u16', u'utf-16', u'utf16', u'utf_16',
-            u'u32', u'utf-32', u'utf32', u'utf_32',
-            u'iso-10646-ucs-2', u'iso-10646-ucs-4',
-            u'csucs4', u'csunicode', u'ucs-2', u'ucs-4'
-        )):
-            xml_encoding = bom_encoding
-
-    # Find the HTTP Content-Type and, hopefully, a character
-    # encoding provided by the server. The Content-Type is used
-    # to choose the "correct" encoding among the BOM encoding,
-    # XML declaration encoding, and HTTP encoding, following the
-    # heuristic defined in RFC 3023.
-    http_content_type = http_headers.get('content-type') or ''
-    http_content_type, params = cgi.parse_header(http_content_type)
-    http_encoding = params.get('charset', '').replace("'", "")
-    if not isinstance(http_encoding, unicode):
-        http_encoding = http_encoding.decode('utf-8', 'ignore')
-
-    acceptable_content_type = 0
-    application_content_types = (u'application/xml', u'application/xml-dtd',
-                                 u'application/xml-external-parsed-entity')
-    text_content_types = (u'text/xml', u'text/xml-external-parsed-entity')
-    if (http_content_type in application_content_types) or \
-       (http_content_type.startswith(u'application/') and 
-        http_content_type.endswith(u'+xml')):
-        acceptable_content_type = 1
-        rfc3023_encoding = http_encoding or xml_encoding or u'utf-8'
-    elif (http_content_type in text_content_types) or \
-         (http_content_type.startswith(u'text/') and
-          http_content_type.endswith(u'+xml')):
-        acceptable_content_type = 1
-        rfc3023_encoding = http_encoding or u'us-ascii'
-    elif http_content_type.startswith(u'text/'):
-        rfc3023_encoding = http_encoding or u'us-ascii'
-    elif http_headers and 'content-type' not in http_headers:
-        rfc3023_encoding = xml_encoding or u'iso-8859-1'
-    else:
-        rfc3023_encoding = xml_encoding or u'utf-8'
-    # gb18030 is a superset of gb2312, so always replace gb2312
-    # with gb18030 for greater compatibility.
-    if rfc3023_encoding.lower() == u'gb2312':
-        rfc3023_encoding = u'gb18030'
-    if xml_encoding.lower() == u'gb2312':
-        xml_encoding = u'gb18030'
-
-    # there are four encodings to keep track of:
-    # - http_encoding is the encoding declared in the Content-Type HTTP header
-    # - xml_encoding is the encoding declared in the <?xml declaration
-    # - bom_encoding is the encoding sniffed from the first 4 bytes of the XML data
-    # - rfc3023_encoding is the actual encoding, as per RFC 3023 and a variety of other conflicting specifications
-    error = None
-
-    if http_headers and (not acceptable_content_type):
-        if 'content-type' in http_headers:
-            msg = '%s is not an XML media type' % http_headers['content-type']
-        else:
-            msg = 'no Content-type specified'
-        error = NonXMLContentType(msg)
-
-    # determine character encoding
-    known_encoding = 0
-    chardet_encoding = None
-    tried_encodings = []
-    if chardet:
-        chardet_encoding = chardet.detect(data)['encoding']
-        if not chardet_encoding:
-            chardet_encoding = ''
-        if not isinstance(chardet_encoding, unicode):
-            chardet_encoding = unicode(chardet_encoding, 'ascii', 'ignore')
-    # try: HTTP encoding, declared XML encoding, encoding sniffed from BOM
-    for proposed_encoding in (rfc3023_encoding, xml_encoding, bom_encoding,
-                              chardet_encoding, u'utf-8', u'windows-1252', u'iso-8859-2'):
-        if not proposed_encoding:
-            continue
-        if proposed_encoding in tried_encodings:
-            continue
-        tried_encodings.append(proposed_encoding)
-        try:
-            data = data.decode(proposed_encoding)
-        except (UnicodeDecodeError, LookupError):
-            pass
-        else:
-            known_encoding = 1
-            # Update the encoding in the opening XML processing instruction.
-            new_declaration = '''<?xml version='1.0' encoding='utf-8'?>'''
-            if RE_XML_DECLARATION.search(data):
-                data = RE_XML_DECLARATION.sub(new_declaration, data)
-            else:
-                data = new_declaration + u'\n' + data
-            data = data.encode('utf-8')
-            break
-    # if still no luck, give up
-    if not known_encoding:
-        error = CharacterEncodingUnknown(
-            'document encoding unknown, I tried ' +
-            '%s, %s, utf-8, windows-1252, and iso-8859-2 but nothing worked' %
-            (rfc3023_encoding, xml_encoding))
-        rfc3023_encoding = u''
-    elif proposed_encoding != rfc3023_encoding:
-        error = CharacterEncodingOverride(
-            'document declared as %s, but parsed as %s' %
-            (rfc3023_encoding, proposed_encoding))
-        rfc3023_encoding = proposed_encoding
-
-    return data, rfc3023_encoding, error
-
-# Match XML entity declarations.
-# Example: <!ENTITY copyright "(C)">
-RE_ENTITY_PATTERN = re.compile(_s2bytes(r'^\s*<!ENTITY([^>]*?)>'), re.MULTILINE)
-
-# Match XML DOCTYPE declarations.
-# Example: <!DOCTYPE feed [ ]>
-RE_DOCTYPE_PATTERN = re.compile(_s2bytes(r'^\s*<!DOCTYPE([^>]*?)>'), re.MULTILINE)
-
-# Match safe entity declarations.
-# This will allow hexadecimal character references through,
-# as well as text, but not arbitrary nested entities.
-# Example: cubed "&#179;"
-# Example: copyright "(C)"
-# Forbidden: explode1 "&explode2;&explode2;"
-RE_SAFE_ENTITY_PATTERN = re.compile(_s2bytes('\s+(\w+)\s+"(&#\w+;|[^&"]*)"'))
-
-def replace_doctype(data):
-    '''Strips and replaces the DOCTYPE, returns (rss_version, stripped_data)
-
-    rss_version may be 'rss091n' or None
-    stripped_data is the same XML document with a replaced DOCTYPE
-    '''
-
-    # Divide the document into two groups by finding the location
-    # of the first element that doesn't begin with '<?' or '<!'.
-    start = re.search(_s2bytes('<\w'), data)
-    start = start and start.start() or -1
-    head, data = data[:start+1], data[start+1:]
-
-    # Save and then remove all of the ENTITY declarations.
-    entity_results = RE_ENTITY_PATTERN.findall(head)
-    head = RE_ENTITY_PATTERN.sub(_s2bytes(''), head)
-
-    # Find the DOCTYPE declaration and check the feed type.
-    doctype_results = RE_DOCTYPE_PATTERN.findall(head)
-    doctype = doctype_results and doctype_results[0] or _s2bytes('')
-    if _s2bytes('netscape') in doctype.lower():
-        version = u'rss091n'
-    else:
-        version = None
-
-    # Re-insert the safe ENTITY declarations if a DOCTYPE was found.
-    replacement = _s2bytes('')
-    if len(doctype_results) == 1 and entity_results:
-        match_safe_entities = lambda e: RE_SAFE_ENTITY_PATTERN.match(e)
-        safe_entities = filter(match_safe_entities, entity_results)
-        if safe_entities:
-            replacement = _s2bytes('<!DOCTYPE feed [\n<!ENTITY') \
-                        + _s2bytes('>\n<!ENTITY ').join(safe_entities) \
-                        + _s2bytes('>\n]>')
-    data = RE_DOCTYPE_PATTERN.sub(replacement, head) + data
-
-    # Precompute the safe entities for the loose parser.
-    safe_entities = dict((k.decode('utf-8'), v.decode('utf-8'))
-                      for k, v in RE_SAFE_ENTITY_PATTERN.findall(replacement))
-    return version, data, safe_entities
-
-
-# GeoRSS geometry parsers. Each return a dict with 'type' and 'coordinates'
-# items, or None in the case of a parsing error.
-
-def _parse_poslist(value, geom_type, swap=True, dims=2):
-    if geom_type == 'linestring':
-        return _parse_georss_line(value, swap, dims)
-    elif geom_type == 'polygon':
-        ring = _parse_georss_line(value, swap, dims)
-        return {'type': u'Polygon', 'coordinates': (ring['coordinates'],)}
-    else:
-        return None
-
-def _gen_georss_coords(value, swap=True, dims=2):
-    # A generator of (lon, lat) pairs from a string of encoded GeoRSS
-    # coordinates. Converts to floats and swaps order.
-    latlons = itertools.imap(float, value.strip().replace(',', ' ').split())
-    nxt = latlons.next
-    while True:
-        t = [nxt(), nxt()][::swap and -1 or 1]
-        if dims == 3:
-            t.append(nxt())
-        yield tuple(t)
-
-def _parse_georss_point(value, swap=True, dims=2):
-    # A point contains a single latitude-longitude pair, separated by
-    # whitespace. We'll also handle comma separators.
-    try:
-        coords = list(_gen_georss_coords(value, swap, dims))
-        return {u'type': u'Point', u'coordinates': coords[0]}
-    except (IndexError, ValueError):
-        return None
-
-def _parse_georss_line(value, swap=True, dims=2):
-    # A line contains a space separated list of latitude-longitude pairs in
-    # WGS84 coordinate reference system, with each pair separated by
-    # whitespace. There must be at least two pairs.
-    try:
-        coords = list(_gen_georss_coords(value, swap, dims))
-        return {u'type': u'LineString', u'coordinates': coords}
-    except (IndexError, ValueError):
-        return None
-
-def _parse_georss_polygon(value, swap=True, dims=2):
-    # A polygon contains a space separated list of latitude-longitude pairs,
-    # with each pair separated by whitespace. There must be at least four
-    # pairs, with the last being identical to the first (so a polygon has a
-    # minimum of three actual points). 
-    try:
-        ring = list(_gen_georss_coords(value, swap, dims))
-    except (IndexError, ValueError):
-        return None
-    if len(ring) < 4:
-        return None
-    return {u'type': u'Polygon', u'coordinates': (ring,)}
-
-def _parse_georss_box(value, swap=True, dims=2):
-    # A bounding box is a rectangular region, often used to define the extents
-    # of a map or a rough area of interest. A box contains two space seperate
-    # latitude-longitude pairs, with each pair separated by whitespace. The
-    # first pair is the lower corner, the second is the upper corner.
-    try:
-        coords = list(_gen_georss_coords(value, swap, dims))
-        return {u'type': u'Box', u'coordinates': tuple(coords)}
-    except (IndexError, ValueError):
-        return None
-
-# end geospatial parsers
-
-
-def parse(url_file_stream_or_string, etag=None, modified=None, agent=None, referrer=None, handlers=None, request_headers=None, response_headers=None):
-    '''Parse a feed from a URL, file, stream, or string.
-
-    request_headers, if given, is a dict from http header name to value to add
-    to the request; this overrides internally generated values.
-    '''
-
-    if handlers is None:
-        handlers = []
-    if request_headers is None:
-        request_headers = {}
-    if response_headers is None:
-        response_headers = {}
-
-    result = FeedParserDict()
-    result['feed'] = FeedParserDict()
-    result['entries'] = []
-    result['bozo'] = 0
-    if not isinstance(handlers, list):
-        handlers = [handlers]
-    try:
-        f = _open_resource(url_file_stream_or_string, etag, modified, agent, referrer, handlers, request_headers)
-        data = f.read()
-    except Exception, e:
-        result['bozo'] = 1
-        result['bozo_exception'] = e
-        data = None
-        f = None
-
-    if hasattr(f, 'headers'):
-        result['headers'] = dict(f.headers)
-    # overwrite existing headers using response_headers
-    if 'headers' in result:
-        result['headers'].update(response_headers)
-    elif response_headers:
-        result['headers'] = copy.deepcopy(response_headers)
-
-    # lowercase all of the HTTP headers for comparisons per RFC 2616
-    if 'headers' in result:
-        http_headers = dict((k.lower(), v) for k, v in result['headers'].items())
-    else:
-        http_headers = {}
-
-    # if feed is gzip-compressed, decompress it
-    if f and data and http_headers:
-        if gzip and 'gzip' in http_headers.get('content-encoding', ''):
-            try:
-                attempts = 0
-                while(len(data) > 1 and data[0] == '\x1f' and data[1] == '\x8b' and attempts < 3):
-                    attempts += 1
-                    data = gzip.GzipFile(fileobj=_StringIO(data)).read()
-            except (IOError, struct.error), e:
-                # IOError can occur if the gzip header is bad.
-                # struct.error can occur if the data is damaged.
-                result['bozo'] = 1
-                result['bozo_exception'] = e
-                if isinstance(e, struct.error):
-                    # A gzip header was found but the data is corrupt.
-                    # Ideally, we should re-request the feed without the
-                    # 'Accept-encoding: gzip' header, but we don't.
-                    data = None
-        elif zlib and 'deflate' in http_headers.get('content-encoding', ''):
-            try:
-                data = zlib.decompress(data)
-            except zlib.error, e:
-                try:
-                    # The data may have no headers and no checksum.
-                    data = zlib.decompress(data, -15)
-                except zlib.error, e:
-                    result['bozo'] = 1
-                    result['bozo_exception'] = e
-
-    # save HTTP headers
-    if http_headers:
-        if 'etag' in http_headers:
-            etag = http_headers.get('etag', u'')
-            if not isinstance(etag, unicode):
-                etag = etag.decode('utf-8', 'ignore')
-            if etag:
-                result['etag'] = etag
-        if 'last-modified' in http_headers:
-            modified = http_headers.get('last-modified', u'')
-            if modified:
-                result['modified'] = modified
-                result['modified_parsed'] = _parse_date(modified)
-    if hasattr(f, 'url'):
-        if not isinstance(f.url, unicode):
-            result['href'] = f.url.decode('utf-8', 'ignore')
-        else:
-            result['href'] = f.url
-        result['status'] = 200
-    if hasattr(f, 'status'):
-        result['status'] = f.status
-    if hasattr(f, 'close'):
-        f.close()
-
-    if data is None:
-        return result
-
-    # Stop processing if the server sent HTTP 304 Not Modified.
-    if getattr(f, 'code', 0) == 304:
-        result['version'] = u''
-        result['debug_message'] = 'The feed has not changed since you last checked, ' + \
-            'so the server sent no data.  This is a feature, not a bug!'
-        return result
-
-    data, result['encoding'], error = convert_to_utf8(http_headers, data)
-    use_strict_parser = result['encoding'] and True or False
-    if error is not None:
-        result['bozo'] = 1
-        result['bozo_exception'] = error
-
-    result['version'], data, entities = replace_doctype(data)
-
-    # Ensure that baseuri is an absolute URI using an acceptable URI scheme.
-    contentloc = http_headers.get('content-location', u'')
-    href = result.get('href', u'')
-    baseuri = _makeSafeAbsoluteURI(href, contentloc) or _makeSafeAbsoluteURI(contentloc) or href
-
-    baselang = http_headers.get('content-language', None)
-    if not isinstance(baselang, unicode) and baselang is not None:
-        baselang = baselang.decode('utf-8', 'ignore')
-
-    if not _XML_AVAILABLE:
-        use_strict_parser = 0
-    if use_strict_parser:
-        # initialize the SAX parser
-        feedparser = _StrictFeedParser(baseuri, baselang, 'utf-8')
-        saxparser = xml.sax.make_parser(PREFERRED_XML_PARSERS)
-        saxparser.setFeature(xml.sax.handler.feature_namespaces, 1)
-        try:
-            # disable downloading external doctype references, if possible
-            saxparser.setFeature(xml.sax.handler.feature_external_ges, 0)
-        except xml.sax.SAXNotSupportedException:
-            pass
-        saxparser.setContentHandler(feedparser)
-        saxparser.setErrorHandler(feedparser)
-        source = xml.sax.xmlreader.InputSource()
-        source.setByteStream(_StringIO(data))
-        try:
-            saxparser.parse(source)
-        except xml.sax.SAXException, e:
-            result['bozo'] = 1
-            result['bozo_exception'] = feedparser.exc or e
-            use_strict_parser = 0
-    if not use_strict_parser and _SGML_AVAILABLE:
-        feedparser = _LooseFeedParser(baseuri, baselang, 'utf-8', entities)
-        feedparser.feed(data.decode('utf-8', 'replace'))
-    result['feed'] = feedparser.feeddata
-    result['entries'] = feedparser.entries
-    result['version'] = result['version'] or feedparser.version
-    result['namespaces'] = feedparser.namespacesInUse
-    return result
-
-# The list of EPSG codes for geographic (latitude/longitude) coordinate
-# systems to support decoding of GeoRSS GML profiles.
-_geogCS = [
-3819, 3821, 3824, 3889, 3906, 4001, 4002, 4003, 4004, 4005, 4006, 4007, 4008,
-4009, 4010, 4011, 4012, 4013, 4014, 4015, 4016, 4018, 4019, 4020, 4021, 4022,
-4023, 4024, 4025, 4027, 4028, 4029, 4030, 4031, 4032, 4033, 4034, 4035, 4036,
-4041, 4042, 4043, 4044, 4045, 4046, 4047, 4052, 4053, 4054, 4055, 4075, 4081,
-4120, 4121, 4122, 4123, 4124, 4125, 4126, 4127, 4128, 4129, 4130, 4131, 4132,
-4133, 4134, 4135, 4136, 4137, 4138, 4139, 4140, 4141, 4142, 4143, 4144, 4145,
-4146, 4147, 4148, 4149, 4150, 4151, 4152, 4153, 4154, 4155, 4156, 4157, 4158,
-4159, 4160, 4161, 4162, 4163, 4164, 4165, 4166, 4167, 4168, 4169, 4170, 4171,
-4172, 4173, 4174, 4175, 4176, 4178, 4179, 4180, 4181, 4182, 4183, 4184, 4185,
-4188, 4189, 4190, 4191, 4192, 4193, 4194, 4195, 4196, 4197, 4198, 4199, 4200,
-4201, 4202, 4203, 4204, 4205, 4206, 4207, 4208, 4209, 4210, 4211, 4212, 4213,
-4214, 4215, 4216, 4218, 4219, 4220, 4221, 4222, 4223, 4224, 4225, 4226, 4227,
-4228, 4229, 4230, 4231, 4232, 4233, 4234, 4235, 4236, 4237, 4238, 4239, 4240,
-4241, 4242, 4243, 4244, 4245, 4246, 4247, 4248, 4249, 4250, 4251, 4252, 4253,
-4254, 4255, 4256, 4257, 4258, 4259, 4260, 4261, 4262, 4263, 4264, 4265, 4266,
-4267, 4268, 4269, 4270, 4271, 4272, 4273, 4274, 4275, 4276, 4277, 4278, 4279,
-4280, 4281, 4282, 4283, 4284, 4285, 4286, 4287, 4288, 4289, 4291, 4292, 4293,
-4294, 4295, 4296, 4297, 4298, 4299, 4300, 4301, 4302, 4303, 4304, 4306, 4307,
-4308, 4309, 4310, 4311, 4312, 4313, 4314, 4315, 4316, 4317, 4318, 4319, 4322,
-4324, 4326, 4463, 4470, 4475, 4483, 4490, 4555, 4558, 4600, 4601, 4602, 4603,
-4604, 4605, 4606, 4607, 4608, 4609, 4610, 4611, 4612, 4613, 4614, 4615, 4616,
-4617, 4618, 4619, 4620, 4621, 4622, 4623, 4624, 4625, 4626, 4627, 4628, 4629,
-4630, 4631, 4632, 4633, 4634, 4635, 4636, 4637, 4638, 4639, 4640, 4641, 4642,
-4643, 4644, 4645, 4646, 4657, 4658, 4659, 4660, 4661, 4662, 4663, 4664, 4665,
-4666, 4667, 4668, 4669, 4670, 4671, 4672, 4673, 4674, 4675, 4676, 4677, 4678,
-4679, 4680, 4681, 4682, 4683, 4684, 4685, 4686, 4687, 4688, 4689, 4690, 4691,
-4692, 4693, 4694, 4695, 4696, 4697, 4698, 4699, 4700, 4701, 4702, 4703, 4704,
-4705, 4706, 4707, 4708, 4709, 4710, 4711, 4712, 4713, 4714, 4715, 4716, 4717,
-4718, 4719, 4720, 4721, 4722, 4723, 4724, 4725, 4726, 4727, 4728, 4729, 4730,
-4731, 4732, 4733, 4734, 4735, 4736, 4737, 4738, 4739, 4740, 4741, 4742, 4743,
-4744, 4745, 4746, 4747, 4748, 4749, 4750, 4751, 4752, 4753, 4754, 4755, 4756,
-4757, 4758, 4759, 4760, 4761, 4762, 4763, 4764, 4765, 4801, 4802, 4803, 4804,
-4805, 4806, 4807, 4808, 4809, 4810, 4811, 4813, 4814, 4815, 4816, 4817, 4818,
-4819, 4820, 4821, 4823, 4824, 4901, 4902, 4903, 4904, 4979 ]
diff --git a/lib/feedparser/feedparsertest.py b/lib/feedparser/feedparsertest.py
deleted file mode 100644
index e1df914f8..000000000
--- a/lib/feedparser/feedparsertest.py
+++ /dev/null
@@ -1,871 +0,0 @@
-#!/usr/bin/env python
-
-__author__ = "Mark Pilgrim <http://diveintomark.org/>"
-__license__ = """
-Copyright (c) 2010-2013 Kurt McKee <contactme@kurtmckee.org>
-Copyright (c) 2004-2008 Mark Pilgrim
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without modification,
-are permitted provided that the following conditions are met:
-
-* Redistributions of source code must retain the above copyright notice,
-  this list of conditions and the following disclaimer.
-* Redistributions in binary form must reproduce the above copyright notice,
-  this list of conditions and the following disclaimer in the documentation
-  and/or other materials provided with the distribution.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
-LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGE."""
-
-import codecs
-import datetime
-import glob
-import operator
-import os
-import posixpath
-import pprint
-import re
-import struct
-import sys
-import threading
-import time
-import unittest
-import urllib
-import warnings
-import zlib
-import BaseHTTPServer
-import SimpleHTTPServer
-
-import feedparser
-
-if not feedparser._XML_AVAILABLE:
-    sys.stderr.write('No XML parsers available, unit testing can not proceed\n')
-    sys.exit(1)
-
-try:
-    # the utf_32 codec was introduced in Python 2.6; it's necessary to
-    # check this as long as feedparser supports Python 2.4 and 2.5
-    codecs.lookup('utf_32')
-except LookupError:
-    _UTF32_AVAILABLE = False
-else:
-    _UTF32_AVAILABLE = True
-
-_s2bytes = feedparser._s2bytes
-_l2bytes = feedparser._l2bytes
-
-#---------- custom HTTP server (used to serve test feeds) ----------
-
-_PORT = 8097 # not really configurable, must match hardcoded port in tests
-_HOST = '127.0.0.1' # also not really configurable
-
-class FeedParserTestRequestHandler(SimpleHTTPServer.SimpleHTTPRequestHandler):
-    headers_re = re.compile(_s2bytes(r"^Header:\s+([^:]+):(.+)$"), re.MULTILINE)
-
-    def send_head(self):
-        """Send custom headers defined in test case
-
-        Example:
-        <!--
-        Header:   Content-type: application/atom+xml
-        Header:   X-Foo: bar
-        -->
-        """
-        # Short-circuit the HTTP status test `test_redirect_to_304()`
-        if self.path == '/-/return-304.xml':
-            self.send_response(304)
-            self.send_header('Content-type', 'text/xml')
-            self.end_headers()
-            return feedparser._StringIO(u''.encode('utf-8'))
-        path = self.translate_path(self.path)
-        # the compression tests' filenames determine the header sent
-        if self.path.startswith('/tests/compression'):
-            if self.path.endswith('gz'):
-                headers = {'Content-Encoding': 'gzip'}
-            else:
-                headers = {'Content-Encoding': 'deflate'}
-            headers['Content-type'] = 'application/xml'
-        else:
-            headers = dict([(k.decode('utf-8'), v.decode('utf-8').strip()) for k, v in self.headers_re.findall(open(path, 'rb').read())])
-        f = open(path, 'rb')
-        if (self.headers.get('if-modified-since') == headers.get('Last-Modified', 'nom')) \
-            or (self.headers.get('if-none-match') == headers.get('ETag', 'nomatch')):
-            status = 304
-        else:
-            status = 200
-        headers.setdefault('Status', status)
-        self.send_response(int(headers['Status']))
-        headers.setdefault('Content-type', self.guess_type(path))
-        self.send_header("Content-type", headers['Content-type'])
-        self.send_header("Content-Length", str(os.stat(f.name)[6]))
-        for k, v in headers.items():
-            if k not in ('Status', 'Content-type'):
-                self.send_header(k, v)
-        self.end_headers()
-        return f
-
-    def log_request(self, *args):
-        pass
-
-class FeedParserTestServer(threading.Thread):
-    """HTTP Server that runs in a thread and handles a predetermined number of requests"""
-
-    def __init__(self, requests):
-        threading.Thread.__init__(self)
-        self.requests = requests
-        self.ready = threading.Event()
-
-    def run(self):
-        self.httpd = BaseHTTPServer.HTTPServer((_HOST, _PORT), FeedParserTestRequestHandler)
-        self.ready.set()
-        while self.requests:
-            self.httpd.handle_request()
-            self.requests -= 1
-        self.ready.clear()
-
-#---------- dummy test case class (test methods are added dynamically) ----------
-unicode1_re = re.compile(_s2bytes(" u'"))
-unicode2_re = re.compile(_s2bytes(' u"'))
-
-# _bytes is only used in everythingIsUnicode().
-# In Python 2 it's str, and in Python 3 it's bytes.
-_bytes = type(_s2bytes(''))
-
-def everythingIsUnicode(d):
-    """Takes a dictionary, recursively verifies that every value is unicode"""
-    for k, v in d.iteritems():
-        if isinstance(v, dict) and k != 'headers':
-            if not everythingIsUnicode(v):
-                return False
-        elif isinstance(v, list):
-            for i in v:
-                if isinstance(i, dict) and not everythingIsUnicode(i):
-                    return False
-                elif isinstance(i, _bytes):
-                    return False
-        elif isinstance(v, _bytes):
-            return False
-    return True
-
-def failUnlessEval(self, xmlfile, evalString, msg=None):
-    """Fail unless eval(evalString, env)"""
-    env = feedparser.parse(xmlfile)
-    try:
-        if not eval(evalString, globals(), env):
-            failure=(msg or 'not eval(%s) \nWITH env(%s)' % (evalString, pprint.pformat(env)))
-            raise self.failureException, failure
-        if not everythingIsUnicode(env):
-            raise self.failureException, "not everything is unicode \nWITH env(%s)" % (pprint.pformat(env), )
-    except SyntaxError:
-        # Python 3 doesn't have the `u""` syntax, so evalString needs to be modified,
-        # which will require the failure message to be updated
-        evalString = re.sub(unicode1_re, _s2bytes(" '"), evalString)
-        evalString = re.sub(unicode2_re, _s2bytes(' "'), evalString)
-        if not eval(evalString, globals(), env):
-            failure=(msg or 'not eval(%s) \nWITH env(%s)' % (evalString, pprint.pformat(env)))
-            raise self.failureException, failure
-
-class BaseTestCase(unittest.TestCase):
-    failUnlessEval = failUnlessEval
-
-class TestCase(BaseTestCase):
-    pass
-
-class TestTemporaryFallbackBehavior(unittest.TestCase):
-    "These tests are temporarily here because of issues 310 and 328"
-    def test_issue_328_fallback_behavior(self):
-        warnings.filterwarnings('error')
-
-        d = feedparser.FeedParserDict()
-        d['published'] = u'pub string'
-        d['published_parsed'] = u'pub tuple'
-        d['updated'] = u'upd string'
-        d['updated_parsed'] = u'upd tuple'
-        # Ensure that `updated` doesn't map to `published` when it exists
-        self.assertTrue('published' in d)
-        self.assertTrue('published_parsed' in d)
-        self.assertTrue('updated' in d)
-        self.assertTrue('updated_parsed' in d)
-        self.assertEqual(d['published'], 'pub string')
-        self.assertEqual(d['published_parsed'], 'pub tuple')
-        self.assertEqual(d['updated'], 'upd string')
-        self.assertEqual(d['updated_parsed'], 'upd tuple')
-
-        d = feedparser.FeedParserDict()
-        d['published'] = u'pub string'
-        d['published_parsed'] = u'pub tuple'
-        # Ensure that `updated` doesn't actually exist
-        self.assertTrue('updated' not in d)
-        self.assertTrue('updated_parsed' not in d)
-        # Ensure that accessing `updated` throws a DeprecationWarning
-        try:
-            d['updated']
-        except DeprecationWarning:
-            # Expected behavior
-            pass
-        else:
-            # Wrong behavior
-            self.assertEqual(True, False)
-        try:
-            d['updated_parsed']
-        except DeprecationWarning:
-            # Expected behavior
-            pass
-        else:
-            # Wrong behavior
-            self.assertEqual(True, False)
-        # Ensure that `updated` maps to `published`
-        warnings.filterwarnings('ignore')
-        self.assertEqual(d['updated'], u'pub string')
-        self.assertEqual(d['updated_parsed'], u'pub tuple')
-        warnings.resetwarnings()
-
-
-class TestEverythingIsUnicode(unittest.TestCase):
-    "Ensure that `everythingIsUnicode()` is working appropriately"
-    def test_everything_is_unicode(self):
-        self.assertTrue(everythingIsUnicode(
-            {'a': u'a', 'b': [u'b', {'c': u'c'}], 'd': {'e': u'e'}}
-        ))
-    def test_not_everything_is_unicode(self):
-        self.assertFalse(everythingIsUnicode({'a': _s2bytes('a')}))
-        self.assertFalse(everythingIsUnicode({'a': [_s2bytes('a')]}))
-        self.assertFalse(everythingIsUnicode({'a': {'b': _s2bytes('b')}}))
-        self.assertFalse(everythingIsUnicode({'a': [{'b': _s2bytes('b')}]}))
-
-class TestLooseParser(BaseTestCase):
-    "Test the sgmllib-based parser by manipulating feedparser " \
-    "into believing no XML parsers are installed"
-    def __init__(self, arg):
-        unittest.TestCase.__init__(self, arg)
-        self._xml_available = feedparser._XML_AVAILABLE
-    def setUp(self):
-        feedparser._XML_AVAILABLE = 0
-    def tearDown(self):
-        feedparser._XML_AVAILABLE = self._xml_available
-
-class TestStrictParser(BaseTestCase):
-    pass
-
-class TestMicroformats(BaseTestCase):
-    pass
-
-class TestEncodings(BaseTestCase):
-    def test_doctype_replacement(self):
-        "Ensure that non-ASCII-compatible encodings don't hide " \
-        "disallowed ENTITY declarations"
-        doc = """<?xml version="1.0" encoding="utf-16be"?>
-        <!DOCTYPE feed [
-            <!ENTITY exponential1 "bogus ">
-            <!ENTITY exponential2 "&exponential1;&exponential1;">
-            <!ENTITY exponential3 "&exponential2;&exponential2;">
-        ]>
-        <feed><title type="html">&exponential3;</title></feed>"""
-        doc = codecs.BOM_UTF16_BE + doc.encode('utf-16be')
-        result = feedparser.parse(doc)
-        self.assertEqual(result['feed']['title'], u'&amp;exponential3')
-    def test_gb2312_converted_to_gb18030_in_xml_encoding(self):
-        # \u55de was chosen because it exists in gb18030 but not gb2312
-        feed = u'''<?xml version="1.0" encoding="gb2312"?>
-                  <feed><title>\u55de</title></feed>'''
-        result = feedparser.parse(feed.encode('gb18030'), response_headers={
-            'Content-Type': 'text/xml'
-        })
-        self.assertEqual(result.encoding, 'gb18030')
-
-class TestFeedParserDict(unittest.TestCase):
-    "Ensure that FeedParserDict returns values as expected and won't crash"
-    def setUp(self):
-        self.d = feedparser.FeedParserDict()
-    def _check_key(self, k):
-        self.assertTrue(k in self.d)
-        self.assertTrue(hasattr(self.d, k))
-        self.assertEqual(self.d[k], 1)
-        self.assertEqual(getattr(self.d, k), 1)
-    def _check_no_key(self, k):
-        self.assertTrue(k not in self.d)
-        self.assertTrue(not hasattr(self.d, k))
-    def test_empty(self):
-        keys = (
-            'a','entries', 'id', 'guid', 'summary', 'subtitle', 'description',
-            'category', 'enclosures', 'license', 'categories',
-        )
-        for k in keys:
-            self._check_no_key(k)
-        self.assertTrue('items' not in self.d)
-        self.assertTrue(hasattr(self.d, 'items')) # dict.items() exists
-    def test_neutral(self):
-        self.d['a'] = 1
-        self._check_key('a')
-    def test_single_mapping_target_1(self):
-        self.d['id'] = 1
-        self._check_key('id')
-        self._check_key('guid')
-    def test_single_mapping_target_2(self):
-        self.d['guid'] = 1
-        self._check_key('id')
-        self._check_key('guid')
-    def test_multiple_mapping_target_1(self):
-        self.d['summary'] = 1
-        self._check_key('summary')
-        self._check_key('description')
-    def test_multiple_mapping_target_2(self):
-        self.d['subtitle'] = 1
-        self._check_key('subtitle')
-        self._check_key('description')
-    def test_multiple_mapping_mapped_key(self):
-        self.d['description'] = 1
-        self._check_key('summary')
-        self._check_key('description')
-    def test_license(self):
-        self.d['links'] = []
-        try:
-            self.d['license']
-            self.assertTrue(False)
-        except KeyError:
-            pass
-        self.d['links'].append({'rel': 'license'})
-        try:
-            self.d['license']
-            self.assertTrue(False)
-        except KeyError:
-            pass
-        self.d['links'].append({'rel': 'license', 'href': 'http://dom.test/'})
-        self.assertEqual(self.d['license'], 'http://dom.test/')
-    def test_category(self):
-        self.d['tags'] = []
-        try:
-            self.d['category']
-            self.assertTrue(False)
-        except KeyError:
-            pass
-        self.d['tags'] = [{}]
-        try:
-            self.d['category']
-            self.assertTrue(False)
-        except KeyError:
-            pass
-        self.d['tags'] = [{'term': 'cat'}]
-        self.assertEqual(self.d['category'], 'cat')
-        self.d['tags'].append({'term': 'dog'})
-        self.assertEqual(self.d['category'], 'cat')
-
-class TestOpenResource(unittest.TestCase):
-    "Ensure that `_open_resource()` interprets its arguments as URIs, " \
-    "file-like objects, or in-memory feeds as expected"
-    def test_fileobj(self):
-        r = feedparser._open_resource(sys.stdin, '', '', '', '', [], {})
-        self.assertTrue(r is sys.stdin)
-    def test_feed(self):
-        f = feedparser.parse(u'feed://localhost:8097/tests/http/target.xml')
-        self.assertEqual(f.href, u'http://localhost:8097/tests/http/target.xml')
-    def test_feed_http(self):
-        f = feedparser.parse(u'feed:http://localhost:8097/tests/http/target.xml')
-        self.assertEqual(f.href, u'http://localhost:8097/tests/http/target.xml')
-    def test_bytes(self):
-        s = '<feed><item><title>text</title></item></feed>'.encode('utf-8')
-        r = feedparser._open_resource(s, '', '', '', '', [], {})
-        self.assertEqual(s, r.read())
-    def test_string(self):
-        s = '<feed><item><title>text</title></item></feed>'
-        r = feedparser._open_resource(s, '', '', '', '', [], {})
-        self.assertEqual(s.encode('utf-8'), r.read())
-    def test_unicode_1(self):
-        s = u'<feed><item><title>text</title></item></feed>'
-        r = feedparser._open_resource(s, '', '', '', '', [], {})
-        self.assertEqual(s.encode('utf-8'), r.read())
-    def test_unicode_2(self):
-        s = u'<feed><item><title>t\u00e9xt</title></item></feed>'
-        r = feedparser._open_resource(s, '', '', '', '', [], {})
-        self.assertEqual(s.encode('utf-8'), r.read())
-
-class TestMakeSafeAbsoluteURI(unittest.TestCase):
-    "Exercise the URI joining and sanitization code"
-    base = u'http://d.test/d/f.ext'
-    def _mktest(rel, expect, doc):
-        def fn(self):
-            value = feedparser._makeSafeAbsoluteURI(self.base, rel)
-            self.assertEqual(value, expect)
-        fn.__doc__ = doc
-        return fn
-
-    # make the test cases; the call signature is:
-    # (relative_url, expected_return_value, test_doc_string)
-    test_abs = _mktest(u'https://s.test/', u'https://s.test/', 'absolute uri')
-    test_rel = _mktest(u'/new', u'http://d.test/new', 'relative uri')
-    test_bad = _mktest(u'x://bad.test/', u'', 'unacceptable uri protocol')
-    test_mag = _mktest(u'magnet:?xt=a', u'magnet:?xt=a', 'magnet uri')
-
-    def test_catch_ValueError(self):
-        'catch ValueError in Python 2.7 and up'
-        uri = u'http://bad]test/'
-        value1 = feedparser._makeSafeAbsoluteURI(uri)
-        value2 = feedparser._makeSafeAbsoluteURI(self.base, uri)
-        swap = feedparser.ACCEPTABLE_URI_SCHEMES
-        feedparser.ACCEPTABLE_URI_SCHEMES = ()
-        value3 = feedparser._makeSafeAbsoluteURI(self.base, uri)
-        feedparser.ACCEPTABLE_URI_SCHEMES = swap
-        # Only Python 2.7 and up throw a ValueError, otherwise uri is returned
-        self.assertTrue(value1 in (uri, u''))
-        self.assertTrue(value2 in (uri, u''))
-        self.assertTrue(value3 in (uri, u''))
-
-class TestConvertToIdn(unittest.TestCase):
-    "Test IDN support (unavailable in Jython as of Jython 2.5.2)"
-    # this is the greek test domain
-    hostname = u'\u03c0\u03b1\u03c1\u03ac\u03b4\u03b5\u03b9\u03b3\u03bc\u03b1'
-    hostname += u'.\u03b4\u03bf\u03ba\u03b9\u03bc\u03ae'
-    def test_control(self):
-        r = feedparser._convert_to_idn(u'http://example.test/')
-        self.assertEqual(r, u'http://example.test/')
-    def test_idn(self):
-        r = feedparser._convert_to_idn(u'http://%s/' % (self.hostname,))
-        self.assertEqual(r, u'http://xn--hxajbheg2az3al.xn--jxalpdlp/')
-    def test_port(self):
-        r = feedparser._convert_to_idn(u'http://%s:8080/' % (self.hostname,))
-        self.assertEqual(r, u'http://xn--hxajbheg2az3al.xn--jxalpdlp:8080/')
-
-class TestCompression(unittest.TestCase):
-    "Test the gzip and deflate support in the HTTP code"
-    def test_gzip_good(self):
-        f = feedparser.parse('http://localhost:8097/tests/compression/gzip.gz')
-        self.assertEqual(f.version, 'atom10')
-    def test_gzip_not_compressed(self):
-        f = feedparser.parse('http://localhost:8097/tests/compression/gzip-not-compressed.gz')
-        self.assertEqual(f.bozo, 1)
-        self.assertTrue(isinstance(f.bozo_exception, IOError))
-        self.assertEqual(f['feed']['title'], 'gzip')
-    def test_gzip_struct_error(self):
-        f = feedparser.parse('http://localhost:8097/tests/compression/gzip-struct-error.gz')
-        self.assertEqual(f.bozo, 1)
-        self.assertTrue(isinstance(f.bozo_exception, struct.error))
-    def test_zlib_good(self):
-        f = feedparser.parse('http://localhost:8097/tests/compression/deflate.z')
-        self.assertEqual(f.version, 'atom10')
-    def test_zlib_no_headers(self):
-        f = feedparser.parse('http://localhost:8097/tests/compression/deflate-no-headers.z')
-        self.assertEqual(f.version, 'atom10')
-    def test_zlib_not_compressed(self):
-        f = feedparser.parse('http://localhost:8097/tests/compression/deflate-not-compressed.z')
-        self.assertEqual(f.bozo, 1)
-        self.assertTrue(isinstance(f.bozo_exception, zlib.error))
-        self.assertEqual(f['feed']['title'], 'deflate')
-
-class TestHTTPStatus(unittest.TestCase):
-    "Test HTTP redirection and other status codes"
-    def test_301(self):
-        f = feedparser.parse('http://localhost:8097/tests/http/http_status_301.xml')
-        self.assertEqual(f.status, 301)
-        self.assertEqual(f.href, 'http://localhost:8097/tests/http/target.xml')
-        self.assertEqual(f.entries[0].title, 'target')
-    def test_302(self):
-        f = feedparser.parse('http://localhost:8097/tests/http/http_status_302.xml')
-        self.assertEqual(f.status, 302)
-        self.assertEqual(f.href, 'http://localhost:8097/tests/http/target.xml')
-        self.assertEqual(f.entries[0].title, 'target')
-    def test_303(self):
-        f = feedparser.parse('http://localhost:8097/tests/http/http_status_303.xml')
-        self.assertEqual(f.status, 303)
-        self.assertEqual(f.href, 'http://localhost:8097/tests/http/target.xml')
-        self.assertEqual(f.entries[0].title, 'target')
-    def test_307(self):
-        f = feedparser.parse('http://localhost:8097/tests/http/http_status_307.xml')
-        self.assertEqual(f.status, 307)
-        self.assertEqual(f.href, 'http://localhost:8097/tests/http/target.xml')
-        self.assertEqual(f.entries[0].title, 'target')
-    def test_304(self):
-        # first retrieve the url
-        u = 'http://localhost:8097/tests/http/http_status_304.xml'
-        f = feedparser.parse(u)
-        self.assertEqual(f.status, 200)
-        self.assertEqual(f.entries[0].title, 'title 304')
-        # extract the etag and last-modified headers
-        e = [v for k, v in f.headers.items() if k.lower() == 'etag'][0]
-        mh = [v for k, v in f.headers.items() if k.lower() == 'last-modified'][0]
-        ms = f.updated
-        mt = f.updated_parsed
-        md = datetime.datetime(*mt[0:7])
-        self.assertTrue(isinstance(mh, basestring))
-        self.assertTrue(isinstance(ms, basestring))
-        self.assertTrue(isinstance(mt, time.struct_time))
-        self.assertTrue(isinstance(md, datetime.datetime))
-        # test that sending back the etag results in a 304
-        f = feedparser.parse(u, etag=e)
-        self.assertEqual(f.status, 304)
-        # test that sending back last-modified (string) results in a 304
-        f = feedparser.parse(u, modified=ms)
-        self.assertEqual(f.status, 304)
-        # test that sending back last-modified (9-tuple) results in a 304
-        f = feedparser.parse(u, modified=mt)
-        self.assertEqual(f.status, 304)
-        # test that sending back last-modified (datetime) results in a 304
-        f = feedparser.parse(u, modified=md)
-        self.assertEqual(f.status, 304)
-    def test_404(self):
-        f = feedparser.parse('http://localhost:8097/tests/http/http_status_404.xml')
-        self.assertEqual(f.status, 404)
-    def test_redirect_to_304(self):
-        # ensure that an http redirect to an http 304 doesn't
-        # trigger a bozo_exception
-        u = 'http://localhost:8097/tests/http/http_redirect_to_304.xml'
-        f = feedparser.parse(u)
-        self.assertTrue(f.bozo == 0)
-        self.assertTrue(f.status == 302)
-
-class TestDateParsers(unittest.TestCase):
-    "Test the various date parsers; most of the test cases are constructed " \
-    "dynamically based on the contents of the `date_tests` dict, below"
-    def test_None(self):
-        self.assertTrue(feedparser._parse_date(None) is None)
-    def _check_date(self, func, dtstring, expected_value):
-        try:
-            parsed_value = func(dtstring)
-        except (OverflowError, ValueError):
-            parsed_value = None
-        self.assertEqual(parsed_value, expected_value)
-        # self.assertEqual(parsed_value, feedparser._parse_date(dtstring))
-    def test_year_10000_date(self):
-        # On some systems this date string will trigger an OverflowError.
-        # On Jython and x64 systems, however, it's interpreted just fine.
-        try:
-            date = feedparser._parse_date_rfc822(u'Sun, 31 Dec 9999 23:59:59 -9999')
-        except OverflowError:
-            date = None
-        self.assertTrue(date in (None, (10000, 1, 5, 4, 38, 59, 2, 5, 0)))
-
-date_tests = {
-    feedparser._parse_date_greek: (
-        (u'', None), # empty string
-        (u'\u039a\u03c5\u03c1, 11 \u0399\u03bf\u03cd\u03bb 2004 12:00:00 EST', (2004, 7, 11, 17, 0, 0, 6, 193, 0)),
-    ),
-    feedparser._parse_date_hungarian: (
-        (u'', None), # empty string
-        (u'2004-j\u00falius-13T9:15-05:00', (2004, 7, 13, 14, 15, 0, 1, 195, 0)),
-    ),
-    feedparser._parse_date_iso8601: (
-        (u'', None), # empty string
-        (u'-0312', (2003, 12, 1, 0, 0, 0, 0, 335, 0)), # 2-digit year/month only variant
-        (u'031231', (2003, 12, 31, 0, 0, 0, 2, 365, 0)), # 2-digit year/month/day only, no hyphens
-        (u'03-12-31', (2003, 12, 31, 0, 0, 0, 2, 365, 0)), # 2-digit year/month/day only
-        (u'-03-12', (2003, 12, 1, 0, 0, 0, 0, 335, 0)), # 2-digit year/month only
-        (u'03335', (2003, 12, 1, 0, 0, 0, 0, 335, 0)), # 2-digit year/ordinal, no hyphens
-        (u'2003-12-31T10:14:55.1234Z', (2003, 12, 31, 10, 14, 55, 2, 365, 0)), # fractional seconds
-        # Special case for Google's extra zero in the month
-        (u'2003-012-31T10:14:55+00:00', (2003, 12, 31, 10, 14, 55, 2, 365, 0)),
-    ),
-    feedparser._parse_date_nate: (
-        (u'', None), # empty string
-        (u'2004-05-25 \uc624\ud6c4 11:23:17', (2004, 5, 25, 14, 23, 17, 1, 146, 0)),
-    ),
-    feedparser._parse_date_onblog: (
-        (u'', None), # empty string
-        (u'2004\ub144 05\uc6d4 28\uc77c  01:31:15', (2004, 5, 27, 16, 31, 15, 3, 148, 0)),
-    ),
-    feedparser._parse_date_perforce: (
-        (u'', None), # empty string
-        (u'Fri, 2006/09/15 08:19:53 EDT', (2006, 9, 15, 12, 19, 53, 4, 258, 0)),
-    ),
-    feedparser._parse_date_rfc822: (
-        (u'', None), # empty string
-        (u'Thu, 01 Jan 0100 00:00:01 +0100', (99, 12, 31, 23, 0, 1, 3, 365, 0)), # ancient date
-        (u'Thu, 01 Jan 04 19:48:21 GMT', (2004, 1, 1, 19, 48, 21, 3, 1, 0)), # 2-digit year
-        (u'Thu, 01 Jan 2004 19:48:21 GMT', (2004, 1, 1, 19, 48, 21, 3, 1, 0)), # 4-digit year
-        (u'Thu,  5 Apr 2012 10:00:00 GMT', (2012, 4, 5, 10, 0, 0, 3, 96, 0)), # 1-digit day
-        (u'Wed, 19 Aug 2009 18:28:00 Etc/GMT', (2009, 8, 19, 18, 28, 0, 2, 231, 0)), # etc/gmt timezone
-        (u'Wed, 19 Feb 2012 22:40:00 GMT-01:01', (2012, 2, 19, 23, 41, 0, 6, 50, 0)), # gmt+hh:mm timezone
-        (u'Mon, 13 Feb, 2012 06:28:00 UTC', (2012, 2, 13, 6, 28, 0, 0, 44, 0)), # extraneous comma
-        (u'Thu, 01 Jan 2004 00:00 GMT', (2004, 1, 1, 0, 0, 0, 3, 1, 0)), # no seconds
-        (u'Thu, 01 Jan 2004', (2004, 1, 1, 0, 0, 0, 3, 1, 0)), # no time
-        # Additional tests to handle Disney's long month names and invalid timezones
-        (u'Mon, 26 January 2004 16:31:00 AT', (2004, 1, 26, 20, 31, 0, 0, 26, 0)),
-        (u'Mon, 26 January 2004 16:31:00 ET', (2004, 1, 26, 21, 31, 0, 0, 26, 0)),
-        (u'Mon, 26 January 2004 16:31:00 CT', (2004, 1, 26, 22, 31, 0, 0, 26, 0)),
-        (u'Mon, 26 January 2004 16:31:00 MT', (2004, 1, 26, 23, 31, 0, 0, 26, 0)),
-        (u'Mon, 26 January 2004 16:31:00 PT', (2004, 1, 27, 0, 31, 0, 1, 27, 0)),
-        # Swapped month and day
-        (u'Thu Aug 30 2012 17:26:16 +0200', (2012, 8, 30, 15, 26, 16, 3, 243, 0)),
-        (u'Sun, 16 Dec 2012 1:2:3:4 GMT', None), # invalid time
-        (u'Sun, 16 zzz 2012 11:47:32 GMT', None), # invalid month
-        (u'Sun, Dec x 2012 11:47:32 GMT', None), # invalid day (swapped day/month)
-        ('Sun, 16 Dec zz 11:47:32 GMT', None), # invalid year
-        ('Sun, 16 Dec 2012 11:47:32 +zz:00', None), # invalid timezone hour
-        ('Sun, 16 Dec 2012 11:47:32 +00:zz', None), # invalid timezone minute
-        ('Sun, 99 Jun 2009 12:00:00 GMT', None), # out-of-range day
-    ),
-    feedparser._parse_date_asctime: (
-        (u'Sun Jan  4 16:29:06 2004', (2004, 1, 4, 16, 29, 6, 6, 4, 0)),
-    ),
-    feedparser._parse_date_w3dtf: (
-        (u'', None), # empty string
-        (u'2003-12-31T10:14:55Z', (2003, 12, 31, 10, 14, 55, 2, 365, 0)), # UTC
-        (u'2003-12-31T10:14:55-08:00', (2003, 12, 31, 18, 14, 55, 2, 365, 0)), # San Francisco timezone
-        (u'2003-12-31T18:14:55+08:00', (2003, 12, 31, 10, 14, 55, 2, 365, 0)), # Tokyo timezone
-        (u'2007-04-23T23:25:47.538+10:00', (2007, 4, 23, 13, 25, 47, 0, 113, 0)), # fractional seconds
-        (u'2003-12-31', (2003, 12, 31, 0, 0, 0, 2, 365, 0)), # year/month/day only
-        (u'2003-12', (2003, 12, 1, 0, 0, 0, 0, 335, 0)), # year/month only
-        (u'2003', (2003, 1, 1, 0, 0, 0, 2, 1, 0)), # year only
-        # Special cases for rollovers in leap years
-        (u'2004-02-28T18:14:55-08:00', (2004, 2, 29, 2, 14, 55, 6, 60, 0)), # feb 28 in leap year
-        (u'2003-02-28T18:14:55-08:00', (2003, 3, 1, 2, 14, 55, 5, 60, 0)), # feb 28 in non-leap year
-        (u'2000-02-28T18:14:55-08:00', (2000, 2, 29, 2, 14, 55, 1, 60, 0)), # feb 28 in leap year on century divisible by 400
-        # Out-of-range times
-        (u'9999-12-31T23:59:59-99:99', None), # Date is out-of-range
-        (u'2003-12-31T25:14:55Z', None), # invalid (25 hours)
-        (u'2003-12-31T10:61:55Z', None), # invalid (61 minutes)
-        (u'2003-12-31T10:14:61Z', None), # invalid (61 seconds)
-        # Invalid formats
-        (u'22013', None), # Year is too long
-        (u'013', None), # Year is too short
-        (u'2013-01-27-01', None), # Date has to many parts
-        (u'2013-01-28T11:30:00-06:00Textra', None), # Too many 't's
-        # Non-integer values
-        (u'2013-xx-27', None), # Date
-        (u'2013-01-28T09:xx:00Z', None), # Time
-        (u'2013-01-28T09:00:00+00:xx', None), # Timezone
-        # MSSQL-style dates
-        (u'2004-07-08 23:56:58 -00:20', (2004, 7, 9, 0, 16, 58, 4, 191, 0)), # with timezone
-        (u'2004-07-08 23:56:58', (2004, 7, 8, 23, 56, 58, 3, 190, 0)), # without timezone
-        (u'2004-07-08 23:56:58.0', (2004, 7, 8, 23, 56, 58, 3, 190, 0)), # with fractional second
-    )
-}
-
-def make_date_test(f, s, t):
-    return lambda self: self._check_date(f, s, t)
-
-for func, items in date_tests.iteritems():
-    for i, (dtstring, dttuple) in enumerate(items):
-        uniqfunc = make_date_test(func, dtstring, dttuple)
-        setattr(TestDateParsers, 'test_%s_%02i' % (func.__name__, i), uniqfunc)
-
-
-class TestHTMLGuessing(unittest.TestCase):
-    "Exercise the HTML sniffing code"
-    def _mktest(text, expect, doc):
-        def fn(self):
-            value = bool(feedparser._FeedParserMixin.lookslikehtml(text))
-            self.assertEqual(value, expect)
-        fn.__doc__ = doc
-        return fn
-
-    test_text_1 = _mktest(u'plain text', False, u'plain text')
-    test_text_2 = _mktest(u'2 < 3', False, u'plain text with angle bracket')
-    test_html_1 = _mktest(u'<a href="">a</a>', True, u'anchor tag')
-    test_html_2 = _mktest(u'<i>i</i>', True, u'italics tag')
-    test_html_3 = _mktest(u'<b>b</b>', True, u'bold tag')
-    test_html_4 = _mktest(u'<code>', False, u'allowed tag, no end tag')
-    test_html_5 = _mktest(u'<rss> .. </rss>', False, u'disallowed tag')
-    test_entity_1 = _mktest(u'AT&T', False, u'corporation name')
-    test_entity_2 = _mktest(u'&copy;', True, u'named entity reference')
-    test_entity_3 = _mktest(u'&#169;', True, u'numeric entity reference')
-    test_entity_4 = _mktest(u'&#xA9;', True, u'hex numeric entity reference')
-
-#---------- additional api unit tests, not backed by files
-
-class TestBuildRequest(unittest.TestCase):
-    "Test that HTTP request objects are created as expected"
-    def test_extra_headers(self):
-        """You can pass in extra headers and they go into the request object."""
-
-        request = feedparser._build_urllib2_request(
-          'http://example.com/feed',
-          'agent-name',
-          None, None, None, None,
-          {'Cache-Control': 'max-age=0'})
-        # nb, urllib2 folds the case of the headers
-        self.assertEqual(
-          request.get_header('Cache-control'), 'max-age=0')
-
-
-class TestLxmlBug(unittest.TestCase):
-    def test_lxml_etree_bug(self):
-        try:
-            import lxml.etree
-        except ImportError:
-            pass
-        else:
-            doc = u"<feed>&illformed_charref</feed>".encode('utf8')
-            # Importing lxml.etree currently causes libxml2 to
-            # throw SAXException instead of SAXParseException.
-            feedparser.parse(feedparser._StringIO(doc))
-        self.assertTrue(True)
-
-#---------- parse test files and create test methods ----------
-def convert_to_utf8(data):
-    "Identify data's encoding using its byte order mark" \
-    "and convert it to its utf-8 equivalent"
-    if data[:4] == _l2bytes([0x4c, 0x6f, 0xa7, 0x94]):
-        return data.decode('cp037').encode('utf-8')
-    elif data[:4] == _l2bytes([0x00, 0x00, 0xfe, 0xff]):
-        if not _UTF32_AVAILABLE:
-            return None
-        return data.decode('utf-32be').encode('utf-8')
-    elif data[:4] == _l2bytes([0xff, 0xfe, 0x00, 0x00]):
-        if not _UTF32_AVAILABLE:
-            return None
-        return data.decode('utf-32le').encode('utf-8')
-    elif data[:4] == _l2bytes([0x00, 0x00, 0x00, 0x3c]):
-        if not _UTF32_AVAILABLE:
-            return None
-        return data.decode('utf-32be').encode('utf-8')
-    elif data[:4] == _l2bytes([0x3c, 0x00, 0x00, 0x00]):
-        if not _UTF32_AVAILABLE:
-            return None
-        return data.decode('utf-32le').encode('utf-8')
-    elif data[:4] == _l2bytes([0x00, 0x3c, 0x00, 0x3f]):
-        return data.decode('utf-16be').encode('utf-8')
-    elif data[:4] == _l2bytes([0x3c, 0x00, 0x3f, 0x00]):
-        return data.decode('utf-16le').encode('utf-8')
-    elif (data[:2] == _l2bytes([0xfe, 0xff])) and (data[2:4] != _l2bytes([0x00, 0x00])):
-        return data[2:].decode('utf-16be').encode('utf-8')
-    elif (data[:2] == _l2bytes([0xff, 0xfe])) and (data[2:4] != _l2bytes([0x00, 0x00])):
-        return data[2:].decode('utf-16le').encode('utf-8')
-    elif data[:3] == _l2bytes([0xef, 0xbb, 0xbf]):
-        return data[3:]
-    # no byte order mark was found
-    return data
-
-skip_re = re.compile(_s2bytes("SkipUnless:\s*(.*?)\n"))
-desc_re = re.compile(_s2bytes("Description:\s*(.*?)\s*Expect:\s*(.*)\s*-->"))
-def getDescription(xmlfile, data):
-    """Extract test data
-
-    Each test case is an XML file which contains not only a test feed
-    but also the description of the test and the condition that we
-    would expect the parser to create when it parses the feed.  Example:
-    <!--
-    Description: feed title
-    Expect:      feed['title'] == u'Example feed'
-    -->
-    """
-    skip_results = skip_re.search(data)
-    if skip_results:
-        skipUnless = skip_results.group(1).strip()
-    else:
-        skipUnless = '1'
-    search_results = desc_re.search(data)
-    if not search_results:
-        raise RuntimeError, "can't parse %s" % xmlfile
-    description, evalString = map(lambda s: s.strip(), list(search_results.groups()))
-    description = xmlfile + ": " + unicode(description, 'utf8')
-    return description, evalString, skipUnless
-
-def buildTestCase(xmlfile, description, evalString):
-    func = lambda self, xmlfile=xmlfile, evalString=evalString: \
-         self.failUnlessEval(xmlfile, evalString)
-    func.__doc__ = description
-    return func
-
-def runtests():
-    "Read the files in the tests/ directory, dynamically add tests to the " \
-    "TestCases above, spawn the HTTP server, and run the test suite"
-    if sys.argv[1:]:
-        allfiles = filter(lambda s: s.endswith('.xml'), reduce(operator.add, map(glob.glob, sys.argv[1:]), []))
-        wellformedfiles = illformedfiles = encodingfiles = entitiesfiles = microformatfiles = []
-        sys.argv = [sys.argv[0]] #+ sys.argv[2:]
-    else:
-        allfiles = glob.glob(os.path.join('.', 'tests', '**', '**', '*.xml'))
-        wellformedfiles = glob.glob(os.path.join('.', 'tests', 'wellformed', '**', '*.xml'))
-        illformedfiles = glob.glob(os.path.join('.', 'tests', 'illformed', '*.xml'))
-        encodingfiles = glob.glob(os.path.join('.', 'tests', 'encoding', '*.xml'))
-        entitiesfiles = glob.glob(os.path.join('.', 'tests', 'entities', '*.xml'))
-        microformatfiles = glob.glob(os.path.join('.', 'tests', 'microformats', '**', '*.xml'))
-    httpd = None
-    # there are several compression test cases that must be accounted for
-    # as well as a number of http status tests that redirect to a target
-    # and a few `_open_resource`-related tests
-    httpcount = 6 + 16 + 2
-    httpcount += len([f for f in allfiles if 'http' in f])
-    httpcount += len([f for f in wellformedfiles if 'http' in f])
-    httpcount += len([f for f in illformedfiles if 'http' in f])
-    httpcount += len([f for f in encodingfiles if 'http' in f])
-    try:
-        for c, xmlfile in enumerate(allfiles + encodingfiles + illformedfiles + entitiesfiles):
-            addTo = TestCase
-            if xmlfile in encodingfiles:
-                addTo = TestEncodings
-            elif xmlfile in entitiesfiles:
-                addTo = (TestStrictParser, TestLooseParser)
-            elif xmlfile in microformatfiles:
-                addTo = TestMicroformats
-            elif xmlfile in wellformedfiles:
-                addTo = (TestStrictParser, TestLooseParser)
-            f = open(xmlfile, 'rb')
-            data = f.read()
-            f.close()
-            if 'encoding' in xmlfile:
-                data = convert_to_utf8(data)
-                if data is None:
-                    # convert_to_utf8 found a byte order mark for utf_32
-                    # but it's not supported in this installation of Python
-                    if 'http' in xmlfile:
-                        httpcount -= 1 + (xmlfile in wellformedfiles)
-                    continue
-            description, evalString, skipUnless = getDescription(xmlfile, data)
-            testName = 'test_%06d' % c
-            ishttp = 'http' in xmlfile
-            try:
-                if not eval(skipUnless): raise NotImplementedError
-            except (ImportError, LookupError, NotImplementedError, AttributeError):
-                if ishttp:
-                    httpcount -= 1 + (xmlfile in wellformedfiles)
-                continue
-            if ishttp:
-                xmlfile = 'http://%s:%s/%s' % (_HOST, _PORT, posixpath.normpath(xmlfile.replace('\\', '/')))
-            testFunc = buildTestCase(xmlfile, description, evalString)
-            if isinstance(addTo, tuple):
-                setattr(addTo[0], testName, testFunc)
-                setattr(addTo[1], testName, testFunc)
-            else:
-                setattr(addTo, testName, testFunc)
-        if httpcount:
-            httpd = FeedParserTestServer(httpcount)
-            httpd.daemon = True
-            httpd.start()
-            httpd.ready.wait()
-        testsuite = unittest.TestSuite()
-        testloader = unittest.TestLoader()
-        testsuite.addTest(testloader.loadTestsFromTestCase(TestCase))
-        testsuite.addTest(testloader.loadTestsFromTestCase(TestStrictParser))
-        testsuite.addTest(testloader.loadTestsFromTestCase(TestLooseParser))
-        testsuite.addTest(testloader.loadTestsFromTestCase(TestEncodings))
-        testsuite.addTest(testloader.loadTestsFromTestCase(TestDateParsers))
-        testsuite.addTest(testloader.loadTestsFromTestCase(TestHTMLGuessing))
-        testsuite.addTest(testloader.loadTestsFromTestCase(TestHTTPStatus))
-        testsuite.addTest(testloader.loadTestsFromTestCase(TestCompression))
-        testsuite.addTest(testloader.loadTestsFromTestCase(TestConvertToIdn))
-        testsuite.addTest(testloader.loadTestsFromTestCase(TestMicroformats))
-        testsuite.addTest(testloader.loadTestsFromTestCase(TestOpenResource))
-        testsuite.addTest(testloader.loadTestsFromTestCase(TestFeedParserDict))
-        testsuite.addTest(testloader.loadTestsFromTestCase(TestMakeSafeAbsoluteURI))
-        testsuite.addTest(testloader.loadTestsFromTestCase(TestEverythingIsUnicode))
-        testsuite.addTest(testloader.loadTestsFromTestCase(TestTemporaryFallbackBehavior))
-        testsuite.addTest(testloader.loadTestsFromTestCase(TestLxmlBug))
-        testresults = unittest.TextTestRunner(verbosity=1).run(testsuite)
-
-        # Return 0 if successful, 1 if there was a failure
-        sys.exit(not testresults.wasSuccessful())
-    finally:
-        if httpd:
-            if httpd.requests:
-                # Should never get here unless something went horribly wrong, like the
-                # user hitting Ctrl-C.  Tell our HTTP server that it's done, then do
-                # one more request to flush it.  This rarely works; the combination of
-                # threading, self-terminating HTTP servers, and unittest is really
-                # quite flaky.  Just what you want in a testing framework, no?
-                httpd.requests = 0
-                if httpd.ready:
-                    urllib.urlopen('http://127.0.0.1:8097/tests/wellformed/rss/aaa_wellformed.xml').read()
-            httpd.join(0)
-
-if __name__ == "__main__":
-    runtests()
diff --git a/lib/feedparser/html.py b/lib/feedparser/html.py
new file mode 100644
index 000000000..18f5e8da9
--- /dev/null
+++ b/lib/feedparser/html.py
@@ -0,0 +1,213 @@
+from __future__ import absolute_import, unicode_literals
+
+import re
+
+try:
+    from html.entities import name2codepoint
+except ImportError:
+    from htmlentitydefs import name2codepoint
+
+from .sgml import *
+
+_cp1252 = {
+    128: '\u20ac', # euro sign
+    130: '\u201a', # single low-9 quotation mark
+    131: '\u0192', # latin small letter f with hook
+    132: '\u201e', # double low-9 quotation mark
+    133: '\u2026', # horizontal ellipsis
+    134: '\u2020', # dagger
+    135: '\u2021', # double dagger
+    136: '\u02c6', # modifier letter circumflex accent
+    137: '\u2030', # per mille sign
+    138: '\u0160', # latin capital letter s with caron
+    139: '\u2039', # single left-pointing angle quotation mark
+    140: '\u0152', # latin capital ligature oe
+    142: '\u017d', # latin capital letter z with caron
+    145: '\u2018', # left single quotation mark
+    146: '\u2019', # right single quotation mark
+    147: '\u201c', # left double quotation mark
+    148: '\u201d', # right double quotation mark
+    149: '\u2022', # bullet
+    150: '\u2013', # en dash
+    151: '\u2014', # em dash
+    152: '\u02dc', # small tilde
+    153: '\u2122', # trade mark sign
+    154: '\u0161', # latin small letter s with caron
+    155: '\u203a', # single right-pointing angle quotation mark
+    156: '\u0153', # latin small ligature oe
+    158: '\u017e', # latin small letter z with caron
+    159: '\u0178', # latin capital letter y with diaeresis
+}
+
+class _BaseHTMLProcessor(sgmllib.SGMLParser, object):
+    special = re.compile('''[<>'"]''')
+    bare_ampersand = re.compile("&(?!#\d+;|#x[0-9a-fA-F]+;|\w+;)")
+    elements_no_end_tag = set([
+      'area', 'base', 'basefont', 'br', 'col', 'command', 'embed', 'frame',
+      'hr', 'img', 'input', 'isindex', 'keygen', 'link', 'meta', 'param',
+      'source', 'track', 'wbr'
+    ])
+
+    def __init__(self, encoding=None, _type='application/xhtml+xml'):
+        if encoding:
+            self.encoding = encoding
+        self._type = _type
+        super(_BaseHTMLProcessor, self).__init__()
+
+    def reset(self):
+        self.pieces = []
+        sgmllib.SGMLParser.reset(self)
+
+    def _shorttag_replace(self, match):
+        tag = match.group(1)
+        if tag in self.elements_no_end_tag:
+            return '<' + tag + ' />'
+        else:
+            return '<' + tag + '></' + tag + '>'
+
+    # By declaring these methods and overriding their compiled code
+    # with the code from sgmllib, the original code will execute in
+    # feedparser's scope instead of sgmllib's. This means that the
+    # `tagfind` and `charref` regular expressions will be found as
+    # they're declared above, not as they're declared in sgmllib.
+    def goahead(self, i):
+        pass
+    try:
+        goahead.__code__ = sgmllib.SGMLParser.goahead.__code__
+    except AttributeError:
+        goahead.func_code = sgmllib.SGMLParser.goahead.func_code
+
+    def __parse_starttag(self, i):
+        pass
+    try:
+        __parse_starttag.__code__ = sgmllib.SGMLParser.parse_starttag.__code__
+    except AttributeError:
+        __parse_starttag.func_code = sgmllib.SGMLParser.parse_starttag.func_code
+
+    def parse_starttag(self,i):
+        j = self.__parse_starttag(i)
+        if self._type == 'application/xhtml+xml':
+            if j>2 and self.rawdata[j-2:j]=='/>':
+                self.unknown_endtag(self.lasttag)
+        return j
+
+    def feed(self, data):
+        data = re.compile(r'<!((?!DOCTYPE|--|\[))', re.IGNORECASE).sub(r'&lt;!\1', data)
+        data = re.sub(r'<([^<>\s]+?)\s*/>', self._shorttag_replace, data)
+        data = data.replace('&#39;', "'")
+        data = data.replace('&#34;', '"')
+        sgmllib.SGMLParser.feed(self, data)
+        sgmllib.SGMLParser.close(self)
+
+    def normalize_attrs(self, attrs):
+        if not attrs:
+            return attrs
+        # utility method to be called by descendants
+        attrs = dict([(k.lower(), v) for k, v in attrs]).items()
+        attrs = [(k, k in ('rel', 'type') and v.lower() or v) for k, v in attrs]
+        attrs.sort()
+        return attrs
+
+    def unknown_starttag(self, tag, attrs):
+        # called for each start tag
+        # attrs is a list of (attr, value) tuples
+        # e.g. for <pre class='screen'>, tag='pre', attrs=[('class', 'screen')]
+        uattrs = []
+        strattrs=''
+        if attrs:
+            for key, value in attrs:
+                value=value.replace('>','&gt;').replace('<','&lt;').replace('"','&quot;')
+                value = self.bare_ampersand.sub("&amp;", value)
+                uattrs.append((key, value))
+            strattrs = ''.join([' %s="%s"' % (key, value) for key, value in uattrs])
+        if tag in self.elements_no_end_tag:
+            self.pieces.append('<%s%s />' % (tag, strattrs))
+        else:
+            self.pieces.append('<%s%s>' % (tag, strattrs))
+
+    def unknown_endtag(self, tag):
+        # called for each end tag, e.g. for </pre>, tag will be 'pre'
+        # Reconstruct the original end tag.
+        if tag not in self.elements_no_end_tag:
+            self.pieces.append("</%s>" % tag)
+
+    def handle_charref(self, ref):
+        # called for each character reference, e.g. for '&#160;', ref will be '160'
+        # Reconstruct the original character reference.
+        ref = ref.lower()
+        if ref.startswith('x'):
+            value = int(ref[1:], 16)
+        else:
+            value = int(ref)
+
+        if value in _cp1252:
+            self.pieces.append('&#%s;' % hex(ord(_cp1252[value]))[1:])
+        else:
+            self.pieces.append('&#%s;' % ref)
+
+    def handle_entityref(self, ref):
+        # called for each entity reference, e.g. for '&copy;', ref will be 'copy'
+        # Reconstruct the original entity reference.
+        if ref in name2codepoint or ref == 'apos':
+            self.pieces.append('&%s;' % ref)
+        else:
+            self.pieces.append('&amp;%s' % ref)
+
+    def handle_data(self, text):
+        # called for each block of plain text, i.e. outside of any tag and
+        # not containing any character or entity references
+        # Store the original text verbatim.
+        self.pieces.append(text)
+
+    def handle_comment(self, text):
+        # called for each HTML comment, e.g. <!-- insert Javascript code here -->
+        # Reconstruct the original comment.
+        self.pieces.append('<!--%s-->' % text)
+
+    def handle_pi(self, text):
+        # called for each processing instruction, e.g. <?instruction>
+        # Reconstruct original processing instruction.
+        self.pieces.append('<?%s>' % text)
+
+    def handle_decl(self, text):
+        # called for the DOCTYPE, if present, e.g.
+        # <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+        #     "http://www.w3.org/TR/html4/loose.dtd">
+        # Reconstruct original DOCTYPE
+        self.pieces.append('<!%s>' % text)
+
+    _new_declname_match = re.compile(r'[a-zA-Z][-_.a-zA-Z0-9:]*\s*').match
+    def _scan_name(self, i, declstartpos):
+        rawdata = self.rawdata
+        n = len(rawdata)
+        if i == n:
+            return None, -1
+        m = self._new_declname_match(rawdata, i)
+        if m:
+            s = m.group()
+            name = s.strip()
+            if (i + len(s)) == n:
+                return None, -1  # end of buffer
+            return name.lower(), m.end()
+        else:
+            self.handle_data(rawdata)
+#            self.updatepos(declstartpos, i)
+            return None, -1
+
+    def convert_charref(self, name):
+        return '&#%s;' % name
+
+    def convert_entityref(self, name):
+        return '&%s;' % name
+
+    def output(self):
+        '''Return processed HTML as a single string'''
+        return ''.join(self.pieces)
+
+    def parse_declaration(self, i):
+        try:
+            return sgmllib.SGMLParser.parse_declaration(self, i)
+        except sgmllib.SGMLParseError:
+            # escape the doctype declaration and continue parsing
+            self.handle_data('&lt;')
+            return i+1
diff --git a/lib/feedparser/http.py b/lib/feedparser/http.py
new file mode 100644
index 000000000..980dd2c56
--- /dev/null
+++ b/lib/feedparser/http.py
@@ -0,0 +1,231 @@
+from __future__ import absolute_import, unicode_literals, with_statement
+
+import datetime
+import gzip
+import re
+import struct
+import zlib
+
+try:
+    import urllib.parse
+    import urllib.request
+except ImportError:
+    from urllib import splithost, splittype, splituser
+    from urllib2 import build_opener, HTTPDigestAuthHandler, HTTPRedirectHandler, HTTPDefaultErrorHandler, Request
+    from urlparse import urlparse
+
+    class urllib(object):
+        class parse(object):
+            splithost = staticmethod(splithost)
+            splittype = staticmethod(splittype)
+            splituser = staticmethod(splituser)
+            urlparse = staticmethod(urlparse)
+        class request(object):
+            build_opener = staticmethod(build_opener)
+            HTTPDigestAuthHandler = HTTPDigestAuthHandler
+            HTTPRedirectHandler = HTTPRedirectHandler
+            HTTPDefaultErrorHandler = HTTPDefaultErrorHandler
+            Request = Request
+
+try:
+    from io import BytesIO as _StringIO
+except ImportError:
+    try:
+        from cStringIO import StringIO as _StringIO
+    except ImportError:
+        from StringIO import StringIO as _StringIO
+
+try:
+    import base64, binascii
+except ImportError:
+    base64 = binascii = None
+else:
+    # Python 3.1 deprecated decodestring in favor of decodebytes
+    _base64decode = getattr(base64, 'decodebytes', base64.decodestring)
+
+from .datetimes import _parse_date
+from .urls import _convert_to_idn
+
+try:
+    basestring
+except NameError:
+    basestring = str
+
+bytes_ = type(b'')
+
+# HTTP "Accept" header to send to servers when downloading feeds.  If you don't
+# want to send an Accept header, set this to None.
+ACCEPT_HEADER = "application/atom+xml,application/rdf+xml,application/rss+xml,application/x-netcdf,application/xml;q=0.9,text/xml;q=0.2,*/*;q=0.1"
+
+class _FeedURLHandler(urllib.request.HTTPDigestAuthHandler, urllib.request.HTTPRedirectHandler, urllib.request.HTTPDefaultErrorHandler):
+    def http_error_default(self, req, fp, code, msg, headers):
+        # The default implementation just raises HTTPError.
+        # Forget that.
+        fp.status = code
+        return fp
+
+    def http_error_301(self, req, fp, code, msg, hdrs):
+        result = urllib.request.HTTPRedirectHandler.http_error_301(self, req, fp,
+                                                            code, msg, hdrs)
+        result.status = code
+        result.newurl = result.geturl()
+        return result
+    # The default implementations in urllib.request.HTTPRedirectHandler
+    # are identical, so hardcoding a http_error_301 call above
+    # won't affect anything
+    http_error_300 = http_error_301
+    http_error_302 = http_error_301
+    http_error_303 = http_error_301
+    http_error_307 = http_error_301
+
+    def http_error_401(self, req, fp, code, msg, headers):
+        # Check if
+        # - server requires digest auth, AND
+        # - we tried (unsuccessfully) with basic auth, AND
+        # If all conditions hold, parse authentication information
+        # out of the Authorization header we sent the first time
+        # (for the username and password) and the WWW-Authenticate
+        # header the server sent back (for the realm) and retry
+        # the request with the appropriate digest auth headers instead.
+        # This evil genius hack has been brought to you by Aaron Swartz.
+        host = urllib.parse.urlparse(req.get_full_url())[1]
+        if base64 is None or 'Authorization' not in req.headers \
+                          or 'WWW-Authenticate' not in headers:
+            return self.http_error_default(req, fp, code, msg, headers)
+        auth = _base64decode(req.headers['Authorization'].split(' ')[1])
+        user, passw = auth.split(':')
+        realm = re.findall('realm="([^"]*)"', headers['WWW-Authenticate'])[0]
+        self.add_password(realm, host, user, passw)
+        retry = self.http_error_auth_reqed('www-authenticate', host, req, headers)
+        self.reset_retry_count()
+        return retry
+
+def _build_urllib2_request(url, agent, accept_header, etag, modified, referrer, auth, request_headers):
+    request = urllib.request.Request(url)
+    request.add_header('User-Agent', agent)
+    if etag:
+        request.add_header('If-None-Match', etag)
+    if isinstance(modified, basestring):
+        modified = _parse_date(modified)
+    elif isinstance(modified, datetime.datetime):
+        modified = modified.utctimetuple()
+    if modified:
+        # format into an RFC 1123-compliant timestamp. We can't use
+        # time.strftime() since the %a and %b directives can be affected
+        # by the current locale, but RFC 2616 states that dates must be
+        # in English.
+        short_weekdays = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
+        months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
+        request.add_header('If-Modified-Since', '%s, %02d %s %04d %02d:%02d:%02d GMT' % (short_weekdays[modified[6]], modified[2], months[modified[1] - 1], modified[0], modified[3], modified[4], modified[5]))
+    if referrer:
+        request.add_header('Referer', referrer)
+    if gzip and zlib:
+        request.add_header('Accept-encoding', 'gzip, deflate')
+    elif gzip:
+        request.add_header('Accept-encoding', 'gzip')
+    elif zlib:
+        request.add_header('Accept-encoding', 'deflate')
+    else:
+        request.add_header('Accept-encoding', '')
+    if auth:
+        request.add_header('Authorization', 'Basic %s' % auth)
+    if accept_header:
+        request.add_header('Accept', accept_header)
+    # use this for whatever -- cookies, special headers, etc
+    # [('Cookie','Something'),('x-special-header','Another Value')]
+    for header_name, header_value in request_headers.items():
+        request.add_header(header_name, header_value)
+    request.add_header('A-IM', 'feed') # RFC 3229 support
+    return request
+
+def get(url, etag=None, modified=None, agent=None, referrer=None, handlers=None, request_headers=None, result=None):
+    if handlers is None:
+        handlers = []
+    elif not isinstance(handlers, list):
+        handlers = [handlers]
+    if request_headers is None:
+        request_headers = {}
+
+    # Deal with the feed URI scheme
+    if url.startswith('feed:http'):
+        url = url[5:]
+    elif url.startswith('feed:'):
+        url = 'http:' + url[5:]
+    if not agent:
+        agent = USER_AGENT
+    # Test for inline user:password credentials for HTTP basic auth
+    auth = None
+    if base64 and not url.startswith('ftp:'):
+        urltype, rest = urllib.parse.splittype(url)
+        realhost, rest = urllib.parse.splithost(rest)
+        if realhost:
+            user_passwd, realhost = urllib.parse.splituser(realhost)
+            if user_passwd:
+                url = '%s://%s%s' % (urltype, realhost, rest)
+                auth = base64.standard_b64encode(user_passwd).strip()
+
+    # iri support
+    if not isinstance(url, bytes_):
+        url = _convert_to_idn(url)
+
+    # try to open with urllib2 (to use optional headers)
+    request = _build_urllib2_request(url, agent, ACCEPT_HEADER, etag, modified, referrer, auth, request_headers)
+    opener = urllib.request.build_opener(*tuple(handlers + [_FeedURLHandler()]))
+    opener.addheaders = [] # RMK - must clear so we only send our custom User-Agent
+    f = opener.open(request)
+    data = f.read()
+    f.close()
+
+    # lowercase all of the HTTP headers for comparisons per RFC 2616
+    result['headers'] = dict((k.lower(), v) for k, v in f.headers.items())
+
+    # if feed is gzip-compressed, decompress it
+    if data and 'gzip' in result['headers'].get('content-encoding', ''):
+        try:
+            data = gzip.GzipFile(fileobj=_StringIO(data)).read()
+        except (EOFError, IOError, struct.error) as e:
+            # IOError can occur if the gzip header is bad.
+            # struct.error can occur if the data is damaged.
+            result['bozo'] = True
+            result['bozo_exception'] = e
+            if isinstance(e, struct.error):
+                # A gzip header was found but the data is corrupt.
+                # Ideally, we should re-request the feed without the
+                # 'Accept-encoding: gzip' header, but we don't.
+                data = None
+    elif data and 'deflate' in result['headers'].get('content-encoding', ''):
+        try:
+            data = zlib.decompress(data)
+        except zlib.error as e:
+            try:
+                # The data may have no headers and no checksum.
+                data = zlib.decompress(data, -15)
+            except zlib.error as e:
+                result['bozo'] = True
+                result['bozo_exception'] = e
+
+    # save HTTP headers
+    if 'etag' in result['headers']:
+        etag = result['headers'].get('etag', '')
+        if isinstance(etag, bytes_):
+            etag = etag.decode('utf-8', 'ignore')
+        if etag:
+            result['etag'] = etag
+    if 'last-modified' in result['headers']:
+        modified = result['headers'].get('last-modified', '')
+        if modified:
+            result['modified'] = modified
+            result['modified_parsed'] = _parse_date(modified)
+    if isinstance(f.url, bytes_):
+        result['href'] = f.url.decode('utf-8', 'ignore')
+    else:
+        result['href'] = f.url
+    result['status'] = getattr(f, 'status', 200)
+
+    # Stop processing if the server sent HTTP 304 Not Modified.
+    if getattr(f, 'code', 0) == 304:
+        result['version'] = ''
+        result['debug_message'] = 'The feed has not changed since you last checked, ' + \
+            'so the server sent no data.  This is a feature, not a bug!'
+
+    return data
diff --git a/lib/feedparser/mixin.py b/lib/feedparser/mixin.py
new file mode 100644
index 000000000..be73f4e2f
--- /dev/null
+++ b/lib/feedparser/mixin.py
@@ -0,0 +1,754 @@
+# Shared code that is common to the strict and loose feed parsers
+# Copyright 2010-2015 Kurt McKee <contactme@kurtmckee.org>
+# Copyright 2002-2008 Mark Pilgrim
+# All rights reserved.
+#
+# This file is a part of feedparser.
+#
+# Redistribution and use in source and binary forms, with or without modification,
+# are permitted provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice,
+#   this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice,
+#   this list of conditions and the following disclaimer in the documentation
+#   and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+
+from __future__ import absolute_import, unicode_literals
+
+import copy
+import re
+
+from xml.sax.saxutils import escape as _xmlescape
+
+# base64 support for Atom feeds that contain embedded binary data
+try:
+    import base64, binascii
+except ImportError:
+    base64 = binascii = None
+else:
+    # Python 3.1 deprecates decodestring in favor of decodebytes
+    _base64decode = getattr(base64, 'decodebytes', base64.decodestring)
+
+try:
+    from html.entities import name2codepoint, entitydefs
+except ImportError:
+    from htmlentitydefs import name2codepoint, entitydefs
+
+from .html import _cp1252
+from .namespaces import _base, cc, dc, georss, itunes, mediarss, psc
+from .sanitizer import _sanitizeHTML, _HTMLSanitizer
+from .util import FeedParserDict
+from .urls import _urljoin, _makeSafeAbsoluteURI, _resolveRelativeURIs
+
+bytes_ = type(b'')
+try:
+    chr = unichr
+except NameError:
+    pass
+
+class _FeedParserMixin(
+        _base.Namespace,
+        cc.Namespace,
+        dc.Namespace,
+        georss.Namespace,
+        itunes.Namespace,
+        mediarss.Namespace,
+        psc.Namespace,
+):
+    namespaces = {
+        '': '',
+        'http://backend.userland.com/rss': '',
+        'http://blogs.law.harvard.edu/tech/rss': '',
+        'http://purl.org/rss/1.0/': '',
+        'http://my.netscape.com/rdf/simple/0.9/': '',
+        'http://example.com/newformat#': '',
+        'http://example.com/necho': '',
+        'http://purl.org/echo/': '',
+        'uri/of/echo/namespace#': '',
+        'http://purl.org/pie/': '',
+        'http://purl.org/atom/ns#': '',
+        'http://www.w3.org/2005/Atom': '',
+        'http://purl.org/rss/1.0/modules/rss091#': '',
+
+        'http://webns.net/mvcb/':                                'admin',
+        'http://purl.org/rss/1.0/modules/aggregation/':          'ag',
+        'http://purl.org/rss/1.0/modules/annotate/':             'annotate',
+        'http://media.tangent.org/rss/1.0/':                     'audio',
+        'http://backend.userland.com/blogChannelModule':         'blogChannel',
+        'http://creativecommons.org/ns#license':                 'cc',
+        'http://web.resource.org/cc/':                           'cc',
+        'http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html': 'creativeCommons',
+        'http://backend.userland.com/creativeCommonsRssModule':  'creativeCommons',
+        'http://purl.org/rss/1.0/modules/company':               'co',
+        'http://purl.org/rss/1.0/modules/content/':              'content',
+        'http://my.theinfo.org/changed/1.0/rss/':                'cp',
+        'http://purl.org/dc/elements/1.1/':                      'dc',
+        'http://purl.org/dc/terms/':                             'dcterms',
+        'http://purl.org/rss/1.0/modules/email/':                'email',
+        'http://purl.org/rss/1.0/modules/event/':                'ev',
+        'http://rssnamespace.org/feedburner/ext/1.0':            'feedburner',
+        'http://freshmeat.net/rss/fm/':                          'fm',
+        'http://xmlns.com/foaf/0.1/':                            'foaf',
+        'http://www.w3.org/2003/01/geo/wgs84_pos#':              'geo',
+        'http://www.georss.org/georss':                          'georss',
+        'http://www.opengis.net/gml':                            'gml',
+        'http://postneo.com/icbm/':                              'icbm',
+        'http://purl.org/rss/1.0/modules/image/':                'image',
+        'http://www.itunes.com/DTDs/PodCast-1.0.dtd':            'itunes',
+        'http://example.com/DTDs/PodCast-1.0.dtd':               'itunes',
+        'http://purl.org/rss/1.0/modules/link/':                 'l',
+        'http://search.yahoo.com/mrss':                          'media',
+        # Version 1.1.2 of the Media RSS spec added the trailing slash on the namespace
+        'http://search.yahoo.com/mrss/':                         'media',
+        'http://madskills.com/public/xml/rss/module/pingback/':  'pingback',
+        'http://prismstandard.org/namespaces/1.2/basic/':        'prism',
+        'http://www.w3.org/1999/02/22-rdf-syntax-ns#':           'rdf',
+        'http://www.w3.org/2000/01/rdf-schema#':                 'rdfs',
+        'http://purl.org/rss/1.0/modules/reference/':            'ref',
+        'http://purl.org/rss/1.0/modules/richequiv/':            'reqv',
+        'http://purl.org/rss/1.0/modules/search/':               'search',
+        'http://purl.org/rss/1.0/modules/slash/':                'slash',
+        'http://schemas.xmlsoap.org/soap/envelope/':             'soap',
+        'http://purl.org/rss/1.0/modules/servicestatus/':        'ss',
+        'http://hacks.benhammersley.com/rss/streaming/':         'str',
+        'http://purl.org/rss/1.0/modules/subscription/':         'sub',
+        'http://purl.org/rss/1.0/modules/syndication/':          'sy',
+        'http://schemas.pocketsoap.com/rss/myDescModule/':       'szf',
+        'http://purl.org/rss/1.0/modules/taxonomy/':             'taxo',
+        'http://purl.org/rss/1.0/modules/threading/':            'thr',
+        'http://purl.org/rss/1.0/modules/textinput/':            'ti',
+        'http://madskills.com/public/xml/rss/module/trackback/': 'trackback',
+        'http://wellformedweb.org/commentAPI/':                  'wfw',
+        'http://purl.org/rss/1.0/modules/wiki/':                 'wiki',
+        'http://www.w3.org/1999/xhtml':                          'xhtml',
+        'http://www.w3.org/1999/xlink':                          'xlink',
+        'http://www.w3.org/XML/1998/namespace':                  'xml',
+        'http://podlove.org/simple-chapters':                    'psc',
+    }
+    _matchnamespaces = {}
+
+    can_be_relative_uri = set(['link', 'id', 'wfw_comment', 'wfw_commentrss', 'docs', 'url', 'href', 'comments', 'icon', 'logo'])
+    can_contain_relative_uris = set(['content', 'title', 'summary', 'info', 'tagline', 'subtitle', 'copyright', 'rights', 'description'])
+    can_contain_dangerous_markup = set(['content', 'title', 'summary', 'info', 'tagline', 'subtitle', 'copyright', 'rights', 'description'])
+    html_types = ['text/html', 'application/xhtml+xml']
+
+    def __init__(self):
+        if not self._matchnamespaces:
+            for k, v in self.namespaces.items():
+                self._matchnamespaces[k.lower()] = v
+        self.feeddata = FeedParserDict() # feed-level data
+        self.entries = [] # list of entry-level data
+        self.version = '' # feed type/version, see SUPPORTED_VERSIONS
+        self.namespacesInUse = {} # dictionary of namespaces defined by the feed
+
+        # the following are used internally to track state;
+        # this is really out of control and should be refactored
+        self.infeed = 0
+        self.inentry = 0
+        self.incontent = 0
+        self.intextinput = 0
+        self.inimage = 0
+        self.inauthor = 0
+        self.incontributor = 0
+        self.inpublisher = 0
+        self.insource = 0
+
+        self.sourcedata = FeedParserDict()
+        self.contentparams = FeedParserDict()
+        self._summaryKey = None
+        self.namespacemap = {}
+        self.elementstack = []
+        self.basestack = []
+        self.langstack = []
+        self.svgOK = 0
+        self.title_depth = -1
+        self.depth = 0
+        if self.lang:
+            self.feeddata['language'] = self.lang.replace('_','-')
+
+        # A map of the following form:
+        #     {
+        #         object_that_value_is_set_on: {
+        #             property_name: depth_of_node_property_was_extracted_from,
+        #             other_property: depth_of_node_property_was_extracted_from,
+        #         },
+        #     }
+        self.property_depth_map = {}
+        super(_FeedParserMixin, self).__init__()
+
+    def unknown_starttag(self, tag, attrs):
+        # increment depth counter
+        self.depth += 1
+
+        # normalize attrs
+        attrs = [self._normalize_attributes(attr) for attr in attrs]
+
+        # track xml:base and xml:lang
+        attrsD = dict(attrs)
+        baseuri = attrsD.get('xml:base', attrsD.get('base')) or self.baseuri
+        if isinstance(baseuri, bytes_):
+            baseuri = baseuri.decode(self.encoding, 'ignore')
+        # ensure that self.baseuri is always an absolute URI that
+        # uses a whitelisted URI scheme (e.g. not `javscript:`)
+        if self.baseuri:
+            self.baseuri = _makeSafeAbsoluteURI(self.baseuri, baseuri) or self.baseuri
+        else:
+            self.baseuri = _urljoin(self.baseuri, baseuri)
+        lang = attrsD.get('xml:lang', attrsD.get('lang'))
+        if lang == '':
+            # xml:lang could be explicitly set to '', we need to capture that
+            lang = None
+        elif lang is None:
+            # if no xml:lang is specified, use parent lang
+            lang = self.lang
+        if lang:
+            if tag in ('feed', 'rss', 'rdf:RDF'):
+                self.feeddata['language'] = lang.replace('_','-')
+        self.lang = lang
+        self.basestack.append(self.baseuri)
+        self.langstack.append(lang)
+
+        # track namespaces
+        for prefix, uri in attrs:
+            if prefix.startswith('xmlns:'):
+                self.trackNamespace(prefix[6:], uri)
+            elif prefix == 'xmlns':
+                self.trackNamespace(None, uri)
+
+        # track inline content
+        if self.incontent and not self.contentparams.get('type', 'xml').endswith('xml'):
+            if tag in ('xhtml:div', 'div'):
+                return # typepad does this 10/2007
+            # element declared itself as escaped markup, but it isn't really
+            self.contentparams['type'] = 'application/xhtml+xml'
+        if self.incontent and self.contentparams.get('type') == 'application/xhtml+xml':
+            if tag.find(':') != -1:
+                prefix, tag = tag.split(':', 1)
+                namespace = self.namespacesInUse.get(prefix, '')
+                if tag=='math' and namespace=='http://www.w3.org/1998/Math/MathML':
+                    attrs.append(('xmlns',namespace))
+                if tag=='svg' and namespace=='http://www.w3.org/2000/svg':
+                    attrs.append(('xmlns',namespace))
+            if tag == 'svg':
+                self.svgOK += 1
+            return self.handle_data('<%s%s>' % (tag, self.strattrs(attrs)), escape=0)
+
+        # match namespaces
+        if tag.find(':') != -1:
+            prefix, suffix = tag.split(':', 1)
+        else:
+            prefix, suffix = '', tag
+        prefix = self.namespacemap.get(prefix, prefix)
+        if prefix:
+            prefix = prefix + '_'
+
+        # special hack for better tracking of empty textinput/image elements in illformed feeds
+        if (not prefix) and tag not in ('title', 'link', 'description', 'name'):
+            self.intextinput = 0
+        if (not prefix) and tag not in ('title', 'link', 'description', 'url', 'href', 'width', 'height'):
+            self.inimage = 0
+
+        # call special handler (if defined) or default handler
+        methodname = '_start_' + prefix + suffix
+        try:
+            method = getattr(self, methodname)
+            return method(attrsD)
+        except AttributeError:
+            # Since there's no handler or something has gone wrong we explicitly add the element and its attributes
+            unknown_tag = prefix + suffix
+            if len(attrsD) == 0:
+                # No attributes so merge it into the encosing dictionary
+                return self.push(unknown_tag, 1)
+            else:
+                # Has attributes so create it in its own dictionary
+                context = self._getContext()
+                context[unknown_tag] = attrsD
+
+    def unknown_endtag(self, tag):
+        # match namespaces
+        if tag.find(':') != -1:
+            prefix, suffix = tag.split(':', 1)
+        else:
+            prefix, suffix = '', tag
+        prefix = self.namespacemap.get(prefix, prefix)
+        if prefix:
+            prefix = prefix + '_'
+        if suffix == 'svg' and self.svgOK:
+            self.svgOK -= 1
+
+        # call special handler (if defined) or default handler
+        methodname = '_end_' + prefix + suffix
+        try:
+            if self.svgOK:
+                raise AttributeError()
+            method = getattr(self, methodname)
+            method()
+        except AttributeError:
+            self.pop(prefix + suffix)
+
+        # track inline content
+        if self.incontent and not self.contentparams.get('type', 'xml').endswith('xml'):
+            # element declared itself as escaped markup, but it isn't really
+            if tag in ('xhtml:div', 'div'):
+                return # typepad does this 10/2007
+            self.contentparams['type'] = 'application/xhtml+xml'
+        if self.incontent and self.contentparams.get('type') == 'application/xhtml+xml':
+            tag = tag.split(':')[-1]
+            self.handle_data('</%s>' % tag, escape=0)
+
+        # track xml:base and xml:lang going out of scope
+        if self.basestack:
+            self.basestack.pop()
+            if self.basestack and self.basestack[-1]:
+                self.baseuri = self.basestack[-1]
+        if self.langstack:
+            self.langstack.pop()
+            if self.langstack: # and (self.langstack[-1] is not None):
+                self.lang = self.langstack[-1]
+
+        self.depth -= 1
+
+    def handle_charref(self, ref):
+        # called for each character reference, e.g. for '&#160;', ref will be '160'
+        if not self.elementstack:
+            return
+        ref = ref.lower()
+        if ref in ('34', '38', '39', '60', '62', 'x22', 'x26', 'x27', 'x3c', 'x3e'):
+            text = '&#%s;' % ref
+        else:
+            if ref[0] == 'x':
+                c = int(ref[1:], 16)
+            else:
+                c = int(ref)
+            text = chr(c).encode('utf-8')
+        self.elementstack[-1][2].append(text)
+
+    def handle_entityref(self, ref):
+        # called for each entity reference, e.g. for '&copy;', ref will be 'copy'
+        if not self.elementstack:
+            return
+        if ref in ('lt', 'gt', 'quot', 'amp', 'apos'):
+            text = '&%s;' % ref
+        elif ref in self.entities:
+            text = self.entities[ref]
+            if text.startswith('&#') and text.endswith(';'):
+                return self.handle_entityref(text)
+        else:
+            try:
+                name2codepoint[ref]
+            except KeyError:
+                text = '&%s;' % ref
+            else:
+                text = chr(name2codepoint[ref]).encode('utf-8')
+        self.elementstack[-1][2].append(text)
+
+    def handle_data(self, text, escape=1):
+        # called for each block of plain text, i.e. outside of any tag and
+        # not containing any character or entity references
+        if not self.elementstack:
+            return
+        if escape and self.contentparams.get('type') == 'application/xhtml+xml':
+            text = _xmlescape(text)
+        self.elementstack[-1][2].append(text)
+
+    def handle_comment(self, text):
+        # called for each comment, e.g. <!-- insert message here -->
+        pass
+
+    def handle_pi(self, text):
+        # called for each processing instruction, e.g. <?instruction>
+        pass
+
+    def handle_decl(self, text):
+        pass
+
+    def parse_declaration(self, i):
+        # override internal declaration handler to handle CDATA blocks
+        if self.rawdata[i:i+9] == '<![CDATA[':
+            k = self.rawdata.find(']]>', i)
+            if k == -1:
+                # CDATA block began but didn't finish
+                k = len(self.rawdata)
+                return k
+            self.handle_data(_xmlescape(self.rawdata[i+9:k]), 0)
+            return k+3
+        else:
+            k = self.rawdata.find('>', i)
+            if k >= 0:
+                return k+1
+            else:
+                # We have an incomplete CDATA block.
+                return k
+
+    def mapContentType(self, contentType):
+        contentType = contentType.lower()
+        if contentType == 'text' or contentType == 'plain':
+            contentType = 'text/plain'
+        elif contentType == 'html':
+            contentType = 'text/html'
+        elif contentType == 'xhtml':
+            contentType = 'application/xhtml+xml'
+        return contentType
+
+    def trackNamespace(self, prefix, uri):
+        loweruri = uri.lower()
+        if not self.version:
+            if (prefix, loweruri) == (None, 'http://my.netscape.com/rdf/simple/0.9/'):
+                self.version = 'rss090'
+            elif loweruri == 'http://purl.org/rss/1.0/':
+                self.version = 'rss10'
+            elif loweruri == 'http://www.w3.org/2005/atom':
+                self.version = 'atom10'
+        if loweruri.find('backend.userland.com/rss') != -1:
+            # match any backend.userland.com namespace
+            uri = 'http://backend.userland.com/rss'
+            loweruri = uri
+        if loweruri in self._matchnamespaces:
+            self.namespacemap[prefix] = self._matchnamespaces[loweruri]
+            self.namespacesInUse[self._matchnamespaces[loweruri]] = uri
+        else:
+            self.namespacesInUse[prefix or ''] = uri
+
+    def resolveURI(self, uri):
+        return _urljoin(self.baseuri or '', uri)
+
+    def decodeEntities(self, element, data):
+        return data
+
+    def strattrs(self, attrs):
+        return ''.join([' %s="%s"' % (t[0],_xmlescape(t[1],{'"':'&quot;'})) for t in attrs])
+
+    def push(self, element, expectingText):
+        self.elementstack.append([element, expectingText, []])
+
+    def pop(self, element, stripWhitespace=1):
+        if not self.elementstack:
+            return
+        if self.elementstack[-1][0] != element:
+            return
+
+        element, expectingText, pieces = self.elementstack.pop()
+
+        if self.version == 'atom10' and self.contentparams.get('type', 'text') == 'application/xhtml+xml':
+            # remove enclosing child element, but only if it is a <div> and
+            # only if all the remaining content is nested underneath it.
+            # This means that the divs would be retained in the following:
+            #    <div>foo</div><div>bar</div>
+            while pieces and len(pieces)>1 and not pieces[-1].strip():
+                del pieces[-1]
+            while pieces and len(pieces)>1 and not pieces[0].strip():
+                del pieces[0]
+            if pieces and (pieces[0] == '<div>' or pieces[0].startswith('<div ')) and pieces[-1]=='</div>':
+                depth = 0
+                for piece in pieces[:-1]:
+                    if piece.startswith('</'):
+                        depth -= 1
+                        if depth == 0:
+                            break
+                    elif piece.startswith('<') and not piece.endswith('/>'):
+                        depth += 1
+                else:
+                    pieces = pieces[1:-1]
+
+        # Ensure each piece is a str for Python 3
+        for (i, v) in enumerate(pieces):
+            if isinstance(v, bytes_):
+                pieces[i] = v.decode('utf-8')
+
+        output = ''.join(pieces)
+        if stripWhitespace:
+            output = output.strip()
+        if not expectingText:
+            return output
+
+        # decode base64 content
+        if base64 and self.contentparams.get('base64', 0):
+            try:
+                output = _base64decode(output)
+            except binascii.Error:
+                pass
+            except binascii.Incomplete:
+                pass
+            except TypeError:
+                # In Python 3, base64 takes and outputs bytes, not str
+                # This may not be the most correct way to accomplish this
+                output = _base64decode(output.encode('utf-8')).decode('utf-8')
+
+        # resolve relative URIs
+        if (element in self.can_be_relative_uri) and output:
+            # do not resolve guid elements with isPermalink="false"
+            if not element == 'id' or self.guidislink:
+                output = self.resolveURI(output)
+
+        # decode entities within embedded markup
+        if not self.contentparams.get('base64', 0):
+            output = self.decodeEntities(element, output)
+
+        # some feed formats require consumers to guess
+        # whether the content is html or plain text
+        if not self.version.startswith('atom') and self.contentparams.get('type') == 'text/plain':
+            if self.lookslikehtml(output):
+                self.contentparams['type'] = 'text/html'
+
+        # remove temporary cruft from contentparams
+        try:
+            del self.contentparams['mode']
+        except KeyError:
+            pass
+        try:
+            del self.contentparams['base64']
+        except KeyError:
+            pass
+
+        is_htmlish = self.mapContentType(self.contentparams.get('type', 'text/html')) in self.html_types
+        # resolve relative URIs within embedded markup
+        if is_htmlish and RESOLVE_RELATIVE_URIS:
+            if element in self.can_contain_relative_uris:
+                output = _resolveRelativeURIs(output, self.baseuri, self.encoding, self.contentparams.get('type', 'text/html'))
+
+        # sanitize embedded markup
+        if is_htmlish and SANITIZE_HTML:
+            if element in self.can_contain_dangerous_markup:
+                output = _sanitizeHTML(output, self.encoding, self.contentparams.get('type', 'text/html'))
+
+        if self.encoding and isinstance(output, bytes_):
+            output = output.decode(self.encoding, 'ignore')
+
+        # address common error where people take data that is already
+        # utf-8, presume that it is iso-8859-1, and re-encode it.
+        if self.encoding in ('utf-8', 'utf-8_INVALID_PYTHON_3') and not isinstance(output, bytes_):
+            try:
+                output = output.encode('iso-8859-1').decode('utf-8')
+            except (UnicodeEncodeError, UnicodeDecodeError):
+                pass
+
+        # map win-1252 extensions to the proper code points
+        if not isinstance(output, bytes_):
+            output = output.translate(_cp1252)
+
+        # categories/tags/keywords/whatever are handled in _end_category or _end_tags or _end_itunes_keywords
+        if element in ('category', 'tags', 'itunes_keywords'):
+            return output
+
+        if element == 'title' and -1 < self.title_depth <= self.depth:
+            return output
+
+        # store output in appropriate place(s)
+        if self.inentry and not self.insource:
+            if element == 'content':
+                self.entries[-1].setdefault(element, [])
+                contentparams = copy.deepcopy(self.contentparams)
+                contentparams['value'] = output
+                self.entries[-1][element].append(contentparams)
+            elif element == 'link':
+                if not self.inimage:
+                    # query variables in urls in link elements are improperly
+                    # converted from `?a=1&b=2` to `?a=1&b;=2` as if they're
+                    # unhandled character references. fix this special case.
+                    output = output.replace('&amp;', '&')
+                    output = re.sub("&([A-Za-z0-9_]+);", "&\g<1>", output)
+                    self.entries[-1][element] = output
+                    if output:
+                        self.entries[-1]['links'][-1]['href'] = output
+            else:
+                if element == 'description':
+                    element = 'summary'
+                old_value_depth = self.property_depth_map.setdefault(self.entries[-1], {}).get(element)
+                if old_value_depth is None or self.depth <= old_value_depth:
+                    self.property_depth_map[self.entries[-1]][element] = self.depth
+                    self.entries[-1][element] = output
+                if self.incontent:
+                    contentparams = copy.deepcopy(self.contentparams)
+                    contentparams['value'] = output
+                    self.entries[-1][element + '_detail'] = contentparams
+        elif (self.infeed or self.insource):# and (not self.intextinput) and (not self.inimage):
+            context = self._getContext()
+            if element == 'description':
+                element = 'subtitle'
+            context[element] = output
+            if element == 'link':
+                # fix query variables; see above for the explanation
+                output = re.sub("&([A-Za-z0-9_]+);", "&\g<1>", output)
+                context[element] = output
+                context['links'][-1]['href'] = output
+            elif self.incontent:
+                contentparams = copy.deepcopy(self.contentparams)
+                contentparams['value'] = output
+                context[element + '_detail'] = contentparams
+        return output
+
+    def pushContent(self, tag, attrsD, defaultContentType, expectingText):
+        self.incontent += 1
+        if self.lang:
+            self.lang=self.lang.replace('_','-')
+        self.contentparams = FeedParserDict({
+            'type': self.mapContentType(attrsD.get('type', defaultContentType)),
+            'language': self.lang,
+            'base': self.baseuri})
+        self.contentparams['base64'] = self._isBase64(attrsD, self.contentparams)
+        self.push(tag, expectingText)
+
+    def popContent(self, tag):
+        value = self.pop(tag)
+        self.incontent -= 1
+        self.contentparams.clear()
+        return value
+
+    # a number of elements in a number of RSS variants are nominally plain
+    # text, but this is routinely ignored.  This is an attempt to detect
+    # the most common cases.  As false positives often result in silent
+    # data loss, this function errs on the conservative side.
+    @staticmethod
+    def lookslikehtml(s):
+        # must have a close tag or an entity reference to qualify
+        if not (re.search(r'</(\w+)>', s) or re.search(r'&#?\w+;', s)):
+            return
+
+        # all tags must be in a restricted subset of valid HTML tags
+        if any((t for t in re.findall(r'</?(\w+)', s) if t.lower() not in _HTMLSanitizer.acceptable_elements)):
+            return
+
+        # all entities must have been defined as valid HTML entities
+        if any((e for e in re.findall(r'&(\w+);', s) if e not in entitydefs)):
+            return
+
+        return 1
+
+    def _mapToStandardPrefix(self, name):
+        colonpos = name.find(':')
+        if colonpos != -1:
+            prefix = name[:colonpos]
+            suffix = name[colonpos+1:]
+            prefix = self.namespacemap.get(prefix, prefix)
+            name = prefix + ':' + suffix
+        return name
+
+    def _getAttribute(self, attrsD, name):
+        return attrsD.get(self._mapToStandardPrefix(name))
+
+    def _isBase64(self, attrsD, contentparams):
+        if attrsD.get('mode', '') == 'base64':
+            return 1
+        if self.contentparams['type'].startswith('text/'):
+            return 0
+        if self.contentparams['type'].endswith('+xml'):
+            return 0
+        if self.contentparams['type'].endswith('/xml'):
+            return 0
+        return 1
+
+    def _itsAnHrefDamnIt(self, attrsD):
+        href = attrsD.get('url', attrsD.get('uri', attrsD.get('href', None)))
+        if href:
+            try:
+                del attrsD['url']
+            except KeyError:
+                pass
+            try:
+                del attrsD['uri']
+            except KeyError:
+                pass
+            attrsD['href'] = href
+        return attrsD
+
+    def _save(self, key, value, overwrite=False):
+        context = self._getContext()
+        if overwrite:
+            context[key] = value
+        else:
+            context.setdefault(key, value)
+
+    def _getContext(self):
+        if self.insource:
+            context = self.sourcedata
+        elif self.inimage and 'image' in self.feeddata:
+            context = self.feeddata['image']
+        elif self.intextinput:
+            context = self.feeddata['textinput']
+        elif self.inentry:
+            context = self.entries[-1]
+        else:
+            context = self.feeddata
+        return context
+
+    def _save_author(self, key, value, prefix='author'):
+        context = self._getContext()
+        context.setdefault(prefix + '_detail', FeedParserDict())
+        context[prefix + '_detail'][key] = value
+        self._sync_author_detail()
+        context.setdefault('authors', [FeedParserDict()])
+        context['authors'][-1][key] = value
+
+    def _save_contributor(self, key, value):
+        context = self._getContext()
+        context.setdefault('contributors', [FeedParserDict()])
+        context['contributors'][-1][key] = value
+
+    def _sync_author_detail(self, key='author'):
+        context = self._getContext()
+        detail = context.get('%ss' % key, [FeedParserDict()])[-1]
+        if detail:
+            name = detail.get('name')
+            email = detail.get('email')
+            if name and email:
+                context[key] = '%s (%s)' % (name, email)
+            elif name:
+                context[key] = name
+            elif email:
+                context[key] = email
+        else:
+            author, email = context.get(key), None
+            if not author:
+                return
+            emailmatch = re.search(r'''(([a-zA-Z0-9\_\-\.\+]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?))(\?subject=\S+)?''', author)
+            if emailmatch:
+                email = emailmatch.group(0)
+                # probably a better way to do the following, but it passes all the tests
+                author = author.replace(email, '')
+                author = author.replace('()', '')
+                author = author.replace('<>', '')
+                author = author.replace('&lt;&gt;', '')
+                author = author.strip()
+                if author and (author[0] == '('):
+                    author = author[1:]
+                if author and (author[-1] == ')'):
+                    author = author[:-1]
+                author = author.strip()
+            if author or email:
+                context.setdefault('%s_detail' % key, detail)
+            if author:
+                detail['name'] = author
+            if email:
+                detail['email'] = email
+
+    def _addTag(self, term, scheme, label):
+        context = self._getContext()
+        tags = context.setdefault('tags', [])
+        if (not term) and (not scheme) and (not label):
+            return
+        value = FeedParserDict(term=term, scheme=scheme, label=label)
+        if value not in tags:
+            tags.append(value)
+
+    def _start_tags(self, attrsD):
+        # This is a completely-made up element. Its semantics are determined
+        # only by a single feed that precipitated bug report 392 on Google Code.
+        # In short, this is junk code.
+        self.push('tags', 1)
+
+    def _end_tags(self):
+        for term in self.pop('tags').split(','):
+            self._addTag(term.strip(), None, None)
diff --git a/lib/feedparser/namespaces/__init__.py b/lib/feedparser/namespaces/__init__.py
new file mode 100644
index 000000000..e69de29bb
diff --git a/lib/feedparser/namespaces/_base.py b/lib/feedparser/namespaces/_base.py
new file mode 100644
index 000000000..f25edb625
--- /dev/null
+++ b/lib/feedparser/namespaces/_base.py
@@ -0,0 +1,499 @@
+# Support for the Atom, RSS, RDF, and CDF feed formats
+# Copyright 2010-2015 Kurt McKee <contactme@kurtmckee.org>
+# Copyright 2002-2008 Mark Pilgrim
+# All rights reserved.
+#
+# This file is a part of feedparser.
+#
+# Redistribution and use in source and binary forms, with or without modification,
+# are permitted provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice,
+#   this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice,
+#   this list of conditions and the following disclaimer in the documentation
+#   and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+
+from __future__ import absolute_import, unicode_literals
+
+import copy
+
+from ..datetimes import registerDateHandler, _parse_date
+from ..urls import _makeSafeAbsoluteURI
+from ..util import FeedParserDict
+
+class Namespace(object):
+    """Support for the Atom, RSS, RDF, and CDF feed formats.
+
+    The feed formats all share common elements, some of which have conflicting
+    interpretations. For simplicity, all of the base feed format support is
+    collected here.
+    """
+
+    supported_namespaces = {
+        '': '',
+        'http://backend.userland.com/rss': '',
+        'http://blogs.law.harvard.edu/tech/rss': '',
+        'http://purl.org/rss/1.0/': '',
+        'http://my.netscape.com/rdf/simple/0.9/': '',
+        'http://example.com/newformat#': '',
+        'http://example.com/necho': '',
+        'http://purl.org/echo/': '',
+        'uri/of/echo/namespace#': '',
+        'http://purl.org/pie/': '',
+        'http://purl.org/atom/ns#': '',
+        'http://www.w3.org/2005/Atom': '',
+        'http://purl.org/rss/1.0/modules/rss091#': '',
+    }
+
+    def _start_rss(self, attrsD):
+        versionmap = {'0.91': 'rss091u',
+                      '0.92': 'rss092',
+                      '0.93': 'rss093',
+                      '0.94': 'rss094'}
+        #If we're here then this is an RSS feed.
+        #If we don't have a version or have a version that starts with something
+        #other than RSS then there's been a mistake. Correct it.
+        if not self.version or not self.version.startswith('rss'):
+            attr_version = attrsD.get('version', '')
+            version = versionmap.get(attr_version)
+            if version:
+                self.version = version
+            elif attr_version.startswith('2.'):
+                self.version = 'rss20'
+            else:
+                self.version = 'rss'
+
+    def _start_channel(self, attrsD):
+        self.infeed = 1
+        self._cdf_common(attrsD)
+
+    def _cdf_common(self, attrsD):
+        if 'lastmod' in attrsD:
+            self._start_modified({})
+            self.elementstack[-1][-1] = attrsD['lastmod']
+            self._end_modified()
+        if 'href' in attrsD:
+            self._start_link({})
+            self.elementstack[-1][-1] = attrsD['href']
+            self._end_link()
+
+    def _start_feed(self, attrsD):
+        self.infeed = 1
+        versionmap = {'0.1': 'atom01',
+                      '0.2': 'atom02',
+                      '0.3': 'atom03'}
+        if not self.version:
+            attr_version = attrsD.get('version')
+            version = versionmap.get(attr_version)
+            if version:
+                self.version = version
+            else:
+                self.version = 'atom'
+
+    def _end_channel(self):
+        self.infeed = 0
+    _end_feed = _end_channel
+
+    def _start_image(self, attrsD):
+        context = self._getContext()
+        if not self.inentry:
+            context.setdefault('image', FeedParserDict())
+        self.inimage = 1
+        self.title_depth = -1
+        self.push('image', 0)
+
+    def _end_image(self):
+        self.pop('image')
+        self.inimage = 0
+
+    def _start_textinput(self, attrsD):
+        context = self._getContext()
+        context.setdefault('textinput', FeedParserDict())
+        self.intextinput = 1
+        self.title_depth = -1
+        self.push('textinput', 0)
+    _start_textInput = _start_textinput
+
+    def _end_textinput(self):
+        self.pop('textinput')
+        self.intextinput = 0
+    _end_textInput = _end_textinput
+
+    def _start_author(self, attrsD):
+        self.inauthor = 1
+        self.push('author', 1)
+        # Append a new FeedParserDict when expecting an author
+        context = self._getContext()
+        context.setdefault('authors', [])
+        context['authors'].append(FeedParserDict())
+    _start_managingeditor = _start_author
+
+    def _end_author(self):
+        self.pop('author')
+        self.inauthor = 0
+        self._sync_author_detail()
+    _end_managingeditor = _end_author
+
+    def _start_contributor(self, attrsD):
+        self.incontributor = 1
+        context = self._getContext()
+        context.setdefault('contributors', [])
+        context['contributors'].append(FeedParserDict())
+        self.push('contributor', 0)
+
+    def _end_contributor(self):
+        self.pop('contributor')
+        self.incontributor = 0
+
+    def _start_name(self, attrsD):
+        self.push('name', 0)
+
+    def _end_name(self):
+        value = self.pop('name')
+        if self.inpublisher:
+            self._save_author('name', value, 'publisher')
+        elif self.inauthor:
+            self._save_author('name', value)
+        elif self.incontributor:
+            self._save_contributor('name', value)
+        elif self.intextinput:
+            context = self._getContext()
+            context['name'] = value
+
+    def _start_width(self, attrsD):
+        self.push('width', 0)
+
+    def _end_width(self):
+        value = self.pop('width')
+        try:
+            value = int(value)
+        except ValueError:
+            value = 0
+        if self.inimage:
+            context = self._getContext()
+            context['width'] = value
+
+    def _start_height(self, attrsD):
+        self.push('height', 0)
+
+    def _end_height(self):
+        value = self.pop('height')
+        try:
+            value = int(value)
+        except ValueError:
+            value = 0
+        if self.inimage:
+            context = self._getContext()
+            context['height'] = value
+
+    def _start_url(self, attrsD):
+        self.push('href', 1)
+    _start_homepage = _start_url
+    _start_uri = _start_url
+
+    def _end_url(self):
+        value = self.pop('href')
+        if self.inauthor:
+            self._save_author('href', value)
+        elif self.incontributor:
+            self._save_contributor('href', value)
+    _end_homepage = _end_url
+    _end_uri = _end_url
+
+    def _start_email(self, attrsD):
+        self.push('email', 0)
+
+    def _end_email(self):
+        value = self.pop('email')
+        if self.inpublisher:
+            self._save_author('email', value, 'publisher')
+        elif self.inauthor:
+            self._save_author('email', value)
+        elif self.incontributor:
+            self._save_contributor('email', value)
+
+    def _start_subtitle(self, attrsD):
+        self.pushContent('subtitle', attrsD, 'text/plain', 1)
+    _start_tagline = _start_subtitle
+
+    def _end_subtitle(self):
+        self.popContent('subtitle')
+    _end_tagline = _end_subtitle
+
+    def _start_rights(self, attrsD):
+        self.pushContent('rights', attrsD, 'text/plain', 1)
+    _start_copyright = _start_rights
+
+    def _end_rights(self):
+        self.popContent('rights')
+    _end_copyright = _end_rights
+
+    def _start_item(self, attrsD):
+        self.entries.append(FeedParserDict())
+        self.push('item', 0)
+        self.inentry = 1
+        self.guidislink = 0
+        self.title_depth = -1
+        id = self._getAttribute(attrsD, 'rdf:about')
+        if id:
+            context = self._getContext()
+            context['id'] = id
+        self._cdf_common(attrsD)
+    _start_entry = _start_item
+
+    def _end_item(self):
+        self.pop('item')
+        self.inentry = 0
+    _end_entry = _end_item
+
+    def _start_language(self, attrsD):
+        self.push('language', 1)
+
+    def _end_language(self):
+        self.lang = self.pop('language')
+
+    def _start_webmaster(self, attrsD):
+        self.push('publisher', 1)
+
+    def _end_webmaster(self):
+        self.pop('publisher')
+        self._sync_author_detail('publisher')
+
+    def _start_published(self, attrsD):
+        self.push('published', 1)
+    _start_issued = _start_published
+    _start_pubdate = _start_published
+
+    def _end_published(self):
+        value = self.pop('published')
+        self._save('published_parsed', _parse_date(value), overwrite=True)
+    _end_issued = _end_published
+    _end_pubdate = _end_published
+
+    def _start_updated(self, attrsD):
+        self.push('updated', 1)
+    _start_modified = _start_updated
+    _start_lastbuilddate = _start_updated
+
+    def _end_updated(self):
+        value = self.pop('updated')
+        parsed_value = _parse_date(value)
+        self._save('updated_parsed', parsed_value, overwrite=True)
+    _end_modified = _end_updated
+    _end_lastbuilddate = _end_updated
+
+    def _start_created(self, attrsD):
+        self.push('created', 1)
+
+    def _end_created(self):
+        value = self.pop('created')
+        self._save('created_parsed', _parse_date(value), overwrite=True)
+
+    def _start_expirationdate(self, attrsD):
+        self.push('expired', 1)
+
+    def _end_expirationdate(self):
+        self._save('expired_parsed', _parse_date(self.pop('expired')), overwrite=True)
+
+    def _start_category(self, attrsD):
+        term = attrsD.get('term')
+        scheme = attrsD.get('scheme', attrsD.get('domain'))
+        label = attrsD.get('label')
+        self._addTag(term, scheme, label)
+        self.push('category', 1)
+    _start_keywords = _start_category
+
+    def _end_category(self):
+        value = self.pop('category')
+        if not value:
+            return
+        context = self._getContext()
+        tags = context['tags']
+        if value and len(tags) and not tags[-1]['term']:
+            tags[-1]['term'] = value
+        else:
+            self._addTag(value, None, None)
+    _end_keywords = _end_category
+
+    def _start_cloud(self, attrsD):
+        self._getContext()['cloud'] = FeedParserDict(attrsD)
+
+    def _start_link(self, attrsD):
+        attrsD.setdefault('rel', 'alternate')
+        if attrsD['rel'] == 'self':
+            attrsD.setdefault('type', 'application/atom+xml')
+        else:
+            attrsD.setdefault('type', 'text/html')
+        context = self._getContext()
+        attrsD = self._itsAnHrefDamnIt(attrsD)
+        if 'href' in attrsD:
+            attrsD['href'] = self.resolveURI(attrsD['href'])
+        expectingText = self.infeed or self.inentry or self.insource
+        context.setdefault('links', [])
+        if not (self.inentry and self.inimage):
+            context['links'].append(FeedParserDict(attrsD))
+        if 'href' in attrsD:
+            expectingText = 0
+            if (attrsD.get('rel') == 'alternate') and (self.mapContentType(attrsD.get('type')) in self.html_types):
+                context['link'] = attrsD['href']
+        else:
+            self.push('link', expectingText)
+
+    def _end_link(self):
+        value = self.pop('link')
+
+    def _start_guid(self, attrsD):
+        self.guidislink = (attrsD.get('ispermalink', 'true') == 'true')
+        self.push('id', 1)
+    _start_id = _start_guid
+
+    def _end_guid(self):
+        value = self.pop('id')
+        self._save('guidislink', self.guidislink and 'link' not in self._getContext())
+        if self.guidislink:
+            # guid acts as link, but only if 'ispermalink' is not present or is 'true',
+            # and only if the item doesn't already have a link element
+            self._save('link', value)
+    _end_id = _end_guid
+
+    def _start_title(self, attrsD):
+        if self.svgOK:
+            return self.unknown_starttag('title', list(attrsD.items()))
+        self.pushContent('title', attrsD, 'text/plain', self.infeed or self.inentry or self.insource)
+
+    def _end_title(self):
+        if self.svgOK:
+            return
+        value = self.popContent('title')
+        if not value:
+            return
+        self.title_depth = self.depth
+
+    def _start_description(self, attrsD):
+        context = self._getContext()
+        if 'summary' in context:
+            self._summaryKey = 'content'
+            self._start_content(attrsD)
+        else:
+            self.pushContent('description', attrsD, 'text/html', self.infeed or self.inentry or self.insource)
+
+    def _start_abstract(self, attrsD):
+        self.pushContent('description', attrsD, 'text/plain', self.infeed or self.inentry or self.insource)
+
+    def _end_description(self):
+        if self._summaryKey == 'content':
+            self._end_content()
+        else:
+            value = self.popContent('description')
+        self._summaryKey = None
+    _end_abstract = _end_description
+
+    def _start_info(self, attrsD):
+        self.pushContent('info', attrsD, 'text/plain', 1)
+    _start_feedburner_browserfriendly = _start_info
+
+    def _end_info(self):
+        self.popContent('info')
+    _end_feedburner_browserfriendly = _end_info
+
+    def _start_generator(self, attrsD):
+        if attrsD:
+            attrsD = self._itsAnHrefDamnIt(attrsD)
+            if 'href' in attrsD:
+                attrsD['href'] = self.resolveURI(attrsD['href'])
+        self._getContext()['generator_detail'] = FeedParserDict(attrsD)
+        self.push('generator', 1)
+
+    def _end_generator(self):
+        value = self.pop('generator')
+        context = self._getContext()
+        if 'generator_detail' in context:
+            context['generator_detail']['name'] = value
+
+    def _start_summary(self, attrsD):
+        context = self._getContext()
+        if 'summary' in context:
+            self._summaryKey = 'content'
+            self._start_content(attrsD)
+        else:
+            self._summaryKey = 'summary'
+            self.pushContent(self._summaryKey, attrsD, 'text/plain', 1)
+
+    def _end_summary(self):
+        if self._summaryKey == 'content':
+            self._end_content()
+        else:
+            self.popContent(self._summaryKey or 'summary')
+        self._summaryKey = None
+
+    def _start_enclosure(self, attrsD):
+        attrsD = self._itsAnHrefDamnIt(attrsD)
+        context = self._getContext()
+        attrsD['rel'] = 'enclosure'
+        context.setdefault('links', []).append(FeedParserDict(attrsD))
+
+    def _start_source(self, attrsD):
+        if 'url' in attrsD:
+            # This means that we're processing a source element from an RSS 2.0 feed
+            self.sourcedata['href'] = attrsD['url']
+        self.push('source', 1)
+        self.insource = 1
+        self.title_depth = -1
+
+    def _end_source(self):
+        self.insource = 0
+        value = self.pop('source')
+        if value:
+            self.sourcedata['title'] = value
+        self._getContext()['source'] = copy.deepcopy(self.sourcedata)
+        self.sourcedata.clear()
+
+    def _start_content(self, attrsD):
+        self.pushContent('content', attrsD, 'text/plain', 1)
+        src = attrsD.get('src')
+        if src:
+            self.contentparams['src'] = src
+        self.push('content', 1)
+
+    def _start_body(self, attrsD):
+        self.pushContent('content', attrsD, 'application/xhtml+xml', 1)
+    _start_xhtml_body = _start_body
+
+    def _start_content_encoded(self, attrsD):
+        self.pushContent('content', attrsD, 'text/html', 1)
+    _start_fullitem = _start_content_encoded
+
+    def _end_content(self):
+        copyToSummary = self.mapContentType(self.contentparams.get('type')) in (['text/plain'] + self.html_types)
+        value = self.popContent('content')
+        if copyToSummary:
+            self._save('summary', value)
+
+    _end_body = _end_content
+    _end_xhtml_body = _end_content
+    _end_content_encoded = _end_content
+    _end_fullitem = _end_content
+
+    def _start_newlocation(self, attrsD):
+        self.push('newlocation', 1)
+
+    def _end_newlocation(self):
+        url = self.pop('newlocation')
+        context = self._getContext()
+        # don't set newlocation if the context isn't right
+        if context is not self.feeddata:
+            return
+        context['newlocation'] = _makeSafeAbsoluteURI(self.baseuri, url.strip())
diff --git a/lib/feedparser/namespaces/admin.py b/lib/feedparser/namespaces/admin.py
new file mode 100644
index 000000000..7c663aef8
--- /dev/null
+++ b/lib/feedparser/namespaces/admin.py
@@ -0,0 +1,55 @@
+# Support for the administrative elements extension
+# Copyright 2010-2015 Kurt McKee <contactme@kurtmckee.org>
+# Copyright 2002-2008 Mark Pilgrim
+# All rights reserved.
+#
+# This file is a part of feedparser.
+#
+# Redistribution and use in source and binary forms, with or without modification,
+# are permitted provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice,
+#   this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice,
+#   this list of conditions and the following disclaimer in the documentation
+#   and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+
+from __future__ import absolute_import, unicode_literals
+
+from ..util import FeedParserDict
+
+class Namespace(object):
+    # RDF Site Summary 1.0 Modules: Administrative
+    # http://web.resource.org/rss/1.0/modules/admin/
+
+    supported_namespaces = {
+        'http://webns.net/mvcb/': 'admin',
+    }
+
+    def _start_admin_generatoragent(self, attrsD):
+        self.push('generator', 1)
+        value = self._getAttribute(attrsD, 'rdf:resource')
+        if value:
+            self.elementstack[-1][2].append(value)
+        self.pop('generator')
+        self._getContext()['generator_detail'] = FeedParserDict({'href': value})
+
+    def _start_admin_errorreportsto(self, attrsD):
+        self.push('errorreportsto', 1)
+        value = self._getAttribute(attrsD, 'rdf:resource')
+        if value:
+            self.elementstack[-1][2].append(value)
+        self.pop('errorreportsto')
+
diff --git a/lib/feedparser/namespaces/cc.py b/lib/feedparser/namespaces/cc.py
new file mode 100644
index 000000000..6d8d3933d
--- /dev/null
+++ b/lib/feedparser/namespaces/cc.py
@@ -0,0 +1,71 @@
+# Support for the Creative Commons licensing extensions
+# Copyright 2010-2015 Kurt McKee <contactme@kurtmckee.org>
+# Copyright 2002-2008 Mark Pilgrim
+# All rights reserved.
+#
+# This file is a part of feedparser.
+#
+# Redistribution and use in source and binary forms, with or without modification,
+# are permitted provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice,
+#   this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice,
+#   this list of conditions and the following disclaimer in the documentation
+#   and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+
+from __future__ import absolute_import, unicode_literals
+
+from ..util import FeedParserDict
+
+class Namespace(object):
+    supported_namespaces = {
+        # RDF-based namespace
+        'http://creativecommons.org/ns#license': 'cc',
+
+        # Old RDF-based namespace
+        'http://web.resource.org/cc/': 'cc',
+
+        # RSS-based namespace
+        'http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html': 'creativecommons',
+
+        # Old RSS-based namespace
+        'http://backend.userland.com/creativeCommonsRssModule': 'creativecommons',
+    }
+
+    def _start_cc_license(self, attrsD):
+        context = self._getContext()
+        value = self._getAttribute(attrsD, 'rdf:resource')
+        attrsD = FeedParserDict()
+        attrsD['rel'] = 'license'
+        if value:
+            attrsD['href'] = value
+        context.setdefault('links', []).append(attrsD)
+
+    def _start_creativecommons_license(self, attrsD):
+        self.push('license', 1)
+    _start_creativeCommons_license = _start_creativecommons_license
+
+    def _end_creativecommons_license(self):
+        value = self.pop('license')
+        context = self._getContext()
+        attrsD = FeedParserDict()
+        attrsD['rel'] = 'license'
+        if value:
+            attrsD['href'] = value
+        context.setdefault('links', []).append(attrsD)
+        del context['license']
+    _end_creativeCommons_license = _end_creativecommons_license
+
diff --git a/lib/feedparser/namespaces/dc.py b/lib/feedparser/namespaces/dc.py
new file mode 100644
index 000000000..035bbadd9
--- /dev/null
+++ b/lib/feedparser/namespaces/dc.py
@@ -0,0 +1,136 @@
+# Support for the Dublin Core metadata extensions
+# Copyright 2010-2015 Kurt McKee <contactme@kurtmckee.org>
+# Copyright 2002-2008 Mark Pilgrim
+# All rights reserved.
+#
+# This file is a part of feedparser.
+#
+# Redistribution and use in source and binary forms, with or without modification,
+# are permitted provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice,
+#   this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice,
+#   this list of conditions and the following disclaimer in the documentation
+#   and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+
+from __future__ import absolute_import, unicode_literals
+
+from ..util import FeedParserDict
+from ..datetimes import _parse_date
+
+class Namespace(object):
+    supported_namespaces = {
+        'http://purl.org/dc/elements/1.1/': 'dc',
+        'http://purl.org/dc/terms/': 'dcterms',
+    }
+
+    def _end_dc_author(self):
+        self._end_author()
+
+    def _end_dc_creator(self):
+        self._end_author()
+
+    def _end_dc_date(self):
+        self._end_updated()
+
+    def _end_dc_description(self):
+        self._end_description()
+
+    def _end_dc_language(self):
+        self._end_language()
+
+    def _end_dc_publisher(self):
+        self._end_webmaster()
+
+    def _end_dc_rights(self):
+        self._end_rights()
+
+    def _end_dc_subject(self):
+        self._end_category()
+
+    def _end_dc_title(self):
+        self._end_title()
+
+    def _end_dcterms_created(self):
+        self._end_created()
+
+    def _end_dcterms_issued(self):
+        self._end_published()
+
+    def _end_dcterms_modified(self):
+        self._end_updated()
+
+    def _start_dc_author(self, attrsD):
+        self._start_author(attrsD)
+
+    def _start_dc_creator(self, attrsD):
+        self._start_author(attrsD)
+
+    def _start_dc_date(self, attrsD):
+        self._start_updated(attrsD)
+
+    def _start_dc_description(self, attrsD):
+        self._start_description(attrsD)
+
+    def _start_dc_language(self, attrsD):
+        self._start_language(attrsD)
+
+    def _start_dc_publisher(self, attrsD):
+        self._start_webmaster(attrsD)
+
+    def _start_dc_rights(self, attrsD):
+        self._start_rights(attrsD)
+
+    def _start_dc_subject(self, attrsD):
+        self._start_category(attrsD)
+
+    def _start_dc_title(self, attrsD):
+        self._start_title(attrsD)
+
+    def _start_dcterms_created(self, attrsD):
+        self._start_created(attrsD)
+
+    def _start_dcterms_issued(self, attrsD):
+        self._start_published(attrsD)
+
+    def _start_dcterms_modified(self, attrsD):
+        self._start_updated(attrsD)
+
+    def _start_dcterms_valid(self, attrsD):
+        self.push('validity', 1)
+
+    def _end_dcterms_valid(self):
+        for validity_detail in self.pop('validity').split(';'):
+            if '=' in validity_detail:
+                key, value = validity_detail.split('=', 1)
+                if key == 'start':
+                    self._save('validity_start', value, overwrite=True)
+                    self._save('validity_start_parsed', _parse_date(value), overwrite=True)
+                elif key == 'end':
+                    self._save('validity_end', value, overwrite=True)
+                    self._save('validity_end_parsed', _parse_date(value), overwrite=True)
+
+    def _start_dc_contributor(self, attrsD):
+        self.incontributor = 1
+        context = self._getContext()
+        context.setdefault('contributors', [])
+        context['contributors'].append(FeedParserDict())
+        self.push('name', 0)
+
+    def _end_dc_contributor(self):
+        self._end_name()
+        self.incontributor = 0
+
diff --git a/lib/feedparser/namespaces/georss.py b/lib/feedparser/namespaces/georss.py
new file mode 100644
index 000000000..7bac04a18
--- /dev/null
+++ b/lib/feedparser/namespaces/georss.py
@@ -0,0 +1,264 @@
+# Support for the GeoRSS format
+# Copyright 2010-2015 Kurt McKee <contactme@kurtmckee.org>
+# Copyright 2002-2008 Mark Pilgrim
+# All rights reserved.
+#
+# This file is a part of feedparser.
+#
+# Redistribution and use in source and binary forms, with or without modification,
+# are permitted provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice,
+#   this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice,
+#   this list of conditions and the following disclaimer in the documentation
+#   and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+
+from __future__ import absolute_import, unicode_literals
+
+from ..util import FeedParserDict
+
+class Namespace(object):
+    supported_namespaces = {
+        'http://www.w3.org/2003/01/geo/wgs84_pos#': 'geo',
+        'http://www.georss.org/georss': 'georss',
+        'http://www.opengis.net/gml': 'gml',
+    }
+
+    def __init__(self):
+        self.ingeometry = 0
+        super(Namespace, self).__init__()
+
+    def _start_georssgeom(self, attrsD):
+        self.push('geometry', 0)
+        context = self._getContext()
+        context['where'] = FeedParserDict()
+
+    _start_georss_point = _start_georssgeom
+    _start_georss_line = _start_georssgeom
+    _start_georss_polygon = _start_georssgeom
+    _start_georss_box = _start_georssgeom
+
+    def _save_where(self, geometry):
+        context = self._getContext()
+        context['where'].update(geometry)
+
+    def _end_georss_point(self):
+        geometry = _parse_georss_point(self.pop('geometry'))
+        if geometry:
+            self._save_where(geometry)
+
+    def _end_georss_line(self):
+        geometry = _parse_georss_line(self.pop('geometry'))
+        if geometry:
+            self._save_where(geometry)
+
+    def _end_georss_polygon(self):
+        this = self.pop('geometry')
+        geometry = _parse_georss_polygon(this)
+        if geometry:
+            self._save_where(geometry)
+
+    def _end_georss_box(self):
+        geometry = _parse_georss_box(self.pop('geometry'))
+        if geometry:
+            self._save_where(geometry)
+
+    def _start_where(self, attrsD):
+        self.push('where', 0)
+        context = self._getContext()
+        context['where'] = FeedParserDict()
+    _start_georss_where = _start_where
+
+    def _parse_srs_attrs(self, attrsD):
+        srsName = attrsD.get('srsname')
+        try:
+            srsDimension = int(attrsD.get('srsdimension', '2'))
+        except ValueError:
+            srsDimension = 2
+        context = self._getContext()
+        context['where']['srsName'] = srsName
+        context['where']['srsDimension'] = srsDimension
+
+    def _start_gml_point(self, attrsD):
+        self._parse_srs_attrs(attrsD)
+        self.ingeometry = 1
+        self.push('geometry', 0)
+
+    def _start_gml_linestring(self, attrsD):
+        self._parse_srs_attrs(attrsD)
+        self.ingeometry = 'linestring'
+        self.push('geometry', 0)
+
+    def _start_gml_polygon(self, attrsD):
+        self._parse_srs_attrs(attrsD)
+        self.push('geometry', 0)
+
+    def _start_gml_exterior(self, attrsD):
+        self.push('geometry', 0)
+
+    def _start_gml_linearring(self, attrsD):
+        self.ingeometry = 'polygon'
+        self.push('geometry', 0)
+
+    def _start_gml_pos(self, attrsD):
+        self.push('pos', 0)
+
+    def _end_gml_pos(self):
+        this = self.pop('pos')
+        context = self._getContext()
+        srsName = context['where'].get('srsName')
+        srsDimension = context['where'].get('srsDimension', 2)
+        swap = True
+        if srsName and "EPSG" in srsName:
+            epsg = int(srsName.split(":")[-1])
+            swap = bool(epsg in _geogCS)
+        geometry = _parse_georss_point(this, swap=swap, dims=srsDimension)
+        if geometry:
+            self._save_where(geometry)
+
+    def _start_gml_poslist(self, attrsD):
+        self.push('pos', 0)
+
+    def _end_gml_poslist(self):
+        this = self.pop('pos')
+        context = self._getContext()
+        srsName = context['where'].get('srsName')
+        srsDimension = context['where'].get('srsDimension', 2)
+        swap = True
+        if srsName and "EPSG" in srsName:
+            epsg = int(srsName.split(":")[-1])
+            swap = bool(epsg in _geogCS)
+        geometry = _parse_poslist(
+            this, self.ingeometry, swap=swap, dims=srsDimension)
+        if geometry:
+            self._save_where(geometry)
+
+    def _end_geom(self):
+        self.ingeometry = 0
+        self.pop('geometry')
+    _end_gml_point = _end_geom
+    _end_gml_linestring = _end_geom
+    _end_gml_linearring = _end_geom
+    _end_gml_exterior = _end_geom
+    _end_gml_polygon = _end_geom
+
+    def _end_where(self):
+        self.pop('where')
+    _end_georss_where = _end_where
+
+
+# GeoRSS geometry parsers. Each return a dict with 'type' and 'coordinates'
+# items, or None in the case of a parsing error.
+
+def _parse_poslist(value, geom_type, swap=True, dims=2):
+    if geom_type == 'linestring':
+        return _parse_georss_line(value, swap, dims)
+    elif geom_type == 'polygon':
+        ring = _parse_georss_line(value, swap, dims)
+        return {'type': 'Polygon', 'coordinates': (ring['coordinates'],)}
+    else:
+        return None
+
+def _gen_georss_coords(value, swap=True, dims=2):
+    # A generator of (lon, lat) pairs from a string of encoded GeoRSS
+    # coordinates. Converts to floats and swaps order.
+    latlons = (float(ll) for ll in value.replace(',', ' ').split())
+    while True:
+        t = [next(latlons), next(latlons)][::swap and -1 or 1]
+        if dims == 3:
+            t.append(next(latlons))
+        yield tuple(t)
+
+def _parse_georss_point(value, swap=True, dims=2):
+    # A point contains a single latitude-longitude pair, separated by
+    # whitespace. We'll also handle comma separators.
+    try:
+        coords = list(_gen_georss_coords(value, swap, dims))
+        return {'type': 'Point', 'coordinates': coords[0]}
+    except (IndexError, ValueError):
+        return None
+
+def _parse_georss_line(value, swap=True, dims=2):
+    # A line contains a space separated list of latitude-longitude pairs in
+    # WGS84 coordinate reference system, with each pair separated by
+    # whitespace. There must be at least two pairs.
+    try:
+        coords = list(_gen_georss_coords(value, swap, dims))
+        return {'type': 'LineString', 'coordinates': coords}
+    except (IndexError, ValueError):
+        return None
+
+def _parse_georss_polygon(value, swap=True, dims=2):
+    # A polygon contains a space separated list of latitude-longitude pairs,
+    # with each pair separated by whitespace. There must be at least four
+    # pairs, with the last being identical to the first (so a polygon has a
+    # minimum of three actual points).
+    try:
+        ring = list(_gen_georss_coords(value, swap, dims))
+    except (IndexError, ValueError):
+        return None
+    if len(ring) < 4:
+        return None
+    return {'type': 'Polygon', 'coordinates': (ring,)}
+
+def _parse_georss_box(value, swap=True, dims=2):
+    # A bounding box is a rectangular region, often used to define the extents
+    # of a map or a rough area of interest. A box contains two space seperate
+    # latitude-longitude pairs, with each pair separated by whitespace. The
+    # first pair is the lower corner, the second is the upper corner.
+    try:
+        coords = list(_gen_georss_coords(value, swap, dims))
+        return {'type': 'Box', 'coordinates': tuple(coords)}
+    except (IndexError, ValueError):
+        return None
+
+# The list of EPSG codes for geographic (latitude/longitude) coordinate
+# systems to support decoding of GeoRSS GML profiles.
+_geogCS = [
+3819, 3821, 3824, 3889, 3906, 4001, 4002, 4003, 4004, 4005, 4006, 4007, 4008,
+4009, 4010, 4011, 4012, 4013, 4014, 4015, 4016, 4018, 4019, 4020, 4021, 4022,
+4023, 4024, 4025, 4027, 4028, 4029, 4030, 4031, 4032, 4033, 4034, 4035, 4036,
+4041, 4042, 4043, 4044, 4045, 4046, 4047, 4052, 4053, 4054, 4055, 4075, 4081,
+4120, 4121, 4122, 4123, 4124, 4125, 4126, 4127, 4128, 4129, 4130, 4131, 4132,
+4133, 4134, 4135, 4136, 4137, 4138, 4139, 4140, 4141, 4142, 4143, 4144, 4145,
+4146, 4147, 4148, 4149, 4150, 4151, 4152, 4153, 4154, 4155, 4156, 4157, 4158,
+4159, 4160, 4161, 4162, 4163, 4164, 4165, 4166, 4167, 4168, 4169, 4170, 4171,
+4172, 4173, 4174, 4175, 4176, 4178, 4179, 4180, 4181, 4182, 4183, 4184, 4185,
+4188, 4189, 4190, 4191, 4192, 4193, 4194, 4195, 4196, 4197, 4198, 4199, 4200,
+4201, 4202, 4203, 4204, 4205, 4206, 4207, 4208, 4209, 4210, 4211, 4212, 4213,
+4214, 4215, 4216, 4218, 4219, 4220, 4221, 4222, 4223, 4224, 4225, 4226, 4227,
+4228, 4229, 4230, 4231, 4232, 4233, 4234, 4235, 4236, 4237, 4238, 4239, 4240,
+4241, 4242, 4243, 4244, 4245, 4246, 4247, 4248, 4249, 4250, 4251, 4252, 4253,
+4254, 4255, 4256, 4257, 4258, 4259, 4260, 4261, 4262, 4263, 4264, 4265, 4266,
+4267, 4268, 4269, 4270, 4271, 4272, 4273, 4274, 4275, 4276, 4277, 4278, 4279,
+4280, 4281, 4282, 4283, 4284, 4285, 4286, 4287, 4288, 4289, 4291, 4292, 4293,
+4294, 4295, 4296, 4297, 4298, 4299, 4300, 4301, 4302, 4303, 4304, 4306, 4307,
+4308, 4309, 4310, 4311, 4312, 4313, 4314, 4315, 4316, 4317, 4318, 4319, 4322,
+4324, 4326, 4463, 4470, 4475, 4483, 4490, 4555, 4558, 4600, 4601, 4602, 4603,
+4604, 4605, 4606, 4607, 4608, 4609, 4610, 4611, 4612, 4613, 4614, 4615, 4616,
+4617, 4618, 4619, 4620, 4621, 4622, 4623, 4624, 4625, 4626, 4627, 4628, 4629,
+4630, 4631, 4632, 4633, 4634, 4635, 4636, 4637, 4638, 4639, 4640, 4641, 4642,
+4643, 4644, 4645, 4646, 4657, 4658, 4659, 4660, 4661, 4662, 4663, 4664, 4665,
+4666, 4667, 4668, 4669, 4670, 4671, 4672, 4673, 4674, 4675, 4676, 4677, 4678,
+4679, 4680, 4681, 4682, 4683, 4684, 4685, 4686, 4687, 4688, 4689, 4690, 4691,
+4692, 4693, 4694, 4695, 4696, 4697, 4698, 4699, 4700, 4701, 4702, 4703, 4704,
+4705, 4706, 4707, 4708, 4709, 4710, 4711, 4712, 4713, 4714, 4715, 4716, 4717,
+4718, 4719, 4720, 4721, 4722, 4723, 4724, 4725, 4726, 4727, 4728, 4729, 4730,
+4731, 4732, 4733, 4734, 4735, 4736, 4737, 4738, 4739, 4740, 4741, 4742, 4743,
+4744, 4745, 4746, 4747, 4748, 4749, 4750, 4751, 4752, 4753, 4754, 4755, 4756,
+4757, 4758, 4759, 4760, 4761, 4762, 4763, 4764, 4765, 4801, 4802, 4803, 4804,
+4805, 4806, 4807, 4808, 4809, 4810, 4811, 4813, 4814, 4815, 4816, 4817, 4818,
+4819, 4820, 4821, 4823, 4824, 4901, 4902, 4903, 4904, 4979 ]
diff --git a/lib/feedparser/namespaces/itunes.py b/lib/feedparser/namespaces/itunes.py
new file mode 100644
index 000000000..37faa7e46
--- /dev/null
+++ b/lib/feedparser/namespaces/itunes.py
@@ -0,0 +1,111 @@
+# Support for the iTunes format
+# Copyright 2010-2015 Kurt McKee <contactme@kurtmckee.org>
+# Copyright 2002-2008 Mark Pilgrim
+# All rights reserved.
+#
+# This file is a part of feedparser.
+#
+# Redistribution and use in source and binary forms, with or without modification,
+# are permitted provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice,
+#   this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice,
+#   this list of conditions and the following disclaimer in the documentation
+#   and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+
+from __future__ import absolute_import, unicode_literals
+
+from ..util import FeedParserDict
+
+class Namespace(object):
+    supported_namespaces = {
+        # Canonical namespace
+        'http://www.itunes.com/DTDs/PodCast-1.0.dtd': 'itunes',
+
+        # Extra namespace
+        'http://example.com/DTDs/PodCast-1.0.dtd': 'itunes',
+    }
+
+    def _start_itunes_author(self, attrsD):
+        self._start_author(attrsD)
+
+    def _end_itunes_author(self):
+        self._end_author()
+
+    def _end_itunes_category(self):
+        self._end_category()
+
+    def _start_itunes_name(self, attrsD):
+        self._start_name(attrsD)
+
+    def _end_itunes_name(self):
+        self._end_name()
+
+    def _start_itunes_email(self, attrsD):
+        self._start_email(attrsD)
+
+    def _end_itunes_email(self):
+        self._end_email()
+
+    def _start_itunes_subtitle(self, attrsD):
+        self._start_subtitle(attrsD)
+
+    def _end_itunes_subtitle(self):
+        self._end_subtitle()
+
+    def _start_itunes_summary(self, attrsD):
+        self._start_summary(attrsD)
+
+    def _end_itunes_summary(self):
+        self._end_summary()
+
+    def _start_itunes_owner(self, attrsD):
+        self.inpublisher = 1
+        self.push('publisher', 0)
+
+    def _end_itunes_owner(self):
+        self.pop('publisher')
+        self.inpublisher = 0
+        self._sync_author_detail('publisher')
+
+    def _end_itunes_keywords(self):
+        for term in self.pop('itunes_keywords').split(','):
+            if term.strip():
+                self._addTag(term.strip(), 'http://www.itunes.com/', None)
+
+    def _start_itunes_category(self, attrsD):
+        self._addTag(attrsD.get('text'), 'http://www.itunes.com/', None)
+        self.push('category', 1)
+
+    def _start_itunes_image(self, attrsD):
+        self.push('itunes_image', 0)
+        if attrsD.get('href'):
+            self._getContext()['image'] = FeedParserDict({'href': attrsD.get('href')})
+        elif attrsD.get('url'):
+            self._getContext()['image'] = FeedParserDict({'href': attrsD.get('url')})
+    _start_itunes_link = _start_itunes_image
+
+    def _end_itunes_block(self):
+        value = self.pop('itunes_block', 0)
+        self._getContext()['itunes_block'] = (value == 'yes') and 1 or 0
+
+    def _end_itunes_explicit(self):
+        value = self.pop('itunes_explicit', 0)
+        # Convert 'yes' -> True, 'clean' to False, and any other value to None
+        # False and None both evaluate as False, so the difference can be ignored
+        # by applications that only need to know if the content is explicit.
+        self._getContext()['itunes_explicit'] = (None, False, True)[(value == 'yes' and 2) or value == 'clean' or 0]
+
diff --git a/lib/feedparser/namespaces/mediarss.py b/lib/feedparser/namespaces/mediarss.py
new file mode 100644
index 000000000..878ed7c8e
--- /dev/null
+++ b/lib/feedparser/namespaces/mediarss.py
@@ -0,0 +1,142 @@
+# Support for the Media RSS format
+# Copyright 2010-2015 Kurt McKee <contactme@kurtmckee.org>
+# Copyright 2002-2008 Mark Pilgrim
+# All rights reserved.
+#
+# This file is a part of feedparser.
+#
+# Redistribution and use in source and binary forms, with or without modification,
+# are permitted provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice,
+#   this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice,
+#   this list of conditions and the following disclaimer in the documentation
+#   and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+
+from __future__ import absolute_import, unicode_literals
+
+from ..util import FeedParserDict
+
+class Namespace(object):
+    supported_namespaces = {
+        # Canonical namespace
+        'http://search.yahoo.com/mrss/': 'media',
+
+        # Old namespace (no trailing slash)
+        'http://search.yahoo.com/mrss': 'media',
+    }
+
+    def _start_media_category(self, attrsD):
+        attrsD.setdefault('scheme', 'http://search.yahoo.com/mrss/category_schema')
+        self._start_category(attrsD)
+
+    def _end_media_category(self):
+        self._end_category()
+
+    def _end_media_keywords(self):
+        for term in self.pop('media_keywords').split(','):
+            if term.strip():
+                self._addTag(term.strip(), None, None)
+
+    def _start_media_title(self, attrsD):
+        self._start_title(attrsD)
+
+    def _end_media_title(self):
+        title_depth = self.title_depth
+        self._end_title()
+        self.title_depth = title_depth
+
+    def _start_media_group(self, attrsD):
+        # don't do anything, but don't break the enclosed tags either
+        pass
+
+    def _start_media_rating(self, attrsD):
+        context = self._getContext()
+        context.setdefault('media_rating', attrsD)
+        self.push('rating', 1)
+
+    def _end_media_rating(self):
+        rating = self.pop('rating')
+        if rating is not None and rating.strip():
+            context = self._getContext()
+            context['media_rating']['content'] = rating
+
+    def _start_media_credit(self, attrsD):
+        context = self._getContext()
+        context.setdefault('media_credit', [])
+        context['media_credit'].append(attrsD)
+        self.push('credit', 1)
+
+    def _end_media_credit(self):
+        credit = self.pop('credit')
+        if credit != None and len(credit.strip()) != 0:
+            context = self._getContext()
+            context['media_credit'][-1]['content'] = credit
+
+    def _start_media_description(self, attrsD):
+        self._start_description(attrsD)
+
+    def _end_media_description(self):
+        self._end_description()
+
+    def _start_media_restriction(self, attrsD):
+        context = self._getContext()
+        context.setdefault('media_restriction', attrsD)
+        self.push('restriction', 1)
+
+    def _end_media_restriction(self):
+        restriction = self.pop('restriction')
+        if restriction != None and len(restriction.strip()) != 0:
+            context = self._getContext()
+            context['media_restriction']['content'] = [cc.strip().lower() for cc in restriction.split(' ')]
+
+    def _start_media_license(self, attrsD):
+        context = self._getContext()
+        context.setdefault('media_license', attrsD)
+        self.push('license', 1)
+
+    def _end_media_license(self):
+        license = self.pop('license')
+        if license != None and len(license.strip()) != 0:
+            context = self._getContext()
+            context['media_license']['content'] = license
+
+    def _start_media_content(self, attrsD):
+        context = self._getContext()
+        context.setdefault('media_content', [])
+        context['media_content'].append(attrsD)
+
+    def _start_media_thumbnail(self, attrsD):
+        context = self._getContext()
+        context.setdefault('media_thumbnail', [])
+        self.push('url', 1) # new
+        context['media_thumbnail'].append(attrsD)
+
+    def _end_media_thumbnail(self):
+        url = self.pop('url')
+        context = self._getContext()
+        if url != None and len(url.strip()) != 0:
+            if 'url' not in context['media_thumbnail'][-1]:
+                context['media_thumbnail'][-1]['url'] = url
+
+    def _start_media_player(self, attrsD):
+        self.push('media_player', 0)
+        self._getContext()['media_player'] = FeedParserDict(attrsD)
+
+    def _end_media_player(self):
+        value = self.pop('media_player')
+        context = self._getContext()
+        context['media_player']['content'] = value
diff --git a/lib/feedparser/namespaces/psc.py b/lib/feedparser/namespaces/psc.py
new file mode 100644
index 000000000..c7dc843e2
--- /dev/null
+++ b/lib/feedparser/namespaces/psc.py
@@ -0,0 +1,72 @@
+# Support for the Podlove Simple Chapters format
+# Copyright 2010-2015 Kurt McKee <contactme@kurtmckee.org>
+# Copyright 2002-2008 Mark Pilgrim
+# All rights reserved.
+#
+# This file is a part of feedparser.
+#
+# Redistribution and use in source and binary forms, with or without modification,
+# are permitted provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice,
+#   this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice,
+#   this list of conditions and the following disclaimer in the documentation
+#   and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+
+from __future__ import absolute_import, unicode_literals
+
+import datetime
+import re
+
+from .. import util
+class Namespace(object):
+    supported_namespaces = {
+        'http://podlove.org/simple-chapters': 'psc',
+    }
+
+    def __init__(self):
+        # chapters will only be captured while psc_chapters_flag is True.
+        self.psc_chapters_flag = False
+        super(Namespace, self).__init__()
+
+    def _start_psc_chapters(self, attrsD):
+        context = self._getContext()
+        if 'psc_chapters' not in context:
+            self.psc_chapters_flag = True
+            attrsD['chapters'] = []
+            context['psc_chapters'] = util.FeedParserDict(attrsD)
+
+    def _end_psc_chapters(self):
+        self.psc_chapters_flag = False
+
+    def _start_psc_chapter(self, attrsD):
+        if self.psc_chapters_flag:
+            start = self._getAttribute(attrsD, 'start')
+            attrsD['start_parsed'] = _parse_psc_chapter_start(start)
+
+            context = self._getContext()['psc_chapters']
+            context['chapters'].append(util.FeedParserDict(attrsD))
+
+def _parse_psc_chapter_start(start):
+    FORMAT = r'^((\d{2}):)?(\d{2}):(\d{2})(\.(\d{3}))?$'
+
+    m = re.compile(FORMAT).match(start)
+    if m is None:
+        return None
+
+    _, h, m, s, _, ms = m.groups()
+    h, m, s, ms = (int(h or 0), int(m), int(s), int(ms or 0))
+    return datetime.timedelta(0, h*60*60 + m*60 + s, ms*1000)
diff --git a/lib/feedparser/parsers/__init__.py b/lib/feedparser/parsers/__init__.py
new file mode 100644
index 000000000..e69de29bb
diff --git a/lib/feedparser/parsers/loose.py b/lib/feedparser/parsers/loose.py
new file mode 100644
index 000000000..597ce8b7a
--- /dev/null
+++ b/lib/feedparser/parsers/loose.py
@@ -0,0 +1,72 @@
+# The loose feed parser that interfaces with an SGML parsing library
+# Copyright 2010-2015 Kurt McKee <contactme@kurtmckee.org>
+# Copyright 2002-2008 Mark Pilgrim
+# All rights reserved.
+#
+# This file is a part of feedparser.
+#
+# Redistribution and use in source and binary forms, with or without modification,
+# are permitted provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice,
+#   this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice,
+#   this list of conditions and the following disclaimer in the documentation
+#   and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+
+from __future__ import absolute_import, unicode_literals
+
+class _LooseFeedParser(object):
+    def __init__(self, baseuri=None, baselang=None, encoding=None, entities=None):
+        self.baseuri = baseuri or ''
+        self.lang = baselang or None
+        self.encoding = encoding or 'utf-8' # character encoding
+        self.entities = entities or {}
+        super(_LooseFeedParser, self).__init__()
+
+    def _normalize_attributes(self, kv):
+        k = kv[0].lower()
+        v = k in ('rel', 'type') and kv[1].lower() or kv[1]
+        # the sgml parser doesn't handle entities in attributes, nor
+        # does it pass the attribute values through as unicode, while
+        # strict xml parsers do -- account for this difference
+        v = v.replace('&amp;', '&')
+        return (k, v)
+
+    def decodeEntities(self, element, data):
+        data = data.replace('&#60;', '&lt;')
+        data = data.replace('&#x3c;', '&lt;')
+        data = data.replace('&#x3C;', '&lt;')
+        data = data.replace('&#62;', '&gt;')
+        data = data.replace('&#x3e;', '&gt;')
+        data = data.replace('&#x3E;', '&gt;')
+        data = data.replace('&#38;', '&amp;')
+        data = data.replace('&#x26;', '&amp;')
+        data = data.replace('&#34;', '&quot;')
+        data = data.replace('&#x22;', '&quot;')
+        data = data.replace('&#39;', '&apos;')
+        data = data.replace('&#x27;', '&apos;')
+        if not self.contentparams.get('type', 'xml').endswith('xml'):
+            data = data.replace('&lt;', '<')
+            data = data.replace('&gt;', '>')
+            data = data.replace('&amp;', '&')
+            data = data.replace('&quot;', '"')
+            data = data.replace('&apos;', "'")
+            data = data.replace('&#x2f;', '/')
+            data = data.replace('&#x2F;', '/')
+        return data
+
+    def strattrs(self, attrs):
+        return ''.join([' %s="%s"' % (n,v.replace('"','&quot;')) for n,v in attrs])
diff --git a/lib/feedparser/parsers/strict.py b/lib/feedparser/parsers/strict.py
new file mode 100644
index 000000000..29ad2be36
--- /dev/null
+++ b/lib/feedparser/parsers/strict.py
@@ -0,0 +1,135 @@
+# The strict feed parser that interfaces with an XML parsing library
+# Copyright 2010-2015 Kurt McKee <contactme@kurtmckee.org>
+# Copyright 2002-2008 Mark Pilgrim
+# All rights reserved.
+#
+# This file is a part of feedparser.
+#
+# Redistribution and use in source and binary forms, with or without modification,
+# are permitted provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice,
+#   this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice,
+#   this list of conditions and the following disclaimer in the documentation
+#   and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+
+from __future__ import absolute_import, unicode_literals
+
+from ..exceptions import UndeclaredNamespace
+
+class _StrictFeedParser(object):
+    def __init__(self, baseuri, baselang, encoding):
+        self.bozo = 0
+        self.exc = None
+        self.decls = {}
+        self.baseuri = baseuri or ''
+        self.lang = baselang
+        self.encoding = encoding
+        super(_StrictFeedParser, self).__init__()
+
+    def _normalize_attributes(self, kv):
+        k = kv[0].lower()
+        v = k in ('rel', 'type') and kv[1].lower() or kv[1]
+        return (k, v)
+
+    def startPrefixMapping(self, prefix, uri):
+        if not uri:
+            return
+        # Jython uses '' instead of None; standardize on None
+        prefix = prefix or None
+        self.trackNamespace(prefix, uri)
+        if prefix and uri == 'http://www.w3.org/1999/xlink':
+            self.decls['xmlns:' + prefix] = uri
+
+    def startElementNS(self, name, qname, attrs):
+        namespace, localname = name
+        lowernamespace = str(namespace or '').lower()
+        if lowernamespace.find('backend.userland.com/rss') != -1:
+            # match any backend.userland.com namespace
+            namespace = 'http://backend.userland.com/rss'
+            lowernamespace = namespace
+        if qname and qname.find(':') > 0:
+            givenprefix = qname.split(':')[0]
+        else:
+            givenprefix = None
+        prefix = self._matchnamespaces.get(lowernamespace, givenprefix)
+        if givenprefix and (prefix == None or (prefix == '' and lowernamespace == '')) and givenprefix not in self.namespacesInUse:
+            raise UndeclaredNamespace("'%s' is not associated with a namespace" % givenprefix)
+        localname = str(localname).lower()
+
+        # qname implementation is horribly broken in Python 2.1 (it
+        # doesn't report any), and slightly broken in Python 2.2 (it
+        # doesn't report the xml: namespace). So we match up namespaces
+        # with a known list first, and then possibly override them with
+        # the qnames the SAX parser gives us (if indeed it gives us any
+        # at all).  Thanks to MatejC for helping me test this and
+        # tirelessly telling me that it didn't work yet.
+        attrsD, self.decls = self.decls, {}
+        if localname=='math' and namespace=='http://www.w3.org/1998/Math/MathML':
+            attrsD['xmlns']=namespace
+        if localname=='svg' and namespace=='http://www.w3.org/2000/svg':
+            attrsD['xmlns']=namespace
+
+        if prefix:
+            localname = prefix.lower() + ':' + localname
+        elif namespace and not qname: #Expat
+            for name,value in self.namespacesInUse.items():
+                if name and value == namespace:
+                    localname = name + ':' + localname
+                    break
+
+        for (namespace, attrlocalname), attrvalue in attrs.items():
+            lowernamespace = (namespace or '').lower()
+            prefix = self._matchnamespaces.get(lowernamespace, '')
+            if prefix:
+                attrlocalname = prefix + ':' + attrlocalname
+            attrsD[str(attrlocalname).lower()] = attrvalue
+        for qname in attrs.getQNames():
+            attrsD[str(qname).lower()] = attrs.getValueByQName(qname)
+        localname = str(localname).lower()
+        self.unknown_starttag(localname, list(attrsD.items()))
+
+    def characters(self, text):
+        self.handle_data(text)
+
+    def endElementNS(self, name, qname):
+        namespace, localname = name
+        lowernamespace = str(namespace or '').lower()
+        if qname and qname.find(':') > 0:
+            givenprefix = qname.split(':')[0]
+        else:
+            givenprefix = ''
+        prefix = self._matchnamespaces.get(lowernamespace, givenprefix)
+        if prefix:
+            localname = prefix + ':' + localname
+        elif namespace and not qname: #Expat
+            for name,value in self.namespacesInUse.items():
+                if name and value == namespace:
+                    localname = name + ':' + localname
+                    break
+        localname = str(localname).lower()
+        self.unknown_endtag(localname)
+
+    def error(self, exc):
+        self.bozo = 1
+        self.exc = exc
+
+    # drv_libxml2 calls warning() in some cases
+    warning = error
+
+    def fatalError(self, exc):
+        self.error(exc)
+        raise exc
diff --git a/lib/feedparser/sanitizer.py b/lib/feedparser/sanitizer.py
new file mode 100644
index 000000000..04096b3ac
--- /dev/null
+++ b/lib/feedparser/sanitizer.py
@@ -0,0 +1,466 @@
+from __future__ import absolute_import, unicode_literals
+
+import re
+
+from .html import _BaseHTMLProcessor
+from .sgml import _SGML_AVAILABLE
+from .urls import _makeSafeAbsoluteURI
+
+class _HTMLSanitizer(_BaseHTMLProcessor):
+    acceptable_elements = set(['a', 'abbr', 'acronym', 'address', 'area',
+        'article', 'aside', 'audio', 'b', 'big', 'blockquote', 'br', 'button',
+        'canvas', 'caption', 'center', 'cite', 'code', 'col', 'colgroup',
+        'command', 'datagrid', 'datalist', 'dd', 'del', 'details', 'dfn',
+        'dialog', 'dir', 'div', 'dl', 'dt', 'em', 'event-source', 'fieldset',
+        'figcaption', 'figure', 'footer', 'font', 'form', 'header', 'h1',
+        'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'i', 'img', 'input', 'ins',
+        'keygen', 'kbd', 'label', 'legend', 'li', 'm', 'map', 'menu', 'meter',
+        'multicol', 'nav', 'nextid', 'ol', 'output', 'optgroup', 'option',
+        'p', 'pre', 'progress', 'q', 's', 'samp', 'section', 'select',
+        'small', 'sound', 'source', 'spacer', 'span', 'strike', 'strong',
+        'sub', 'sup', 'table', 'tbody', 'td', 'textarea', 'time', 'tfoot',
+        'th', 'thead', 'tr', 'tt', 'u', 'ul', 'var', 'video', 'noscript'])
+
+    acceptable_attributes = set(['abbr', 'accept', 'accept-charset', 'accesskey',
+      'action', 'align', 'alt', 'autocomplete', 'autofocus', 'axis',
+      'background', 'balance', 'bgcolor', 'bgproperties', 'border',
+      'bordercolor', 'bordercolordark', 'bordercolorlight', 'bottompadding',
+      'cellpadding', 'cellspacing', 'ch', 'challenge', 'char', 'charoff',
+      'choff', 'charset', 'checked', 'cite', 'class', 'clear', 'color', 'cols',
+      'colspan', 'compact', 'contenteditable', 'controls', 'coords', 'data',
+      'datafld', 'datapagesize', 'datasrc', 'datetime', 'default', 'delay',
+      'dir', 'disabled', 'draggable', 'dynsrc', 'enctype', 'end', 'face', 'for',
+      'form', 'frame', 'galleryimg', 'gutter', 'headers', 'height', 'hidefocus',
+      'hidden', 'high', 'href', 'hreflang', 'hspace', 'icon', 'id', 'inputmode',
+      'ismap', 'keytype', 'label', 'leftspacing', 'lang', 'list', 'longdesc',
+      'loop', 'loopcount', 'loopend', 'loopstart', 'low', 'lowsrc', 'max',
+      'maxlength', 'media', 'method', 'min', 'multiple', 'name', 'nohref',
+      'noshade', 'nowrap', 'open', 'optimum', 'pattern', 'ping', 'point-size',
+      'poster', 'pqg', 'preload', 'prompt', 'radiogroup', 'readonly', 'rel',
+      'repeat-max', 'repeat-min', 'replace', 'required', 'rev', 'rightspacing',
+      'rows', 'rowspan', 'rules', 'scope', 'selected', 'shape', 'size', 'span',
+      'src', 'start', 'step', 'summary', 'suppress', 'tabindex', 'target',
+      'template', 'title', 'toppadding', 'type', 'unselectable', 'usemap',
+      'urn', 'valign', 'value', 'variable', 'volume', 'vspace', 'vrml',
+      'width', 'wrap', 'xml:lang'])
+
+    unacceptable_elements_with_end_tag = set(['script', 'applet', 'style'])
+
+    acceptable_css_properties = set(['azimuth', 'background-color',
+      'border-bottom-color', 'border-collapse', 'border-color',
+      'border-left-color', 'border-right-color', 'border-top-color', 'clear',
+      'color', 'cursor', 'direction', 'display', 'elevation', 'float', 'font',
+      'font-family', 'font-size', 'font-style', 'font-variant', 'font-weight',
+      'height', 'letter-spacing', 'line-height', 'overflow', 'pause',
+      'pause-after', 'pause-before', 'pitch', 'pitch-range', 'richness',
+      'speak', 'speak-header', 'speak-numeral', 'speak-punctuation',
+      'speech-rate', 'stress', 'text-align', 'text-decoration', 'text-indent',
+      'unicode-bidi', 'vertical-align', 'voice-family', 'volume',
+      'white-space', 'width'])
+
+    # survey of common keywords found in feeds
+    acceptable_css_keywords = set(['auto', 'aqua', 'black', 'block', 'blue',
+      'bold', 'both', 'bottom', 'brown', 'center', 'collapse', 'dashed',
+      'dotted', 'fuchsia', 'gray', 'green', '!important', 'italic', 'left',
+      'lime', 'maroon', 'medium', 'none', 'navy', 'normal', 'nowrap', 'olive',
+      'pointer', 'purple', 'red', 'right', 'solid', 'silver', 'teal', 'top',
+      'transparent', 'underline', 'white', 'yellow'])
+
+    valid_css_values = re.compile('^(#[0-9a-f]+|rgb\(\d+%?,\d*%?,?\d*%?\)?|' +
+      '\d{0,2}\.?\d{0,2}(cm|em|ex|in|mm|pc|pt|px|%|,|\))?)$')
+
+    mathml_elements = set([
+        'annotation',
+        'annotation-xml',
+        'maction',
+        'maligngroup',
+        'malignmark',
+        'math',
+        'menclose',
+        'merror',
+        'mfenced',
+        'mfrac',
+        'mglyph',
+        'mi',
+        'mlabeledtr',
+        'mlongdiv',
+        'mmultiscripts',
+        'mn',
+        'mo',
+        'mover',
+        'mpadded',
+        'mphantom',
+        'mprescripts',
+        'mroot',
+        'mrow',
+        'ms',
+        'mscarries',
+        'mscarry',
+        'msgroup',
+        'msline',
+        'mspace',
+        'msqrt',
+        'msrow',
+        'mstack',
+        'mstyle',
+        'msub',
+        'msubsup',
+        'msup',
+        'mtable',
+        'mtd',
+        'mtext',
+        'mtr',
+        'munder',
+        'munderover',
+        'none',
+        'semantics',
+    ])
+
+    mathml_attributes = set([
+        'accent',
+        'accentunder',
+        'actiontype',
+        'align',
+        'alignmentscope',
+        'altimg',
+        'altimg-height',
+        'altimg-valign',
+        'altimg-width',
+        'alttext',
+        'bevelled',
+        'charalign',
+        'close',
+        'columnalign',
+        'columnlines',
+        'columnspacing',
+        'columnspan',
+        'columnwidth',
+        'crossout',
+        'decimalpoint',
+        'denomalign',
+        'depth',
+        'dir',
+        'display',
+        'displaystyle',
+        'edge',
+        'encoding',
+        'equalcolumns',
+        'equalrows',
+        'fence',
+        'fontstyle',
+        'fontweight',
+        'form',
+        'frame',
+        'framespacing',
+        'groupalign',
+        'height',
+        'href',
+        'id',
+        'indentalign',
+        'indentalignfirst',
+        'indentalignlast',
+        'indentshift',
+        'indentshiftfirst',
+        'indentshiftlast',
+        'indenttarget',
+        'infixlinebreakstyle',
+        'largeop',
+        'length',
+        'linebreak',
+        'linebreakmultchar',
+        'linebreakstyle',
+        'lineleading',
+        'linethickness',
+        'location',
+        'longdivstyle',
+        'lquote',
+        'lspace',
+        'mathbackground',
+        'mathcolor',
+        'mathsize',
+        'mathvariant',
+        'maxsize',
+        'minlabelspacing',
+        'minsize',
+        'movablelimits',
+        'notation',
+        'numalign',
+        'open',
+        'other',
+        'overflow',
+        'position',
+        'rowalign',
+        'rowlines',
+        'rowspacing',
+        'rowspan',
+        'rquote',
+        'rspace',
+        'scriptlevel',
+        'scriptminsize',
+        'scriptsizemultiplier',
+        'selection',
+        'separator',
+        'separators',
+        'shift',
+        'side',
+        'src',
+        'stackalign',
+        'stretchy',
+        'subscriptshift',
+        'superscriptshift',
+        'symmetric',
+        'voffset',
+        'width',
+        'xlink:href',
+        'xlink:show',
+        'xlink:type',
+        'xmlns',
+        'xmlns:xlink',
+    ])
+
+    # svgtiny - foreignObject + linearGradient + radialGradient + stop
+    svg_elements = set(['a', 'animate', 'animateColor', 'animateMotion',
+      'animateTransform', 'circle', 'defs', 'desc', 'ellipse', 'foreignObject',
+      'font-face', 'font-face-name', 'font-face-src', 'g', 'glyph', 'hkern',
+      'linearGradient', 'line', 'marker', 'metadata', 'missing-glyph', 'mpath',
+      'path', 'polygon', 'polyline', 'radialGradient', 'rect', 'set', 'stop',
+      'svg', 'switch', 'text', 'title', 'tspan', 'use'])
+
+    # svgtiny + class + opacity + offset + xmlns + xmlns:xlink
+    svg_attributes = set(['accent-height', 'accumulate', 'additive', 'alphabetic',
+       'arabic-form', 'ascent', 'attributeName', 'attributeType',
+       'baseProfile', 'bbox', 'begin', 'by', 'calcMode', 'cap-height',
+       'class', 'color', 'color-rendering', 'content', 'cx', 'cy', 'd', 'dx',
+       'dy', 'descent', 'display', 'dur', 'end', 'fill', 'fill-opacity',
+       'fill-rule', 'font-family', 'font-size', 'font-stretch', 'font-style',
+       'font-variant', 'font-weight', 'from', 'fx', 'fy', 'g1', 'g2',
+       'glyph-name', 'gradientUnits', 'hanging', 'height', 'horiz-adv-x',
+       'horiz-origin-x', 'id', 'ideographic', 'k', 'keyPoints', 'keySplines',
+       'keyTimes', 'lang', 'mathematical', 'marker-end', 'marker-mid',
+       'marker-start', 'markerHeight', 'markerUnits', 'markerWidth', 'max',
+       'min', 'name', 'offset', 'opacity', 'orient', 'origin',
+       'overline-position', 'overline-thickness', 'panose-1', 'path',
+       'pathLength', 'points', 'preserveAspectRatio', 'r', 'refX', 'refY',
+       'repeatCount', 'repeatDur', 'requiredExtensions', 'requiredFeatures',
+       'restart', 'rotate', 'rx', 'ry', 'slope', 'stemh', 'stemv',
+       'stop-color', 'stop-opacity', 'strikethrough-position',
+       'strikethrough-thickness', 'stroke', 'stroke-dasharray',
+       'stroke-dashoffset', 'stroke-linecap', 'stroke-linejoin',
+       'stroke-miterlimit', 'stroke-opacity', 'stroke-width', 'systemLanguage',
+       'target', 'text-anchor', 'to', 'transform', 'type', 'u1', 'u2',
+       'underline-position', 'underline-thickness', 'unicode', 'unicode-range',
+       'units-per-em', 'values', 'version', 'viewBox', 'visibility', 'width',
+       'widths', 'x', 'x-height', 'x1', 'x2', 'xlink:actuate', 'xlink:arcrole',
+       'xlink:href', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type',
+       'xml:base', 'xml:lang', 'xml:space', 'xmlns', 'xmlns:xlink', 'y', 'y1',
+       'y2', 'zoomAndPan'])
+
+    svg_attr_map = None
+    svg_elem_map = None
+
+    acceptable_svg_properties = set([ 'fill', 'fill-opacity', 'fill-rule',
+      'stroke', 'stroke-width', 'stroke-linecap', 'stroke-linejoin',
+      'stroke-opacity'])
+
+    def reset(self):
+        _BaseHTMLProcessor.reset(self)
+        self.unacceptablestack = 0
+        self.mathmlOK = 0
+        self.svgOK = 0
+
+    def unknown_starttag(self, tag, attrs):
+        acceptable_attributes = self.acceptable_attributes
+        keymap = {}
+        if not tag in self.acceptable_elements or self.svgOK:
+            if tag in self.unacceptable_elements_with_end_tag:
+                self.unacceptablestack += 1
+
+            # add implicit namespaces to html5 inline svg/mathml
+            if self._type.endswith('html'):
+                if not dict(attrs).get('xmlns'):
+                    if tag=='svg':
+                        attrs.append( ('xmlns','http://www.w3.org/2000/svg') )
+                    if tag=='math':
+                        attrs.append( ('xmlns','http://www.w3.org/1998/Math/MathML') )
+
+            # not otherwise acceptable, perhaps it is MathML or SVG?
+            if tag=='math' and ('xmlns','http://www.w3.org/1998/Math/MathML') in attrs:
+                self.mathmlOK += 1
+            if tag=='svg' and ('xmlns','http://www.w3.org/2000/svg') in attrs:
+                self.svgOK += 1
+
+            # chose acceptable attributes based on tag class, else bail
+            if  self.mathmlOK and tag in self.mathml_elements:
+                acceptable_attributes = self.mathml_attributes
+            elif self.svgOK and tag in self.svg_elements:
+                # for most vocabularies, lowercasing is a good idea.  Many
+                # svg elements, however, are camel case
+                if not self.svg_attr_map:
+                    lower=[attr.lower() for attr in self.svg_attributes]
+                    mix=[a for a in self.svg_attributes if a not in lower]
+                    self.svg_attributes = lower
+                    self.svg_attr_map = dict([(a.lower(),a) for a in mix])
+
+                    lower=[attr.lower() for attr in self.svg_elements]
+                    mix=[a for a in self.svg_elements if a not in lower]
+                    self.svg_elements = lower
+                    self.svg_elem_map = dict([(a.lower(),a) for a in mix])
+                acceptable_attributes = self.svg_attributes
+                tag = self.svg_elem_map.get(tag,tag)
+                keymap = self.svg_attr_map
+            elif not tag in self.acceptable_elements:
+                return
+
+        # declare xlink namespace, if needed
+        if self.mathmlOK or self.svgOK:
+            if any((a for a in attrs if a[0].startswith('xlink:'))):
+                if not ('xmlns:xlink','http://www.w3.org/1999/xlink') in attrs:
+                    attrs.append(('xmlns:xlink','http://www.w3.org/1999/xlink'))
+
+        clean_attrs = []
+        for key, value in self.normalize_attrs(attrs):
+            if key in acceptable_attributes:
+                key=keymap.get(key,key)
+                # make sure the uri uses an acceptable uri scheme
+                if key == 'href':
+                    value = _makeSafeAbsoluteURI(value)
+                clean_attrs.append((key,value))
+            elif key=='style':
+                clean_value = self.sanitize_style(value)
+                if clean_value:
+                    clean_attrs.append((key,clean_value))
+        _BaseHTMLProcessor.unknown_starttag(self, tag, clean_attrs)
+
+    def unknown_endtag(self, tag):
+        if not tag in self.acceptable_elements:
+            if tag in self.unacceptable_elements_with_end_tag:
+                self.unacceptablestack -= 1
+            if self.mathmlOK and tag in self.mathml_elements:
+                if tag == 'math' and self.mathmlOK:
+                    self.mathmlOK -= 1
+            elif self.svgOK and tag in self.svg_elements:
+                tag = self.svg_elem_map.get(tag,tag)
+                if tag == 'svg' and self.svgOK:
+                    self.svgOK -= 1
+            else:
+                return
+        _BaseHTMLProcessor.unknown_endtag(self, tag)
+
+    def handle_pi(self, text):
+        pass
+
+    def handle_decl(self, text):
+        pass
+
+    def handle_data(self, text):
+        if not self.unacceptablestack:
+            _BaseHTMLProcessor.handle_data(self, text)
+
+    def sanitize_style(self, style):
+        # disallow urls
+        style=re.compile('url\s*\(\s*[^\s)]+?\s*\)\s*').sub(' ',style)
+
+        # gauntlet
+        if not re.match("""^([:,;#%.\sa-zA-Z0-9!]|\w-\w|'[\s\w]+'|"[\s\w]+"|\([\d,\s]+\))*$""", style):
+            return ''
+        # This replaced a regexp that used re.match and was prone to pathological back-tracking.
+        if re.sub("\s*[-\w]+\s*:\s*[^:;]*;?", '', style).strip():
+            return ''
+
+        clean = []
+        for prop,value in re.findall("([-\w]+)\s*:\s*([^:;]*)",style):
+            if not value:
+                continue
+            if prop.lower() in self.acceptable_css_properties:
+                clean.append(prop + ': ' + value + ';')
+            elif prop.split('-')[0].lower() in ['background','border','margin','padding']:
+                for keyword in value.split():
+                    if not keyword in self.acceptable_css_keywords and \
+                        not self.valid_css_values.match(keyword):
+                        break
+                else:
+                    clean.append(prop + ': ' + value + ';')
+            elif self.svgOK and prop.lower() in self.acceptable_svg_properties:
+                clean.append(prop + ': ' + value + ';')
+
+        return ' '.join(clean)
+
+    def parse_comment(self, i, report=1):
+        ret = _BaseHTMLProcessor.parse_comment(self, i, report)
+        if ret >= 0:
+            return ret
+        # if ret == -1, this may be a malicious attempt to circumvent
+        # sanitization, or a page-destroying unclosed comment
+        match = re.compile(r'--[^>]*>').search(self.rawdata, i+4)
+        if match:
+            return match.end()
+        # unclosed comment; deliberately fail to handle_data()
+        return len(self.rawdata)
+
+
+def _sanitizeHTML(htmlSource, encoding, _type):
+    if not _SGML_AVAILABLE:
+        return htmlSource
+    p = _HTMLSanitizer(encoding, _type)
+    htmlSource = htmlSource.replace('<![CDATA[', '&lt;![CDATA[')
+    p.feed(htmlSource)
+    data = p.output()
+    data = data.strip().replace('\r\n', '\n')
+    return data
+
+# Match XML entity declarations.
+# Example: <!ENTITY copyright "(C)">
+RE_ENTITY_PATTERN = re.compile(br'^\s*<!ENTITY([^>]*?)>', re.MULTILINE)
+
+# Match XML DOCTYPE declarations.
+# Example: <!DOCTYPE feed [ ]>
+RE_DOCTYPE_PATTERN = re.compile(br'^\s*<!DOCTYPE([^>]*?)>', re.MULTILINE)
+
+# Match safe entity declarations.
+# This will allow hexadecimal character references through,
+# as well as text, but not arbitrary nested entities.
+# Example: cubed "&#179;"
+# Example: copyright "(C)"
+# Forbidden: explode1 "&explode2;&explode2;"
+RE_SAFE_ENTITY_PATTERN = re.compile(b'\s+(\w+)\s+"(&#\w+;|[^&"]*)"')
+
+def replace_doctype(data):
+    '''Strips and replaces the DOCTYPE, returns (rss_version, stripped_data)
+
+    rss_version may be 'rss091n' or None
+    stripped_data is the same XML document with a replaced DOCTYPE
+    '''
+
+    # Divide the document into two groups by finding the location
+    # of the first element that doesn't begin with '<?' or '<!'.
+    start = re.search(b'<\w', data)
+    start = start and start.start() or -1
+    head, data = data[:start+1], data[start+1:]
+
+    # Save and then remove all of the ENTITY declarations.
+    entity_results = RE_ENTITY_PATTERN.findall(head)
+    head = RE_ENTITY_PATTERN.sub(b'', head)
+
+    # Find the DOCTYPE declaration and check the feed type.
+    doctype_results = RE_DOCTYPE_PATTERN.findall(head)
+    doctype = doctype_results and doctype_results[0] or b''
+    if b'netscape' in doctype.lower():
+        version = 'rss091n'
+    else:
+        version = None
+
+    # Re-insert the safe ENTITY declarations if a DOCTYPE was found.
+    replacement = b''
+    if len(doctype_results) == 1 and entity_results:
+        match_safe_entities = lambda e: RE_SAFE_ENTITY_PATTERN.match(e)
+        safe_entities = [e for e in entity_results if match_safe_entities(e)]
+        if safe_entities:
+            replacement = b'<!DOCTYPE feed [\n<!ENTITY' \
+                        + b'>\n<!ENTITY '.join(safe_entities) \
+                        + b'>\n]>'
+    data = RE_DOCTYPE_PATTERN.sub(replacement, head) + data
+
+    # Precompute the safe entities for the loose parser.
+    safe_entities = dict((k.decode('utf-8'), v.decode('utf-8'))
+                      for k, v in RE_SAFE_ENTITY_PATTERN.findall(replacement))
+    return version, data, safe_entities
diff --git a/lib/feedparser/sgml.py b/lib/feedparser/sgml.py
new file mode 100644
index 000000000..2cfcd8634
--- /dev/null
+++ b/lib/feedparser/sgml.py
@@ -0,0 +1,76 @@
+from __future__ import absolute_import
+
+import re
+
+__all__ = [
+    '_SGML_AVAILABLE',
+    'sgmllib',
+    'charref',
+    'tagfind',
+    'attrfind',
+    'entityref',
+    'incomplete',
+    'interesting',
+    'shorttag',
+    'shorttagopen',
+    'starttagopen',
+    'endbracket',
+]
+
+# sgmllib is not available by default in Python 3; if the end user doesn't have
+# it available then we'll lose illformed XML parsing and content santizing
+try:
+    import sgmllib
+except ImportError:
+    # This is probably Python 3, which doesn't include sgmllib anymore
+    _SGML_AVAILABLE = 0
+
+    # Mock sgmllib enough to allow subclassing later on
+    class sgmllib(object):
+        class SGMLParser(object):
+            def goahead(self, i):
+                pass
+            def parse_starttag(self, i):
+                pass
+else:
+    _SGML_AVAILABLE = 1
+
+    # sgmllib defines a number of module-level regular expressions that are
+    # insufficient for the XML parsing feedparser needs. Rather than modify
+    # the variables directly in sgmllib, they're defined here using the same
+    # names, and the compiled code objects of several sgmllib.SGMLParser
+    # methods are copied into _BaseHTMLProcessor so that they execute in
+    # feedparser's scope instead of sgmllib's scope.
+    charref = re.compile('&#(\d+|[xX][0-9a-fA-F]+);')
+    tagfind = re.compile('[a-zA-Z][-_.:a-zA-Z0-9]*')
+    attrfind = re.compile(
+        r'\s*([a-zA-Z_][-:.a-zA-Z_0-9]*)[$]?(\s*=\s*'
+        r'(\'[^\']*\'|"[^"]*"|[][\-a-zA-Z0-9./,:;+*%?!&$\(\)_#=~\'"@]*))?'
+    )
+
+    # Unfortunately, these must be copied over to prevent NameError exceptions
+    entityref = sgmllib.entityref
+    incomplete = sgmllib.incomplete
+    interesting = sgmllib.interesting
+    shorttag = sgmllib.shorttag
+    shorttagopen = sgmllib.shorttagopen
+    starttagopen = sgmllib.starttagopen
+
+    class _EndBracketRegEx:
+        def __init__(self):
+            # Overriding the built-in sgmllib.endbracket regex allows the
+            # parser to find angle brackets embedded in element attributes.
+            self.endbracket = re.compile('''([^'"<>]|"[^"]*"(?=>|/|\s|\w+=)|'[^']*'(?=>|/|\s|\w+=))*(?=[<>])|.*?(?=[<>])''')
+        def search(self, target, index=0):
+            match = self.endbracket.match(target, index)
+            if match is not None:
+                # Returning a new object in the calling thread's context
+                # resolves a thread-safety.
+                return EndBracketMatch(match)
+            return None
+    class EndBracketMatch:
+        def __init__(self, match):
+            self.match = match
+        def start(self, n):
+            return self.match.end(n)
+    endbracket = _EndBracketRegEx()
diff --git a/lib/feedparser/sgmllib.py b/lib/feedparser/sgmllib.py
deleted file mode 100644
index 899a35f0d..000000000
--- a/lib/feedparser/sgmllib.py
+++ /dev/null
@@ -1,547 +0,0 @@
-"""A parser for SGML, using the derived class as a static DTD."""
-
-# XXX This only supports those SGML features used by HTML.
-
-# XXX There should be a way to distinguish between PCDATA (parsed
-# character data -- the normal case), RCDATA (replaceable character
-# data -- only char and entity references and end tags are special)
-# and CDATA (character data -- only end tags are special).  RCDATA is
-# not supported at all.
-
-import _markupbase
-import re
-
-__all__ = ["SGMLParser", "SGMLParseError"]
-
-# Regular expressions used for parsing
-
-interesting = re.compile('[&<]')
-incomplete = re.compile('&([a-zA-Z][a-zA-Z0-9]*|#[0-9]*)?|'
-                           '<([a-zA-Z][^<>]*|'
-                              '/([a-zA-Z][^<>]*)?|'
-                              '![^<>]*)?')
-
-entityref = re.compile('&([a-zA-Z][-.a-zA-Z0-9]*)[^a-zA-Z0-9]')
-charref = re.compile('&#([0-9]+)[^0-9]')
-
-starttagopen = re.compile('<[>a-zA-Z]')
-shorttagopen = re.compile('<[a-zA-Z][-.a-zA-Z0-9]*/')
-shorttag = re.compile('<([a-zA-Z][-.a-zA-Z0-9]*)/([^/]*)/')
-piclose = re.compile('>')
-endbracket = re.compile('[<>]')
-tagfind = re.compile('[a-zA-Z][-_.a-zA-Z0-9]*')
-attrfind = re.compile(
-    r'\s*([a-zA-Z_][-:.a-zA-Z_0-9]*)(\s*=\s*'
-    r'(\'[^\']*\'|"[^"]*"|[][\-a-zA-Z0-9./,:;+*%?!&$\(\)_#=~\'"@]*))?')
-
-
-class SGMLParseError(RuntimeError):
-    """Exception raised for all parse errors."""
-    pass
-
-
-# SGML parser base class -- find tags and call handler functions.
-# Usage: p = SGMLParser(); p.feed(data); ...; p.close().
-# The dtd is defined by deriving a class which defines methods
-# with special names to handle tags: start_foo and end_foo to handle
-# <foo> and </foo>, respectively, or do_foo to handle <foo> by itself.
-# (Tags are converted to lower case for this purpose.)  The data
-# between tags is passed to the parser by calling self.handle_data()
-# with some data as argument (the data may be split up in arbitrary
-# chunks).  Entity references are passed by calling
-# self.handle_entityref() with the entity reference as argument.
-
-class SGMLParser(_markupbase.ParserBase):
-    # Definition of entities -- derived classes may override
-    entity_or_charref = re.compile('&(?:'
-      '([a-zA-Z][-.a-zA-Z0-9]*)|#([0-9]+)'
-      ')(;?)')
-
-    def __init__(self, verbose=0):
-        """Initialize and reset this instance."""
-        self.verbose = verbose
-        self.reset()
-
-    def reset(self):
-        """Reset this instance. Loses all unprocessed data."""
-        self.__starttag_text = None
-        self.rawdata = ''
-        self.stack = []
-        self.lasttag = '???'
-        self.nomoretags = 0
-        self.literal = 0
-        _markupbase.ParserBase.reset(self)
-
-    def setnomoretags(self):
-        """Enter literal mode (CDATA) till EOF.
-
-        Intended for derived classes only.
-        """
-        self.nomoretags = self.literal = 1
-
-    def setliteral(self, *args):
-        """Enter literal mode (CDATA).
-
-        Intended for derived classes only.
-        """
-        self.literal = 1
-
-    def feed(self, data):
-        """Feed some data to the parser.
-
-        Call this as often as you want, with as little or as much text
-        as you want (may include '\n').  (This just saves the text,
-        all the processing is done by goahead().)
-        """
-
-        self.rawdata = self.rawdata + data
-        self.goahead(0)
-
-    def close(self):
-        """Handle the remaining data."""
-        self.goahead(1)
-
-    def error(self, message):
-        raise SGMLParseError(message)
-
-    # Internal -- handle data as far as reasonable.  May leave state
-    # and data to be processed by a subsequent call.  If 'end' is
-    # true, force handling all data as if followed by EOF marker.
-    def goahead(self, end):
-        rawdata = self.rawdata
-        i = 0
-        n = len(rawdata)
-        while i < n:
-            if self.nomoretags:
-                self.handle_data(rawdata[i:n])
-                i = n
-                break
-            match = interesting.search(rawdata, i)
-            if match: j = match.start()
-            else: j = n
-            if i < j:
-                self.handle_data(rawdata[i:j])
-            i = j
-            if i == n: break
-            if rawdata[i] == '<':
-                if starttagopen.match(rawdata, i):
-                    if self.literal:
-                        self.handle_data(rawdata[i])
-                        i = i+1
-                        continue
-                    k = self.parse_starttag(i)
-                    if k < 0: break
-                    i = k
-                    continue
-                if rawdata.startswith("</", i):
-                    k = self.parse_endtag(i)
-                    if k < 0: break
-                    i = k
-                    self.literal = 0
-                    continue
-                if self.literal:
-                    if n > (i + 1):
-                        self.handle_data("<")
-                        i = i+1
-                    else:
-                        # incomplete
-                        break
-                    continue
-                if rawdata.startswith("<!--", i):
-                        # Strictly speaking, a comment is --.*--
-                        # within a declaration tag <!...>.
-                        # This should be removed,
-                        # and comments handled only in parse_declaration.
-                    k = self.parse_comment(i)
-                    if k < 0: break
-                    i = k
-                    continue
-                if rawdata.startswith("<?", i):
-                    k = self.parse_pi(i)
-                    if k < 0: break
-                    i = i+k
-                    continue
-                if rawdata.startswith("<!", i):
-                    # This is some sort of declaration; in "HTML as
-                    # deployed," this should only be the document type
-                    # declaration ("<!DOCTYPE html...>").
-                    k = self.parse_declaration(i)
-                    if k < 0: break
-                    i = k
-                    continue
-            elif rawdata[i] == '&':
-                if self.literal:
-                    self.handle_data(rawdata[i])
-                    i = i+1
-                    continue
-                match = charref.match(rawdata, i)
-                if match:
-                    name = match.group(1)
-                    self.handle_charref(name)
-                    i = match.end(0)
-                    if rawdata[i-1] != ';': i = i-1
-                    continue
-                match = entityref.match(rawdata, i)
-                if match:
-                    name = match.group(1)
-                    self.handle_entityref(name)
-                    i = match.end(0)
-                    if rawdata[i-1] != ';': i = i-1
-                    continue
-            else:
-                self.error('neither < nor & ??')
-            # We get here only if incomplete matches but
-            # nothing else
-            match = incomplete.match(rawdata, i)
-            if not match:
-                self.handle_data(rawdata[i])
-                i = i+1
-                continue
-            j = match.end(0)
-            if j == n:
-                break # Really incomplete
-            self.handle_data(rawdata[i:j])
-            i = j
-        # end while
-        if end and i < n:
-            self.handle_data(rawdata[i:n])
-            i = n
-        self.rawdata = rawdata[i:]
-        # XXX if end: check for empty stack
-
-    # Extensions for the DOCTYPE scanner:
-    _decl_otherchars = '='
-
-    # Internal -- parse processing instr, return length or -1 if not terminated
-    def parse_pi(self, i):
-        rawdata = self.rawdata
-        if rawdata[i:i+2] != '<?':
-            self.error('unexpected call to parse_pi()')
-        match = piclose.search(rawdata, i+2)
-        if not match:
-            return -1
-        j = match.start(0)
-        self.handle_pi(rawdata[i+2: j])
-        j = match.end(0)
-        return j-i
-
-    def get_starttag_text(self):
-        return self.__starttag_text
-
-    # Internal -- handle starttag, return length or -1 if not terminated
-    def parse_starttag(self, i):
-        self.__starttag_text = None
-        start_pos = i
-        rawdata = self.rawdata
-        if shorttagopen.match(rawdata, i):
-            # SGML shorthand: <tag/data/ == <tag>data</tag>
-            # XXX Can data contain &... (entity or char refs)?
-            # XXX Can data contain < or > (tag characters)?
-            # XXX Can there be whitespace before the first /?
-            match = shorttag.match(rawdata, i)
-            if not match:
-                return -1
-            tag, data = match.group(1, 2)
-            self.__starttag_text = '<%s/' % tag
-            tag = tag.lower()
-            k = match.end(0)
-            self.finish_shorttag(tag, data)
-            self.__starttag_text = rawdata[start_pos:match.end(1) + 1]
-            return k
-        # XXX The following should skip matching quotes (' or ")
-        # As a shortcut way to exit, this isn't so bad, but shouldn't
-        # be used to locate the actual end of the start tag since the
-        # < or > characters may be embedded in an attribute value.
-        match = endbracket.search(rawdata, i+1)
-        if not match:
-            return -1
-        j = match.start(0)
-        # Now parse the data between i+1 and j into a tag and attrs
-        attrs = []
-        if rawdata[i:i+2] == '<>':
-            # SGML shorthand: <> == <last open tag seen>
-            k = j
-            tag = self.lasttag
-        else:
-            match = tagfind.match(rawdata, i+1)
-            if not match:
-                self.error('unexpected call to parse_starttag')
-            k = match.end(0)
-            tag = rawdata[i+1:k].lower()
-            self.lasttag = tag
-        while k < j:
-            match = attrfind.match(rawdata, k)
-            if not match: break
-            attrname, rest, attrvalue = match.group(1, 2, 3)
-            if not rest:
-                attrvalue = attrname
-            else:
-                if (attrvalue[:1] == "'" == attrvalue[-1:] or
-                    attrvalue[:1] == '"' == attrvalue[-1:]):
-                    # strip quotes
-                    attrvalue = attrvalue[1:-1]
-                attrvalue = self.entity_or_charref.sub(
-                    self._convert_ref, attrvalue)
-            attrs.append((attrname.lower(), attrvalue))
-            k = match.end(0)
-        if rawdata[j] == '>':
-            j = j+1
-        self.__starttag_text = rawdata[start_pos:j]
-        self.finish_starttag(tag, attrs)
-        return j
-
-    # Internal -- convert entity or character reference
-    def _convert_ref(self, match):
-        if match.group(2):
-            return self.convert_charref(match.group(2)) or \
-                '&#%s%s' % match.groups()[1:]
-        elif match.group(3):
-            return self.convert_entityref(match.group(1)) or \
-                '&%s;' % match.group(1)
-        else:
-            return '&%s' % match.group(1)
-
-    # Internal -- parse endtag
-    def parse_endtag(self, i):
-        rawdata = self.rawdata
-        match = endbracket.search(rawdata, i+1)
-        if not match:
-            return -1
-        j = match.start(0)
-        tag = rawdata[i+2:j].strip().lower()
-        if rawdata[j] == '>':
-            j = j+1
-        self.finish_endtag(tag)
-        return j
-
-    # Internal -- finish parsing of <tag/data/ (same as <tag>data</tag>)
-    def finish_shorttag(self, tag, data):
-        self.finish_starttag(tag, [])
-        self.handle_data(data)
-        self.finish_endtag(tag)
-
-    # Internal -- finish processing of start tag
-    # Return -1 for unknown tag, 0 for open-only tag, 1 for balanced tag
-    def finish_starttag(self, tag, attrs):
-        try:
-            method = getattr(self, 'start_' + tag)
-        except AttributeError:
-            try:
-                method = getattr(self, 'do_' + tag)
-            except AttributeError:
-                self.unknown_starttag(tag, attrs)
-                return -1
-            else:
-                self.handle_starttag(tag, method, attrs)
-                return 0
-        else:
-            self.stack.append(tag)
-            self.handle_starttag(tag, method, attrs)
-            return 1
-
-    # Internal -- finish processing of end tag
-    def finish_endtag(self, tag):
-        if not tag:
-            found = len(self.stack) - 1
-            if found < 0:
-                self.unknown_endtag(tag)
-                return
-        else:
-            if tag not in self.stack:
-                try:
-                    method = getattr(self, 'end_' + tag)
-                except AttributeError:
-                    self.unknown_endtag(tag)
-                else:
-                    self.report_unbalanced(tag)
-                return
-            found = len(self.stack)
-            for i in range(found):
-                if self.stack[i] == tag: found = i
-        while len(self.stack) > found:
-            tag = self.stack[-1]
-            try:
-                method = getattr(self, 'end_' + tag)
-            except AttributeError:
-                method = None
-            if method:
-                self.handle_endtag(tag, method)
-            else:
-                self.unknown_endtag(tag)
-            del self.stack[-1]
-
-    # Overridable -- handle start tag
-    def handle_starttag(self, tag, method, attrs):
-        method(attrs)
-
-    # Overridable -- handle end tag
-    def handle_endtag(self, tag, method):
-        method()
-
-    # Example -- report an unbalanced </...> tag.
-    def report_unbalanced(self, tag):
-        if self.verbose:
-            print('*** Unbalanced </' + tag + '>')
-            print('*** Stack:', self.stack)
-
-    def convert_charref(self, name):
-        """Convert character reference, may be overridden."""
-        try:
-            n = int(name)
-        except ValueError:
-            return
-        if not 0 <= n <= 127:
-            return
-        return self.convert_codepoint(n)
-
-    def convert_codepoint(self, codepoint):
-        return chr(codepoint)
-
-    def handle_charref(self, name):
-        """Handle character reference, no need to override."""
-        replacement = self.convert_charref(name)
-        if replacement is None:
-            self.unknown_charref(name)
-        else:
-            self.handle_data(replacement)
-
-    # Definition of entities -- derived classes may override
-    entitydefs = \
-            {'lt': '<', 'gt': '>', 'amp': '&', 'quot': '"', 'apos': '\''}
-
-    def convert_entityref(self, name):
-        """Convert entity references.
-
-        As an alternative to overriding this method; one can tailor the
-        results by setting up the self.entitydefs mapping appropriately.
-        """
-        table = self.entitydefs
-        if name in table:
-            return table[name]
-        else:
-            return
-
-    def handle_entityref(self, name):
-        """Handle entity references, no need to override."""
-        replacement = self.convert_entityref(name)
-        if replacement is None:
-            self.unknown_entityref(name)
-        else:
-            self.handle_data(replacement)
-
-    # Example -- handle data, should be overridden
-    def handle_data(self, data):
-        pass
-
-    # Example -- handle comment, could be overridden
-    def handle_comment(self, data):
-        pass
-
-    # Example -- handle declaration, could be overridden
-    def handle_decl(self, decl):
-        pass
-
-    # Example -- handle processing instruction, could be overridden
-    def handle_pi(self, data):
-        pass
-
-    # To be overridden -- handlers for unknown objects
-    def unknown_starttag(self, tag, attrs): pass
-    def unknown_endtag(self, tag): pass
-    def unknown_charref(self, ref): pass
-    def unknown_entityref(self, ref): pass
-
-
-class TestSGMLParser(SGMLParser):
-
-    def __init__(self, verbose=0):
-        self.testdata = ""
-        SGMLParser.__init__(self, verbose)
-
-    def handle_data(self, data):
-        self.testdata = self.testdata + data
-        if len(repr(self.testdata)) >= 70:
-            self.flush()
-
-    def flush(self):
-        data = self.testdata
-        if data:
-            self.testdata = ""
-            print('data:', repr(data))
-
-    def handle_comment(self, data):
-        self.flush()
-        r = repr(data)
-        if len(r) > 68:
-            r = r[:32] + '...' + r[-32:]
-        print('comment:', r)
-
-    def unknown_starttag(self, tag, attrs):
-        self.flush()
-        if not attrs:
-            print('start tag: <' + tag + '>')
-        else:
-            print('start tag: <' + tag)
-            for name, value in attrs:
-                print(name + '=' + '"' + value + '"')
-            print('>')
-
-    def unknown_endtag(self, tag):
-        self.flush()
-        print('end tag: </' + tag + '>')
-
-    def unknown_entityref(self, ref):
-        self.flush()
-        print('*** unknown entity ref: &' + ref + ';')
-
-    def unknown_charref(self, ref):
-        self.flush()
-        print('*** unknown char ref: &#' + ref + ';')
-
-    def unknown_decl(self, data):
-        self.flush()
-        print('*** unknown decl: [' + data + ']')
-
-    def close(self):
-        SGMLParser.close(self)
-        self.flush()
-
-
-def test(args = None):
-    import sys
-
-    if args is None:
-        args = sys.argv[1:]
-
-    if args and args[0] == '-s':
-        args = args[1:]
-        klass = SGMLParser
-    else:
-        klass = TestSGMLParser
-
-    if args:
-        file = args[0]
-    else:
-        file = 'test.html'
-
-    if file == '-':
-        f = sys.stdin
-    else:
-        try:
-            f = open(file, 'r')
-        except IOError as msg:
-            print(file, ":", msg)
-            sys.exit(1)
-
-    data = f.read()
-    if f is not sys.stdin:
-        f.close()
-
-    x = klass()
-    for c in data:
-        x.feed(c)
-    x.close()
-
-
-if __name__ == '__main__':
-    test()
diff --git a/lib/feedparser/tests/compression/deflate-no-headers.z b/lib/feedparser/tests/compression/deflate-no-headers.z
deleted file mode 100644
index 04b5c303cf7091b3e83da88ebe49e93ef4fb58e9..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 50
zcmdn&>Fw(qxZ=dwliJ%tPibgsZn$(^Utj;aw)wTw`d-(~jSLK~mg}56AG&GtMRv`t
HkC_+%Q~nn5

diff --git a/lib/feedparser/tests/compression/deflate-not-compressed.z b/lib/feedparser/tests/compression/deflate-not-compressed.z
deleted file mode 100644
index ddd282214..000000000
--- a/lib/feedparser/tests/compression/deflate-not-compressed.z
+++ /dev/null
@@ -1 +0,0 @@
-<feed><title>deflate</title></feed>
diff --git a/lib/feedparser/tests/compression/deflate.z b/lib/feedparser/tests/compression/deflate.z
deleted file mode 100644
index e68e620e667c073322b750851e86ad64df8d17e6..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 56
zcmb=pwb|3#*Eev*iL)oQw}qb4(A3;;>AJqY{&j8hYp3<SuA3Vf7+fvaIe9*G)8>op
Onp+<;F|0Yy{|W&9{~EUd

diff --git a/lib/feedparser/tests/compression/gzip-not-compressed.gz b/lib/feedparser/tests/compression/gzip-not-compressed.gz
deleted file mode 100644
index f74317830c1606bd655fd0af5558793704351d83..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 32
fcmcCXOHEC&vnk0e$w{?KugWa2(TA{Y^uaO!zak55

diff --git a/lib/feedparser/tests/compression/gzip-struct-error.gz b/lib/feedparser/tests/compression/gzip-struct-error.gz
deleted file mode 100644
index d4c59941f375babaeada61fadabb84832a7a8407..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 79
zcmb2|=HS@WQsm3TT%4F&kdvxck(<M?+0)zCH*m#?vnRE;g`U#T)ZB3Cy1u^tb#3!&
lr}e$An;RJzTrJl*c|LU0=8No_TmS!OU~tY|ZN$L9008V=AWQ%N

diff --git a/lib/feedparser/tests/compression/gzip.gz b/lib/feedparser/tests/compression/gzip.gz
deleted file mode 100644
index 52a063f73f07f80e394190fd5b51d7fe29f57075..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 79
zcmb2|=HS@WQsm3TT%4F&kdvxck(<M?+0)zCH*m#?vnRE;g`U#T)ZB3Cy1u^tb#3!&
lr}e$An;RJzTrJl*c|LU0=8No_TOTtqTyxG{ZN$L9008IrAPE2f

diff --git a/lib/feedparser/tests/compression/sample.xml b/lib/feedparser/tests/compression/sample.xml
deleted file mode 100644
index d6e8416dc..000000000
--- a/lib/feedparser/tests/compression/sample.xml
+++ /dev/null
@@ -1 +0,0 @@
-<feed xmlns="http://www.w3.org/2005/Atom"></feed>
diff --git a/lib/feedparser/tests/encoding/big5.xml b/lib/feedparser/tests/encoding/big5.xml
deleted file mode 100644
index 823966bbf..000000000
--- a/lib/feedparser/tests/encoding/big5.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="big5"?>
-<!--
-SkipUnless:   __import__('codecs').lookup('big5')
-Description:  big5
-Expect:       not bozo and encoding == 'big5'
--->
-<rss>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/bozo_bogus_encoding.xml b/lib/feedparser/tests/encoding/bozo_bogus_encoding.xml
deleted file mode 100644
index 89638b7bd..000000000
--- a/lib/feedparser/tests/encoding/bozo_bogus_encoding.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="bogus"?>
-<!--
-Description: bogus encoding
-Expect:      bozo
--->
-<rss>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/bozo_double-encoded-html.xml b/lib/feedparser/tests/encoding/bozo_double-encoded-html.xml
deleted file mode 100644
index b268d6a96..000000000
--- a/lib/feedparser/tests/encoding/bozo_double-encoded-html.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0"?>
-<!--
-Description:  utf-8 interpreted as iso-8859-1 and re-encoded as utf-8
-Expect:       bozo and ord(entries[0]['description']) == 8230
--->
-<rss version="2.0">
-<channel>
-  <item>
-    <description>&acirc;&#128;&brvbar;</description>
-  </item>
-</channel>
-</rss>
-
diff --git a/lib/feedparser/tests/encoding/bozo_encoding_mismatch_crash.xml b/lib/feedparser/tests/encoding/bozo_encoding_mismatch_crash.xml
deleted file mode 100644
index 315980b94..000000000
--- a/lib/feedparser/tests/encoding/bozo_encoding_mismatch_crash.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<!--
-SkipUnless:   __import__('sys').version.split()[0] >= '2.2.0'
-Description: crashes
-Expect:      1
--->
-<rss>
-<item>
-<description><![CDATA[<a href="http://www.example.com/">�</a><a href="&#38;"></a>]]></description>
-</item>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/bozo_http_i18n.xml b/lib/feedparser/tests/encoding/bozo_http_i18n.xml
deleted file mode 100644
index 5dae79730..000000000
--- a/lib/feedparser/tests/encoding/bozo_http_i18n.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-Note:         text/xml defaults to us-ascii, in conflict with the XML declaration of utf-8
-Header:       Content-type: text/xml
-Description:  Content-type with no charset (text/xml defaults to us-ascii)
-Expect:       bozo and isinstance(bozo_exception, feedparser.CharacterEncodingOverride)
--->
-
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <title>Iñtërnâtiônàlizætiøn</title>
-</feed>
diff --git a/lib/feedparser/tests/encoding/bozo_http_text_plain.xml b/lib/feedparser/tests/encoding/bozo_http_text_plain.xml
deleted file mode 100644
index 7e0adfe82..000000000
--- a/lib/feedparser/tests/encoding/bozo_http_text_plain.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0"?>
-<!--
-Header:      Content-type: text/plain
-Description: text/plain + no encoding
-Expect:      bozo
--->
-<rss version="2.0">
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/bozo_http_text_plain_charset.xml b/lib/feedparser/tests/encoding/bozo_http_text_plain_charset.xml
deleted file mode 100644
index 89c36e87b..000000000
--- a/lib/feedparser/tests/encoding/bozo_http_text_plain_charset.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0"?>
-<!--
-Header:      Content-type: text/plain; charset=utf-8
-Description: text/plain + charset
-Expect:      bozo and encoding == 'utf-8'
--->
-<rss version="2.0">
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/bozo_invalid-bytes-with-bom.xml b/lib/feedparser/tests/encoding/bozo_invalid-bytes-with-bom.xml
deleted file mode 100644
index 4c1b349fb..000000000
--- a/lib/feedparser/tests/encoding/bozo_invalid-bytes-with-bom.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<!--
-Description: Ensure when there are invalid bytes in encoding specified by BOM, feedparser doesn't crash
-Expect:      bozo
--->
-<rss version="2.0">
-<channel>
-<title>Valid UTF8: ѨInvalid UTF8: Espa�a</title>
-<description><pre class="screen"></pre></description>
-</channel>
-</rss
diff --git a/lib/feedparser/tests/encoding/bozo_linenoise.xml b/lib/feedparser/tests/encoding/bozo_linenoise.xml
deleted file mode 100644
index 60903fce0..000000000
--- a/lib/feedparser/tests/encoding/bozo_linenoise.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-Description: unguessable characters
-Expect:      bozo and entries[0].summary == u'\xe2\u20ac\u2122\xe2\u20ac\x9d\u0160'
--->
-
-<rss version="2.0">
-<channel>
-<item>
-<description><![CDATA[ ’<>”� ]]></description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/encoding/csucs4.xml b/lib/feedparser/tests/encoding/csucs4.xml
deleted file mode 100644
index 6a5e88ae368e4cfde37461ae57cd2c3f799781f7..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 736
zcmZQzV6b6eV6bOkV5neVV8~@)V8~%$U{GLSU?^i?U`S<PU?^f>U?^r_V8~=(V8~}+
zV8~-&V6bIiU{GRUU@&B0V9;Y=U@(C4LHa;?Kx&eq>QkV4L1O7hdO`9ab4wW*7+`D@
zs5v0_*fB6La6#Rt$iTp$3&kL@U<L+;Y^b>f3=9mRP<Mgc4zeF)E(lve{Q`0q2*)!p
zFn}<~FCf2y^n&~Z@?!~94kWL^z`&pmbr(n;<Oh(sFn5CFG@*V6*$Gku!XP(+`~xx<
z*$j|dK;kg{Ab-Nl0QtuS8rC3nAT=QOfZPZ&2jngg8)QBx43Yf=QVY_9ZZ^nFS7@Aq
z%z(KaWEQf1P?(@&kR2eqKx#p9Nziz#g3=(dL}++}!Ue<!nGezjat}x^NF3y5kQgY=
zL25v0282Oukl#UW2HBAYjaOp^1_mPr1_qFQAoD<KK>mQmJ92seg%8NzAdD=okCa})
Fasc&#IvxN3

diff --git a/lib/feedparser/tests/encoding/csunicode.xml b/lib/feedparser/tests/encoding/csunicode.xml
deleted file mode 100644
index aac9a437e38e387498afad922a99dc82a6236f5e..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 386
zcmZRuVX$YYV8~_2VNhTwV@PEvVkl<FWXNa8W3XjVVlZUTV=!P)Vo+d6WyoVlX2@qq
zVaR02V@L<fCNmT>lrrQoWI|<98I&088SEIi7;G368FU$R8MqjN8L}BN844Ie8S)r%
z7*ZLE8HyRK7!<%To*|wglOdO(fFYluh@pf5#MfX@hnog6U!6gdL60GaA)g_iA)BF;
zp@0FR0^MeiIxYqmunox!MPNHipgw`v2Qm%SwOkCY3>6Fo45<vs3?*<^LENUmkjIeE
zP{N?Vki?MBP{okXpumvGkjIdMB`g#eY#D4B6d2SQN*PKR(in6Z3>nNAk{D7M)ET(I
U;Q$E}P}mkj!$%(+(!~sR00Rv^SO5S3

diff --git a/lib/feedparser/tests/encoding/demoronize-1.xml b/lib/feedparser/tests/encoding/demoronize-1.xml
deleted file mode 100644
index 8b2345f62..000000000
--- a/lib/feedparser/tests/encoding/demoronize-1.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0"?>
-<!--
-Description:  using win-1252 character points instead of unicode
-Expect:       not bozo and entries[0]['description'] == u'don\u2019t'
--->
-<rss version="2.0">
-<channel>
-  <item>
-    <description>don’t</description>
-  </item>
-</channel>
-</rss>
-
diff --git a/lib/feedparser/tests/encoding/demoronize-2.xml b/lib/feedparser/tests/encoding/demoronize-2.xml
deleted file mode 100644
index f96d4549f..000000000
--- a/lib/feedparser/tests/encoding/demoronize-2.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0"?>
-<!--
-Description:  using win-1252 character points instead of unicode
-Expect:       not bozo and entries[0]['description'] == u'don\u2019t'
--->
-<rss version="2.0">
-<channel>
-  <item>
-    <description>don&#146;t</description>
-  </item>
-</channel>
-</rss>
-
diff --git a/lib/feedparser/tests/encoding/demoronize-3.xml b/lib/feedparser/tests/encoding/demoronize-3.xml
deleted file mode 100644
index c54ef84a3..000000000
--- a/lib/feedparser/tests/encoding/demoronize-3.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0"?>
-<!--
-Description:  using win-1252 character points instead of unicode
-Expect:       not bozo and entries[0]['description'] == u'don&#x2019;t'
--->
-<rss version="2.0">
-<channel>
-  <item>
-    <description>don&amp;#146;t</description>
-  </item>
-</channel>
-</rss>
-
diff --git a/lib/feedparser/tests/encoding/double-encoded-html.xml b/lib/feedparser/tests/encoding/double-encoded-html.xml
deleted file mode 100644
index f98916c9a..000000000
--- a/lib/feedparser/tests/encoding/double-encoded-html.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0"?>
-<!--
-Description:  utf-8 interpreted as iso-8859-1 and re-encoded as utf-8
-Expect:       not bozo and ord(entries[0]['description']) == 8230
--->
-<rss version="2.0">
-<channel>
-  <item>
-    <description>&#226;&#128;&#166;</description>
-  </item>
-</channel>
-</rss>
-
diff --git a/lib/feedparser/tests/encoding/encoding_attribute_crash.xml b/lib/feedparser/tests/encoding/encoding_attribute_crash.xml
deleted file mode 100644
index b270005a2..000000000
--- a/lib/feedparser/tests/encoding/encoding_attribute_crash.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: crashes
-Expect:      1
--->
-<rss>
-<item>
-<description><![CDATA[<img alt="&#169;" />]]></description>
-</item>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/encoding_attribute_crash_2.xml b/lib/feedparser/tests/encoding/encoding_attribute_crash_2.xml
deleted file mode 100644
index a000acc98..000000000
--- a/lib/feedparser/tests/encoding/encoding_attribute_crash_2.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: crashes
-Expect:      1
--->
-<rss>
-<item>
-<description>&lt;a href=&quot;http://example.com&quot;&gt;&lt;img src=&quot;http://example.com/logo.gif&quot; alt=&quot;The image &amp;acirc;&amp;#128;&amp;#156;http://example.com/logo.gif&amp;acirc;&amp;#128;&amp;#65533; cannot be displayed, because it contains errors.&quot;&gt;&lt;/a&gt;&lt;br&gt;</description>
-</item>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/euc-kr-attribute.xml b/lib/feedparser/tests/encoding/euc-kr-attribute.xml
deleted file mode 100644
index 0dd608823..000000000
--- a/lib/feedparser/tests/encoding/euc-kr-attribute.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<?xml version="1.0" encoding="euc-kr"?>
-<!--
-SkipUnless:   __import__('codecs').lookup('euc-kr')
-Description:  euc-kr character in attribute of embedded HTML
-Expect:       not bozo and entries[0]['description'] == u'<img alt="\ub144" />'
--->
-<rss version="2.0">
-<channel>
-  <item>
-    <description>&lt;img alt="��" /></description>
-  </item>
-</channel>
-</rss>
-
diff --git a/lib/feedparser/tests/encoding/euc-kr-item.xml b/lib/feedparser/tests/encoding/euc-kr-item.xml
deleted file mode 100644
index 29a316da5..000000000
--- a/lib/feedparser/tests/encoding/euc-kr-item.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<?xml version="1.0" encoding="euc-kr"?>
-<!--
-SkipUnless:   __import__('codecs').lookup('euc-kr')
-Description:  euc-kr encoding in item description
-Expect:       not bozo and entries[0]['description'] == u'\ub144'
--->
-<rss version="2.0">
-<channel>
-  <item>
-    <description>��</description>
-  </item>
-</channel>
-</rss>
-
diff --git a/lib/feedparser/tests/encoding/euc-kr.xml b/lib/feedparser/tests/encoding/euc-kr.xml
deleted file mode 100644
index 96e110f56..000000000
--- a/lib/feedparser/tests/encoding/euc-kr.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="euc-kr"?>
-<!--
-SkipUnless:   __import__('codecs').lookup('euc-kr')
-Description:  euc-kr encoding
-Expect:       not bozo and feed['title'] == u'\ub144'
--->
-<rss version="2.0">
-<channel>
-  <title>��</title>
-</channel>
-</rss>
-
diff --git a/lib/feedparser/tests/encoding/http_application_atom_xml_charset.xml b/lib/feedparser/tests/encoding/http_application_atom_xml_charset.xml
deleted file mode 100644
index a945704e0..000000000
--- a/lib/feedparser/tests/encoding/http_application_atom_xml_charset.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0"?>
-<!--
-Header:      Content-type: application/atom+xml;charset='us-ascii'
-Description: application/atom+xml + explicit charset
-Expect:      not bozo and encoding == 'us-ascii'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-</feed>
diff --git a/lib/feedparser/tests/encoding/http_application_atom_xml_charset_overrides_encoding.xml b/lib/feedparser/tests/encoding/http_application_atom_xml_charset_overrides_encoding.xml
deleted file mode 100644
index f587bcc52..000000000
--- a/lib/feedparser/tests/encoding/http_application_atom_xml_charset_overrides_encoding.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!--
-Header:      Content-type: application/atom+xml; charset='us-ascii'
-Description: application/atom+xml + charset overrides encoding
-Expect:      not bozo and encoding == 'us-ascii'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-</feed>
diff --git a/lib/feedparser/tests/encoding/http_application_atom_xml_default.xml b/lib/feedparser/tests/encoding/http_application_atom_xml_default.xml
deleted file mode 100644
index 6ef0efece..000000000
--- a/lib/feedparser/tests/encoding/http_application_atom_xml_default.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0"?>
-<!--
-Header:      Content-type: application/atom+xml
-Description: application/atom+xml + no encoding
-Expect:      not bozo and encoding == 'utf-8'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-</feed>
diff --git a/lib/feedparser/tests/encoding/http_application_atom_xml_encoding.xml b/lib/feedparser/tests/encoding/http_application_atom_xml_encoding.xml
deleted file mode 100644
index 4b46cab74..000000000
--- a/lib/feedparser/tests/encoding/http_application_atom_xml_encoding.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!--
-Header:      Content-type: application/atom+xml
-Description: application/atom+xml + explicit encoding
-Expect:      not bozo and encoding == 'iso-8859-1'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-</feed>
diff --git a/lib/feedparser/tests/encoding/http_application_atom_xml_gb2312_charset.xml b/lib/feedparser/tests/encoding/http_application_atom_xml_gb2312_charset.xml
deleted file mode 100644
index 5a31ff019..000000000
--- a/lib/feedparser/tests/encoding/http_application_atom_xml_gb2312_charset.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('gb2312')
-Header:      Content-type: application/atom+xml;charset='gb2312'
-Description: application/atom+xml + explicit charset
-Expect:      not bozo and encoding == 'gb18030'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-</feed>
diff --git a/lib/feedparser/tests/encoding/http_application_atom_xml_gb2312_charset_overrides_encoding.xml b/lib/feedparser/tests/encoding/http_application_atom_xml_gb2312_charset_overrides_encoding.xml
deleted file mode 100644
index bb3c3fcdb..000000000
--- a/lib/feedparser/tests/encoding/http_application_atom_xml_gb2312_charset_overrides_encoding.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('gb2312')
-Header:      Content-type: application/atom+xml; charset='gb2312'
-Description: application/atom+xml + charset overrides encoding
-Expect:      not bozo and encoding == 'gb18030'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-</feed>
diff --git a/lib/feedparser/tests/encoding/http_application_atom_xml_gb2312_encoding.xml b/lib/feedparser/tests/encoding/http_application_atom_xml_gb2312_encoding.xml
deleted file mode 100644
index ab91a82d4..000000000
--- a/lib/feedparser/tests/encoding/http_application_atom_xml_gb2312_encoding.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="gb2312"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('gb2312')
-Header:      Content-type: application/atom+xml
-Description: application/atom+xml + explicit encoding
-Expect:      not bozo and encoding == 'gb18030'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-</feed>
diff --git a/lib/feedparser/tests/encoding/http_application_rss_xml_charset.xml b/lib/feedparser/tests/encoding/http_application_rss_xml_charset.xml
deleted file mode 100644
index 8ca929b14..000000000
--- a/lib/feedparser/tests/encoding/http_application_rss_xml_charset.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0"?>
-<!--
-Header:      Content-type: application/rss+xml;charset= 'us-ascii'
-Description: application/rss+xml + explicit charset
-Expect:      not bozo and encoding == 'us-ascii'
--->
-<rss version="2.0">
-</rss>
diff --git a/lib/feedparser/tests/encoding/http_application_rss_xml_charset_overrides_encoding.xml b/lib/feedparser/tests/encoding/http_application_rss_xml_charset_overrides_encoding.xml
deleted file mode 100644
index 80c214f15..000000000
--- a/lib/feedparser/tests/encoding/http_application_rss_xml_charset_overrides_encoding.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!--
-Header:      Content-type: application/rss+xml;charset= "us-ascii"
-Description: application/rss+xml + charset overrides encoding
-Expect:      not bozo and encoding == 'us-ascii'
--->
-<rss version="2.0">
-</rss>
diff --git a/lib/feedparser/tests/encoding/http_application_rss_xml_default.xml b/lib/feedparser/tests/encoding/http_application_rss_xml_default.xml
deleted file mode 100644
index 781e703e0..000000000
--- a/lib/feedparser/tests/encoding/http_application_rss_xml_default.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0"?>
-<!--
-Header:      Content-type: application/rss+xml
-Description: application/rss+xml + no encoding
-Expect:      not bozo and encoding == 'utf-8'
--->
-<rss version="2.0">
-</rss>
diff --git a/lib/feedparser/tests/encoding/http_application_rss_xml_encoding.xml b/lib/feedparser/tests/encoding/http_application_rss_xml_encoding.xml
deleted file mode 100644
index 53ee7ff15..000000000
--- a/lib/feedparser/tests/encoding/http_application_rss_xml_encoding.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!--
-Header:      Content-type: application/rss+xml
-Description: application/rss+xml + explicit encoding
-Expect:      not bozo and encoding == 'iso-8859-1'
--->
-<rss version="2.0">
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/http_application_xml_charset.xml b/lib/feedparser/tests/encoding/http_application_xml_charset.xml
deleted file mode 100644
index 2ea8437e2..000000000
--- a/lib/feedparser/tests/encoding/http_application_xml_charset.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0"?>
-<!--
-Header:      Content-type: application/xml;charset= "us-ascii"
-Description: application/xml + explicit charset
-Expect:      not bozo and encoding == 'us-ascii'
--->
-<rss version="2.0">
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/http_application_xml_charset_overrides_encoding.xml b/lib/feedparser/tests/encoding/http_application_xml_charset_overrides_encoding.xml
deleted file mode 100644
index cd314dd04..000000000
--- a/lib/feedparser/tests/encoding/http_application_xml_charset_overrides_encoding.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!--
-Header:      Content-type: application/xml;charset = us-ascii
-Description: application/xml + charset overrides encoding
-Expect:      not bozo and encoding == 'us-ascii'
--->
-<rss version="2.0">
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/http_application_xml_default.xml b/lib/feedparser/tests/encoding/http_application_xml_default.xml
deleted file mode 100644
index 309496c66..000000000
--- a/lib/feedparser/tests/encoding/http_application_xml_default.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0"?>
-<!--
-Header:      Content-type: application/xml
-Description: application/xml + no encoding
-Expect:      not bozo and encoding == 'utf-8'
--->
-<rss version="2.0">
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/http_application_xml_dtd_charset.xml b/lib/feedparser/tests/encoding/http_application_xml_dtd_charset.xml
deleted file mode 100644
index 99bfcba96..000000000
--- a/lib/feedparser/tests/encoding/http_application_xml_dtd_charset.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0"?>
-<!--
-Header:      Content-type: application/xml-dtd; charset="us-ascii"
-Description: application/xml-dtd + explicit charset
-Expect:      not bozo and encoding == 'us-ascii'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-</feed>
diff --git a/lib/feedparser/tests/encoding/http_application_xml_dtd_charset_overrides_encoding.xml b/lib/feedparser/tests/encoding/http_application_xml_dtd_charset_overrides_encoding.xml
deleted file mode 100644
index fa01fef0b..000000000
--- a/lib/feedparser/tests/encoding/http_application_xml_dtd_charset_overrides_encoding.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!--
-Header:      Content-type: application/xml-dtd; charset="us-ascii"
-Description: application/xml-dtd + charset overrides encoding
-Expect:      not bozo and encoding == 'us-ascii'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-</feed>
diff --git a/lib/feedparser/tests/encoding/http_application_xml_dtd_default.xml b/lib/feedparser/tests/encoding/http_application_xml_dtd_default.xml
deleted file mode 100644
index 390e70e4e..000000000
--- a/lib/feedparser/tests/encoding/http_application_xml_dtd_default.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0"?>
-<!--
-Header:      Content-type: application/xml-dtd
-Description: application/xml-dtd + no encoding
-Expect:      not bozo and encoding == 'utf-8'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-</feed>
diff --git a/lib/feedparser/tests/encoding/http_application_xml_dtd_encoding.xml b/lib/feedparser/tests/encoding/http_application_xml_dtd_encoding.xml
deleted file mode 100644
index ae67ce1d6..000000000
--- a/lib/feedparser/tests/encoding/http_application_xml_dtd_encoding.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!--
-Header:      Content-type: application/xml-dtd
-Description: application/xml-dtd + explicit encoding
-Expect:      not bozo and encoding == 'iso-8859-1'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-</feed>
diff --git a/lib/feedparser/tests/encoding/http_application_xml_encoding.xml b/lib/feedparser/tests/encoding/http_application_xml_encoding.xml
deleted file mode 100644
index 771663f96..000000000
--- a/lib/feedparser/tests/encoding/http_application_xml_encoding.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!--
-Header:      Content-type: application/xml
-Description: application/xml + explicit encoding
-Expect:      not bozo and encoding == 'iso-8859-1'
--->
-<rss version="2.0">
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/http_application_xml_epe_charset.xml b/lib/feedparser/tests/encoding/http_application_xml_epe_charset.xml
deleted file mode 100644
index 52ef00245..000000000
--- a/lib/feedparser/tests/encoding/http_application_xml_epe_charset.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0"?>
-<!--
-Header:      Content-type: application/xml-external-parsed-entity; charset="us-ascii"
-Description: application/xml-external-parsed-entity + explicit charset
-Expect:      not bozo and encoding == 'us-ascii'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-</feed>
diff --git a/lib/feedparser/tests/encoding/http_application_xml_epe_charset_overrides_encoding.xml b/lib/feedparser/tests/encoding/http_application_xml_epe_charset_overrides_encoding.xml
deleted file mode 100644
index ce10433eb..000000000
--- a/lib/feedparser/tests/encoding/http_application_xml_epe_charset_overrides_encoding.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!--
-Header:      Content-type: application/xml-external-parsed-entity;charset=us-ascii
-Description: application/xml-external-parsed-entity + charset overrides encoding
-Expect:      not bozo and encoding == 'us-ascii'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-</feed>
diff --git a/lib/feedparser/tests/encoding/http_application_xml_epe_default.xml b/lib/feedparser/tests/encoding/http_application_xml_epe_default.xml
deleted file mode 100644
index 85af85963..000000000
--- a/lib/feedparser/tests/encoding/http_application_xml_epe_default.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0"?>
-<!--
-Header:      Content-type: application/xml-external-parsed-entity
-Description: application/xml-external-parsed-entity + no encoding
-Expect:      not bozo and encoding == 'utf-8'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-</feed>
diff --git a/lib/feedparser/tests/encoding/http_application_xml_epe_encoding.xml b/lib/feedparser/tests/encoding/http_application_xml_epe_encoding.xml
deleted file mode 100644
index 4085fa286..000000000
--- a/lib/feedparser/tests/encoding/http_application_xml_epe_encoding.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!--
-Header:      Content-type: application/xml-external-parsed-entity
-Description: application/xml-parsed-entity + explicit encoding
-Expect:      not bozo and encoding == 'iso-8859-1'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-</feed>
diff --git a/lib/feedparser/tests/encoding/http_encoding_attribute_crash.xml b/lib/feedparser/tests/encoding/http_encoding_attribute_crash.xml
deleted file mode 100644
index 19c9dd636..000000000
--- a/lib/feedparser/tests/encoding/http_encoding_attribute_crash.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!--
-Header:      Content-type: application/atom+xml
-Description: crashes while resolving relative URIs when content contains attributes which contain (valid) non-ASCII characters
-Expect:      not bozo
--->
-<feed xmlns='http://www.w3.org/2005/Atom'>
-<entry>
-<content type='xhtml'><div xmlns='http://www.w3.org/1999/xhtml'>
-<img alt="Browser market shares at ‘ongoing’" />
-</div></content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/encoding/http_i18n.xml b/lib/feedparser/tests/encoding/http_i18n.xml
deleted file mode 100644
index e61ad6ae4..000000000
--- a/lib/feedparser/tests/encoding/http_i18n.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-Header:       Content-type: application/xml
-Description:  application/xml with no charset (control for tests/illformed/encoding/http_i18n.xml)
-Expect:       not bozo
--->
-
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <title>Iñtërnâtiônàlizætiøn</title>
-  <link rel='alternate' type='text/html' href='http://example.com/'/>
-  <modified>2004-06-02T19:07:55-04:00</modified>
-  <tagline>If your parser thinks this is well-formed, it's right.</tagline>
-</feed>
diff --git a/lib/feedparser/tests/encoding/http_text_atom_xml_charset.xml b/lib/feedparser/tests/encoding/http_text_atom_xml_charset.xml
deleted file mode 100644
index bffafae6b..000000000
--- a/lib/feedparser/tests/encoding/http_text_atom_xml_charset.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0"?>
-<!--
-Header:      Content-type: text/atom+xml;charset='us-ascii'
-Description: text/atom+xml + explicit charset
-Expect:      not bozo and encoding == 'us-ascii'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-</feed>
diff --git a/lib/feedparser/tests/encoding/http_text_atom_xml_charset_overrides_encoding.xml b/lib/feedparser/tests/encoding/http_text_atom_xml_charset_overrides_encoding.xml
deleted file mode 100644
index be4fbf9ee..000000000
--- a/lib/feedparser/tests/encoding/http_text_atom_xml_charset_overrides_encoding.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!--
-Header:      Content-type: text/atom+xml; charset='us-ascii'
-Description: text/atom+xml + charset overrides encoding
-Expect:      not bozo and encoding == 'us-ascii'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-</feed>
diff --git a/lib/feedparser/tests/encoding/http_text_atom_xml_default.xml b/lib/feedparser/tests/encoding/http_text_atom_xml_default.xml
deleted file mode 100644
index 2d3088f73..000000000
--- a/lib/feedparser/tests/encoding/http_text_atom_xml_default.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0"?>
-<!--
-Header:      Content-type: text/atom+xml
-Description: text/atom+xml + no encoding
-Expect:      not bozo and encoding == 'us-ascii'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-</feed>
diff --git a/lib/feedparser/tests/encoding/http_text_atom_xml_encoding.xml b/lib/feedparser/tests/encoding/http_text_atom_xml_encoding.xml
deleted file mode 100644
index f3a25faa5..000000000
--- a/lib/feedparser/tests/encoding/http_text_atom_xml_encoding.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!--
-Header:      Content-type: text/atom+xml
-Description: text/atom+xml + explicit encoding
-Expect:      not bozo and encoding == 'us-ascii'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-</feed>
diff --git a/lib/feedparser/tests/encoding/http_text_rss_xml_charset.xml b/lib/feedparser/tests/encoding/http_text_rss_xml_charset.xml
deleted file mode 100644
index 88aa41761..000000000
--- a/lib/feedparser/tests/encoding/http_text_rss_xml_charset.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0"?>
-<!--
-Header:      Content-type: text/rss+xml;charset= 'us-ascii'
-Description: text/rss+xml + explicit charset
-Expect:      not bozo and encoding == 'us-ascii'
--->
-<rss version="2.0">
-</rss>
diff --git a/lib/feedparser/tests/encoding/http_text_rss_xml_charset_overrides_encoding.xml b/lib/feedparser/tests/encoding/http_text_rss_xml_charset_overrides_encoding.xml
deleted file mode 100644
index 84436b53c..000000000
--- a/lib/feedparser/tests/encoding/http_text_rss_xml_charset_overrides_encoding.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!--
-Header:      Content-type: text/rss+xml;charset= "us-ascii"
-Description: text/rss+xml + charset overrides encoding
-Expect:      not bozo and encoding == 'us-ascii'
--->
-<rss version="2.0">
-</rss>
diff --git a/lib/feedparser/tests/encoding/http_text_rss_xml_default.xml b/lib/feedparser/tests/encoding/http_text_rss_xml_default.xml
deleted file mode 100644
index d7a90255c..000000000
--- a/lib/feedparser/tests/encoding/http_text_rss_xml_default.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0"?>
-<!--
-Header:      Content-type: text/rss+xml
-Description: text/rss+xml + no encoding
-Expect:      not bozo and encoding == 'us-ascii'
--->
-<rss version="2.0">
-</rss>
diff --git a/lib/feedparser/tests/encoding/http_text_rss_xml_encoding.xml b/lib/feedparser/tests/encoding/http_text_rss_xml_encoding.xml
deleted file mode 100644
index a786e7eb6..000000000
--- a/lib/feedparser/tests/encoding/http_text_rss_xml_encoding.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!--
-Header:      Content-type: text/rss+xml
-Description: text/rss+xml + explicit encoding
-Expect:      not bozo and encoding == 'us-ascii'
--->
-<rss version="2.0">
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/http_text_xml_bogus_charset.xml b/lib/feedparser/tests/encoding/http_text_xml_bogus_charset.xml
deleted file mode 100644
index 09997938a..000000000
--- a/lib/feedparser/tests/encoding/http_text_xml_bogus_charset.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0"?>
-<!--
-Header:      Content-type: text/xml;
-Description: text/xml + bogus charset
-Expect:      not bozo and encoding == 'us-ascii'
--->
-<rss version="2.0">
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/http_text_xml_bogus_param.xml b/lib/feedparser/tests/encoding/http_text_xml_bogus_param.xml
deleted file mode 100644
index b76cc1f5f..000000000
--- a/lib/feedparser/tests/encoding/http_text_xml_bogus_param.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0"?>
-<!--
-Header:      Content-type: text/xml; charset:iso-8859-1
-Description: text/xml + bogus parameter
-Expect:      not bozo and encoding == 'us-ascii'
--->
-<rss version="2.0">
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/http_text_xml_charset.xml b/lib/feedparser/tests/encoding/http_text_xml_charset.xml
deleted file mode 100644
index 3917214ed..000000000
--- a/lib/feedparser/tests/encoding/http_text_xml_charset.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0"?>
-<!--
-Header:      Content-type: text/xml;charset= "us-ascii"
-Description: text/xml + explicit charset
-Expect:      not bozo and encoding == 'us-ascii'
--->
-<rss version="2.0">
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/http_text_xml_charset_2.xml b/lib/feedparser/tests/encoding/http_text_xml_charset_2.xml
deleted file mode 100644
index aac1bec9a..000000000
--- a/lib/feedparser/tests/encoding/http_text_xml_charset_2.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-<!--
-SkipUnless:   __import__('codecs').lookup('windows-1252')
-Header:       Content-type: text/xml; charset=windows-1252
-Description:  text/xml + explicit charset (this one is harder than the others)
-Expect:       not bozo and entries[0]['description'] == u'This is a \xa3\u201ctest.\u201d'
--->
-
-<rss version="2.0">
-<channel>
-<item>
-<title>Foo</title>
-<link>http://purl.org/rss/2.0/?item</link>
-<description>This is a ��test.�</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/encoding/http_text_xml_charset_overrides_encoding.xml b/lib/feedparser/tests/encoding/http_text_xml_charset_overrides_encoding.xml
deleted file mode 100644
index 5b05f6b31..000000000
--- a/lib/feedparser/tests/encoding/http_text_xml_charset_overrides_encoding.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!--
-Header:      Content-type: text/xml;charset = us-ascii
-Description: text/xml + charset overrides encoding
-Expect:      not bozo and encoding == 'us-ascii'
--->
-<rss version="2.0">
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/http_text_xml_charset_overrides_encoding_2.xml b/lib/feedparser/tests/encoding/http_text_xml_charset_overrides_encoding_2.xml
deleted file mode 100644
index 0a0eed406..000000000
--- a/lib/feedparser/tests/encoding/http_text_xml_charset_overrides_encoding_2.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version='1.0' encoding='iso-8859-1'?>
-<!--
-SkipUnless:   __import__('codecs').lookup('windows-1252')
-Header:       Content-type: text/xml; charset=windows-1252
-Description:  text/xml + charset overrides encoding (this one is harder than the others)
-Expect:       not bozo and entries[0]['description'] == u'This is a \xa3\u201ctest.\u201d'
--->
-
-<rss version="2.0">
-<channel>
-<item>
-<title>Foo</title>
-<link>http://purl.org/rss/2.0/?item</link>
-<description>This is a ��test.�</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/encoding/http_text_xml_default.xml b/lib/feedparser/tests/encoding/http_text_xml_default.xml
deleted file mode 100644
index eb7236f50..000000000
--- a/lib/feedparser/tests/encoding/http_text_xml_default.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0"?>
-<!--
-Header:      Content-type: text/xml
-Description: text/xml + no encoding
-Expect:      not bozo and encoding == 'us-ascii'
--->
-<rss version="2.0">
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/http_text_xml_epe_charset.xml b/lib/feedparser/tests/encoding/http_text_xml_epe_charset.xml
deleted file mode 100644
index 2552bedf8..000000000
--- a/lib/feedparser/tests/encoding/http_text_xml_epe_charset.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0"?>
-<!--
-Header:      Content-type: text/xml-external-parsed-entity; charset="us-ascii"
-Description: text/xml-external-parsed-entity + explicit charset
-Expect:      not bozo and encoding == 'us-ascii'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-</feed>
diff --git a/lib/feedparser/tests/encoding/http_text_xml_epe_charset_overrides_encoding.xml b/lib/feedparser/tests/encoding/http_text_xml_epe_charset_overrides_encoding.xml
deleted file mode 100644
index 353429e10..000000000
--- a/lib/feedparser/tests/encoding/http_text_xml_epe_charset_overrides_encoding.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!--
-Header:      Content-type: text/xml-external-parsed-entity;charset=us-ascii
-Description: text/xml-external-parsed-entity + charset overrides encoding
-Expect:      not bozo and encoding == 'us-ascii'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-</feed>
diff --git a/lib/feedparser/tests/encoding/http_text_xml_epe_default.xml b/lib/feedparser/tests/encoding/http_text_xml_epe_default.xml
deleted file mode 100644
index 7f5c0ee5f..000000000
--- a/lib/feedparser/tests/encoding/http_text_xml_epe_default.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0"?>
-<!--
-Header:      Content-type: text/xml-external-parsed-entity
-Description: text/xml-external-parsed-entity + no encoding
-Expect:      not bozo and encoding == 'us-ascii'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-</feed>
diff --git a/lib/feedparser/tests/encoding/http_text_xml_epe_encoding.xml b/lib/feedparser/tests/encoding/http_text_xml_epe_encoding.xml
deleted file mode 100644
index b85e3bca1..000000000
--- a/lib/feedparser/tests/encoding/http_text_xml_epe_encoding.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!--
-Header:      Content-type: text/xml-external-parsed-entity
-Description: text/xml-parsed-entity + explicit encoding
-Expect:      not bozo and encoding == 'us-ascii'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-</feed>
diff --git a/lib/feedparser/tests/encoding/http_text_xml_qs.xml b/lib/feedparser/tests/encoding/http_text_xml_qs.xml
deleted file mode 100644
index fa5f346bc..000000000
--- a/lib/feedparser/tests/encoding/http_text_xml_qs.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0"?>
-<!--
-Header:      Content-type: text/xml; qs=0.9
-Description: text/xml + qs value
-Expect:      not bozo and encoding == 'us-ascii'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-</feed>
diff --git a/lib/feedparser/tests/encoding/iso-10646-ucs-2.xml b/lib/feedparser/tests/encoding/iso-10646-ucs-2.xml
deleted file mode 100644
index e2d2e93ab55e9eb184caec1f2ce33a5f164dcb03..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 422
zcmZRuVX$YYV8~_2VNhTwV@PEvVkl<FWXNa8W3XjVVlZUTV=!P)Vo+d6WyoVlX2@qq
zVaR02V@L<fW-=5r<TL0p7%~_zm@$|zm@()wlrkhU6f@{D7%?a@*fZEMa5300C^G0W
z=rV9I1T$naWHJ;mgfiqY<S?W%6f+bvSTQJoVLU@TLncEmLjglRLlHv>1BkD|pboV&
z6>O?HgC>I>Lk>eeLq0<`Ln%W614spaSAg_zF}Q$jOJ*nn+g}3pA;fO{`necf87deG
z7(gy4fx8ysW(9^khJ1z+1_g#BhJ1!9hI|GEhD3%uh7>H}rNCgzV9TJupw3XrP{NP~
g4mC4|B!*N5bp|eQ_&~x66#m7~aMK6JMlpjO0F%o=5dZ)H

diff --git a/lib/feedparser/tests/encoding/iso-10646-ucs-4.xml b/lib/feedparser/tests/encoding/iso-10646-ucs-4.xml
deleted file mode 100644
index c111659647cb9a3f18b2330ded1df7cb82f0e77f..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 844
zcmZQzV6b6eV6bOkV5neVV8~@)V8~%$U{GLSU?^i?U`S<PU?^f>U?^r_V8~=(V8~}+
zV8~-&V6bIiU{GRUU@&B0V9;Y=U@(C4LHa;?Kx&eq>QkV4L1O7hdO_xa%mtaL3pER5
zju`_3g9!rz1BeERmohLgfXo7^1@S?0AiF_swqsym;DY)=k%55$BoD$Mv0w%UhHR+a
z1q=)fp-{Jj{0DL)$UG3Xg8CQab`XwdU|;}Yko!R40n!U{BPbk7pmHF24F(1Vb*S4w
z@*sbL%!RoXB&P`tACR3OH6RRf6Ua{>b75wH>;kz3BoA^wC|rpR3z$71Kf6HV3}hC_
z9UwP@%m&#7ayy6(vI7(s$o>Y2gY<ypNVOkiuPZeDfb4;V0mwdNJ3wKJjzR7K*$Gk$
zl1qZ7nJOp^5=(@}8z_81e31DdeIWmV^n%1e?gxp1(icb#D1Cx3hz$xKP<VsvNQ0&k
pV+IBWBL)TrkbNNYKx#n#0Qnt+k<%3@3_)Q7!pP$KNO=P+2LSO>KotN0

diff --git a/lib/feedparser/tests/encoding/no_content_type_default.xml b/lib/feedparser/tests/encoding/no_content_type_default.xml
deleted file mode 100644
index cab1544e2..000000000
--- a/lib/feedparser/tests/encoding/no_content_type_default.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0"?>
-<!--
-Description: no content-type and no encoding
-Expect:      not bozo and encoding == 'utf-8'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-</feed>
diff --git a/lib/feedparser/tests/encoding/no_content_type_encoding.xml b/lib/feedparser/tests/encoding/no_content_type_encoding.xml
deleted file mode 100644
index 6ad16c691..000000000
--- a/lib/feedparser/tests/encoding/no_content_type_encoding.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!--
-Description: no content-type + explicit encoding
-Expect:      not bozo and encoding == 'iso-8859-1'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-</feed>
diff --git a/lib/feedparser/tests/encoding/u16.xml b/lib/feedparser/tests/encoding/u16.xml
deleted file mode 100644
index 3110f17a894a86dd2590c8ef61f8ce83bd186df7..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 350
zcmZRuVX$YYV8~_2VNhTwV@PEvVkl<FWXNa8W3XjVVlZUTV=!P)Vo+d6WyoVlX2@qq
zVaR02V@L<fmNFPJm@z0Z*fZEMa5300C^G0W=rV9I1T$naWHJ;mgfiqY<S?W%6f+bv
zSTQJoVLU@TLncEmLjglRLlHv>1BkD|pbj-Vl_8m-m_eOElR=LmhasOKpCOx}l%aqD
zqyl0aNREra1#D_ELlM}X5~zzIc0kl|F}N~RFcdI=Oe}%h4snA5LmopuLkWWdLlQ$i
zLlr|lg91Y$Lmop47Jn)**fQ8MC@`oqlroesq%r7%{hY**%An4`1@<q*@1SrihK7Sa
JI24N+>;O(THMIZ$

diff --git a/lib/feedparser/tests/encoding/ucs-2.xml b/lib/feedparser/tests/encoding/ucs-2.xml
deleted file mode 100644
index d4e3defb7cdb42eed79930cc8d3e00fdf7568950..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 362
zcmZRuVX$YYV8~_2VNhTwV@PEvVkl<FWXNa8W3XjVVlZUTV=!P)Vo+d6WyoVlX2@qq
zVaR02V@L<fmNFzW6f@{D7%?a@*fZEMa5300C^G0W=rV9I1T$naWHJ;mgfiqY<S?W%
z6f+bvSTQJoVLU@TLncEmLjglRLlHv>1BkD|pbj-Z6>O?HgC>I>Lk>eeLq0<`Ln%W6
z14sqJMvy!ggA3T?WQHQJT_sSLL+nAQ<zjGUs9-2y0GV6@cLl^P3JiG+`3xlt3JggM
z`3zMI`3wpSi41uRDOmihz+lT@%b>uZ&QQuw!jQ(G%V5Z0#*oC2%An4`1@<>23_xL6
O3=I!`aEKN&*Z}}wNH`w=

diff --git a/lib/feedparser/tests/encoding/ucs-4.xml b/lib/feedparser/tests/encoding/ucs-4.xml
deleted file mode 100644
index 143fdcad223d42c8df449097004357c1ab9a95e5..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 724
zcmZQzV6b6eV6bOkV5neVV8~@)V8~%$U{GLSU?^i?U`S<PU?^f>U?^r_V8~=(V8~}+
zV8~-&V6bIiU{GRUU@&B0V9;Y=U@(C4LHa;?Kx&eq>QkV4L1O7hdP^A?7(i-3X6rIA
zFqlBi0J+7Efq{Vw>NZ6N1_qEk2!q6e85kI{p=K5^FffEd-2`$s$Zn8%AZ!Ko2gpqz
z9M8bO0Ky=Dfcy#43-S-he<e^kkh}&11A{u$Z6JA&`$6Wy+zOJ@g!&s~CrAwlgWLr2
z6Ubbc86ZAPAISY6Kf?5b{Ne%)V~~46>OgJ*xesIp$W0(N$ZSy9A^QiLxghggq45aP
z4|6lf9Av$qut3Kk^Fj82)Pm%apmA3Pr9one&~OHY2Z#?cAEXcDZjfG(ILN&qF;F~%
z)PT|n2!q%le}mi&vLg)|r^XBn3`PtL3?TbJ=7H3J`~eCp5JpZ1ps)dj69^-V>m#L6
Gup9u9PB<d~

diff --git a/lib/feedparser/tests/encoding/utf-16be-autodetect.xml b/lib/feedparser/tests/encoding/utf-16be-autodetect.xml
deleted file mode 100644
index 08976b7a5b5813987b2cde40db9010b1991f1edf..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 452
zcmZRuVX$YYV8~_2VNhTwV@PEvVkl<FWXNa8W3XjVVlZUTV=!P)Vo+d6WyoVlX2@qq
zVaR02V@L<fmNJwuq%r6+7&4eKC^6VG*fDT1*f1zE=rZUsa4`fkWHV$k6flG`<T2zh
zq%ssU6f;;cD1c!+Lp(z!LoP!BLq0<hLkR<jufd=WwIP)unW30Lok5d9k0FO4pCO+i
zo1v7UfB~ce+0G<}RIn;81{bjT$qYqc8%v-*fY=t!kjjw5ki(D$wkww*l_7;efgzM3
zguxB!b_E6vhC~LC$sqrwGL$fYTmT|LDiaxs859_t7%~~s859^?8S=nkkjRk7pvl0+
z;L1?JPykgAu@B-y5Sho2&rrgkz>vg{&rrpX&!E5n(giXTJv0><Y#D4B6d2UOu7HIp
Y#D84i@PvddD0YgW;j9mit6~N_0M-phV*mgE

diff --git a/lib/feedparser/tests/encoding/utf-16be-bom.xml b/lib/feedparser/tests/encoding/utf-16be-bom.xml
deleted file mode 100644
index 1f629657d1e9a220e9c86141a881b482d10df6c4..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 464
zcmezOpTUN~o}q#vmm!BifuW2cm7$2Cm?4uPpCOOImO+WZkU@{ZfI*2tfgzP4k0F^M
zpCN@IlOc~G9V}bQP{NSLpvz#$V8)=tV9#L3z{Oz0pva)hpv%C;5X_LxkjYTM5Xz9p
zki(G5P|Q%wV8x&ShVcyX44DkM3<V7N3`Gnj3?RM+gF4iPREA`RVg_{vO$I%N9EN;`
ze1>d>QicKskP2iwlNeILs<;?jz~(126oG9lf%*VqTR1~1Lk>d@LmJqwT!vJJ6b1!`
zP=*i&H>lec7|Izk8A=#37!(+s7%CY`7*ZJ&82lNE7*fC?qQKzGkjPNPkj<dLpuyn8
zkjaqFpuphDkOvNpM20*DO$IIoSB46P0tS%VOW^*5_*Q`-k0GC-gh7EJi6Nh%iXopt
rfdQlo<PP+3Rba4Xuw_tSP-npODHk|oA)yS4r($S`>w{yhn86MJ8|_M{

diff --git a/lib/feedparser/tests/encoding/utf-16be.xml b/lib/feedparser/tests/encoding/utf-16be.xml
deleted file mode 100644
index c9a0f145d5762cb728e8301dd9de11a542b7fb25..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 448
zcmZRuVX$YYV8~_2VNhTwV@PEvVkl<FWXNa8W3XjVVlZUTV=!P)Vo+d6WyoVlX2@qq
zVaR02V@L<fmNJwuq%r6+7&4eKBr&8iC^6VG*fDT1*f1zE=rZUsa4`fkWHV$k6flG`
z<T2zhq%ssU6f;;cD1c!+Lp(z!LoP!BLq0<hLkR<jufd=WwI!7ynW30Lok5d9k0FO4
zpCO+io1v7UfB~ce-CmF?E(RB{`N<4LU>i%IzJS;k&XCHG!;r&}2DU4gA(bJ8L4hHZ
zA%wvV>V5?V4Tcm3kgYiki3~+h6^RVR3<?ZR44Dk+3<?ac40&MxCo<$QXfkjyxH42Q
z6oB=Vz<mYrn*u`~Lq0<Zg91YmLq0<lLq3B714tLhR`ifmV6bJdWl&&HXTbCq7dRXt
SVG4?wVrcm4gX5`~!43eCB1U5X

diff --git a/lib/feedparser/tests/encoding/utf-16le-autodetect.xml b/lib/feedparser/tests/encoding/utf-16le-autodetect.xml
deleted file mode 100644
index 60938826761b28a2527dd4cabff921a2eb935730..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 458
zcmcCvuxF@X$Ysc3P+%xyNM$HuC}zlH$Y;o7uw_tUFl5kUFknz(P+&-9$YV%m$Y)4l
z$YjW4NC(T7GL$f+G3YWFGMF(aG1xQMF>o>1FeozUGUzgJF$6PYGh{LpFoZJXG2}3$
zG88iuGgvVwfMGmCJVPc!E<*uBK0^^h2?L0)!JrPcA(bJSp_oCPL6bp`A%`KKA)g_e
zp_HM30i*)iPLQb}Ra^`%VDpn1ioiCOKz#tQEu0~hA%`J{Aq{L-E<-9q3WEYeC_@N?
z8`SLz3>plH3?P$1{!3*jVF0-RM1oW%G88i?F!(TJGL$fsfPJFC;L4B(4v9pDJO)h$
zE(TYI3WfrxE{LrVe}c$7hJ1z+1_g#BhJ1!9hI|GE29Pe0$>?FKz+lT@%b>uZ4t5JH
YWFfxf0*5Ljgh6ps3=M64aEyU?03v2c(*OVf

diff --git a/lib/feedparser/tests/encoding/utf-16le-bom.xml b/lib/feedparser/tests/encoding/utf-16le-bom.xml
deleted file mode 100644
index 89cb4f776ad403ac77e10c847c7efa18d4a18dae..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 470
zcmezW&xXOCp@JcoA%{VMp^PDwp@^ZFA(J7WA&<e9L5abTL65<JL5V?uA(bJIA(<hc
zA%!86A&(&)EL+M@!jQ(G%V5Z0#-PMt&tS*E#bCpr$e_!h%fQ7D%#h8H$xy%$%8<v9
z!;s2Q%uvi=#h?I&@eJ_{nGCrM1q}HNMGPejAif5JI@E?#hGd3f26YBa20exxhJ1#6
zhHQpXh5`nV3S>J$rh-&)F}Q%uPi80r+gJki0mQa&hE#?eh8%`8uwA(fsSGI$3JjqP
zAq;L%w<|D|Gh{N9Fk~<&FgP((GL$f+GAJ<kGZZnTfI~!q!IvSCp@<=yL4iSo!3V6i
z1negT23LkWaF`@A<S}S6a51<tR4^1UfP7E__btTF3JiG+`3xlt3JggM`3zMI`3wpS
oAYCBWpogvkgDrzCg93v(1Eznuz~KuCYfx+zL&IGk9Csid0DXc?7ytkO

diff --git a/lib/feedparser/tests/encoding/utf-16le.xml b/lib/feedparser/tests/encoding/utf-16le.xml
deleted file mode 100644
index ec8effdc8838c2a5d7470ccb102c4b61ccd01c27..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 454
zcmcCvuxF@X$Ysc3P+%xyNM$HuC}zlH$Y;o7uw_tUFl5kUFknz(P+&-9$YV%m$Y)4l
z$YjW4NC(T7GL$f+G3YWFGMF*sFr+dlG1xQMF>o>1FeozUGUzgJF$6PYGh{LpFoZJX
zfmIYU6f;;cD1c!+Lp(z!LoP!BLq0<hLkR<jufd=WwI!7ynW30Lok5d9k0FO4pCO+i
zo1v7UfB~ce-CmF?E(RBdREA=PWQHQJjU`ZDKx_+VNM*=j$YDqW+m*|Z%8<gKz!1t1
z!r%sVzXF2>Lka`P)*OaJh9annM22Dp1qL66OokGM60i>x7+e|hz@d=HkjJ3Oz{TLo
zP{B|D)>#7g8^nhS40#Os3?&Q-3`q?63{?#I3<?Y&T_C&B!&8C5mcf=mfkB-C(|26p
T(1e66D1M5ep{x&%Ef5a?<p@XJ

diff --git a/lib/feedparser/tests/encoding/utf-32be-autodetect.xml b/lib/feedparser/tests/encoding/utf-32be-autodetect.xml
deleted file mode 100644
index deabb603eee30b20ad973937db10f69f51f2a7d4..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 904
zcmZQzV6b6eV6bOkV5neVV8~@)V8~%$U{GLSU?^i?U`S<PU?^f>U?^r_V8~=(V8~}+
zV8~-&V6bIiU{GRUU@&B0V9;Y=U@(C4LHa;?Kx&eq>QkV4L1O7hdP^A?7)lrz7}6LR
z7<3sJ7>pSh7>uCifZSupz`(!-b)O<s4M-hGESQ0TAscFL0Rsa=DAZjbw}b2lxfg`3
zpnd_l3xwkt7#Khp<QI@%L3%-c0{Ic-7LXhWYcMb{s53AyAo~GiE{G2@7bK?%^*hK;
zkQpEhaudj3Aah}6fcPM@(fyeO4PTg9Ab+_)#Xxp|>;kz9<W`V*ATvO0kUgNVMD|-a
zR3FGKAPlk#qz<GX<WG>>LGb_z15j9nFfcH<LBkXl?jSjkn-dur7+`J&nE}!V(hss9
zM1$M~V}s;C`apU>ZU(WPpz#8VYY^WR8aE)dAoqjRg4_=ZKaih6@}RT_@*}eO$o>PF
zgN{LFfZPXi3rG$Wo*;e|G~I#3V0MA*2Ju1WgY<#?08$GQ2e}C(26HbcZG$jKJt%Hq
pVF3zLQ2K*~7sx)4c_1|)e}Lpb7&+a7!XFeaAdD=okCd;#asXE^M_T{@

diff --git a/lib/feedparser/tests/encoding/utf-32be-bom.xml b/lib/feedparser/tests/encoding/utf-32be-bom.xml
deleted file mode 100644
index f09e8aefd67aeda483feb59d39100d59dcfb420e..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 928
zcmZQz`1hZIfx(7>fx(`EfuVwdfgzWHfgy*1fkA<RfuW3nfgzQFfuV?jfuWdzfgzKD
zfgzuPfgz89fx(u6fkBCZfx(c0fkBUffx!UE2k8Up0jWubs!xIH1&O62=`CeoU?^c=
zU`S(NV9;e?U@&H2U@(H319FcY0|NsW)P0IjH6V2$v0w%UhHR+01q=)fp-^{$+zzrI
z<X#ZAg8BvIE)b4qU|;}YkY7N41?dI(3FJqRTR?Iktiiy*pw7U+fb0j5xgb8sT#%e5
z)bAiWL1ut3$W0)Bfy{-O0pf$qM)zkDG<;!Zf&AqH6$9A;vJ2!ckXu3Kfy@B0LH2;c
z64`IzP<<e`fH24|kUEflkUv3g2gL&@3_xKO!oa}b1`ShKxP#=%p<xQLD+3yKP7DkT
zmC(2XnFCVi4^0;!GeKe?dqCp83=9m3P&rUofW$!I05SvQc2N9-#9X2A1=0@^2k8O%
z2^6NFZ~)1J(j&;<AoD?C0df<vpF!rJV~`mje}mM5<UnBz;#Wb_B1jBo7szf9A7nmA
zAIJ`nT97!%O&~FtdqL?PghA>-@kLCWg8TtWuON(^mO)_!ieC^$7T1S{8%P|4?Eu~u
BN}vD$

diff --git a/lib/feedparser/tests/encoding/utf-32be.xml b/lib/feedparser/tests/encoding/utf-32be.xml
deleted file mode 100644
index f912031039b3b7700391b9a1531c7d04fb354a61..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 896
zcmZQzV6b6eV6bOkV5neVV8~@)V8~%$U{GLSU?^i?U`S<PU?^f>U?^r_V8~=(V8~}+
zV8~-&V6bIiU{GRUU@&B0V9;Y=U@(C4LHa;?Kx&eq>QkV4L1O7hdP^A?7)lrz7}6LR
z7<3sJ7>pSh7>pPg7?Pm&g3JfG%Z`D8feY$RMW|YkdXQK!0|P@g)cgVl28K|m`#^pG
zxdY^G5VnH)3FJNyj%Q$C0AY}yKz;`41^Er+SCE@Pav-e1z`&r+z`%g)7m&FiKFC~<
zoF+63Kz4%60AY}uK>h=n3o`@62bqn_zc8~v{&Ina0mu%JT_AUX+zK)eWCn;0vIi8V
z$bJil>I1n2gh6(J)PeMa{0VY9C_X@801B%R1_lN<XqdvnA0!8IGe{jsJ;;8LS&7iJ
z01^Yqfz*M-KyC!FouKgmienJp6&e>HwIKI`)Pmd#3NMf!LGqw92l5lhOprYwzajev
zWDYt8nE~<>NG(VXlwLsmDrkBGiNWjw*$v`@%m?WM*#S}u5(l{nBnERYC{2SfNIfVn
gh>0(dKR{^_gpt!JD7-=80>a4R`p_^0iG#2m0M435TL1t6

diff --git a/lib/feedparser/tests/encoding/utf-32le-autodetect.xml b/lib/feedparser/tests/encoding/utf-32le-autodetect.xml
deleted file mode 100644
index 37fd72a64934d76635c9d70c729326812a20b243..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 916
zcmcCvU|_IkU|^_VU|`5)U|`5$U|>*SU|=X?U|>jPU|=X>U|=X_U|`5(U|`5+U|`5&
zU|_IiU|>*UU|=w0U|`T=U|=wS@<IAQdO&KDq3TnhdO>38NP0^d7#K<z7#PwR7#MUJ
z7#NHh7#NJ8=78K|$H2hA#lXM-a-Skp4M-hGESQ0TAscFL0Rsa=DAZjbw}b2lxfg`3
zpnd_l3xwkt7#Khp<QI@%L3%-c0{Ic-7LXhWYcMb{s53AyAo~GiE{G2@7bK?%^*hK;
zkQpEhaudj3Aah}6fcPM@(ftY12Qm|87RX;N&@czt0kR9^E|6P6=7G!ru|f8L!V=kU
z;ZS`bGeH<+7f2mQKggdTdqD933IkABg)lHMxIx1d7VaQ9ked@37#Lt~2AKiU2htC+
zA4G%P1!IHcK>9#>KyC)HeW39IQUk&u_ki?)<XoZg1kwlc3rHWxFQBjl`5z<?N{1l-
zg7m=bLiQ`j9CQpa1LRhaeIU6cXxgiS(jYOIT_C$be31DdeIPqPdO_kKH-W@J=@g^}
wl+HmI#0JF^EL=e03rdTyu!H##qz2><kQ@jjr(sZBfWiobk;V0q@)%4G05;S}%K!iX

diff --git a/lib/feedparser/tests/encoding/utf-32le-bom.xml b/lib/feedparser/tests/encoding/utf-32le-bom.xml
deleted file mode 100644
index c62cae4039b2659b45eaeb949896ddad88563ffe..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 940
zcmezWkAcC4fq}uEfq|idfq@~Hfq@~1fq_ARfq|infq@~Ffq|ijfq|izfq@~Dfq@~P
zfq@~9fq}u6fq_AZfq}u0fq_Affq}sQ$_MEK=>e%phN@42>II3VBk3(=U|=X=U|>jN
zU|`T?U|=w2U|=wUngeo=9RmXc7X!q7icmEmbs(`|1_p*~sJR6U3=E-AcY)jvvLEDL
z5VnH)1>`Oej%Q$C0AY|{Kz;@31^Ef&N03`Uav-e1z`&r+z`%g)2avfSKFC~<oF>%o
zAUi>3fH25SAb)|(g_!~3gUm+vCrBU2Oqf|9f4M-z9ApQ`E|9xGZUvbKG6Td0*#ino
zWWR+&^?}R;VUS%Qbs+s9e}e1*#RDh|Kw%Zaz`)=J4O3XSgXGGgVG6P<0~&Tt3=9mF
z(6|Db15)P?O&1_DL1G|#K;pg(3=D}-IZ#-D#6aQTgJdqqY>*p4`atro(6|Gc1@a$A
zKgfTe@CAhlNFJ0nL16&W0}2<A8OZ(znS+i&W`M!~q!uKX1Wk`sP#Po#vkPQ5hz~L!
zqz_~VNH0hn<R*|9DD8sOfYLq)gV><BBPM=9{s5(25Jpbdpl}1lH3%b%>qEm3Bo4wL
FIRNdFOb`G7

diff --git a/lib/feedparser/tests/encoding/utf-32le.xml b/lib/feedparser/tests/encoding/utf-32le.xml
deleted file mode 100644
index 4b83b240f5350c646ef41222282d5e7f84000698..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 908
zcmcCvU|_IkU|^_VU|`5)U|`5$U|>*SU|=X?U|>jPU|=X>U|=X_U|`5(U|`5+U|`5&
zU|_IiU|>*UU|=w0U|`T=U|=wS@<IAQdO&KDq3TnhdO>38NP0^d7#K<z7#PwR7#MUJ
z7#NHh7#NJ8_Jhm-nGbT89RmXc7Xt$W$eoH%wIKB%v0w%UhHR+$1q=)fp-}gM`~Wfo
z<ZckQg8B*MJ`j#)U|;}Yke@()2I&R)4dhpln?Q0Ptiiy*pw7U+fb18Lxgb8sT#%e5
zGz>s?g3JJ6kefjM1DOjm1H=cJjmy6<vq1iGfrdTE4v<|ScY)jrG7n@1hz+s_6sE|2
z3y10hxdntlc7fD^^n?5fayuwKKw$t1s}KeT1~+J!!onXU2XZq=9Y{UMevny-(6j&&
z1IdBZfy6*=1hIXf@c?ok2!r&1)Pm$(q45IJ2XZ?|AIR;XumkxQBo9h|Ape2%fb0aB
zf$TSsIp`Q<2FQOPwII19Xqu~n(jYOIT_C$be31DdeIPqPdO_kKH-W@J=@X;|l)gb2
l#0JF+F>wd-2Pj>FFmjp&g*_;YKp0tE9~zz@aS#T{0RX&rN7VoT

diff --git a/lib/feedparser/tests/encoding/utf-8-bom.xml b/lib/feedparser/tests/encoding/utf-8-bom.xml
deleted file mode 100644
index 079031567..000000000
--- a/lib/feedparser/tests/encoding/utf-8-bom.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-SkipUnless:   __import__('codecs').lookup('utf-8')
-Description:  Wellformed UTF-8 with Byte Order Mark
-Expect:       not bozo and encoding == 'utf-8'
--->
-<rss>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/utf16.xml b/lib/feedparser/tests/encoding/utf16.xml
deleted file mode 100644
index 053b03e347ca6a3d4a6d8140979ba3b5acf4735d..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 362
zcmZRuVX$YYV8~_2VNhTwV@PEvVkl<FWXNa8W3XjVVlZUTV=!P)Vo+d6WyoVlX2@qq
zVaR02V@L<fmNJwuq%jyWm@z0Z*fZEMa5300C^G0W=rV9I1T$naWHJ;mgfiqY<S?W%
z6f+bvSTQJoVLU@TLncEmLjglRLlHv>1BkD|pbj-Zl_8m-m_eOElR=LmhasOKpCOx}
zl%aqDqyk|hNS=$q1#EIMLlM}n5~#}|_8`=9F}N~RFcdI=OfG@D0^$}0hCGIRh7tw^
zh9ri3hAM`91_g#hhCGH8EPhsCuw}4iP+(AJfS9cd_InaTDuX%$7uesBFaU*NF*H2%
K!691AU<UwwYB)mx

diff --git a/lib/feedparser/tests/encoding/utf_16.xml b/lib/feedparser/tests/encoding/utf_16.xml
deleted file mode 100644
index 63dd6a69268571f28b86daed795de7b18af25010..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 368
zcmZRuVX$YYV8~_2VNhTwV@PEvVkl<FWXNa8W3XjVVlZUTV=!P)Vo+d6WyoVlX2@qq
zVaR02V@L<fmNJwuq%p)Z7&4eKC^6VG*fDT1*f1zE=rZUsa4`fkWHV$k6flG`<T2zh
zq%ssU6f;;cD1c!+Lp(z!LoP!BLq0<hLkR<jufd=WwIP)unW30Lok5d9k0FO4pCO+i
zo1v7UfB~ce*-nrOE(RB{*~tt=VB1Qdu7}u!teT6#m7#*6fB|HB3EU+R_b4#rG2}Cp
zFeor2G2}B;G2}BSFeEbMF{EJexdMYNgDrysgE|AmbX~CjlNeGN)ET(IeusnuC?t!a
MVWJNX*J1`c0RA{RU;qFB

diff --git a/lib/feedparser/tests/encoding/utf_32.xml b/lib/feedparser/tests/encoding/utf_32.xml
deleted file mode 100644
index 7489048375233332b0547314e1fe96840a2454c4..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 736
zcmZQzV6b6eV6bOkV5neVV8~@)V8~%$U{GLSU?^i?U`S<PU?^f>U?^r_V8~=(V8~}+
zV8~-&V6bIiU{GRUU@&B0V9;Y=U@(C4LHa;?Kx&eq>QkV4L1O7hdP^A?7)lrz7}6LR
z7~&Zi7>pSh7>uCifZSupz`(!-b)O;w1A{IUgT#Uv7#Oml<`yt8FoZ(g1#&ycevo@X
z*b3?wkh?$_WDf{~`~vbTNH54wAU}fK0+It^4F(1Vbp{3oWIuq+1@S@Vg5)%zeh1kJ
zG6RG`ZUXrWWG>7M5FcbVx<6rNfc)bE4Qr6uAUi<r0l5)m4oEME4Kg1ThRA-xWj4r6
zS7@Aq%z(KaWEQf1P?(@&kR2eqKx#p9Nziz#g3=(dL}++};ugdQnGezjayv*bNF3y5
zkQgY=L25v0282Oukl&Hr4vJe?{DbTRnFmq>@&`x`gptz&D11O+1;WVU`bg;&EC&F&
C5II-?

diff --git a/lib/feedparser/tests/encoding/x80_437.xml b/lib/feedparser/tests/encoding/x80_437.xml
deleted file mode 100644
index 747bffe65..000000000
--- a/lib/feedparser/tests/encoding/x80_437.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="437"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('437')
-Description: \x80 character in 437 encoding
-Expect:      not bozo and feed['title'] == u'\xc7'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_850.xml b/lib/feedparser/tests/encoding/x80_850.xml
deleted file mode 100644
index 89b51ddf0..000000000
--- a/lib/feedparser/tests/encoding/x80_850.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="850"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('850')
-Description: \x80 character in 850 encoding
-Expect:      not bozo and feed['title'] == u'\xc7'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_852.xml b/lib/feedparser/tests/encoding/x80_852.xml
deleted file mode 100644
index 1fb1898e0..000000000
--- a/lib/feedparser/tests/encoding/x80_852.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="852"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('852')
-Description: \x80 character in 852 encoding
-Expect:      not bozo and feed['title'] == u'\xc7'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_855.xml b/lib/feedparser/tests/encoding/x80_855.xml
deleted file mode 100644
index fbd5240f4..000000000
--- a/lib/feedparser/tests/encoding/x80_855.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="855"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('855')
-Description: \x80 character in 855 encoding
-Expect:      not bozo and feed['title'] == u'\u0452'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_857.xml b/lib/feedparser/tests/encoding/x80_857.xml
deleted file mode 100644
index 2ebe08477..000000000
--- a/lib/feedparser/tests/encoding/x80_857.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="857"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('857')
-Description: \x80 character in 857 encoding
-Expect:      not bozo and feed['title'] == u'\xc7'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_860.xml b/lib/feedparser/tests/encoding/x80_860.xml
deleted file mode 100644
index dbe53c9cc..000000000
--- a/lib/feedparser/tests/encoding/x80_860.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="860"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('860')
-Description: \x80 character in 860 encoding
-Expect:      not bozo and feed['title'] == u'\xc7'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_861.xml b/lib/feedparser/tests/encoding/x80_861.xml
deleted file mode 100644
index a2a69ddfb..000000000
--- a/lib/feedparser/tests/encoding/x80_861.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="861"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('861')
-Description: \x80 character in 861 encoding
-Expect:      not bozo and feed['title'] == u'\xc7'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_862.xml b/lib/feedparser/tests/encoding/x80_862.xml
deleted file mode 100644
index 70947b414..000000000
--- a/lib/feedparser/tests/encoding/x80_862.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="862"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('862')
-Description: \x80 character in 862 encoding
-Expect:      not bozo and feed['title'] == u'\u05d0'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_863.xml b/lib/feedparser/tests/encoding/x80_863.xml
deleted file mode 100644
index dce7c3600..000000000
--- a/lib/feedparser/tests/encoding/x80_863.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="863"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('863')
-Description: \x80 character in 863 encoding
-Expect:      not bozo and feed['title'] == u'\xc7'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_865.xml b/lib/feedparser/tests/encoding/x80_865.xml
deleted file mode 100644
index bfe7e3a62..000000000
--- a/lib/feedparser/tests/encoding/x80_865.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="865"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('865')
-Description: \x80 character in 865 encoding
-Expect:      not bozo and feed['title'] == u'\xc7'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_866.xml b/lib/feedparser/tests/encoding/x80_866.xml
deleted file mode 100644
index d83badab3..000000000
--- a/lib/feedparser/tests/encoding/x80_866.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="866"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('866')
-Description: \x80 character in 866 encoding
-Expect:      not bozo and feed['title'] == u'\u0410'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_cp037.xml b/lib/feedparser/tests/encoding/x80_cp037.xml
deleted file mode 100644
index bf80bdeb9..000000000
--- a/lib/feedparser/tests/encoding/x80_cp037.xml
+++ /dev/null
@@ -1 +0,0 @@
-Lo���@�������~�K�@��������~�����on%LZ``%⒉�䕓���z@@mm������mmM}������}]K������M}�����}]%ą���������z@���@���������@��@�����@��������%ŧ����z@@@@@@���@����@���@����K�����@~~@�}ৄ�}%``n%L����@�������~�K�@�����~����zaa����K���a����a��{n%L�����n�La�����n%La����n
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_cp1125.xml b/lib/feedparser/tests/encoding/x80_cp1125.xml
deleted file mode 100644
index ab540d1ee..000000000
--- a/lib/feedparser/tests/encoding/x80_cp1125.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="cp1125"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('cp1125')
-Description: \x80 character in cp1125 encoding
-Expect:      not bozo and feed['title'] == u'\u0410'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_cp1250.xml b/lib/feedparser/tests/encoding/x80_cp1250.xml
deleted file mode 100644
index c32c6abe1..000000000
--- a/lib/feedparser/tests/encoding/x80_cp1250.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="cp1250"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('cp1250')
-Description: \x80 character in cp1250 encoding
-Expect:      not bozo and feed['title'] == u'\u20ac'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_cp1251.xml b/lib/feedparser/tests/encoding/x80_cp1251.xml
deleted file mode 100644
index 5892eb393..000000000
--- a/lib/feedparser/tests/encoding/x80_cp1251.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="cp1251"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('cp1251')
-Description: \x80 character in cp1251 encoding
-Expect:      not bozo and feed['title'] == u'\u0402'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_cp1252.xml b/lib/feedparser/tests/encoding/x80_cp1252.xml
deleted file mode 100644
index 960f8dfc3..000000000
--- a/lib/feedparser/tests/encoding/x80_cp1252.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="cp1252"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('cp1252')
-Description: \x80 character in cp1252 encoding
-Expect:      not bozo and feed['title'] == u'\u20ac'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_cp1253.xml b/lib/feedparser/tests/encoding/x80_cp1253.xml
deleted file mode 100644
index 0f3fae968..000000000
--- a/lib/feedparser/tests/encoding/x80_cp1253.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="cp1253"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('cp1253')
-Description: \x80 character in cp1253 encoding
-Expect:      not bozo and feed['title'] == u'\u20ac'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_cp1254.xml b/lib/feedparser/tests/encoding/x80_cp1254.xml
deleted file mode 100644
index 5a5160f56..000000000
--- a/lib/feedparser/tests/encoding/x80_cp1254.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="cp1254"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('cp1254')
-Description: \x80 character in cp1254 encoding
-Expect:      not bozo and feed['title'] == u'\u20ac'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_cp1255.xml b/lib/feedparser/tests/encoding/x80_cp1255.xml
deleted file mode 100644
index 64fa7b6a0..000000000
--- a/lib/feedparser/tests/encoding/x80_cp1255.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="cp1255"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('cp1255')
-Description: \x80 character in cp1255 encoding
-Expect:      not bozo and feed['title'] == u'\u20ac'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_cp1256.xml b/lib/feedparser/tests/encoding/x80_cp1256.xml
deleted file mode 100644
index 87ad5178e..000000000
--- a/lib/feedparser/tests/encoding/x80_cp1256.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="cp1256"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('cp1256')
-Description: \x80 character in cp1256 encoding
-Expect:      not bozo and feed['title'] == u'\u20ac'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_cp1257.xml b/lib/feedparser/tests/encoding/x80_cp1257.xml
deleted file mode 100644
index 9496f0b56..000000000
--- a/lib/feedparser/tests/encoding/x80_cp1257.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="cp1257"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('cp1257')
-Description: \x80 character in cp1257 encoding
-Expect:      not bozo and feed['title'] == u'\u20ac'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_cp1258.xml b/lib/feedparser/tests/encoding/x80_cp1258.xml
deleted file mode 100644
index 4fc927e72..000000000
--- a/lib/feedparser/tests/encoding/x80_cp1258.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="cp1258"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('cp1258')
-Description: \x80 character in cp1258 encoding
-Expect:      not bozo and feed['title'] == u'\u20ac'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_cp437.xml b/lib/feedparser/tests/encoding/x80_cp437.xml
deleted file mode 100644
index d6fb55caf..000000000
--- a/lib/feedparser/tests/encoding/x80_cp437.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="cp437"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('cp437')
-Description: \x80 character in cp437 encoding
-Expect:      not bozo and feed['title'] == u'\xc7'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_cp500.xml b/lib/feedparser/tests/encoding/x80_cp500.xml
deleted file mode 100644
index bc7abbdcd..000000000
--- a/lib/feedparser/tests/encoding/x80_cp500.xml
+++ /dev/null
@@ -1 +0,0 @@
-Lo���@�������~�K�@��������~�����on%LO``%⒉�䕓���z@@mm������mmM}������}]K������M}�����}]%ą���������z@���@���������@��@�����@��������%ŧ����z@@@@@@���@����@���@����K�����@~~@�}ৄ�}%``n%L����@�������~�K�@�����~����zaa����K���a����a��{n%L�����n�La�����n%La����n
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_cp737.xml b/lib/feedparser/tests/encoding/x80_cp737.xml
deleted file mode 100644
index 6798237df..000000000
--- a/lib/feedparser/tests/encoding/x80_cp737.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="cp737"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('cp737')
-Description: \x80 character in cp737 encoding
-Expect:      not bozo and feed['title'] == u'\u0391'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_cp775.xml b/lib/feedparser/tests/encoding/x80_cp775.xml
deleted file mode 100644
index d04ed5f83..000000000
--- a/lib/feedparser/tests/encoding/x80_cp775.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="cp775"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('cp775')
-Description: \x80 character in cp775 encoding
-Expect:      not bozo and feed['title'] == u'\u0106'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_cp850.xml b/lib/feedparser/tests/encoding/x80_cp850.xml
deleted file mode 100644
index b510c43fc..000000000
--- a/lib/feedparser/tests/encoding/x80_cp850.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="cp850"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('cp850')
-Description: \x80 character in cp850 encoding
-Expect:      not bozo and feed['title'] == u'\xc7'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_cp852.xml b/lib/feedparser/tests/encoding/x80_cp852.xml
deleted file mode 100644
index 1c7d3e952..000000000
--- a/lib/feedparser/tests/encoding/x80_cp852.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="cp852"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('cp852')
-Description: \x80 character in cp852 encoding
-Expect:      not bozo and feed['title'] == u'\xc7'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_cp855.xml b/lib/feedparser/tests/encoding/x80_cp855.xml
deleted file mode 100644
index 069b05952..000000000
--- a/lib/feedparser/tests/encoding/x80_cp855.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="cp855"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('cp855')
-Description: \x80 character in cp855 encoding
-Expect:      not bozo and feed['title'] == u'\u0452'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_cp856.xml b/lib/feedparser/tests/encoding/x80_cp856.xml
deleted file mode 100644
index d4d940ab1..000000000
--- a/lib/feedparser/tests/encoding/x80_cp856.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="cp856"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('cp856')
-Description: \x80 character in cp856 encoding
-Expect:      not bozo and feed['title'] == u'\u05d0'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_cp857.xml b/lib/feedparser/tests/encoding/x80_cp857.xml
deleted file mode 100644
index 5682d7fa2..000000000
--- a/lib/feedparser/tests/encoding/x80_cp857.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="cp857"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('cp857')
-Description: \x80 character in cp857 encoding
-Expect:      not bozo and feed['title'] == u'\xc7'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_cp860.xml b/lib/feedparser/tests/encoding/x80_cp860.xml
deleted file mode 100644
index a572284a0..000000000
--- a/lib/feedparser/tests/encoding/x80_cp860.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="cp860"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('cp860')
-Description: \x80 character in cp860 encoding
-Expect:      not bozo and feed['title'] == u'\xc7'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_cp861.xml b/lib/feedparser/tests/encoding/x80_cp861.xml
deleted file mode 100644
index fb1a529d6..000000000
--- a/lib/feedparser/tests/encoding/x80_cp861.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="cp861"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('cp861')
-Description: \x80 character in cp861 encoding
-Expect:      not bozo and feed['title'] == u'\xc7'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_cp862.xml b/lib/feedparser/tests/encoding/x80_cp862.xml
deleted file mode 100644
index e9121d0f7..000000000
--- a/lib/feedparser/tests/encoding/x80_cp862.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="cp862"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('cp862')
-Description: \x80 character in cp862 encoding
-Expect:      not bozo and feed['title'] == u'\u05d0'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_cp863.xml b/lib/feedparser/tests/encoding/x80_cp863.xml
deleted file mode 100644
index 3a2de4f2c..000000000
--- a/lib/feedparser/tests/encoding/x80_cp863.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="cp863"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('cp863')
-Description: \x80 character in cp863 encoding
-Expect:      not bozo and feed['title'] == u'\xc7'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_cp864.xml b/lib/feedparser/tests/encoding/x80_cp864.xml
deleted file mode 100644
index fa501d7ab..000000000
--- a/lib/feedparser/tests/encoding/x80_cp864.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="cp864"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('cp864')
-Description: \x80 character in cp864 encoding
-Expect:      not bozo and feed['title'] == u'\xb0'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_cp865.xml b/lib/feedparser/tests/encoding/x80_cp865.xml
deleted file mode 100644
index 1a59191f6..000000000
--- a/lib/feedparser/tests/encoding/x80_cp865.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="cp865"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('cp865')
-Description: \x80 character in cp865 encoding
-Expect:      not bozo and feed['title'] == u'\xc7'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_cp866.xml b/lib/feedparser/tests/encoding/x80_cp866.xml
deleted file mode 100644
index 62c9e9582..000000000
--- a/lib/feedparser/tests/encoding/x80_cp866.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="cp866"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('cp866')
-Description: \x80 character in cp866 encoding
-Expect:      not bozo and feed['title'] == u'\u0410'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_cp874.xml b/lib/feedparser/tests/encoding/x80_cp874.xml
deleted file mode 100644
index 80dd0ffd5..000000000
--- a/lib/feedparser/tests/encoding/x80_cp874.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="cp874"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('cp874')
-Description: \x80 character in cp874 encoding
-Expect:      not bozo and feed['title'] == u'\u20ac'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_cp875.xml b/lib/feedparser/tests/encoding/x80_cp875.xml
deleted file mode 100644
index b8b0d245a..000000000
--- a/lib/feedparser/tests/encoding/x80_cp875.xml
+++ /dev/null
@@ -1 +0,0 @@
-Lo���@�������~�K�@��������~�����on%LO``%⒉�䕓���z@@mm������mmM}������}]K������M}�����}]%ą���������z@���@���������@��@�����@��������%ŧ����z@@@@@@���@����@���@����K�����@~~@�}�����}%``n%L����@�������~�K�@�����~����zaa����K���a����a��{n%L�����n�La�����n%La����n
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_cp_is.xml b/lib/feedparser/tests/encoding/x80_cp_is.xml
deleted file mode 100644
index 231ac77bf..000000000
--- a/lib/feedparser/tests/encoding/x80_cp_is.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="cp_is"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('cp_is')
-Description: \x80 character in cp_is encoding
-Expect:      not bozo and feed['title'] == u'\xc7'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_csibm037.xml b/lib/feedparser/tests/encoding/x80_csibm037.xml
deleted file mode 100644
index de1073be6..000000000
--- a/lib/feedparser/tests/encoding/x80_csibm037.xml
+++ /dev/null
@@ -1 +0,0 @@
-Lo���@�������~�K�@��������~��������on%LZ``%⒉�䕓���z@@mm������mmM}������}]K������M}��������}]%ą���������z@���@���������@��@��������@��������%ŧ����z@@@@@@���@����@���@����K�����@~~@�}ৄ�}%``n%L����@�������~�K�@�����~����zaa����K���a����a��{n%L�����n�La�����n%La����n
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_csibm500.xml b/lib/feedparser/tests/encoding/x80_csibm500.xml
deleted file mode 100644
index 2a499828e..000000000
--- a/lib/feedparser/tests/encoding/x80_csibm500.xml
+++ /dev/null
@@ -1 +0,0 @@
-Lo���@�������~�K�@��������~��������on%LO``%⒉�䕓���z@@mm������mmM}������}]K������M}��������}]%ą���������z@���@���������@��@��������@��������%ŧ����z@@@@@@���@����@���@����K�����@~~@�}ৄ�}%``n%L����@�������~�K�@�����~����zaa����K���a����a��{n%L�����n�La�����n%La����n
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_csibm855.xml b/lib/feedparser/tests/encoding/x80_csibm855.xml
deleted file mode 100644
index cf078a747..000000000
--- a/lib/feedparser/tests/encoding/x80_csibm855.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="csibm855"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('csibm855')
-Description: \x80 character in csibm855 encoding
-Expect:      not bozo and feed['title'] == u'\u0452'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_csibm857.xml b/lib/feedparser/tests/encoding/x80_csibm857.xml
deleted file mode 100644
index b2df46272..000000000
--- a/lib/feedparser/tests/encoding/x80_csibm857.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="csibm857"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('csibm857')
-Description: \x80 character in csibm857 encoding
-Expect:      not bozo and feed['title'] == u'\xc7'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_csibm860.xml b/lib/feedparser/tests/encoding/x80_csibm860.xml
deleted file mode 100644
index 28269f79b..000000000
--- a/lib/feedparser/tests/encoding/x80_csibm860.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="csibm860"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('csibm860')
-Description: \x80 character in csibm860 encoding
-Expect:      not bozo and feed['title'] == u'\xc7'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_csibm861.xml b/lib/feedparser/tests/encoding/x80_csibm861.xml
deleted file mode 100644
index 2300d2d96..000000000
--- a/lib/feedparser/tests/encoding/x80_csibm861.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="csibm861"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('csibm861')
-Description: \x80 character in csibm861 encoding
-Expect:      not bozo and feed['title'] == u'\xc7'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_csibm863.xml b/lib/feedparser/tests/encoding/x80_csibm863.xml
deleted file mode 100644
index af23c2bdf..000000000
--- a/lib/feedparser/tests/encoding/x80_csibm863.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="csibm863"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('csibm863')
-Description: \x80 character in csibm863 encoding
-Expect:      not bozo and feed['title'] == u'\xc7'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_csibm864.xml b/lib/feedparser/tests/encoding/x80_csibm864.xml
deleted file mode 100644
index 6d820bec1..000000000
--- a/lib/feedparser/tests/encoding/x80_csibm864.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="csibm864"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('csibm864')
-Description: \x80 character in csibm864 encoding
-Expect:      not bozo and feed['title'] == u'\xb0'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_csibm865.xml b/lib/feedparser/tests/encoding/x80_csibm865.xml
deleted file mode 100644
index 5ca7a89ab..000000000
--- a/lib/feedparser/tests/encoding/x80_csibm865.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="csibm865"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('csibm865')
-Description: \x80 character in csibm865 encoding
-Expect:      not bozo and feed['title'] == u'\xc7'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_csibm866.xml b/lib/feedparser/tests/encoding/x80_csibm866.xml
deleted file mode 100644
index 0c962ed57..000000000
--- a/lib/feedparser/tests/encoding/x80_csibm866.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="csibm866"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('csibm866')
-Description: \x80 character in csibm866 encoding
-Expect:      not bozo and feed['title'] == u'\u0410'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_cskoi8r.xml b/lib/feedparser/tests/encoding/x80_cskoi8r.xml
deleted file mode 100644
index 2a41be100..000000000
--- a/lib/feedparser/tests/encoding/x80_cskoi8r.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="cskoi8r"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('cskoi8r')
-Description: \x80 character in cskoi8r encoding
-Expect:      not bozo and feed['title'] == u'\u2500'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_csmacintosh.xml b/lib/feedparser/tests/encoding/x80_csmacintosh.xml
deleted file mode 100644
index 3d387895c..000000000
--- a/lib/feedparser/tests/encoding/x80_csmacintosh.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="csmacintosh"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('csmacintosh')
-Description: \x80 character in csmacintosh encoding
-Expect:      not bozo and feed['title'] == u'\xc4'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_cspc775baltic.xml b/lib/feedparser/tests/encoding/x80_cspc775baltic.xml
deleted file mode 100644
index e5b9993f3..000000000
--- a/lib/feedparser/tests/encoding/x80_cspc775baltic.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="cspc775baltic"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('cspc775baltic')
-Description: \x80 character in cspc775baltic encoding
-Expect:      not bozo and feed['title'] == u'\u0106'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_cspc850multilingual.xml b/lib/feedparser/tests/encoding/x80_cspc850multilingual.xml
deleted file mode 100644
index 21f5f7dc3..000000000
--- a/lib/feedparser/tests/encoding/x80_cspc850multilingual.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="cspc850multilingual"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('cspc850multilingual')
-Description: \x80 character in cspc850multilingual encoding
-Expect:      not bozo and feed['title'] == u'\xc7'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_cspc862latinhebrew.xml b/lib/feedparser/tests/encoding/x80_cspc862latinhebrew.xml
deleted file mode 100644
index b282482a6..000000000
--- a/lib/feedparser/tests/encoding/x80_cspc862latinhebrew.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="cspc862latinhebrew"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('cspc862latinhebrew')
-Description: \x80 character in cspc862latinhebrew encoding
-Expect:      not bozo and feed['title'] == u'\u05d0'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_cspc8codepage437.xml b/lib/feedparser/tests/encoding/x80_cspc8codepage437.xml
deleted file mode 100644
index 74dffe055..000000000
--- a/lib/feedparser/tests/encoding/x80_cspc8codepage437.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="cspc8codepage437"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('cspc8codepage437')
-Description: \x80 character in cspc8codepage437 encoding
-Expect:      not bozo and feed['title'] == u'\xc7'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_cspcp852.xml b/lib/feedparser/tests/encoding/x80_cspcp852.xml
deleted file mode 100644
index bb0b3f2f1..000000000
--- a/lib/feedparser/tests/encoding/x80_cspcp852.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="cspcp852"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('cspcp852')
-Description: \x80 character in cspcp852 encoding
-Expect:      not bozo and feed['title'] == u'\xc7'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_dbcs.xml b/lib/feedparser/tests/encoding/x80_dbcs.xml
deleted file mode 100644
index 6d7ff4157..000000000
--- a/lib/feedparser/tests/encoding/x80_dbcs.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="dbcs"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('dbcs')
-Description: \x80 character in dbcs encoding
-Expect:      not bozo and feed['title'] == u'\u20ac'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_ebcdic-cp-be.xml b/lib/feedparser/tests/encoding/x80_ebcdic-cp-be.xml
deleted file mode 100644
index 605593c4d..000000000
--- a/lib/feedparser/tests/encoding/x80_ebcdic-cp-be.xml
+++ /dev/null
@@ -1 +0,0 @@
-Lo���@�������~�K�@��������~������`��`��on%LO``%⒉�䕓���z@@mm������mmM}������}]K������M}������`��`��}]%ą���������z@���@���������@��@������`��`��@��������%ŧ����z@@@@@@���@����@���@����K�����@~~@�}ৄ�}%``n%L����@�������~�K�@�����~����zaa����K���a����a��{n%L�����n�La�����n%La����n
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_ebcdic-cp-ca.xml b/lib/feedparser/tests/encoding/x80_ebcdic-cp-ca.xml
deleted file mode 100644
index 346fa178a..000000000
--- a/lib/feedparser/tests/encoding/x80_ebcdic-cp-ca.xml
+++ /dev/null
@@ -1 +0,0 @@
-Lo���@�������~�K�@��������~������`��`��on%LZ``%⒉�䕓���z@@mm������mmM}������}]K������M}������`��`��}]%ą���������z@���@���������@��@������`��`��@��������%ŧ����z@@@@@@���@����@���@����K�����@~~@�}ৄ�}%``n%L����@�������~�K�@�����~����zaa����K���a����a��{n%L�����n�La�����n%La����n
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_ebcdic-cp-ch.xml b/lib/feedparser/tests/encoding/x80_ebcdic-cp-ch.xml
deleted file mode 100644
index 1ed34d98e..000000000
--- a/lib/feedparser/tests/encoding/x80_ebcdic-cp-ch.xml
+++ /dev/null
@@ -1 +0,0 @@
-Lo���@�������~�K�@��������~������`��`��on%LO``%⒉�䕓���z@@mm������mmM}������}]K������M}������`��`��}]%ą���������z@���@���������@��@������`��`��@��������%ŧ����z@@@@@@���@����@���@����K�����@~~@�}ৄ�}%``n%L����@�������~�K�@�����~����zaa����K���a����a��{n%L�����n�La�����n%La����n
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_ebcdic-cp-nl.xml b/lib/feedparser/tests/encoding/x80_ebcdic-cp-nl.xml
deleted file mode 100644
index 158a9b889..000000000
--- a/lib/feedparser/tests/encoding/x80_ebcdic-cp-nl.xml
+++ /dev/null
@@ -1 +0,0 @@
-Lo���@�������~�K�@��������~������`��`��on%LZ``%⒉�䕓���z@@mm������mmM}������}]K������M}������`��`��}]%ą���������z@���@���������@��@������`��`��@��������%ŧ����z@@@@@@���@����@���@����K�����@~~@�}ৄ�}%``n%L����@�������~�K�@�����~����zaa����K���a����a��{n%L�����n�La�����n%La����n
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_ebcdic-cp-us.xml b/lib/feedparser/tests/encoding/x80_ebcdic-cp-us.xml
deleted file mode 100644
index 9bc45ffac..000000000
--- a/lib/feedparser/tests/encoding/x80_ebcdic-cp-us.xml
+++ /dev/null
@@ -1 +0,0 @@
-Lo���@�������~�K�@��������~������`��`��on%LZ``%⒉�䕓���z@@mm������mmM}������}]K������M}������`��`��}]%ą���������z@���@���������@��@������`��`��@��������%ŧ����z@@@@@@���@����@���@����K�����@~~@�}ৄ�}%``n%L����@�������~�K�@�����~����zaa����K���a����a��{n%L�����n�La�����n%La����n
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_ebcdic-cp-wt.xml b/lib/feedparser/tests/encoding/x80_ebcdic-cp-wt.xml
deleted file mode 100644
index 692714356..000000000
--- a/lib/feedparser/tests/encoding/x80_ebcdic-cp-wt.xml
+++ /dev/null
@@ -1 +0,0 @@
-Lo���@�������~�K�@��������~������`��`��on%LZ``%⒉�䕓���z@@mm������mmM}������}]K������M}������`��`��}]%ą���������z@���@���������@��@������`��`��@��������%ŧ����z@@@@@@���@����@���@����K�����@~~@�}ৄ�}%``n%L����@�������~�K�@�����~����zaa����K���a����a��{n%L�����n�La�����n%La����n
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_ebcdic_cp_be.xml b/lib/feedparser/tests/encoding/x80_ebcdic_cp_be.xml
deleted file mode 100644
index fe4d13b63..000000000
--- a/lib/feedparser/tests/encoding/x80_ebcdic_cp_be.xml
+++ /dev/null
@@ -1 +0,0 @@
-Lo���@�������~�K�@��������~������m��m��on%LO``%⒉�䕓���z@@mm������mmM}������}]K������M}������m��m��}]%ą���������z@���@���������@��@������m��m��@��������%ŧ����z@@@@@@���@����@���@����K�����@~~@�}ৄ�}%``n%L����@�������~�K�@�����~����zaa����K���a����a��{n%L�����n�La�����n%La����n
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_ebcdic_cp_ca.xml b/lib/feedparser/tests/encoding/x80_ebcdic_cp_ca.xml
deleted file mode 100644
index 1999ff5f2..000000000
--- a/lib/feedparser/tests/encoding/x80_ebcdic_cp_ca.xml
+++ /dev/null
@@ -1 +0,0 @@
-Lo���@�������~�K�@��������~������m��m��on%LZ``%⒉�䕓���z@@mm������mmM}������}]K������M}������m��m��}]%ą���������z@���@���������@��@������m��m��@��������%ŧ����z@@@@@@���@����@���@����K�����@~~@�}ৄ�}%``n%L����@�������~�K�@�����~����zaa����K���a����a��{n%L�����n�La�����n%La����n
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_ebcdic_cp_ch.xml b/lib/feedparser/tests/encoding/x80_ebcdic_cp_ch.xml
deleted file mode 100644
index 8a7d36df9..000000000
--- a/lib/feedparser/tests/encoding/x80_ebcdic_cp_ch.xml
+++ /dev/null
@@ -1 +0,0 @@
-Lo���@�������~�K�@��������~������m��m��on%LO``%⒉�䕓���z@@mm������mmM}������}]K������M}������m��m��}]%ą���������z@���@���������@��@������m��m��@��������%ŧ����z@@@@@@���@����@���@����K�����@~~@�}ৄ�}%``n%L����@�������~�K�@�����~����zaa����K���a����a��{n%L�����n�La�����n%La����n
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_ebcdic_cp_nl.xml b/lib/feedparser/tests/encoding/x80_ebcdic_cp_nl.xml
deleted file mode 100644
index 2917b9543..000000000
--- a/lib/feedparser/tests/encoding/x80_ebcdic_cp_nl.xml
+++ /dev/null
@@ -1 +0,0 @@
-Lo���@�������~�K�@��������~������m��m��on%LZ``%⒉�䕓���z@@mm������mmM}������}]K������M}������m��m��}]%ą���������z@���@���������@��@������m��m��@��������%ŧ����z@@@@@@���@����@���@����K�����@~~@�}ৄ�}%``n%L����@�������~�K�@�����~����zaa����K���a����a��{n%L�����n�La�����n%La����n
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_ebcdic_cp_us.xml b/lib/feedparser/tests/encoding/x80_ebcdic_cp_us.xml
deleted file mode 100644
index 8d3d7612d..000000000
--- a/lib/feedparser/tests/encoding/x80_ebcdic_cp_us.xml
+++ /dev/null
@@ -1 +0,0 @@
-Lo���@�������~�K�@��������~������m��m��on%LZ``%⒉�䕓���z@@mm������mmM}������}]K������M}������m��m��}]%ą���������z@���@���������@��@������m��m��@��������%ŧ����z@@@@@@���@����@���@����K�����@~~@�}ৄ�}%``n%L����@�������~�K�@�����~����zaa����K���a����a��{n%L�����n�La�����n%La����n
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_ebcdic_cp_wt.xml b/lib/feedparser/tests/encoding/x80_ebcdic_cp_wt.xml
deleted file mode 100644
index b110ada1d..000000000
--- a/lib/feedparser/tests/encoding/x80_ebcdic_cp_wt.xml
+++ /dev/null
@@ -1 +0,0 @@
-Lo���@�������~�K�@��������~������m��m��on%LZ``%⒉�䕓���z@@mm������mmM}������}]K������M}������m��m��}]%ą���������z@���@���������@��@������m��m��@��������%ŧ����z@@@@@@���@����@���@����K�����@~~@�}ৄ�}%``n%L����@�������~�K�@�����~����zaa����K���a����a��{n%L�����n�La�����n%La����n
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_ibm037.xml b/lib/feedparser/tests/encoding/x80_ibm037.xml
deleted file mode 100644
index e3ab6ec5c..000000000
--- a/lib/feedparser/tests/encoding/x80_ibm037.xml
+++ /dev/null
@@ -1 +0,0 @@
-Lo���@�������~�K�@��������~������on%LZ``%⒉�䕓���z@@mm������mmM}������}]K������M}������}]%ą���������z@���@���������@��@������@��������%ŧ����z@@@@@@���@����@���@����K�����@~~@�}ৄ�}%``n%L����@�������~�K�@�����~����zaa����K���a����a��{n%L�����n�La�����n%La����n
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_ibm039.xml b/lib/feedparser/tests/encoding/x80_ibm039.xml
deleted file mode 100644
index 211553d9f..000000000
--- a/lib/feedparser/tests/encoding/x80_ibm039.xml
+++ /dev/null
@@ -1 +0,0 @@
-Lo���@�������~�K�@��������~������on%LZ``%⒉�䕓���z@@mm������mmM}������}]K������M}������}]%ą���������z@���@���������@��@������@��������%ŧ����z@@@@@@���@����@���@����K�����@~~@�}ৄ�}%``n%L����@�������~�K�@�����~����zaa����K���a����a��{n%L�����n�La�����n%La����n
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_ibm1140.xml b/lib/feedparser/tests/encoding/x80_ibm1140.xml
deleted file mode 100644
index c1cde5f98..000000000
--- a/lib/feedparser/tests/encoding/x80_ibm1140.xml
+++ /dev/null
@@ -1 +0,0 @@
-Lo���@�������~�K�@��������~�������on%LZ``%⒉�䕓���z@@mm������mmM}������}]K������M}�������}]%ą���������z@���@���������@��@�������@��������%ŧ����z@@@@@@���@����@���@����K�����@~~@�}ৄ�}%``n%L����@�������~�K�@�����~����zaa����K���a����a��{n%L�����n�La�����n%La����n
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_ibm437.xml b/lib/feedparser/tests/encoding/x80_ibm437.xml
deleted file mode 100644
index c9689dc72..000000000
--- a/lib/feedparser/tests/encoding/x80_ibm437.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="ibm437"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('ibm437')
-Description: \x80 character in ibm437 encoding
-Expect:      not bozo and feed['title'] == u'\xc7'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_ibm500.xml b/lib/feedparser/tests/encoding/x80_ibm500.xml
deleted file mode 100644
index 1c32c8867..000000000
--- a/lib/feedparser/tests/encoding/x80_ibm500.xml
+++ /dev/null
@@ -1 +0,0 @@
-Lo���@�������~�K�@��������~������on%LO``%⒉�䕓���z@@mm������mmM}������}]K������M}������}]%ą���������z@���@���������@��@������@��������%ŧ����z@@@@@@���@����@���@����K�����@~~@�}ৄ�}%``n%L����@�������~�K�@�����~����zaa����K���a����a��{n%L�����n�La�����n%La����n
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_ibm775.xml b/lib/feedparser/tests/encoding/x80_ibm775.xml
deleted file mode 100644
index a6ac0bf00..000000000
--- a/lib/feedparser/tests/encoding/x80_ibm775.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="ibm775"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('ibm775')
-Description: \x80 character in ibm775 encoding
-Expect:      not bozo and feed['title'] == u'\u0106'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_ibm850.xml b/lib/feedparser/tests/encoding/x80_ibm850.xml
deleted file mode 100644
index e3385b769..000000000
--- a/lib/feedparser/tests/encoding/x80_ibm850.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="ibm850"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('ibm850')
-Description: \x80 character in ibm850 encoding
-Expect:      not bozo and feed['title'] == u'\xc7'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_ibm852.xml b/lib/feedparser/tests/encoding/x80_ibm852.xml
deleted file mode 100644
index ed4831087..000000000
--- a/lib/feedparser/tests/encoding/x80_ibm852.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="ibm852"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('ibm852')
-Description: \x80 character in ibm852 encoding
-Expect:      not bozo and feed['title'] == u'\xc7'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_ibm855.xml b/lib/feedparser/tests/encoding/x80_ibm855.xml
deleted file mode 100644
index 7574077aa..000000000
--- a/lib/feedparser/tests/encoding/x80_ibm855.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="ibm855"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('ibm855')
-Description: \x80 character in ibm855 encoding
-Expect:      not bozo and feed['title'] == u'\u0452'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_ibm857.xml b/lib/feedparser/tests/encoding/x80_ibm857.xml
deleted file mode 100644
index 41f684896..000000000
--- a/lib/feedparser/tests/encoding/x80_ibm857.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="ibm857"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('ibm857')
-Description: \x80 character in ibm857 encoding
-Expect:      not bozo and feed['title'] == u'\xc7'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_ibm860.xml b/lib/feedparser/tests/encoding/x80_ibm860.xml
deleted file mode 100644
index 68c3f5ef6..000000000
--- a/lib/feedparser/tests/encoding/x80_ibm860.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="ibm860"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('ibm860')
-Description: \x80 character in ibm860 encoding
-Expect:      not bozo and feed['title'] == u'\xc7'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_ibm861.xml b/lib/feedparser/tests/encoding/x80_ibm861.xml
deleted file mode 100644
index b9c19d768..000000000
--- a/lib/feedparser/tests/encoding/x80_ibm861.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="ibm861"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('ibm861')
-Description: \x80 character in ibm861 encoding
-Expect:      not bozo and feed['title'] == u'\xc7'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_ibm862.xml b/lib/feedparser/tests/encoding/x80_ibm862.xml
deleted file mode 100644
index 15a957b93..000000000
--- a/lib/feedparser/tests/encoding/x80_ibm862.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="ibm862"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('ibm862')
-Description: \x80 character in ibm862 encoding
-Expect:      not bozo and feed['title'] == u'\u05d0'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_ibm863.xml b/lib/feedparser/tests/encoding/x80_ibm863.xml
deleted file mode 100644
index 884ca842a..000000000
--- a/lib/feedparser/tests/encoding/x80_ibm863.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="ibm863"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('ibm863')
-Description: \x80 character in ibm863 encoding
-Expect:      not bozo and feed['title'] == u'\xc7'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_ibm864.xml b/lib/feedparser/tests/encoding/x80_ibm864.xml
deleted file mode 100644
index cc5522f49..000000000
--- a/lib/feedparser/tests/encoding/x80_ibm864.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="ibm864"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('ibm864')
-Description: \x80 character in ibm864 encoding
-Expect:      not bozo and feed['title'] == u'\xb0'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_ibm865.xml b/lib/feedparser/tests/encoding/x80_ibm865.xml
deleted file mode 100644
index 4419a8b3b..000000000
--- a/lib/feedparser/tests/encoding/x80_ibm865.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="ibm865"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('ibm865')
-Description: \x80 character in ibm865 encoding
-Expect:      not bozo and feed['title'] == u'\xc7'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_ibm866.xml b/lib/feedparser/tests/encoding/x80_ibm866.xml
deleted file mode 100644
index cf2478793..000000000
--- a/lib/feedparser/tests/encoding/x80_ibm866.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="ibm866"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('ibm866')
-Description: \x80 character in ibm866 encoding
-Expect:      not bozo and feed['title'] == u'\u0410'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_koi8-r.xml b/lib/feedparser/tests/encoding/x80_koi8-r.xml
deleted file mode 100644
index 9e6c9a6b8..000000000
--- a/lib/feedparser/tests/encoding/x80_koi8-r.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="koi8-r"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('koi8-r')
-Description: \x80 character in koi8-r encoding
-Expect:      not bozo and feed['title'] == u'\u2500'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_koi8-t.xml b/lib/feedparser/tests/encoding/x80_koi8-t.xml
deleted file mode 100644
index 502735cfc..000000000
--- a/lib/feedparser/tests/encoding/x80_koi8-t.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="koi8-t"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('koi8-t')
-Description: \x80 character in koi8-t encoding
-Expect:      not bozo and feed['title'] == u'\u049b'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_koi8-u.xml b/lib/feedparser/tests/encoding/x80_koi8-u.xml
deleted file mode 100644
index f8ea0abbb..000000000
--- a/lib/feedparser/tests/encoding/x80_koi8-u.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="koi8-u"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('koi8-u')
-Description: \x80 character in koi8-u encoding
-Expect:      not bozo and feed['title'] == u'\u2500'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_mac-cyrillic.xml b/lib/feedparser/tests/encoding/x80_mac-cyrillic.xml
deleted file mode 100644
index 7a49eb05e..000000000
--- a/lib/feedparser/tests/encoding/x80_mac-cyrillic.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="mac-cyrillic"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('mac-cyrillic')
-Description: \x80 character in mac-cyrillic encoding
-Expect:      not bozo and feed['title'] == u'\u0410'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_mac.xml b/lib/feedparser/tests/encoding/x80_mac.xml
deleted file mode 100644
index b53614820..000000000
--- a/lib/feedparser/tests/encoding/x80_mac.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="mac"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('mac')
-Description: \x80 character in mac encoding
-Expect:      not bozo and feed['title'] == u'\xc4'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_maccentraleurope.xml b/lib/feedparser/tests/encoding/x80_maccentraleurope.xml
deleted file mode 100644
index abcedfd30..000000000
--- a/lib/feedparser/tests/encoding/x80_maccentraleurope.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="maccentraleurope"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('maccentraleurope')
-Description: \x80 character in maccentraleurope encoding
-Expect:      not bozo and feed['title'] == u'\xc4'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_maccyrillic.xml b/lib/feedparser/tests/encoding/x80_maccyrillic.xml
deleted file mode 100644
index 89ae2309b..000000000
--- a/lib/feedparser/tests/encoding/x80_maccyrillic.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="maccyrillic"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('maccyrillic')
-Description: \x80 character in maccyrillic encoding
-Expect:      not bozo and feed['title'] == u'\u0410'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_macgreek.xml b/lib/feedparser/tests/encoding/x80_macgreek.xml
deleted file mode 100644
index ac91a79d3..000000000
--- a/lib/feedparser/tests/encoding/x80_macgreek.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="macgreek"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('macgreek')
-Description: \x80 character in macgreek encoding
-Expect:      not bozo and feed['title'] == u'\xc4'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_maciceland.xml b/lib/feedparser/tests/encoding/x80_maciceland.xml
deleted file mode 100644
index d93cfa563..000000000
--- a/lib/feedparser/tests/encoding/x80_maciceland.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="maciceland"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('maciceland')
-Description: \x80 character in maciceland encoding
-Expect:      not bozo and feed['title'] == u'\xc4'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_macintosh.xml b/lib/feedparser/tests/encoding/x80_macintosh.xml
deleted file mode 100644
index e01a0e316..000000000
--- a/lib/feedparser/tests/encoding/x80_macintosh.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="macintosh"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('macintosh')
-Description: \x80 character in macintosh encoding
-Expect:      not bozo and feed['title'] == u'\xc4'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_maclatin2.xml b/lib/feedparser/tests/encoding/x80_maclatin2.xml
deleted file mode 100644
index fe1d5c43b..000000000
--- a/lib/feedparser/tests/encoding/x80_maclatin2.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="maclatin2"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('maclatin2')
-Description: \x80 character in maclatin2 encoding
-Expect:      not bozo and feed['title'] == u'\xc4'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_macroman.xml b/lib/feedparser/tests/encoding/x80_macroman.xml
deleted file mode 100644
index 0700f3af0..000000000
--- a/lib/feedparser/tests/encoding/x80_macroman.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="macroman"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('macroman')
-Description: \x80 character in macroman encoding
-Expect:      not bozo and feed['title'] == u'\xc4'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_macturkish.xml b/lib/feedparser/tests/encoding/x80_macturkish.xml
deleted file mode 100644
index fa4ec82fd..000000000
--- a/lib/feedparser/tests/encoding/x80_macturkish.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="macturkish"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('macturkish')
-Description: \x80 character in macturkish encoding
-Expect:      not bozo and feed['title'] == u'\xc4'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_ms-ansi.xml b/lib/feedparser/tests/encoding/x80_ms-ansi.xml
deleted file mode 100644
index b3312ec6f..000000000
--- a/lib/feedparser/tests/encoding/x80_ms-ansi.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="ms-ansi"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('ms-ansi')
-Description: \x80 character in ms-ansi encoding
-Expect:      not bozo and feed['title'] == u'\u20ac'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_ms-arab.xml b/lib/feedparser/tests/encoding/x80_ms-arab.xml
deleted file mode 100644
index b67bee601..000000000
--- a/lib/feedparser/tests/encoding/x80_ms-arab.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="ms-arab"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('ms-arab')
-Description: \x80 character in ms-arab encoding
-Expect:      not bozo and feed['title'] == u'\u20ac'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_ms-cyrl.xml b/lib/feedparser/tests/encoding/x80_ms-cyrl.xml
deleted file mode 100644
index 57bfc929b..000000000
--- a/lib/feedparser/tests/encoding/x80_ms-cyrl.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="ms-cyrl"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('ms-cyrl')
-Description: \x80 character in ms-cyrl encoding
-Expect:      not bozo and feed['title'] == u'\u0402'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_ms-ee.xml b/lib/feedparser/tests/encoding/x80_ms-ee.xml
deleted file mode 100644
index eb034d0bf..000000000
--- a/lib/feedparser/tests/encoding/x80_ms-ee.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="ms-ee"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('ms-ee')
-Description: \x80 character in ms-ee encoding
-Expect:      not bozo and feed['title'] == u'\u20ac'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_ms-greek.xml b/lib/feedparser/tests/encoding/x80_ms-greek.xml
deleted file mode 100644
index b8bfc78a8..000000000
--- a/lib/feedparser/tests/encoding/x80_ms-greek.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="ms-greek"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('ms-greek')
-Description: \x80 character in ms-greek encoding
-Expect:      not bozo and feed['title'] == u'\u20ac'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_ms-hebr.xml b/lib/feedparser/tests/encoding/x80_ms-hebr.xml
deleted file mode 100644
index d170a9c67..000000000
--- a/lib/feedparser/tests/encoding/x80_ms-hebr.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="ms-hebr"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('ms-hebr')
-Description: \x80 character in ms-hebr encoding
-Expect:      not bozo and feed['title'] == u'\u20ac'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_ms-turk.xml b/lib/feedparser/tests/encoding/x80_ms-turk.xml
deleted file mode 100644
index dad6cbe97..000000000
--- a/lib/feedparser/tests/encoding/x80_ms-turk.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="ms-turk"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('ms-turk')
-Description: \x80 character in ms-turk encoding
-Expect:      not bozo and feed['title'] == u'\u20ac'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_tcvn-5712.xml b/lib/feedparser/tests/encoding/x80_tcvn-5712.xml
deleted file mode 100644
index 684c52f4e..000000000
--- a/lib/feedparser/tests/encoding/x80_tcvn-5712.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="tcvn-5712"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('tcvn-5712')
-Description: \x80 character in tcvn-5712 encoding
-Expect:      not bozo and feed['title'] == u'\xc0'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_tcvn.xml b/lib/feedparser/tests/encoding/x80_tcvn.xml
deleted file mode 100644
index 5b17c9d72..000000000
--- a/lib/feedparser/tests/encoding/x80_tcvn.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="tcvn"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('tcvn')
-Description: \x80 character in tcvn encoding
-Expect:      not bozo and feed['title'] == u'\xc0'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_tcvn5712-1.xml b/lib/feedparser/tests/encoding/x80_tcvn5712-1.xml
deleted file mode 100644
index f6e92eefb..000000000
--- a/lib/feedparser/tests/encoding/x80_tcvn5712-1.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="tcvn5712-1"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('tcvn5712-1')
-Description: \x80 character in tcvn5712-1 encoding
-Expect:      not bozo and feed['title'] == u'\xc0'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_viscii.xml b/lib/feedparser/tests/encoding/x80_viscii.xml
deleted file mode 100644
index b872c5b33..000000000
--- a/lib/feedparser/tests/encoding/x80_viscii.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="viscii"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('viscii')
-Description: \x80 character in viscii encoding
-Expect:      not bozo and feed['title'] == u'\u1ea0'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_winbaltrim.xml b/lib/feedparser/tests/encoding/x80_winbaltrim.xml
deleted file mode 100644
index a109e279f..000000000
--- a/lib/feedparser/tests/encoding/x80_winbaltrim.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="winbaltrim"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('winbaltrim')
-Description: \x80 character in winbaltrim encoding
-Expect:      not bozo and feed['title'] == u'\u20ac'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_windows-1250.xml b/lib/feedparser/tests/encoding/x80_windows-1250.xml
deleted file mode 100644
index 7449843e2..000000000
--- a/lib/feedparser/tests/encoding/x80_windows-1250.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="windows-1250"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('windows-1250')
-Description: \x80 character in windows-1250 encoding
-Expect:      not bozo and feed['title'] == u'\u20ac'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_windows-1251.xml b/lib/feedparser/tests/encoding/x80_windows-1251.xml
deleted file mode 100644
index 15f51c58f..000000000
--- a/lib/feedparser/tests/encoding/x80_windows-1251.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="windows-1251"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('windows-1251')
-Description: \x80 character in windows-1251 encoding
-Expect:      not bozo and feed['title'] == u'\u0402'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_windows-1252.xml b/lib/feedparser/tests/encoding/x80_windows-1252.xml
deleted file mode 100644
index 742278a0e..000000000
--- a/lib/feedparser/tests/encoding/x80_windows-1252.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="windows-1252"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('windows-1252')
-Description: \x80 character in windows-1252 encoding
-Expect:      not bozo and feed['title'] == u'\u20ac'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_windows-1253.xml b/lib/feedparser/tests/encoding/x80_windows-1253.xml
deleted file mode 100644
index 001199908..000000000
--- a/lib/feedparser/tests/encoding/x80_windows-1253.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="windows-1253"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('windows-1253')
-Description: \x80 character in windows-1253 encoding
-Expect:      not bozo and feed['title'] == u'\u20ac'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_windows-1254.xml b/lib/feedparser/tests/encoding/x80_windows-1254.xml
deleted file mode 100644
index 7e9078947..000000000
--- a/lib/feedparser/tests/encoding/x80_windows-1254.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="windows-1254"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('windows-1254')
-Description: \x80 character in windows-1254 encoding
-Expect:      not bozo and feed['title'] == u'\u20ac'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_windows-1255.xml b/lib/feedparser/tests/encoding/x80_windows-1255.xml
deleted file mode 100644
index 53cfc1914..000000000
--- a/lib/feedparser/tests/encoding/x80_windows-1255.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="windows-1255"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('windows-1255')
-Description: \x80 character in windows-1255 encoding
-Expect:      not bozo and feed['title'] == u'\u20ac'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_windows-1256.xml b/lib/feedparser/tests/encoding/x80_windows-1256.xml
deleted file mode 100644
index 4b2b6303a..000000000
--- a/lib/feedparser/tests/encoding/x80_windows-1256.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="windows-1256"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('windows-1256')
-Description: \x80 character in windows-1256 encoding
-Expect:      not bozo and feed['title'] == u'\u20ac'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_windows-1257.xml b/lib/feedparser/tests/encoding/x80_windows-1257.xml
deleted file mode 100644
index 00e807fad..000000000
--- a/lib/feedparser/tests/encoding/x80_windows-1257.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="windows-1257"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('windows-1257')
-Description: \x80 character in windows-1257 encoding
-Expect:      not bozo and feed['title'] == u'\u20ac'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_windows-1258.xml b/lib/feedparser/tests/encoding/x80_windows-1258.xml
deleted file mode 100644
index 7a6d4105f..000000000
--- a/lib/feedparser/tests/encoding/x80_windows-1258.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="windows-1258"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('windows-1258')
-Description: \x80 character in windows-1258 encoding
-Expect:      not bozo and feed['title'] == u'\u20ac'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_windows_1250.xml b/lib/feedparser/tests/encoding/x80_windows_1250.xml
deleted file mode 100644
index 6728513e3..000000000
--- a/lib/feedparser/tests/encoding/x80_windows_1250.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="windows_1250"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('windows_1250')
-Description: \x80 character in windows_1250 encoding
-Expect:      not bozo and feed['title'] == u'\u20ac'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_windows_1251.xml b/lib/feedparser/tests/encoding/x80_windows_1251.xml
deleted file mode 100644
index 9ea04a6ab..000000000
--- a/lib/feedparser/tests/encoding/x80_windows_1251.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="windows_1251"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('windows_1251')
-Description: \x80 character in windows_1251 encoding
-Expect:      not bozo and feed['title'] == u'\u0402'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_windows_1252.xml b/lib/feedparser/tests/encoding/x80_windows_1252.xml
deleted file mode 100644
index 7adeea4b2..000000000
--- a/lib/feedparser/tests/encoding/x80_windows_1252.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="windows_1252"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('windows_1252')
-Description: \x80 character in windows_1252 encoding
-Expect:      not bozo and feed['title'] == u'\u20ac'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_windows_1253.xml b/lib/feedparser/tests/encoding/x80_windows_1253.xml
deleted file mode 100644
index ab21d9ef7..000000000
--- a/lib/feedparser/tests/encoding/x80_windows_1253.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="windows_1253"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('windows_1253')
-Description: \x80 character in windows_1253 encoding
-Expect:      not bozo and feed['title'] == u'\u20ac'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_windows_1254.xml b/lib/feedparser/tests/encoding/x80_windows_1254.xml
deleted file mode 100644
index a35a78b82..000000000
--- a/lib/feedparser/tests/encoding/x80_windows_1254.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="windows_1254"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('windows_1254')
-Description: \x80 character in windows_1254 encoding
-Expect:      not bozo and feed['title'] == u'\u20ac'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_windows_1255.xml b/lib/feedparser/tests/encoding/x80_windows_1255.xml
deleted file mode 100644
index e71a73671..000000000
--- a/lib/feedparser/tests/encoding/x80_windows_1255.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="windows_1255"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('windows_1255')
-Description: \x80 character in windows_1255 encoding
-Expect:      not bozo and feed['title'] == u'\u20ac'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_windows_1256.xml b/lib/feedparser/tests/encoding/x80_windows_1256.xml
deleted file mode 100644
index 6f9f98d3d..000000000
--- a/lib/feedparser/tests/encoding/x80_windows_1256.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="windows_1256"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('windows_1256')
-Description: \x80 character in windows_1256 encoding
-Expect:      not bozo and feed['title'] == u'\u20ac'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_windows_1257.xml b/lib/feedparser/tests/encoding/x80_windows_1257.xml
deleted file mode 100644
index 42649b742..000000000
--- a/lib/feedparser/tests/encoding/x80_windows_1257.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="windows_1257"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('windows_1257')
-Description: \x80 character in windows_1257 encoding
-Expect:      not bozo and feed['title'] == u'\u20ac'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_windows_1258.xml b/lib/feedparser/tests/encoding/x80_windows_1258.xml
deleted file mode 100644
index c8bc701e4..000000000
--- a/lib/feedparser/tests/encoding/x80_windows_1258.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="windows_1258"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('windows_1258')
-Description: \x80 character in windows_1258 encoding
-Expect:      not bozo and feed['title'] == u'\u20ac'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/160.xml b/lib/feedparser/tests/entities/160.xml
deleted file mode 100644
index a6d0c7fa4..000000000
--- a/lib/feedparser/tests/entities/160.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: 160
-Expect:      feed['title'] == u'testing \xa0 entity'
--->
-<rss>
-<channel>
-<title>testing &#160; entity</title>
-</channel>
-</rss
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/732.xml b/lib/feedparser/tests/entities/732.xml
deleted file mode 100644
index 89edc330b..000000000
--- a/lib/feedparser/tests/entities/732.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: 732
-Expect:      feed['title'] == u'testing \u02dc entity'
--->
-<rss>
-<channel>
-<title>testing &#732; entity</title>
-</channel>
-</rss
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/8216.xml b/lib/feedparser/tests/entities/8216.xml
deleted file mode 100644
index cb45c0fdc..000000000
--- a/lib/feedparser/tests/entities/8216.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: 8216
-Expect:      feed['title'] == u'testing \u2018 entity'
--->
-<rss>
-<channel>
-<title>testing &#8216; entity</title>
-</channel>
-</rss
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/8217.xml b/lib/feedparser/tests/entities/8217.xml
deleted file mode 100644
index bb2ebc1d7..000000000
--- a/lib/feedparser/tests/entities/8217.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: 8217
-Expect:      feed['title'] == u'testing \u2019 entity'
--->
-<rss>
-<channel>
-<title>testing &#8217; entity</title>
-</channel>
-</rss
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/8220.xml b/lib/feedparser/tests/entities/8220.xml
deleted file mode 100644
index 1c666fd30..000000000
--- a/lib/feedparser/tests/entities/8220.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: 8220
-Expect:      feed['title'] == u'testing \u201c entity'
--->
-<rss>
-<channel>
-<title>testing &#8220; entity</title>
-</channel>
-</rss
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/8221.xml b/lib/feedparser/tests/entities/8221.xml
deleted file mode 100644
index d433bd006..000000000
--- a/lib/feedparser/tests/entities/8221.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: 8221
-Expect:      feed['title'] == u'testing \u201d entity'
--->
-<rss>
-<channel>
-<title>testing &#8221; entity</title>
-</channel>
-</rss
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/9830.xml b/lib/feedparser/tests/entities/9830.xml
deleted file mode 100644
index bac2b7666..000000000
--- a/lib/feedparser/tests/entities/9830.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: 9830
-Expect:      feed['title'] == u'testing \u2666 entity'
--->
-<rss>
-<channel>
-<title>testing &#9830; entity</title>
-</channel>
-</rss
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/aacute.xml b/lib/feedparser/tests/entities/aacute.xml
deleted file mode 100644
index cbe788e59..000000000
--- a/lib/feedparser/tests/entities/aacute.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: aacute
-Expect:      feed['title'] == u'testing \xe1 entity'
--->
-<rss>
-<channel>
-<title>testing &aacute; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/acirc.xml b/lib/feedparser/tests/entities/acirc.xml
deleted file mode 100644
index 88be77914..000000000
--- a/lib/feedparser/tests/entities/acirc.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: acirc
-Expect:      feed['title'] == u'testing \xe2 entity'
--->
-<rss>
-<channel>
-<title>testing &acirc; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/acute.xml b/lib/feedparser/tests/entities/acute.xml
deleted file mode 100644
index bea2c4959..000000000
--- a/lib/feedparser/tests/entities/acute.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: acute
-Expect:      feed['title'] == u'testing \xb4 entity'
--->
-<rss>
-<channel>
-<title>testing &acute; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/aelig.xml b/lib/feedparser/tests/entities/aelig.xml
deleted file mode 100644
index a616a1b65..000000000
--- a/lib/feedparser/tests/entities/aelig.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: aelig
-Expect:      feed['title'] == u'testing \xe6 entity'
--->
-<rss>
-<channel>
-<title>testing &aelig; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/agrave.xml b/lib/feedparser/tests/entities/agrave.xml
deleted file mode 100644
index c9f4d73fc..000000000
--- a/lib/feedparser/tests/entities/agrave.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: agrave
-Expect:      feed['title'] == u'testing \xe0 entity'
--->
-<rss>
-<channel>
-<title>testing &agrave; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/alefsym.xml b/lib/feedparser/tests/entities/alefsym.xml
deleted file mode 100644
index c3d383d92..000000000
--- a/lib/feedparser/tests/entities/alefsym.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: alefsym
-Expect:      feed['title'] == u'testing \u2135 entity'
--->
-<rss>
-<channel>
-<title>testing &alefsym; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/alpha.xml b/lib/feedparser/tests/entities/alpha.xml
deleted file mode 100644
index b4c3aa9a3..000000000
--- a/lib/feedparser/tests/entities/alpha.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: alpha
-Expect:      feed['title'] == u'testing \u03b1 entity'
--->
-<rss>
-<channel>
-<title>testing &alpha; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/and.xml b/lib/feedparser/tests/entities/and.xml
deleted file mode 100644
index 4af0849e9..000000000
--- a/lib/feedparser/tests/entities/and.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: and
-Expect:      feed['title'] == u'testing \u2227 entity'
--->
-<rss>
-<channel>
-<title>testing &and; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/ang.xml b/lib/feedparser/tests/entities/ang.xml
deleted file mode 100644
index cff7694d7..000000000
--- a/lib/feedparser/tests/entities/ang.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: ang
-Expect:      feed['title'] == u'testing \u2220 entity'
--->
-<rss>
-<channel>
-<title>testing &ang; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/aring.xml b/lib/feedparser/tests/entities/aring.xml
deleted file mode 100644
index d279eea21..000000000
--- a/lib/feedparser/tests/entities/aring.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: aring
-Expect:      feed['title'] == u'testing \xe5 entity'
--->
-<rss>
-<channel>
-<title>testing &aring; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/asymp.xml b/lib/feedparser/tests/entities/asymp.xml
deleted file mode 100644
index 37c5eb2d4..000000000
--- a/lib/feedparser/tests/entities/asymp.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: asymp
-Expect:      feed['title'] == u'testing \u2248 entity'
--->
-<rss>
-<channel>
-<title>testing &asymp; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/atilde.xml b/lib/feedparser/tests/entities/atilde.xml
deleted file mode 100644
index 2f31e87df..000000000
--- a/lib/feedparser/tests/entities/atilde.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: atilde
-Expect:      feed['title'] == u'testing \xe3 entity'
--->
-<rss>
-<channel>
-<title>testing &atilde; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/attr_amp.xml b/lib/feedparser/tests/entities/attr_amp.xml
deleted file mode 100644
index 64b523feb..000000000
--- a/lib/feedparser/tests/entities/attr_amp.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: Resolve &amp; in attributes
-Expect: feed.link == u"http://domain/?a=1&b=2"
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-    <link rel="alternate" href="http://domain/?a=1&amp;b=2" />
-</feed
diff --git a/lib/feedparser/tests/entities/auml.xml b/lib/feedparser/tests/entities/auml.xml
deleted file mode 100644
index 051c2aded..000000000
--- a/lib/feedparser/tests/entities/auml.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: auml
-Expect:      feed['title'] == u'testing \xe4 entity'
--->
-<rss>
-<channel>
-<title>testing &auml; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/bdquo.xml b/lib/feedparser/tests/entities/bdquo.xml
deleted file mode 100644
index e126e2522..000000000
--- a/lib/feedparser/tests/entities/bdquo.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: bdquo
-Expect:      feed['title'] == u'testing \u201e entity'
--->
-<rss>
-<channel>
-<title>testing &bdquo; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/beta.xml b/lib/feedparser/tests/entities/beta.xml
deleted file mode 100644
index 588ba2d61..000000000
--- a/lib/feedparser/tests/entities/beta.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: beta
-Expect:      feed['title'] == u'testing \u03b2 entity'
--->
-<rss>
-<channel>
-<title>testing &beta; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/brvbar.xml b/lib/feedparser/tests/entities/brvbar.xml
deleted file mode 100644
index 9a940e430..000000000
--- a/lib/feedparser/tests/entities/brvbar.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: brvbar
-Expect:      feed['title'] == u'testing \xa6 entity'
--->
-<rss>
-<channel>
-<title>testing &brvbar; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/bull.xml b/lib/feedparser/tests/entities/bull.xml
deleted file mode 100644
index d2d396da0..000000000
--- a/lib/feedparser/tests/entities/bull.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: bull
-Expect:      feed['title'] == u'testing \u2022 entity'
--->
-<rss>
-<channel>
-<title>testing &bull; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/cap.xml b/lib/feedparser/tests/entities/cap.xml
deleted file mode 100644
index f8898e38c..000000000
--- a/lib/feedparser/tests/entities/cap.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: cap
-Expect:      feed['title'] == u'testing \u2229 entity'
--->
-<rss>
-<channel>
-<title>testing &cap; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/ccedil.xml b/lib/feedparser/tests/entities/ccedil.xml
deleted file mode 100644
index 9a35ab0c8..000000000
--- a/lib/feedparser/tests/entities/ccedil.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: ccedil
-Expect:      feed['title'] == u'testing \xe7 entity'
--->
-<rss>
-<channel>
-<title>testing &ccedil; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/cedil.xml b/lib/feedparser/tests/entities/cedil.xml
deleted file mode 100644
index 9b93fb818..000000000
--- a/lib/feedparser/tests/entities/cedil.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: cedil
-Expect:      feed['title'] == u'testing \xb8 entity'
--->
-<rss>
-<channel>
-<title>testing &cedil; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/cent.xml b/lib/feedparser/tests/entities/cent.xml
deleted file mode 100644
index 431017305..000000000
--- a/lib/feedparser/tests/entities/cent.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: cent
-Expect:      feed['title'] == u'testing \xa2 entity'
--->
-<rss>
-<channel>
-<title>testing &cent; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/chi.xml b/lib/feedparser/tests/entities/chi.xml
deleted file mode 100644
index c63d3e556..000000000
--- a/lib/feedparser/tests/entities/chi.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: chi
-Expect:      feed['title'] == u'testing \u03c7 entity'
--->
-<rss>
-<channel>
-<title>testing &chi; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/circ.xml b/lib/feedparser/tests/entities/circ.xml
deleted file mode 100644
index 76b6762b3..000000000
--- a/lib/feedparser/tests/entities/circ.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: circ
-Expect:      feed['title'] == u'testing \u02c6 entity'
--->
-<rss>
-<channel>
-<title>testing &circ; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/clubs.xml b/lib/feedparser/tests/entities/clubs.xml
deleted file mode 100644
index efe1ea34b..000000000
--- a/lib/feedparser/tests/entities/clubs.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: clubs
-Expect:      feed['title'] == u'testing \u2663 entity'
--->
-<rss>
-<channel>
-<title>testing &clubs; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/cong.xml b/lib/feedparser/tests/entities/cong.xml
deleted file mode 100644
index e6dd55c99..000000000
--- a/lib/feedparser/tests/entities/cong.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: cong
-Expect:      feed['title'] == u'testing \u2245 entity'
--->
-<rss>
-<channel>
-<title>testing &cong; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/copy.xml b/lib/feedparser/tests/entities/copy.xml
deleted file mode 100644
index 7ec6367f6..000000000
--- a/lib/feedparser/tests/entities/copy.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: copy
-Expect:      feed['title'] == u'testing \xa9 entity'
--->
-<rss>
-<channel>
-<title>testing &copy; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/crarr.xml b/lib/feedparser/tests/entities/crarr.xml
deleted file mode 100644
index d1ced14d3..000000000
--- a/lib/feedparser/tests/entities/crarr.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: crarr
-Expect:      feed['title'] == u'testing \u21b5 entity'
--->
-<rss>
-<channel>
-<title>testing &crarr; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/cup.xml b/lib/feedparser/tests/entities/cup.xml
deleted file mode 100644
index d81b582d0..000000000
--- a/lib/feedparser/tests/entities/cup.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: cup
-Expect:      feed['title'] == u'testing \u222a entity'
--->
-<rss>
-<channel>
-<title>testing &cup; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/curren.xml b/lib/feedparser/tests/entities/curren.xml
deleted file mode 100644
index 3aa6b8719..000000000
--- a/lib/feedparser/tests/entities/curren.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: curren
-Expect:      feed['title'] == u'testing \xa4 entity'
--->
-<rss>
-<channel>
-<title>testing &curren; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/dagger.xml b/lib/feedparser/tests/entities/dagger.xml
deleted file mode 100644
index c8360b8db..000000000
--- a/lib/feedparser/tests/entities/dagger.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: dagger
-Expect:      feed['title'] == u'testing \u2020 entity'
--->
-<rss>
-<channel>
-<title>testing &dagger; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/darr.xml b/lib/feedparser/tests/entities/darr.xml
deleted file mode 100644
index d6ccf87fc..000000000
--- a/lib/feedparser/tests/entities/darr.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: dArr
-Expect:      feed['title'] == u'testing \u21d3 entity'
--->
-<rss>
-<channel>
-<title>testing &dArr; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/deg.xml b/lib/feedparser/tests/entities/deg.xml
deleted file mode 100644
index c09fb8589..000000000
--- a/lib/feedparser/tests/entities/deg.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: deg
-Expect:      feed['title'] == u'testing \xb0 entity'
--->
-<rss>
-<channel>
-<title>testing &deg; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/delta.xml b/lib/feedparser/tests/entities/delta.xml
deleted file mode 100644
index a68be93dc..000000000
--- a/lib/feedparser/tests/entities/delta.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: delta
-Expect:      feed['title'] == u'testing \u03b4 entity'
--->
-<rss>
-<channel>
-<title>testing &delta; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/diams.xml b/lib/feedparser/tests/entities/diams.xml
deleted file mode 100644
index f41b8b16d..000000000
--- a/lib/feedparser/tests/entities/diams.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: diams
-Expect:      feed['title'] == u'testing \u2666 entity'
--->
-<rss>
-<channel>
-<title>testing &diams; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/divide.xml b/lib/feedparser/tests/entities/divide.xml
deleted file mode 100644
index 6d9262373..000000000
--- a/lib/feedparser/tests/entities/divide.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: divide
-Expect:      feed['title'] == u'testing \xf7 entity'
--->
-<rss>
-<channel>
-<title>testing &divide; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/doesnotexist.xml b/lib/feedparser/tests/entities/doesnotexist.xml
deleted file mode 100644
index 871250510..000000000
--- a/lib/feedparser/tests/entities/doesnotexist.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: doesnotexist
-Expect:      feed['title'] == u'testing &doesnotexist; entity'
--->
-<rss>
-<channel>
-<title>testing &doesnotexist; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/eacute.xml b/lib/feedparser/tests/entities/eacute.xml
deleted file mode 100644
index ae8f8ece8..000000000
--- a/lib/feedparser/tests/entities/eacute.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: eacute
-Expect:      feed['title'] == u'testing \xe9 entity'
--->
-<rss>
-<channel>
-<title>testing &eacute; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/ecirc.xml b/lib/feedparser/tests/entities/ecirc.xml
deleted file mode 100644
index b03136f7d..000000000
--- a/lib/feedparser/tests/entities/ecirc.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: ecirc
-Expect:      feed['title'] == u'testing \xea entity'
--->
-<rss>
-<channel>
-<title>testing &ecirc; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/egrave.xml b/lib/feedparser/tests/entities/egrave.xml
deleted file mode 100644
index 38bbe1548..000000000
--- a/lib/feedparser/tests/entities/egrave.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: egrave
-Expect:      feed['title'] == u'testing \xe8 entity'
--->
-<rss>
-<channel>
-<title>testing &egrave; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/empty.xml b/lib/feedparser/tests/entities/empty.xml
deleted file mode 100644
index e59e94de6..000000000
--- a/lib/feedparser/tests/entities/empty.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: empty
-Expect:      feed['title'] == u'testing \u2205 entity'
--->
-<rss>
-<channel>
-<title>testing &empty; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/emsp.xml b/lib/feedparser/tests/entities/emsp.xml
deleted file mode 100644
index 29fe31f57..000000000
--- a/lib/feedparser/tests/entities/emsp.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: emsp
-Expect:      feed['title'] == u'testing \u2003 entity'
--->
-<rss>
-<channel>
-<title>testing &emsp; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/ensp.xml b/lib/feedparser/tests/entities/ensp.xml
deleted file mode 100644
index dcaddd14f..000000000
--- a/lib/feedparser/tests/entities/ensp.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: ensp
-Expect:      feed['title'] == u'testing \u2002 entity'
--->
-<rss>
-<channel>
-<title>testing &ensp; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/epsilon.xml b/lib/feedparser/tests/entities/epsilon.xml
deleted file mode 100644
index b053ec5c9..000000000
--- a/lib/feedparser/tests/entities/epsilon.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: epsilon
-Expect:      feed['title'] == u'testing \u03b5 entity'
--->
-<rss>
-<channel>
-<title>testing &epsilon; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/equiv.xml b/lib/feedparser/tests/entities/equiv.xml
deleted file mode 100644
index c63fe40cb..000000000
--- a/lib/feedparser/tests/entities/equiv.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: equiv
-Expect:      feed['title'] == u'testing \u2261 entity'
--->
-<rss>
-<channel>
-<title>testing &equiv; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/eta.xml b/lib/feedparser/tests/entities/eta.xml
deleted file mode 100644
index e2692d50a..000000000
--- a/lib/feedparser/tests/entities/eta.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: eta
-Expect:      feed['title'] == u'testing \u03b7 entity'
--->
-<rss>
-<channel>
-<title>testing &eta; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/eth.xml b/lib/feedparser/tests/entities/eth.xml
deleted file mode 100644
index 056d4c0c9..000000000
--- a/lib/feedparser/tests/entities/eth.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: eth
-Expect:      feed['title'] == u'testing \xf0 entity'
--->
-<rss>
-<channel>
-<title>testing &eth; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/euml.xml b/lib/feedparser/tests/entities/euml.xml
deleted file mode 100644
index e3f564072..000000000
--- a/lib/feedparser/tests/entities/euml.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: euml
-Expect:      feed['title'] == u'testing \xeb entity'
--->
-<rss>
-<channel>
-<title>testing &euml; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/euro.xml b/lib/feedparser/tests/entities/euro.xml
deleted file mode 100644
index 77a782da9..000000000
--- a/lib/feedparser/tests/entities/euro.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: euro
-Expect:      feed['title'] == u'testing \u20ac entity'
--->
-<rss>
-<channel>
-<title>testing &euro; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/exist.xml b/lib/feedparser/tests/entities/exist.xml
deleted file mode 100644
index 7332cdd45..000000000
--- a/lib/feedparser/tests/entities/exist.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: exist
-Expect:      feed['title'] == u'testing \u2203 entity'
--->
-<rss>
-<channel>
-<title>testing &exist; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/fnof.xml b/lib/feedparser/tests/entities/fnof.xml
deleted file mode 100644
index c50f39242..000000000
--- a/lib/feedparser/tests/entities/fnof.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: fnof
-Expect:      feed['title'] == u'testing \u0192 entity'
--->
-<rss>
-<channel>
-<title>testing &fnof; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/forall.xml b/lib/feedparser/tests/entities/forall.xml
deleted file mode 100644
index e939eca16..000000000
--- a/lib/feedparser/tests/entities/forall.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: forall
-Expect:      feed['title'] == u'testing \u2200 entity'
--->
-<rss>
-<channel>
-<title>testing &forall; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/frac12.xml b/lib/feedparser/tests/entities/frac12.xml
deleted file mode 100644
index 1d567cb92..000000000
--- a/lib/feedparser/tests/entities/frac12.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: frac12
-Expect:      feed['title'] == u'testing \xbd entity'
--->
-<rss>
-<channel>
-<title>testing &frac12; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/frac14.xml b/lib/feedparser/tests/entities/frac14.xml
deleted file mode 100644
index 7d99994ec..000000000
--- a/lib/feedparser/tests/entities/frac14.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: frac14
-Expect:      feed['title'] == u'testing \xbc entity'
--->
-<rss>
-<channel>
-<title>testing &frac14; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/frac34.xml b/lib/feedparser/tests/entities/frac34.xml
deleted file mode 100644
index c106acc98..000000000
--- a/lib/feedparser/tests/entities/frac34.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: frac34
-Expect:      feed['title'] == u'testing \xbe entity'
--->
-<rss>
-<channel>
-<title>testing &frac34; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/frasl.xml b/lib/feedparser/tests/entities/frasl.xml
deleted file mode 100644
index e0af9ea50..000000000
--- a/lib/feedparser/tests/entities/frasl.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: frasl
-Expect:      feed['title'] == u'testing \u2044 entity'
--->
-<rss>
-<channel>
-<title>testing &frasl; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/gamma.xml b/lib/feedparser/tests/entities/gamma.xml
deleted file mode 100644
index f75e253a5..000000000
--- a/lib/feedparser/tests/entities/gamma.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: gamma
-Expect:      feed['title'] == u'testing \u03b3 entity'
--->
-<rss>
-<channel>
-<title>testing &gamma; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/ge.xml b/lib/feedparser/tests/entities/ge.xml
deleted file mode 100644
index 662d99db4..000000000
--- a/lib/feedparser/tests/entities/ge.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: ge
-Expect:      feed['title'] == u'testing \u2265 entity'
--->
-<rss>
-<channel>
-<title>testing &ge; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/hArr.xml b/lib/feedparser/tests/entities/hArr.xml
deleted file mode 100644
index 0d600f34a..000000000
--- a/lib/feedparser/tests/entities/hArr.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: harr
-Expect:      feed['title'] == u'testing \u2194 entity'
--->
-<rss>
-<channel>
-<title>testing &harr; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/hearts.xml b/lib/feedparser/tests/entities/hearts.xml
deleted file mode 100644
index b46f1920d..000000000
--- a/lib/feedparser/tests/entities/hearts.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: hearts
-Expect:      feed['title'] == u'testing \u2665 entity'
--->
-<rss>
-<channel>
-<title>testing &hearts; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/hellip.xml b/lib/feedparser/tests/entities/hellip.xml
deleted file mode 100644
index 0cc416e9c..000000000
--- a/lib/feedparser/tests/entities/hellip.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: hellip
-Expect:      feed['title'] == u'testing \u2026 entity'
--->
-<rss>
-<channel>
-<title>testing &hellip; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/hex_entity_x_lowercase.xml b/lib/feedparser/tests/entities/hex_entity_x_lowercase.xml
deleted file mode 100644
index 181157393..000000000
--- a/lib/feedparser/tests/entities/hex_entity_x_lowercase.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: test that lowercase x in &#x41 translates to 'A'
-Expect:      entries[0]['title'] == u'A'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-	  <title type="application/xhtml+xml" mode="xml">&#x41;</title>
-</entry>
-</feed
diff --git a/lib/feedparser/tests/entities/hex_entity_x_uppercase.xml b/lib/feedparser/tests/entities/hex_entity_x_uppercase.xml
deleted file mode 100644
index c25fda59b..000000000
--- a/lib/feedparser/tests/entities/hex_entity_x_uppercase.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: test that lowercase x in &#x41 translates to 'A'
-Expect:      entries[0]['title'] == u'A'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-	  <title type="application/xhtml+xml" mode="xml">&#X41;</title>
-</entry>
-</feed
diff --git a/lib/feedparser/tests/entities/iacute.xml b/lib/feedparser/tests/entities/iacute.xml
deleted file mode 100644
index 4150b7db1..000000000
--- a/lib/feedparser/tests/entities/iacute.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: iacute
-Expect:      feed['title'] == u'testing \xed entity'
--->
-<rss>
-<channel>
-<title>testing &iacute; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/icirc.xml b/lib/feedparser/tests/entities/icirc.xml
deleted file mode 100644
index 42de099af..000000000
--- a/lib/feedparser/tests/entities/icirc.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: icirc
-Expect:      feed['title'] == u'testing \xee entity'
--->
-<rss>
-<channel>
-<title>testing &icirc; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/iexcl.xml b/lib/feedparser/tests/entities/iexcl.xml
deleted file mode 100644
index e8eb65637..000000000
--- a/lib/feedparser/tests/entities/iexcl.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: iexcl
-Expect:      feed['title'] == u'testing \xa1 entity'
--->
-<rss>
-<channel>
-<title>testing &iexcl; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/igrave.xml b/lib/feedparser/tests/entities/igrave.xml
deleted file mode 100644
index 788cf5a8f..000000000
--- a/lib/feedparser/tests/entities/igrave.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: igrave
-Expect:      feed['title'] == u'testing \xec entity'
--->
-<rss>
-<channel>
-<title>testing &igrave; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/image.xml b/lib/feedparser/tests/entities/image.xml
deleted file mode 100644
index a49bb6ec7..000000000
--- a/lib/feedparser/tests/entities/image.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: image
-Expect:      feed['title'] == u'testing \u2111 entity'
--->
-<rss>
-<channel>
-<title>testing &image; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/infin.xml b/lib/feedparser/tests/entities/infin.xml
deleted file mode 100644
index 37e2cce3c..000000000
--- a/lib/feedparser/tests/entities/infin.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: infin
-Expect:      feed['title'] == u'testing \u221e entity'
--->
-<rss>
-<channel>
-<title>testing &infin; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/int.xml b/lib/feedparser/tests/entities/int.xml
deleted file mode 100644
index f84f9645a..000000000
--- a/lib/feedparser/tests/entities/int.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: int
-Expect:      feed['title'] == u'testing \u222b entity'
--->
-<rss>
-<channel>
-<title>testing &int; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/iota.xml b/lib/feedparser/tests/entities/iota.xml
deleted file mode 100644
index 38e239668..000000000
--- a/lib/feedparser/tests/entities/iota.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: iota
-Expect:      feed['title'] == u'testing \u03b9 entity'
--->
-<rss>
-<channel>
-<title>testing &iota; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/iquest.xml b/lib/feedparser/tests/entities/iquest.xml
deleted file mode 100644
index f73b3f735..000000000
--- a/lib/feedparser/tests/entities/iquest.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: iquest
-Expect:      feed['title'] == u'testing \xbf entity'
--->
-<rss>
-<channel>
-<title>testing &iquest; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/isin.xml b/lib/feedparser/tests/entities/isin.xml
deleted file mode 100644
index 2ef0469b7..000000000
--- a/lib/feedparser/tests/entities/isin.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: isin
-Expect:      feed['title'] == u'testing \u2208 entity'
--->
-<rss>
-<channel>
-<title>testing &isin; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/iuml.xml b/lib/feedparser/tests/entities/iuml.xml
deleted file mode 100644
index ca69817c6..000000000
--- a/lib/feedparser/tests/entities/iuml.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: iuml
-Expect:      feed['title'] == u'testing \xef entity'
--->
-<rss>
-<channel>
-<title>testing &iuml; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/kappa.xml b/lib/feedparser/tests/entities/kappa.xml
deleted file mode 100644
index 2ab0736b2..000000000
--- a/lib/feedparser/tests/entities/kappa.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: kappa
-Expect:      feed['title'] == u'testing \u03ba entity'
--->
-<rss>
-<channel>
-<title>testing &kappa; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/lArr.xml b/lib/feedparser/tests/entities/lArr.xml
deleted file mode 100644
index 156f8e91b..000000000
--- a/lib/feedparser/tests/entities/lArr.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: larr
-Expect:      feed['title'] == u'testing \u2190 entity'
--->
-<rss>
-<channel>
-<title>testing &larr; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/lambda.xml b/lib/feedparser/tests/entities/lambda.xml
deleted file mode 100644
index 8910ed305..000000000
--- a/lib/feedparser/tests/entities/lambda.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: lambda
-Expect:      feed['title'] == u'testing \u03bb entity'
--->
-<rss>
-<channel>
-<title>testing &lambda; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/lang.xml b/lib/feedparser/tests/entities/lang.xml
deleted file mode 100644
index db4e4e9f2..000000000
--- a/lib/feedparser/tests/entities/lang.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: lang
-Expect:      feed['title'] == u'testing \u2329 entity'
--->
-<rss>
-<channel>
-<title>testing &lang; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/laquo.xml b/lib/feedparser/tests/entities/laquo.xml
deleted file mode 100644
index 79537ca0c..000000000
--- a/lib/feedparser/tests/entities/laquo.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: laquo
-Expect:      feed['title'] == u'testing \xab entity'
--->
-<rss>
-<channel>
-<title>testing &laquo; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/lceil.xml b/lib/feedparser/tests/entities/lceil.xml
deleted file mode 100644
index eef0da641..000000000
--- a/lib/feedparser/tests/entities/lceil.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: lceil
-Expect:      feed['title'] == u'testing \u2308 entity'
--->
-<rss>
-<channel>
-<title>testing &lceil; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/ldquo.xml b/lib/feedparser/tests/entities/ldquo.xml
deleted file mode 100644
index 791e48919..000000000
--- a/lib/feedparser/tests/entities/ldquo.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: ldquo
-Expect:      feed['title'] == u'testing \u201c entity'
--->
-<rss>
-<channel>
-<title>testing &ldquo; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/le.xml b/lib/feedparser/tests/entities/le.xml
deleted file mode 100644
index f25859512..000000000
--- a/lib/feedparser/tests/entities/le.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: le
-Expect:      feed['title'] == u'testing \u2264 entity'
--->
-<rss>
-<channel>
-<title>testing &le; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/lfloor.xml b/lib/feedparser/tests/entities/lfloor.xml
deleted file mode 100644
index 50d5a226a..000000000
--- a/lib/feedparser/tests/entities/lfloor.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: lfloor
-Expect:      feed['title'] == u'testing \u230a entity'
--->
-<rss>
-<channel>
-<title>testing &lfloor; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/lowast.xml b/lib/feedparser/tests/entities/lowast.xml
deleted file mode 100644
index 008218044..000000000
--- a/lib/feedparser/tests/entities/lowast.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: lowast
-Expect:      feed['title'] == u'testing \u2217 entity'
--->
-<rss>
-<channel>
-<title>testing &lowast; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/loz.xml b/lib/feedparser/tests/entities/loz.xml
deleted file mode 100644
index 29ffb0690..000000000
--- a/lib/feedparser/tests/entities/loz.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: loz
-Expect:      feed['title'] == u'testing \u25ca entity'
--->
-<rss>
-<channel>
-<title>testing &loz; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/lrm.xml b/lib/feedparser/tests/entities/lrm.xml
deleted file mode 100644
index d672bc314..000000000
--- a/lib/feedparser/tests/entities/lrm.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: lrm
-Expect:      feed['title'] == u'testing \u200e entity'
--->
-<rss>
-<channel>
-<title>testing &lrm; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/lsaquo.xml b/lib/feedparser/tests/entities/lsaquo.xml
deleted file mode 100644
index 2faa2ed59..000000000
--- a/lib/feedparser/tests/entities/lsaquo.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: lsaquo
-Expect:      feed['title'] == u'testing \u2039 entity'
--->
-<rss>
-<channel>
-<title>testing &lsaquo; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/lsquo.xml b/lib/feedparser/tests/entities/lsquo.xml
deleted file mode 100644
index 2297817bf..000000000
--- a/lib/feedparser/tests/entities/lsquo.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: lsquo
-Expect:      feed['title'] == u'testing \u2018 entity'
--->
-<rss>
-<channel>
-<title>testing &lsquo; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/macr.xml b/lib/feedparser/tests/entities/macr.xml
deleted file mode 100644
index 4699e32dc..000000000
--- a/lib/feedparser/tests/entities/macr.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: macr
-Expect:      feed['title'] == u'testing \xaf entity'
--->
-<rss>
-<channel>
-<title>testing &macr; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/mdash.xml b/lib/feedparser/tests/entities/mdash.xml
deleted file mode 100644
index e2f8503af..000000000
--- a/lib/feedparser/tests/entities/mdash.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: mdash
-Expect:      feed['title'] == u'testing \u2014 entity'
--->
-<rss>
-<channel>
-<title>testing &mdash; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/micro.xml b/lib/feedparser/tests/entities/micro.xml
deleted file mode 100644
index 5feecd069..000000000
--- a/lib/feedparser/tests/entities/micro.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: micro
-Expect:      feed['title'] == u'testing \xb5 entity'
--->
-<rss>
-<channel>
-<title>testing &micro; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/middot.xml b/lib/feedparser/tests/entities/middot.xml
deleted file mode 100644
index c436115f9..000000000
--- a/lib/feedparser/tests/entities/middot.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: middot
-Expect:      feed['title'] == u'testing \xb7 entity'
--->
-<rss>
-<channel>
-<title>testing &middot; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/minus.xml b/lib/feedparser/tests/entities/minus.xml
deleted file mode 100644
index 08baeac43..000000000
--- a/lib/feedparser/tests/entities/minus.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: minus
-Expect:      feed['title'] == u'testing \u2212 entity'
--->
-<rss>
-<channel>
-<title>testing &minus; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/mu.xml b/lib/feedparser/tests/entities/mu.xml
deleted file mode 100644
index 81eb6fa89..000000000
--- a/lib/feedparser/tests/entities/mu.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: mu
-Expect:      feed['title'] == u'testing \u03bc entity'
--->
-<rss>
-<channel>
-<title>testing &mu; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/nabla.xml b/lib/feedparser/tests/entities/nabla.xml
deleted file mode 100644
index 770ce74a7..000000000
--- a/lib/feedparser/tests/entities/nabla.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: nabla
-Expect:      feed['title'] == u'testing \u2207 entity'
--->
-<rss>
-<channel>
-<title>testing &nabla; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/nbsp.xml b/lib/feedparser/tests/entities/nbsp.xml
deleted file mode 100644
index e61d94f51..000000000
--- a/lib/feedparser/tests/entities/nbsp.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: nbsp
-Expect:      feed['title'] == u'testing \xa0 entity'
--->
-<rss>
-<channel>
-<title>testing &nbsp; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/ndash.xml b/lib/feedparser/tests/entities/ndash.xml
deleted file mode 100644
index 801b4e7e4..000000000
--- a/lib/feedparser/tests/entities/ndash.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: ndash
-Expect:      feed['title'] == u'testing \u2013 entity'
--->
-<rss>
-<channel>
-<title>testing &ndash; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/ne.xml b/lib/feedparser/tests/entities/ne.xml
deleted file mode 100644
index 911a7f165..000000000
--- a/lib/feedparser/tests/entities/ne.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: ne
-Expect:      feed['title'] == u'testing \u2260 entity'
--->
-<rss>
-<channel>
-<title>testing &ne; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/ni.xml b/lib/feedparser/tests/entities/ni.xml
deleted file mode 100644
index 5022ec68a..000000000
--- a/lib/feedparser/tests/entities/ni.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: ni
-Expect:      feed['title'] == u'testing \u220b entity'
--->
-<rss>
-<channel>
-<title>testing &ni; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/not.xml b/lib/feedparser/tests/entities/not.xml
deleted file mode 100644
index 0179bb8cf..000000000
--- a/lib/feedparser/tests/entities/not.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: not
-Expect:      feed['title'] == u'testing \xac entity'
--->
-<rss>
-<channel>
-<title>testing &not; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/notin.xml b/lib/feedparser/tests/entities/notin.xml
deleted file mode 100644
index 3c8f1f483..000000000
--- a/lib/feedparser/tests/entities/notin.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: notin
-Expect:      feed['title'] == u'testing \u2209 entity'
--->
-<rss>
-<channel>
-<title>testing &notin; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/nsub.xml b/lib/feedparser/tests/entities/nsub.xml
deleted file mode 100644
index a9f4aca5e..000000000
--- a/lib/feedparser/tests/entities/nsub.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: nsub
-Expect:      feed['title'] == u'testing \u2284 entity'
--->
-<rss>
-<channel>
-<title>testing &nsub; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/ntilde.xml b/lib/feedparser/tests/entities/ntilde.xml
deleted file mode 100644
index 0160c98e7..000000000
--- a/lib/feedparser/tests/entities/ntilde.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: ntilde
-Expect:      feed['title'] == u'testing \xf1 entity'
--->
-<rss>
-<channel>
-<title>testing &ntilde; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/nu.xml b/lib/feedparser/tests/entities/nu.xml
deleted file mode 100644
index e9b99ef65..000000000
--- a/lib/feedparser/tests/entities/nu.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: nu
-Expect:      feed['title'] == u'testing \u03bd entity'
--->
-<rss>
-<channel>
-<title>testing &nu; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/oacute.xml b/lib/feedparser/tests/entities/oacute.xml
deleted file mode 100644
index 7e7ad9592..000000000
--- a/lib/feedparser/tests/entities/oacute.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: oacute
-Expect:      feed['title'] == u'testing \xf3 entity'
--->
-<rss>
-<channel>
-<title>testing &oacute; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/ocirc.xml b/lib/feedparser/tests/entities/ocirc.xml
deleted file mode 100644
index 561279cee..000000000
--- a/lib/feedparser/tests/entities/ocirc.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: ocirc
-Expect:      feed['title'] == u'testing \xf4 entity'
--->
-<rss>
-<channel>
-<title>testing &ocirc; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/oelig.xml b/lib/feedparser/tests/entities/oelig.xml
deleted file mode 100644
index 54322396a..000000000
--- a/lib/feedparser/tests/entities/oelig.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: oelig
-Expect:      feed['title'] == u'testing \u0153 entity'
--->
-<rss>
-<channel>
-<title>testing &oelig; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/ograve.xml b/lib/feedparser/tests/entities/ograve.xml
deleted file mode 100644
index 44dbaf5b6..000000000
--- a/lib/feedparser/tests/entities/ograve.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: ograve
-Expect:      feed['title'] == u'testing \xf2 entity'
--->
-<rss>
-<channel>
-<title>testing &ograve; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/oline.xml b/lib/feedparser/tests/entities/oline.xml
deleted file mode 100644
index 193b139ec..000000000
--- a/lib/feedparser/tests/entities/oline.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: oline
-Expect:      feed['title'] == u'testing \u203e entity'
--->
-<rss>
-<channel>
-<title>testing &oline; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/omega.xml b/lib/feedparser/tests/entities/omega.xml
deleted file mode 100644
index 614ad7e79..000000000
--- a/lib/feedparser/tests/entities/omega.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: omega
-Expect:      feed['title'] == u'testing \u03c9 entity'
--->
-<rss>
-<channel>
-<title>testing &omega; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/omicron.xml b/lib/feedparser/tests/entities/omicron.xml
deleted file mode 100644
index 5c23feb59..000000000
--- a/lib/feedparser/tests/entities/omicron.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: omicron
-Expect:      feed['title'] == u'testing \u03bf entity'
--->
-<rss>
-<channel>
-<title>testing &omicron; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/oplus.xml b/lib/feedparser/tests/entities/oplus.xml
deleted file mode 100644
index 374d1596c..000000000
--- a/lib/feedparser/tests/entities/oplus.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: oplus
-Expect:      feed['title'] == u'testing \u2295 entity'
--->
-<rss>
-<channel>
-<title>testing &oplus; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/or.xml b/lib/feedparser/tests/entities/or.xml
deleted file mode 100644
index 8499a33af..000000000
--- a/lib/feedparser/tests/entities/or.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: or
-Expect:      feed['title'] == u'testing \u2228 entity'
--->
-<rss>
-<channel>
-<title>testing &or; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/ordf.xml b/lib/feedparser/tests/entities/ordf.xml
deleted file mode 100644
index 13faf67b9..000000000
--- a/lib/feedparser/tests/entities/ordf.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: ordf
-Expect:      feed['title'] == u'testing \xaa entity'
--->
-<rss>
-<channel>
-<title>testing &ordf; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/ordm.xml b/lib/feedparser/tests/entities/ordm.xml
deleted file mode 100644
index da47c1e4a..000000000
--- a/lib/feedparser/tests/entities/ordm.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: ordm
-Expect:      feed['title'] == u'testing \xba entity'
--->
-<rss>
-<channel>
-<title>testing &ordm; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/oslash.xml b/lib/feedparser/tests/entities/oslash.xml
deleted file mode 100644
index 50e6c86b7..000000000
--- a/lib/feedparser/tests/entities/oslash.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: oslash
-Expect:      feed['title'] == u'testing \xf8 entity'
--->
-<rss>
-<channel>
-<title>testing &oslash; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/otilde.xml b/lib/feedparser/tests/entities/otilde.xml
deleted file mode 100644
index e5636bfef..000000000
--- a/lib/feedparser/tests/entities/otilde.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: otilde
-Expect:      feed['title'] == u'testing \xf5 entity'
--->
-<rss>
-<channel>
-<title>testing &otilde; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/otimes.xml b/lib/feedparser/tests/entities/otimes.xml
deleted file mode 100644
index 4f89df3ab..000000000
--- a/lib/feedparser/tests/entities/otimes.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: otimes
-Expect:      feed['title'] == u'testing \u2297 entity'
--->
-<rss>
-<channel>
-<title>testing &otimes; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/ouml.xml b/lib/feedparser/tests/entities/ouml.xml
deleted file mode 100644
index cc6f868de..000000000
--- a/lib/feedparser/tests/entities/ouml.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: ouml
-Expect:      feed['title'] == u'testing \xf6 entity'
--->
-<rss>
-<channel>
-<title>testing &ouml; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/para.xml b/lib/feedparser/tests/entities/para.xml
deleted file mode 100644
index 6d86c990f..000000000
--- a/lib/feedparser/tests/entities/para.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: para
-Expect:      feed['title'] == u'testing \xb6 entity'
--->
-<rss>
-<channel>
-<title>testing &para; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/part.xml b/lib/feedparser/tests/entities/part.xml
deleted file mode 100644
index a60559cf5..000000000
--- a/lib/feedparser/tests/entities/part.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: part
-Expect:      feed['title'] == u'testing \u2202 entity'
--->
-<rss>
-<channel>
-<title>testing &part; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/permil.xml b/lib/feedparser/tests/entities/permil.xml
deleted file mode 100644
index 9d1422157..000000000
--- a/lib/feedparser/tests/entities/permil.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: permil
-Expect:      feed['title'] == u'testing \u2030 entity'
--->
-<rss>
-<channel>
-<title>testing &permil; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/perp.xml b/lib/feedparser/tests/entities/perp.xml
deleted file mode 100644
index a2a28141f..000000000
--- a/lib/feedparser/tests/entities/perp.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: perp
-Expect:      feed['title'] == u'testing \u22a5 entity'
--->
-<rss>
-<channel>
-<title>testing &perp; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/phi.xml b/lib/feedparser/tests/entities/phi.xml
deleted file mode 100644
index 815a262d2..000000000
--- a/lib/feedparser/tests/entities/phi.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: phi
-Expect:      feed['title'] == u'testing \u03c6 entity'
--->
-<rss>
-<channel>
-<title>testing &phi; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/pi.xml b/lib/feedparser/tests/entities/pi.xml
deleted file mode 100644
index c20d3ed25..000000000
--- a/lib/feedparser/tests/entities/pi.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: pi
-Expect:      feed['title'] == u'testing \u03c0 entity'
--->
-<rss>
-<channel>
-<title>testing &pi; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/piv.xml b/lib/feedparser/tests/entities/piv.xml
deleted file mode 100644
index 31560b543..000000000
--- a/lib/feedparser/tests/entities/piv.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: piv
-Expect:      feed['title'] == u'testing \u03d6 entity'
--->
-<rss>
-<channel>
-<title>testing &piv; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/plusmn.xml b/lib/feedparser/tests/entities/plusmn.xml
deleted file mode 100644
index 77f181ae7..000000000
--- a/lib/feedparser/tests/entities/plusmn.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: plusmn
-Expect:      feed['title'] == u'testing \xb1 entity'
--->
-<rss>
-<channel>
-<title>testing &plusmn; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/pound.xml b/lib/feedparser/tests/entities/pound.xml
deleted file mode 100644
index 8f58936fa..000000000
--- a/lib/feedparser/tests/entities/pound.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: pound
-Expect:      feed['title'] == u'testing \xa3 entity'
--->
-<rss>
-<channel>
-<title>testing &pound; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/prime.xml b/lib/feedparser/tests/entities/prime.xml
deleted file mode 100644
index 56f95ee34..000000000
--- a/lib/feedparser/tests/entities/prime.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: prime
-Expect:      feed['title'] == u'testing \u2032 entity'
--->
-<rss>
-<channel>
-<title>testing &prime; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/prod.xml b/lib/feedparser/tests/entities/prod.xml
deleted file mode 100644
index 540e9350a..000000000
--- a/lib/feedparser/tests/entities/prod.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: prod
-Expect:      feed['title'] == u'testing \u220f entity'
--->
-<rss>
-<channel>
-<title>testing &prod; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/prop.xml b/lib/feedparser/tests/entities/prop.xml
deleted file mode 100644
index 3996b3425..000000000
--- a/lib/feedparser/tests/entities/prop.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: prop
-Expect:      feed['title'] == u'testing \u221d entity'
--->
-<rss>
-<channel>
-<title>testing &prop; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/psi.xml b/lib/feedparser/tests/entities/psi.xml
deleted file mode 100644
index 104d58515..000000000
--- a/lib/feedparser/tests/entities/psi.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: psi
-Expect:      feed['title'] == u'testing \u03c8 entity'
--->
-<rss>
-<channel>
-<title>testing &psi; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/query_variable_entry.xml b/lib/feedparser/tests/entities/query_variable_entry.xml
deleted file mode 100644
index 565c3d905..000000000
--- a/lib/feedparser/tests/entities/query_variable_entry.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: unescaped ampersand in URL query variable doesn't affect entry URL
-Expect: entries[0].link == u'http://example/?a=1&b=2&c'
--->
-<rss version="2.0">
-<channel>
-<item>
-<link>http://example/?a=1&b=2&c</link>
-</item>
-</channel>
-</rss
diff --git a/lib/feedparser/tests/entities/query_variable_feed.xml b/lib/feedparser/tests/entities/query_variable_feed.xml
deleted file mode 100644
index 014f070b7..000000000
--- a/lib/feedparser/tests/entities/query_variable_feed.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: unescaped ampersand in URL query variable doesn't affect feed URL
-Expect: feed.link == u'http://example/?a=1&b=2&c'
--->
-<rss version="2.0">
-<channel>
-<link>http://example/?a=1&b=2&c</link>
-</channel>
-</rss
diff --git a/lib/feedparser/tests/entities/radic.xml b/lib/feedparser/tests/entities/radic.xml
deleted file mode 100644
index e9da90e06..000000000
--- a/lib/feedparser/tests/entities/radic.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: radic
-Expect:      feed['title'] == u'testing \u221a entity'
--->
-<rss>
-<channel>
-<title>testing &radic; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/rang.xml b/lib/feedparser/tests/entities/rang.xml
deleted file mode 100644
index 19be10430..000000000
--- a/lib/feedparser/tests/entities/rang.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: rang
-Expect:      feed['title'] == u'testing \u232a entity'
--->
-<rss>
-<channel>
-<title>testing &rang; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/raquo.xml b/lib/feedparser/tests/entities/raquo.xml
deleted file mode 100644
index 60dec82dd..000000000
--- a/lib/feedparser/tests/entities/raquo.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: raquo
-Expect:      feed['title'] == u'testing \xbb entity'
--->
-<rss>
-<channel>
-<title>testing &raquo; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/rarr.xml b/lib/feedparser/tests/entities/rarr.xml
deleted file mode 100644
index 95c8403bd..000000000
--- a/lib/feedparser/tests/entities/rarr.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: rArr
-Expect:      feed['title'] == u'testing \u21d2 entity'
--->
-<rss>
-<channel>
-<title>testing &rArr; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/rceil.xml b/lib/feedparser/tests/entities/rceil.xml
deleted file mode 100644
index 6059028b6..000000000
--- a/lib/feedparser/tests/entities/rceil.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: rceil
-Expect:      feed['title'] == u'testing \u2309 entity'
--->
-<rss>
-<channel>
-<title>testing &rceil; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/rdquo.xml b/lib/feedparser/tests/entities/rdquo.xml
deleted file mode 100644
index 05c2b2dd4..000000000
--- a/lib/feedparser/tests/entities/rdquo.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: rdquo
-Expect:      feed['title'] == u'testing \u201d entity'
--->
-<rss>
-<channel>
-<title>testing &rdquo; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/real.xml b/lib/feedparser/tests/entities/real.xml
deleted file mode 100644
index da61fb9b4..000000000
--- a/lib/feedparser/tests/entities/real.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: real
-Expect:      feed['title'] == u'testing \u211c entity'
--->
-<rss>
-<channel>
-<title>testing &real; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/reg.xml b/lib/feedparser/tests/entities/reg.xml
deleted file mode 100644
index 5c4ab1d81..000000000
--- a/lib/feedparser/tests/entities/reg.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: reg
-Expect:      feed['title'] == u'testing \xae entity'
--->
-<rss>
-<channel>
-<title>testing &reg; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/rfloor.xml b/lib/feedparser/tests/entities/rfloor.xml
deleted file mode 100644
index 2cbfe724e..000000000
--- a/lib/feedparser/tests/entities/rfloor.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: rfloor
-Expect:      feed['title'] == u'testing \u230b entity'
--->
-<rss>
-<channel>
-<title>testing &rfloor; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/rho.xml b/lib/feedparser/tests/entities/rho.xml
deleted file mode 100644
index 9593cf3d6..000000000
--- a/lib/feedparser/tests/entities/rho.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: rho
-Expect:      feed['title'] == u'testing \u03c1 entity'
--->
-<rss>
-<channel>
-<title>testing &rho; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/rlm.xml b/lib/feedparser/tests/entities/rlm.xml
deleted file mode 100644
index 39607338f..000000000
--- a/lib/feedparser/tests/entities/rlm.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: rlm
-Expect:      feed['title'] == u'testing \u200f entity'
--->
-<rss>
-<channel>
-<title>testing &rlm; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/rsaquo.xml b/lib/feedparser/tests/entities/rsaquo.xml
deleted file mode 100644
index da3fe7644..000000000
--- a/lib/feedparser/tests/entities/rsaquo.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: rsaquo
-Expect:      feed['title'] == u'testing \u203a entity'
--->
-<rss>
-<channel>
-<title>testing &rsaquo; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/rsquo.xml b/lib/feedparser/tests/entities/rsquo.xml
deleted file mode 100644
index a24bc0b37..000000000
--- a/lib/feedparser/tests/entities/rsquo.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: rsquo
-Expect:      feed['title'] == u'testing \u2019 entity'
--->
-<rss>
-<channel>
-<title>testing &rsquo; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/sbquo.xml b/lib/feedparser/tests/entities/sbquo.xml
deleted file mode 100644
index 65d011c9c..000000000
--- a/lib/feedparser/tests/entities/sbquo.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: sbquo
-Expect:      feed['title'] == u'testing \u201a entity'
--->
-<rss>
-<channel>
-<title>testing &sbquo; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/scaron.xml b/lib/feedparser/tests/entities/scaron.xml
deleted file mode 100644
index 5b0a075ea..000000000
--- a/lib/feedparser/tests/entities/scaron.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: scaron
-Expect:      feed['title'] == u'testing \u0161 entity'
--->
-<rss>
-<channel>
-<title>testing &scaron; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/sdot.xml b/lib/feedparser/tests/entities/sdot.xml
deleted file mode 100644
index 580263b5a..000000000
--- a/lib/feedparser/tests/entities/sdot.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: sdot
-Expect:      feed['title'] == u'testing \u22c5 entity'
--->
-<rss>
-<channel>
-<title>testing &sdot; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/sect.xml b/lib/feedparser/tests/entities/sect.xml
deleted file mode 100644
index 90d72799c..000000000
--- a/lib/feedparser/tests/entities/sect.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: sect
-Expect:      feed['title'] == u'testing \xa7 entity'
--->
-<rss>
-<channel>
-<title>testing &sect; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/shy.xml b/lib/feedparser/tests/entities/shy.xml
deleted file mode 100644
index e0257093e..000000000
--- a/lib/feedparser/tests/entities/shy.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: shy
-Expect:      feed['title'] == u'testing \xad entity'
--->
-<rss>
-<channel>
-<title>testing &shy; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/sigma.xml b/lib/feedparser/tests/entities/sigma.xml
deleted file mode 100644
index 3d080ba12..000000000
--- a/lib/feedparser/tests/entities/sigma.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: sigma
-Expect:      feed['title'] == u'testing \u03c3 entity'
--->
-<rss>
-<channel>
-<title>testing &sigma; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/sigmaf.xml b/lib/feedparser/tests/entities/sigmaf.xml
deleted file mode 100644
index 3dbf8a011..000000000
--- a/lib/feedparser/tests/entities/sigmaf.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: sigmaf
-Expect:      feed['title'] == u'testing \u03c2 entity'
--->
-<rss>
-<channel>
-<title>testing &sigmaf; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/sim.xml b/lib/feedparser/tests/entities/sim.xml
deleted file mode 100644
index 7b1eadd6d..000000000
--- a/lib/feedparser/tests/entities/sim.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: sim
-Expect:      feed['title'] == u'testing \u223c entity'
--->
-<rss>
-<channel>
-<title>testing &sim; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/spades.xml b/lib/feedparser/tests/entities/spades.xml
deleted file mode 100644
index 806acfe09..000000000
--- a/lib/feedparser/tests/entities/spades.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: spades
-Expect:      feed['title'] == u'testing \u2660 entity'
--->
-<rss>
-<channel>
-<title>testing &spades; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/sub.xml b/lib/feedparser/tests/entities/sub.xml
deleted file mode 100644
index e52b46ea3..000000000
--- a/lib/feedparser/tests/entities/sub.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: sub
-Expect:      feed['title'] == u'testing \u2282 entity'
--->
-<rss>
-<channel>
-<title>testing &sub; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/sube.xml b/lib/feedparser/tests/entities/sube.xml
deleted file mode 100644
index 163e2e6bc..000000000
--- a/lib/feedparser/tests/entities/sube.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: sube
-Expect:      feed['title'] == u'testing \u2286 entity'
--->
-<rss>
-<channel>
-<title>testing &sube; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/sum.xml b/lib/feedparser/tests/entities/sum.xml
deleted file mode 100644
index 415dcc319..000000000
--- a/lib/feedparser/tests/entities/sum.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: sum
-Expect:      feed['title'] == u'testing \u2211 entity'
--->
-<rss>
-<channel>
-<title>testing &sum; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/sup.xml b/lib/feedparser/tests/entities/sup.xml
deleted file mode 100644
index 19d6c56ef..000000000
--- a/lib/feedparser/tests/entities/sup.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: sup
-Expect:      feed['title'] == u'testing \u2283 entity'
--->
-<rss>
-<channel>
-<title>testing &sup; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/sup1.xml b/lib/feedparser/tests/entities/sup1.xml
deleted file mode 100644
index 37b4adb8f..000000000
--- a/lib/feedparser/tests/entities/sup1.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: sup1
-Expect:      feed['title'] == u'testing \xb9 entity'
--->
-<rss>
-<channel>
-<title>testing &sup1; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/sup2.xml b/lib/feedparser/tests/entities/sup2.xml
deleted file mode 100644
index e4793553a..000000000
--- a/lib/feedparser/tests/entities/sup2.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: sup2
-Expect:      feed['title'] == u'testing \xb2 entity'
--->
-<rss>
-<channel>
-<title>testing &sup2; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/sup3.xml b/lib/feedparser/tests/entities/sup3.xml
deleted file mode 100644
index dd47f583f..000000000
--- a/lib/feedparser/tests/entities/sup3.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: sup3
-Expect:      feed['title'] == u'testing \xb3 entity'
--->
-<rss>
-<channel>
-<title>testing &sup3; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/supe.xml b/lib/feedparser/tests/entities/supe.xml
deleted file mode 100644
index 4091ca785..000000000
--- a/lib/feedparser/tests/entities/supe.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: supe
-Expect:      feed['title'] == u'testing \u2287 entity'
--->
-<rss>
-<channel>
-<title>testing &supe; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/szlig.xml b/lib/feedparser/tests/entities/szlig.xml
deleted file mode 100644
index b7698fde4..000000000
--- a/lib/feedparser/tests/entities/szlig.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: szlig
-Expect:      feed['title'] == u'testing \xdf entity'
--->
-<rss>
-<channel>
-<title>testing &szlig; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/tau.xml b/lib/feedparser/tests/entities/tau.xml
deleted file mode 100644
index 9a367ddd8..000000000
--- a/lib/feedparser/tests/entities/tau.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: tau
-Expect:      feed['title'] == u'testing \u03c4 entity'
--->
-<rss>
-<channel>
-<title>testing &tau; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/there4.xml b/lib/feedparser/tests/entities/there4.xml
deleted file mode 100644
index 14b9c375b..000000000
--- a/lib/feedparser/tests/entities/there4.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: there4
-Expect:      feed['title'] == u'testing \u2234 entity'
--->
-<rss>
-<channel>
-<title>testing &there4; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/theta.xml b/lib/feedparser/tests/entities/theta.xml
deleted file mode 100644
index eb85cdf2a..000000000
--- a/lib/feedparser/tests/entities/theta.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: theta
-Expect:      feed['title'] == u'testing \u03b8 entity'
--->
-<rss>
-<channel>
-<title>testing &theta; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/thetasym.xml b/lib/feedparser/tests/entities/thetasym.xml
deleted file mode 100644
index 8244ba1af..000000000
--- a/lib/feedparser/tests/entities/thetasym.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: thetasym
-Expect:      feed['title'] == u'testing \u03d1 entity'
--->
-<rss>
-<channel>
-<title>testing &thetasym; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/thinsp.xml b/lib/feedparser/tests/entities/thinsp.xml
deleted file mode 100644
index 580abadb0..000000000
--- a/lib/feedparser/tests/entities/thinsp.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: thinsp
-Expect:      feed['title'] == u'testing \u2009 entity'
--->
-<rss>
-<channel>
-<title>testing &thinsp; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/thorn.xml b/lib/feedparser/tests/entities/thorn.xml
deleted file mode 100644
index a8694f089..000000000
--- a/lib/feedparser/tests/entities/thorn.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: thorn
-Expect:      feed['title'] == u'testing \xfe entity'
--->
-<rss>
-<channel>
-<title>testing &thorn; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/tilde.xml b/lib/feedparser/tests/entities/tilde.xml
deleted file mode 100644
index a12b983c5..000000000
--- a/lib/feedparser/tests/entities/tilde.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: tilde
-Expect:      feed['title'] == u'testing \u02dc entity'
--->
-<rss>
-<channel>
-<title>testing &tilde; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/times.xml b/lib/feedparser/tests/entities/times.xml
deleted file mode 100644
index 6c40e69e2..000000000
--- a/lib/feedparser/tests/entities/times.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: times
-Expect:      feed['title'] == u'testing \xd7 entity'
--->
-<rss>
-<channel>
-<title>testing &times; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/trade.xml b/lib/feedparser/tests/entities/trade.xml
deleted file mode 100644
index e93bd4827..000000000
--- a/lib/feedparser/tests/entities/trade.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: trade
-Expect:      feed['title'] == u'testing \u2122 entity'
--->
-<rss>
-<channel>
-<title>testing &trade; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/uacute.xml b/lib/feedparser/tests/entities/uacute.xml
deleted file mode 100644
index 4d9cff3be..000000000
--- a/lib/feedparser/tests/entities/uacute.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: uacute
-Expect:      feed['title'] == u'testing \xfa entity'
--->
-<rss>
-<channel>
-<title>testing &uacute; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/uarr.xml b/lib/feedparser/tests/entities/uarr.xml
deleted file mode 100644
index ca3ae5d24..000000000
--- a/lib/feedparser/tests/entities/uarr.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: uArr
-Expect:      feed['title'] == u'testing \u21d1 entity'
--->
-<rss>
-<channel>
-<title>testing &uArr; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/ucirc.xml b/lib/feedparser/tests/entities/ucirc.xml
deleted file mode 100644
index 5da01a03e..000000000
--- a/lib/feedparser/tests/entities/ucirc.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: ucirc
-Expect:      feed['title'] == u'testing \xfb entity'
--->
-<rss>
-<channel>
-<title>testing &ucirc; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/ugrave.xml b/lib/feedparser/tests/entities/ugrave.xml
deleted file mode 100644
index e949fa11b..000000000
--- a/lib/feedparser/tests/entities/ugrave.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: ugrave
-Expect:      feed['title'] == u'testing \xf9 entity'
--->
-<rss>
-<channel>
-<title>testing &ugrave; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/uml.xml b/lib/feedparser/tests/entities/uml.xml
deleted file mode 100644
index 5245577f4..000000000
--- a/lib/feedparser/tests/entities/uml.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: uml
-Expect:      feed['title'] == u'testing \xa8 entity'
--->
-<rss>
-<channel>
-<title>testing &uml; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/upper_AElig.xml b/lib/feedparser/tests/entities/upper_AElig.xml
deleted file mode 100644
index d18840743..000000000
--- a/lib/feedparser/tests/entities/upper_AElig.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: AElig
-Expect:      feed['title'] == u'testing \xc6 entity'
--->
-<rss>
-<channel>
-<title>testing &AElig; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/upper_Aacute.xml b/lib/feedparser/tests/entities/upper_Aacute.xml
deleted file mode 100644
index d33622b92..000000000
--- a/lib/feedparser/tests/entities/upper_Aacute.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: Aacute
-Expect:      feed['title'] == u'testing \xc1 entity'
--->
-<rss>
-<channel>
-<title>testing &Aacute; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/upper_Acirc.xml b/lib/feedparser/tests/entities/upper_Acirc.xml
deleted file mode 100644
index be9093cf7..000000000
--- a/lib/feedparser/tests/entities/upper_Acirc.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: Acirc
-Expect:      feed['title'] == u'testing \xc2 entity'
--->
-<rss>
-<channel>
-<title>testing &Acirc; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/upper_Agrave.xml b/lib/feedparser/tests/entities/upper_Agrave.xml
deleted file mode 100644
index 5635d5b0f..000000000
--- a/lib/feedparser/tests/entities/upper_Agrave.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: Agrave
-Expect:      feed['title'] == u'testing \xc0 entity'
--->
-<rss>
-<channel>
-<title>testing &Agrave; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/upper_Alpha.xml b/lib/feedparser/tests/entities/upper_Alpha.xml
deleted file mode 100644
index d78bd94e5..000000000
--- a/lib/feedparser/tests/entities/upper_Alpha.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: Alpha
-Expect:      feed['title'] == u'testing \u0391 entity'
--->
-<rss>
-<channel>
-<title>testing &Alpha; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/upper_Aring.xml b/lib/feedparser/tests/entities/upper_Aring.xml
deleted file mode 100644
index ce140cba4..000000000
--- a/lib/feedparser/tests/entities/upper_Aring.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: Aring
-Expect:      feed['title'] == u'testing \xc5 entity'
--->
-<rss>
-<channel>
-<title>testing &Aring; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/upper_Atilde.xml b/lib/feedparser/tests/entities/upper_Atilde.xml
deleted file mode 100644
index cf4bc6fa6..000000000
--- a/lib/feedparser/tests/entities/upper_Atilde.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: Atilde
-Expect:      feed['title'] == u'testing \xc3 entity'
--->
-<rss>
-<channel>
-<title>testing &Atilde; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/upper_Auml.xml b/lib/feedparser/tests/entities/upper_Auml.xml
deleted file mode 100644
index 7e85269aa..000000000
--- a/lib/feedparser/tests/entities/upper_Auml.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: Auml
-Expect:      feed['title'] == u'testing \xc4 entity'
--->
-<rss>
-<channel>
-<title>testing &Auml; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/upper_Beta.xml b/lib/feedparser/tests/entities/upper_Beta.xml
deleted file mode 100644
index 871a11b6d..000000000
--- a/lib/feedparser/tests/entities/upper_Beta.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: Beta
-Expect:      feed['title'] == u'testing \u0392 entity'
--->
-<rss>
-<channel>
-<title>testing &Beta; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/upper_Ccedil.xml b/lib/feedparser/tests/entities/upper_Ccedil.xml
deleted file mode 100644
index 38a830b84..000000000
--- a/lib/feedparser/tests/entities/upper_Ccedil.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: Ccedil
-Expect:      feed['title'] == u'testing \xc7 entity'
--->
-<rss>
-<channel>
-<title>testing &Ccedil; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/upper_Chi.xml b/lib/feedparser/tests/entities/upper_Chi.xml
deleted file mode 100644
index ea02cd634..000000000
--- a/lib/feedparser/tests/entities/upper_Chi.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: Chi
-Expect:      feed['title'] == u'testing \u03a7 entity'
--->
-<rss>
-<channel>
-<title>testing &Chi; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/upper_Dagger.xml b/lib/feedparser/tests/entities/upper_Dagger.xml
deleted file mode 100644
index 2a6c75aa7..000000000
--- a/lib/feedparser/tests/entities/upper_Dagger.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: Dagger
-Expect:      feed['title'] == u'testing \u2021 entity'
--->
-<rss>
-<channel>
-<title>testing &Dagger; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/upper_Delta.xml b/lib/feedparser/tests/entities/upper_Delta.xml
deleted file mode 100644
index 71d3cdd49..000000000
--- a/lib/feedparser/tests/entities/upper_Delta.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: Delta
-Expect:      feed['title'] == u'testing \u0394 entity'
--->
-<rss>
-<channel>
-<title>testing &Delta; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/upper_ETH.xml b/lib/feedparser/tests/entities/upper_ETH.xml
deleted file mode 100644
index 32d860632..000000000
--- a/lib/feedparser/tests/entities/upper_ETH.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: ETH
-Expect:      feed['title'] == u'testing \xd0 entity'
--->
-<rss>
-<channel>
-<title>testing &ETH; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/upper_Eacute.xml b/lib/feedparser/tests/entities/upper_Eacute.xml
deleted file mode 100644
index 9ced3e1fb..000000000
--- a/lib/feedparser/tests/entities/upper_Eacute.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: Eacute
-Expect:      feed['title'] == u'testing \xc9 entity'
--->
-<rss>
-<channel>
-<title>testing &Eacute; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/upper_Ecirc.xml b/lib/feedparser/tests/entities/upper_Ecirc.xml
deleted file mode 100644
index 2e22adab9..000000000
--- a/lib/feedparser/tests/entities/upper_Ecirc.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: Ecirc
-Expect:      feed['title'] == u'testing \xca entity'
--->
-<rss>
-<channel>
-<title>testing &Ecirc; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/upper_Egrave.xml b/lib/feedparser/tests/entities/upper_Egrave.xml
deleted file mode 100644
index 11323db2d..000000000
--- a/lib/feedparser/tests/entities/upper_Egrave.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: Egrave
-Expect:      feed['title'] == u'testing \xc8 entity'
--->
-<rss>
-<channel>
-<title>testing &Egrave; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/upper_Epsilon.xml b/lib/feedparser/tests/entities/upper_Epsilon.xml
deleted file mode 100644
index a4bfd6517..000000000
--- a/lib/feedparser/tests/entities/upper_Epsilon.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: Epsilon
-Expect:      feed['title'] == u'testing \u0395 entity'
--->
-<rss>
-<channel>
-<title>testing &Epsilon; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/upper_Eta.xml b/lib/feedparser/tests/entities/upper_Eta.xml
deleted file mode 100644
index 0ba2a8928..000000000
--- a/lib/feedparser/tests/entities/upper_Eta.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: Eta
-Expect:      feed['title'] == u'testing \u0397 entity'
--->
-<rss>
-<channel>
-<title>testing &Eta; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/upper_Euml.xml b/lib/feedparser/tests/entities/upper_Euml.xml
deleted file mode 100644
index 9a7ea4a90..000000000
--- a/lib/feedparser/tests/entities/upper_Euml.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: Euml
-Expect:      feed['title'] == u'testing \xcb entity'
--->
-<rss>
-<channel>
-<title>testing &Euml; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/upper_Gamma.xml b/lib/feedparser/tests/entities/upper_Gamma.xml
deleted file mode 100644
index d0d85bb5a..000000000
--- a/lib/feedparser/tests/entities/upper_Gamma.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: Gamma
-Expect:      feed['title'] == u'testing \u0393 entity'
--->
-<rss>
-<channel>
-<title>testing &Gamma; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/upper_Iacute.xml b/lib/feedparser/tests/entities/upper_Iacute.xml
deleted file mode 100644
index e7ebad95e..000000000
--- a/lib/feedparser/tests/entities/upper_Iacute.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: Iacute
-Expect:      feed['title'] == u'testing \xcd entity'
--->
-<rss>
-<channel>
-<title>testing &Iacute; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/upper_Icirc.xml b/lib/feedparser/tests/entities/upper_Icirc.xml
deleted file mode 100644
index 03d7e45bd..000000000
--- a/lib/feedparser/tests/entities/upper_Icirc.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: Icirc
-Expect:      feed['title'] == u'testing \xce entity'
--->
-<rss>
-<channel>
-<title>testing &Icirc; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/upper_Igrave.xml b/lib/feedparser/tests/entities/upper_Igrave.xml
deleted file mode 100644
index 97a112b15..000000000
--- a/lib/feedparser/tests/entities/upper_Igrave.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: Igrave
-Expect:      feed['title'] == u'testing \xcc entity'
--->
-<rss>
-<channel>
-<title>testing &Igrave; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/upper_Iota.xml b/lib/feedparser/tests/entities/upper_Iota.xml
deleted file mode 100644
index 08153102f..000000000
--- a/lib/feedparser/tests/entities/upper_Iota.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: Iota
-Expect:      feed['title'] == u'testing \u0399 entity'
--->
-<rss>
-<channel>
-<title>testing &Iota; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/upper_Iuml.xml b/lib/feedparser/tests/entities/upper_Iuml.xml
deleted file mode 100644
index 6403c3635..000000000
--- a/lib/feedparser/tests/entities/upper_Iuml.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: Iuml
-Expect:      feed['title'] == u'testing \xcf entity'
--->
-<rss>
-<channel>
-<title>testing &Iuml; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/upper_Kappa.xml b/lib/feedparser/tests/entities/upper_Kappa.xml
deleted file mode 100644
index 347d70daa..000000000
--- a/lib/feedparser/tests/entities/upper_Kappa.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: Kappa
-Expect:      feed['title'] == u'testing \u039a entity'
--->
-<rss>
-<channel>
-<title>testing &Kappa; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/upper_Lambda.xml b/lib/feedparser/tests/entities/upper_Lambda.xml
deleted file mode 100644
index e67223cb0..000000000
--- a/lib/feedparser/tests/entities/upper_Lambda.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: Lambda
-Expect:      feed['title'] == u'testing \u039b entity'
--->
-<rss>
-<channel>
-<title>testing &Lambda; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/upper_Mu.xml b/lib/feedparser/tests/entities/upper_Mu.xml
deleted file mode 100644
index bfa0379a1..000000000
--- a/lib/feedparser/tests/entities/upper_Mu.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: Mu
-Expect:      feed['title'] == u'testing \u039c entity'
--->
-<rss>
-<channel>
-<title>testing &Mu; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/upper_Ntilde.xml b/lib/feedparser/tests/entities/upper_Ntilde.xml
deleted file mode 100644
index bfbd3bd40..000000000
--- a/lib/feedparser/tests/entities/upper_Ntilde.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: Ntilde
-Expect:      feed['title'] == u'testing \xd1 entity'
--->
-<rss>
-<channel>
-<title>testing &Ntilde; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/upper_Nu.xml b/lib/feedparser/tests/entities/upper_Nu.xml
deleted file mode 100644
index 25779bf80..000000000
--- a/lib/feedparser/tests/entities/upper_Nu.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: Nu
-Expect:      feed['title'] == u'testing \u039d entity'
--->
-<rss>
-<channel>
-<title>testing &Nu; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/upper_OElig.xml b/lib/feedparser/tests/entities/upper_OElig.xml
deleted file mode 100644
index 7d4863447..000000000
--- a/lib/feedparser/tests/entities/upper_OElig.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: OElig
-Expect:      feed['title'] == u'testing \u0152 entity'
--->
-<rss>
-<channel>
-<title>testing &OElig; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/upper_Oacute.xml b/lib/feedparser/tests/entities/upper_Oacute.xml
deleted file mode 100644
index eb3822583..000000000
--- a/lib/feedparser/tests/entities/upper_Oacute.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: Oacute
-Expect:      feed['title'] == u'testing \xd3 entity'
--->
-<rss>
-<channel>
-<title>testing &Oacute; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/upper_Ocirc.xml b/lib/feedparser/tests/entities/upper_Ocirc.xml
deleted file mode 100644
index 54e180732..000000000
--- a/lib/feedparser/tests/entities/upper_Ocirc.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: Ocirc
-Expect:      feed['title'] == u'testing \xd4 entity'
--->
-<rss>
-<channel>
-<title>testing &Ocirc; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/upper_Ograve.xml b/lib/feedparser/tests/entities/upper_Ograve.xml
deleted file mode 100644
index 895032731..000000000
--- a/lib/feedparser/tests/entities/upper_Ograve.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: Ograve
-Expect:      feed['title'] == u'testing \xd2 entity'
--->
-<rss>
-<channel>
-<title>testing &Ograve; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/upper_Omega.xml b/lib/feedparser/tests/entities/upper_Omega.xml
deleted file mode 100644
index 429ce59cb..000000000
--- a/lib/feedparser/tests/entities/upper_Omega.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: Omega
-Expect:      feed['title'] == u'testing \u03a9 entity'
--->
-<rss>
-<channel>
-<title>testing &Omega; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/upper_Omicron.xml b/lib/feedparser/tests/entities/upper_Omicron.xml
deleted file mode 100644
index c74bec184..000000000
--- a/lib/feedparser/tests/entities/upper_Omicron.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: Omicron
-Expect:      feed['title'] == u'testing \u039f entity'
--->
-<rss>
-<channel>
-<title>testing &Omicron; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/upper_Oslash.xml b/lib/feedparser/tests/entities/upper_Oslash.xml
deleted file mode 100644
index 0f9e35335..000000000
--- a/lib/feedparser/tests/entities/upper_Oslash.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: Oslash
-Expect:      feed['title'] == u'testing \xd8 entity'
--->
-<rss>
-<channel>
-<title>testing &Oslash; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/upper_Otilde.xml b/lib/feedparser/tests/entities/upper_Otilde.xml
deleted file mode 100644
index d34003056..000000000
--- a/lib/feedparser/tests/entities/upper_Otilde.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: Otilde
-Expect:      feed['title'] == u'testing \xd5 entity'
--->
-<rss>
-<channel>
-<title>testing &Otilde; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/upper_Ouml.xml b/lib/feedparser/tests/entities/upper_Ouml.xml
deleted file mode 100644
index e32d9644b..000000000
--- a/lib/feedparser/tests/entities/upper_Ouml.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: Ouml
-Expect:      feed['title'] == u'testing \xd6 entity'
--->
-<rss>
-<channel>
-<title>testing &Ouml; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/upper_Phi.xml b/lib/feedparser/tests/entities/upper_Phi.xml
deleted file mode 100644
index 8f93027d3..000000000
--- a/lib/feedparser/tests/entities/upper_Phi.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: Phi
-Expect:      feed['title'] == u'testing \u03a6 entity'
--->
-<rss>
-<channel>
-<title>testing &Phi; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/upper_Pi.xml b/lib/feedparser/tests/entities/upper_Pi.xml
deleted file mode 100644
index 2b8951f92..000000000
--- a/lib/feedparser/tests/entities/upper_Pi.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: Pi
-Expect:      feed['title'] == u'testing \u03a0 entity'
--->
-<rss>
-<channel>
-<title>testing &Pi; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/upper_Prime.xml b/lib/feedparser/tests/entities/upper_Prime.xml
deleted file mode 100644
index b29dc9ff6..000000000
--- a/lib/feedparser/tests/entities/upper_Prime.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: Prime
-Expect:      feed['title'] == u'testing \u2033 entity'
--->
-<rss>
-<channel>
-<title>testing &Prime; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/upper_Psi.xml b/lib/feedparser/tests/entities/upper_Psi.xml
deleted file mode 100644
index 9d337bd47..000000000
--- a/lib/feedparser/tests/entities/upper_Psi.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: Psi
-Expect:      feed['title'] == u'testing \u03a8 entity'
--->
-<rss>
-<channel>
-<title>testing &Psi; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/upper_Rho.xml b/lib/feedparser/tests/entities/upper_Rho.xml
deleted file mode 100644
index 0e1879736..000000000
--- a/lib/feedparser/tests/entities/upper_Rho.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: Rho
-Expect:      feed['title'] == u'testing \u03a1 entity'
--->
-<rss>
-<channel>
-<title>testing &Rho; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/upper_Scaron.xml b/lib/feedparser/tests/entities/upper_Scaron.xml
deleted file mode 100644
index 784c67e1f..000000000
--- a/lib/feedparser/tests/entities/upper_Scaron.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: Scaron
-Expect:      feed['title'] == u'testing \u0160 entity'
--->
-<rss>
-<channel>
-<title>testing &Scaron; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/upper_Sigma.xml b/lib/feedparser/tests/entities/upper_Sigma.xml
deleted file mode 100644
index a72285096..000000000
--- a/lib/feedparser/tests/entities/upper_Sigma.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: Sigma
-Expect:      feed['title'] == u'testing \u03a3 entity'
--->
-<rss>
-<channel>
-<title>testing &Sigma; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/upper_THORN.xml b/lib/feedparser/tests/entities/upper_THORN.xml
deleted file mode 100644
index 499d0b28c..000000000
--- a/lib/feedparser/tests/entities/upper_THORN.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: THORN
-Expect:      feed['title'] == u'testing \xde entity'
--->
-<rss>
-<channel>
-<title>testing &THORN; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/upper_Tau.xml b/lib/feedparser/tests/entities/upper_Tau.xml
deleted file mode 100644
index 3ff9f6979..000000000
--- a/lib/feedparser/tests/entities/upper_Tau.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: Tau
-Expect:      feed['title'] == u'testing \u03a4 entity'
--->
-<rss>
-<channel>
-<title>testing &Tau; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/upper_Theta.xml b/lib/feedparser/tests/entities/upper_Theta.xml
deleted file mode 100644
index 85c43231d..000000000
--- a/lib/feedparser/tests/entities/upper_Theta.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: Theta
-Expect:      feed['title'] == u'testing \u0398 entity'
--->
-<rss>
-<channel>
-<title>testing &Theta; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/upper_Uacute.xml b/lib/feedparser/tests/entities/upper_Uacute.xml
deleted file mode 100644
index e714b33c5..000000000
--- a/lib/feedparser/tests/entities/upper_Uacute.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: Uacute
-Expect:      feed['title'] == u'testing \xda entity'
--->
-<rss>
-<channel>
-<title>testing &Uacute; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/upper_Ucirc.xml b/lib/feedparser/tests/entities/upper_Ucirc.xml
deleted file mode 100644
index 2d6ddeb08..000000000
--- a/lib/feedparser/tests/entities/upper_Ucirc.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: Ucirc
-Expect:      feed['title'] == u'testing \xdb entity'
--->
-<rss>
-<channel>
-<title>testing &Ucirc; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/upper_Ugrave.xml b/lib/feedparser/tests/entities/upper_Ugrave.xml
deleted file mode 100644
index 5d859b8eb..000000000
--- a/lib/feedparser/tests/entities/upper_Ugrave.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: Ugrave
-Expect:      feed['title'] == u'testing \xd9 entity'
--->
-<rss>
-<channel>
-<title>testing &Ugrave; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/upper_Upsilon.xml b/lib/feedparser/tests/entities/upper_Upsilon.xml
deleted file mode 100644
index 3a8ba5377..000000000
--- a/lib/feedparser/tests/entities/upper_Upsilon.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: Upsilon
-Expect:      feed['title'] == u'testing \u03a5 entity'
--->
-<rss>
-<channel>
-<title>testing &Upsilon; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/upper_Uuml.xml b/lib/feedparser/tests/entities/upper_Uuml.xml
deleted file mode 100644
index 0d0c4b2ab..000000000
--- a/lib/feedparser/tests/entities/upper_Uuml.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: Uuml
-Expect:      feed['title'] == u'testing \xdc entity'
--->
-<rss>
-<channel>
-<title>testing &Uuml; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/upper_Xi.xml b/lib/feedparser/tests/entities/upper_Xi.xml
deleted file mode 100644
index 6d0411d3b..000000000
--- a/lib/feedparser/tests/entities/upper_Xi.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: Xi
-Expect:      feed['title'] == u'testing \u039e entity'
--->
-<rss>
-<channel>
-<title>testing &Xi; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/upper_Yacute.xml b/lib/feedparser/tests/entities/upper_Yacute.xml
deleted file mode 100644
index 96157bfb1..000000000
--- a/lib/feedparser/tests/entities/upper_Yacute.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: Yacute
-Expect:      feed['title'] == u'testing \xdd entity'
--->
-<rss>
-<channel>
-<title>testing &Yacute; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/upper_Yuml.xml b/lib/feedparser/tests/entities/upper_Yuml.xml
deleted file mode 100644
index ee49cf3a0..000000000
--- a/lib/feedparser/tests/entities/upper_Yuml.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: Yuml
-Expect:      feed['title'] == u'testing \u0178 entity'
--->
-<rss>
-<channel>
-<title>testing &Yuml; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/upper_Zeta.xml b/lib/feedparser/tests/entities/upper_Zeta.xml
deleted file mode 100644
index 4bcf39272..000000000
--- a/lib/feedparser/tests/entities/upper_Zeta.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: Zeta
-Expect:      feed['title'] == u'testing \u0396 entity'
--->
-<rss>
-<channel>
-<title>testing &Zeta; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/upsih.xml b/lib/feedparser/tests/entities/upsih.xml
deleted file mode 100644
index 9248acdc1..000000000
--- a/lib/feedparser/tests/entities/upsih.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: upsih
-Expect:      feed['title'] == u'testing \u03d2 entity'
--->
-<rss>
-<channel>
-<title>testing &upsih; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/upsilon.xml b/lib/feedparser/tests/entities/upsilon.xml
deleted file mode 100644
index 1f916c5db..000000000
--- a/lib/feedparser/tests/entities/upsilon.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: upsilon
-Expect:      feed['title'] == u'testing \u03c5 entity'
--->
-<rss>
-<channel>
-<title>testing &upsilon; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/uuml.xml b/lib/feedparser/tests/entities/uuml.xml
deleted file mode 100644
index 4c147b2a3..000000000
--- a/lib/feedparser/tests/entities/uuml.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: uuml
-Expect:      feed['title'] == u'testing \xfc entity'
--->
-<rss>
-<channel>
-<title>testing &uuml; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/weierp.xml b/lib/feedparser/tests/entities/weierp.xml
deleted file mode 100644
index 63bd70c3a..000000000
--- a/lib/feedparser/tests/entities/weierp.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: weierp
-Expect:      feed['title'] == u'testing \u2118 entity'
--->
-<rss>
-<channel>
-<title>testing &weierp; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/xi.xml b/lib/feedparser/tests/entities/xi.xml
deleted file mode 100644
index d9b280b94..000000000
--- a/lib/feedparser/tests/entities/xi.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: xi
-Expect:      feed['title'] == u'testing \u03be entity'
--->
-<rss>
-<channel>
-<title>testing &xi; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/yacute.xml b/lib/feedparser/tests/entities/yacute.xml
deleted file mode 100644
index c8b331501..000000000
--- a/lib/feedparser/tests/entities/yacute.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: yacute
-Expect:      feed['title'] == u'testing \xfd entity'
--->
-<rss>
-<channel>
-<title>testing &yacute; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/yen.xml b/lib/feedparser/tests/entities/yen.xml
deleted file mode 100644
index af9f596c9..000000000
--- a/lib/feedparser/tests/entities/yen.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: yen
-Expect:      feed['title'] == u'testing \xa5 entity'
--->
-<rss>
-<channel>
-<title>testing &yen; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/yuml.xml b/lib/feedparser/tests/entities/yuml.xml
deleted file mode 100644
index 253b60bc3..000000000
--- a/lib/feedparser/tests/entities/yuml.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: yuml
-Expect:      feed['title'] == u'testing \xff entity'
--->
-<rss>
-<channel>
-<title>testing &yuml; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/zeta.xml b/lib/feedparser/tests/entities/zeta.xml
deleted file mode 100644
index af665ecd1..000000000
--- a/lib/feedparser/tests/entities/zeta.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: zeta
-Expect:      feed['title'] == u'testing \u03b6 entity'
--->
-<rss>
-<channel>
-<title>testing &zeta; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/zwj.xml b/lib/feedparser/tests/entities/zwj.xml
deleted file mode 100644
index 881246064..000000000
--- a/lib/feedparser/tests/entities/zwj.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: zwj
-Expect:      feed['title'] == u'testing \u200d entity'
--->
-<rss>
-<channel>
-<title>testing &zwj; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/zwnj.xml b/lib/feedparser/tests/entities/zwnj.xml
deleted file mode 100644
index 3bcd5d4a7..000000000
--- a/lib/feedparser/tests/entities/zwnj.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: zwnj
-Expect:      feed['title'] == u'testing \u200c entity'
--->
-<rss>
-<channel>
-<title>testing &zwnj; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/http/http_redirect_to_304.xml b/lib/feedparser/tests/http/http_redirect_to_304.xml
deleted file mode 100644
index a14cb0d35..000000000
--- a/lib/feedparser/tests/http/http_redirect_to_304.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Header:      Status: 302
-Header:      Location: http://localhost:8097/-/return-304.xml
-Description: ensure an http 302 redirect to an http 304 doesn't cause an xml parsing error
-Expect:      0
--->
-<feed xmlns="http://www.w3.org/2005/Atom"></feed>
diff --git a/lib/feedparser/tests/http/http_status_301.xml b/lib/feedparser/tests/http/http_status_301.xml
deleted file mode 100644
index 12d159ab6..000000000
--- a/lib/feedparser/tests/http/http_status_301.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Header:      Status: 301
-Header:      Location: http://localhost:8097/tests/http/target.xml
-Description: http status 301 (moved permanently)
-Expect:      0
--->
-<feed xmlns="http://www.w3.org/2005/Atom"></feed>
diff --git a/lib/feedparser/tests/http/http_status_302.xml b/lib/feedparser/tests/http/http_status_302.xml
deleted file mode 100644
index 4b15d437d..000000000
--- a/lib/feedparser/tests/http/http_status_302.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Header:      Status: 302
-Header:      Location: http://localhost:8097/tests/http/target.xml
-Description: http status 302 (found)
-Expect:      0
--->
-<feed xmlns="http://www.w3.org/2005/Atom"></feed>
diff --git a/lib/feedparser/tests/http/http_status_303.xml b/lib/feedparser/tests/http/http_status_303.xml
deleted file mode 100644
index 2dd5d2f73..000000000
--- a/lib/feedparser/tests/http/http_status_303.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Header:      Status: 303
-Header:      Location: http://localhost:8097/tests/http/target.xml
-Description: http status 303 (moved permanently)
-Expect:      0
--->
-<feed xmlns="http://www.w3.org/2005/Atom"></feed>
diff --git a/lib/feedparser/tests/http/http_status_304.xml b/lib/feedparser/tests/http/http_status_304.xml
deleted file mode 100644
index a2eb69532..000000000
--- a/lib/feedparser/tests/http/http_status_304.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Header:      ETag: "abc123"
-Header:      Last-Modified: Thu, 21 Apr 2011 19:02:20 GMT
-Description: http status 304 (not modified)
-Expect:      0
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-    <item><title>title 304</title></item>
-</feed>
diff --git a/lib/feedparser/tests/http/http_status_307.xml b/lib/feedparser/tests/http/http_status_307.xml
deleted file mode 100644
index 900741727..000000000
--- a/lib/feedparser/tests/http/http_status_307.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Header:      Status: 307
-Header:      Location: http://localhost:8097/tests/http/target.xml
-Description: http status 307 (moved permanently)
-Expect:      0
--->
-<feed xmlns="http://www.w3.org/2005/Atom"></feed>
diff --git a/lib/feedparser/tests/http/http_status_404.xml b/lib/feedparser/tests/http/http_status_404.xml
deleted file mode 100644
index 02e08089e..000000000
--- a/lib/feedparser/tests/http/http_status_404.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-<!--
-Header:      Status: 404
-Description: http status 404 (not found)
-Expect:      0
--->
-<feed xmlns="http://www.w3.org/2005/Atom"></feed>
diff --git a/lib/feedparser/tests/http/http_status_9001.xml b/lib/feedparser/tests/http/http_status_9001.xml
deleted file mode 100644
index b90dce3bf..000000000
--- a/lib/feedparser/tests/http/http_status_9001.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-<!--
-Header:      Status: 9001
-Description: http status 9001 (bogus)
-Expect:      0
--->
-<feed xmlns="http://www.w3.org/2005/Atom"></feed>
diff --git a/lib/feedparser/tests/http/target.xml b/lib/feedparser/tests/http/target.xml
deleted file mode 100644
index a81736b10..000000000
--- a/lib/feedparser/tests/http/target.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: target for http status tests; no actual evaluation
-Expect:      1
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-    <item><title>target</title></item>
-</feed>
diff --git a/lib/feedparser/tests/illformed/aaa_illformed.xml b/lib/feedparser/tests/illformed/aaa_illformed.xml
deleted file mode 100644
index 044edc240..000000000
--- a/lib/feedparser/tests/illformed/aaa_illformed.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-<!--
-Description: illformed XML
-Expect:      bozo
--->
-<rss version="2.0">
-</rss
\ No newline at end of file
diff --git a/lib/feedparser/tests/illformed/always_strip_doctype.xml b/lib/feedparser/tests/illformed/always_strip_doctype.xml
deleted file mode 100644
index 9fc872454..000000000
--- a/lib/feedparser/tests/illformed/always_strip_doctype.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://site.invalid/">
-<!--
-Description: unstripped invalid doctype
-Expect:      not bozo and feed['title'] == u'found'
--->
-<rss>
-    <channel>
-        <title>found</title>
-    </channel>
-</rss>
diff --git a/lib/feedparser/tests/illformed/chardet/big5.xml b/lib/feedparser/tests/illformed/chardet/big5.xml
deleted file mode 100644
index 91c9ec0f7..000000000
--- a/lib/feedparser/tests/illformed/chardet/big5.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<!--
-SkipUnless:   __import__('chardet')
-Description:  Big5 with no encoding information
-Expect:       bozo and encoding == 'Big5'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<title>�m11�몺�����n</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/illformed/chardet/eucjp.xml b/lib/feedparser/tests/illformed/chardet/eucjp.xml
deleted file mode 100644
index ba288a5e2..000000000
--- a/lib/feedparser/tests/illformed/chardet/eucjp.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<!--
-SkipUnless:   __import__('chardet')
-Description:  EUC-JP with no encoding information
-Expect:       bozo and encoding == 'EUC-JP'
--->
-<rss>
-<channel>
-<item>
-<title>�����໰�������</title>
-<description>��SD�������G�����ͥ졼�����NEO�٤򤺤äȥץ쥤���Ƥ��롣 �إ���ȥ�ޥ�٤ϥ��ȥ꡼�⡼�ɤ򽪤��ơ��ۤܤ��Ԥ����Ƥ��ޤä��� G������NEO�ϡ���ä����򤯤ʤ�ĤĤ��롣 �ʤ�ۤɡ�PS2�äƤ�������������ǽ�Ϥ��ʤ��Ⱥ�����ư���Ƥ��롣 ��ǯ�����٤�ʤ��褦PS3��XBOX360���㤪���ʤ�����������ʳ��ϥ�������ˤʤ��ۤ�˻���������͡ˡ� ����ˤ��Ƥ⡢����äƿ��٤ƤФä���ǥޥ������͡�...</description>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/illformed/chardet/euckr.xml b/lib/feedparser/tests/illformed/chardet/euckr.xml
deleted file mode 100644
index 767f3a59e..000000000
--- a/lib/feedparser/tests/illformed/chardet/euckr.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<!--
-SkipUnless:   __import__('chardet')
-Description:  EUC-KR with no encoding information
-Expect:       bozo and encoding == 'EUC-KR'
--->
-<rss>
-<channel>
-<item>
-<title>EUC-KR ���� TypeKey �ѱ۴г��� ǥ���ϱ�</title>
-<description>TypeKey �ý����� UTF-8�� ���ư��µ�, �ű⼭ �ѱ۷� �� �г����� ���� ��쿡, EUC-KR�� �� ������Ÿ�� ���Ͽ��� �����̷�Ʈ�Ǿ� ���۵Ǿ���� �г����� UTF�� �翬�� ������ ��Ÿ����. ���� ���� ��� ����ϴ� �ʸ� ������ �г����� �ѱ۷� ����ϴ� ���� �е鵵 Ÿ��Ű������ �г����� �̷� ���������� �����ڸԱ�� ����� ���� �ִ�....</description>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/illformed/chardet/gb2312.xml b/lib/feedparser/tests/illformed/chardet/gb2312.xml
deleted file mode 100644
index b28c10148..000000000
--- a/lib/feedparser/tests/illformed/chardet/gb2312.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<!--
-SkipUnless:   __import__('chardet')
-Description:  GB2312 with no encoding information
-Expect:       bozo and encoding == 'GB2312'
--->
-<rss>
-<channel>
-<item>
-<title>������������ϵ�У�רҵ����</title>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/illformed/chardet/koi8r.xml b/lib/feedparser/tests/illformed/chardet/koi8r.xml
deleted file mode 100644
index 8cdea546f..000000000
--- a/lib/feedparser/tests/illformed/chardet/koi8r.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:   __import__('chardet')
-Description:  KOI8-R with no encoding information
-Expect:       bozo and encoding == 'KOI8-R'
--->
-<rss>
-<channel>
-<item>
-<title>��� �������� ���������� ����</title>
-<description>
-��������, ������������, �� ��� ������� ����� ������ �������������, ��� ��� � ��, ��� ����� ��� ����������� ��������. �������� �� �� ���! ��� �� ������ ��������� ��������, ��� - ����! � ���� � ����� ������� ��������. �������� ������ � ������ ���� ���-���... � ������ ��������������� &quot;������ �������&quot; � &quot;������ ��������&quot; ������������ ������ ���� �������� ���� ����� �������, ���� ��������� ������. ���� ����������� �������� ��������� ������ �������� ���������, ������� ��������� &quot;�����������&quot; ������ ���������� ������������.</description>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/illformed/chardet/shiftjis.xml b/lib/feedparser/tests/illformed/chardet/shiftjis.xml
deleted file mode 100644
index 28285d966..000000000
--- a/lib/feedparser/tests/illformed/chardet/shiftjis.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-SkipUnless:   __import__('chardet')
-Description:  SHIFT_JIS with no encoding information
-Expect:       bozo and encoding == 'SHIFT_JIS'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-    <title>DrecomRSS�ɋL�����e�����f����Ȃ��c</title>
-    <summary>�F�X���ׂĂ���AMT3.2��RSS1.0���T�|�[�g���Ă��Ȃ����Ƃ������B ���Ƃ�...</summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/illformed/chardet/tis620.xml b/lib/feedparser/tests/illformed/chardet/tis620.xml
deleted file mode 100644
index 5dd109056..000000000
--- a/lib/feedparser/tests/illformed/chardet/tis620.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<!--
-SkipUnless:   __import__('chardet')
-Description:  TIS-620 with no encoding information
-Expect:       bozo and encoding == 'TIS-620'
--->
-<rss>
-<channel>
-<item>
-<description>�ӹѡ�ҹ��������ص��ˡ����Ϳ��������觪ҵ� ���� SIPA �����Ѻ MamboHub.com �����¹�ԭ�ء��ҹ���ʹ��� Template ���������û�СǴ &amp;#8220;Mambo Template Contest&amp;#8221; ���� Mambo 4.5.X ����Ѻ���ԧ����䫵� thaiopensource.org ���䫵��ٹ����������Ţ�����âͧ�Ϳ������ Open Source ����ͧ�� ������ö�觼ŧҹ��һ�СǴ�� ���㹹���ͧ����ѷ �ؤ�� ���� �����/��� ��駹�������Դ�͡�� ���ʹѺʹع������������ Mambo ����ͧ��������ǹ����㹡���͡Ẻ��оѲ�����䫵� thaiopensource.org �����͹Ҥ�</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/illformed/chardet/windows1255.xml b/lib/feedparser/tests/illformed/chardet/windows1255.xml
deleted file mode 100644
index 0ab773f50..000000000
--- a/lib/feedparser/tests/illformed/chardet/windows1255.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:   __import__('chardet')
-Description:  windows-1255 with no encoding information
-Expect:       bozo and encoding == 'windows-1255'
--->
-<rss>
-<channel>
-<item>
-<description>
-��� ����� ���� �� ��� ������� ����� �� ��� ����� ��� ���� ���� ����� �� ��� ��������? ���� ����� ���, ������� �� ��� ����� ������ ����� ������ ��� ���� ������� ����� �����. ���, �� ��� �� ��. ��� ����� ����� ������.
-</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/illformed/http_high_bit_date.xml b/lib/feedparser/tests/illformed/http_high_bit_date.xml
deleted file mode 100644
index 480d3ae0e..000000000
--- a/lib/feedparser/tests/illformed/http_high_bit_date.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-7"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('iso-8859-7')
-Header:      Content-type: text/xml
-Description: non-ASCII characters in date crashes parser
-Expect:      1
--->
-<rss version="2.0">
-	<channel>
-	<pubDate>���, 29 ���� 2004 12:53:00 GMT</pubDate>
-	</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/illformed/non-ascii-tag.xml b/lib/feedparser/tests/illformed/non-ascii-tag.xml
deleted file mode 100644
index e07883ec2..000000000
--- a/lib/feedparser/tests/illformed/non-ascii-tag.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<!--
-SkipUnless: feedparser.BeautifulSoup
-Description: prevent UnicodeEncodeError in microformat code
-Expect: bozo and entries[0]['summary'] == u'Some text'
--->
-<rss version="2.0">
-<channel>
-    <item>
-        <description>Some text</� </description>
-    </item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/illformed/rdf_channel_empty_textinput.xml b/lib/feedparser/tests/illformed/rdf_channel_empty_textinput.xml
deleted file mode 100644
index 7c09096d3..000000000
--- a/lib/feedparser/tests/illformed/rdf_channel_empty_textinput.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<!--
-Description: empty textinput element confuses regex parser and crashes on setting item title (thinks we're still in textinput)
-Expect:      bozo
--->
-<?xml version="1.0"?>
-<rdf:RDF 
-  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 
-  xmlns="http://purl.org/rss/1.0/"
-> 
-  <channel rdf:about="http://example.com/">
-    <items>
-      <rdf:Seq>
-        <rdf:li rdf:resource="http://example.com/1" />
-      </rdf:Seq>
-    </items>
-    <textinput rdf:resource="http://example.com/" />
-  </channel>
-
-  <item rdf:about="http://example.com/1">
-    <title>crashes here</title>
-  </item>
-
-  <textinput rdf:about="http://meerkat.oreillynet.com/">
-  </textinput>
-
-</rdf:RDF
\ No newline at end of file
diff --git a/lib/feedparser/tests/illformed/rss_empty_document.xml b/lib/feedparser/tests/illformed/rss_empty_document.xml
deleted file mode 100644
index 6bddcad63..000000000
--- a/lib/feedparser/tests/illformed/rss_empty_document.xml
+++ /dev/null
@@ -1,4 +0,0 @@
-<!--
-Description: Empty document should be a bozo 
-Expect:      bozo
--->
diff --git a/lib/feedparser/tests/illformed/rss_incomplete_cdata.xml b/lib/feedparser/tests/illformed/rss_incomplete_cdata.xml
deleted file mode 100644
index 8fe311b95..000000000
--- a/lib/feedparser/tests/illformed/rss_incomplete_cdata.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<!--
-Description: Incomplete CDATA block
-Expect:      bozo
--->
-<?xml version="1.0"?>
-<rss version="2.0">
-<channel>
-<title>can feedparser read this xml</title>
-<link>http://adcdefgh.com</link>
-<description>feedparser goes into infinite loop while parsing this file</description>
-<language>en-us</language>
-<copyright>2005-10-28</copyright>
-<item><title><![CD
diff --git a/lib/feedparser/tests/illformed/undeclared_namespace.xml b/lib/feedparser/tests/illformed/undeclared_namespace.xml
deleted file mode 100644
index cffe6f48e..000000000
--- a/lib/feedparser/tests/illformed/undeclared_namespace.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<!--
-SkipUnless:   __import__('sys').version.split()[0] >= '2.2.0'
-Description: undeclared namespace
-Expect:      bozo
--->
-<rss version="2.0">
-<channel>
-<itunes:subtitle>Foo</itunes:subtitle>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/microformats/hcard/2-4-2-vcard.xml b/lib/feedparser/tests/microformats/hcard/2-4-2-vcard.xml
deleted file mode 100644
index 0e77f778a..000000000
--- a/lib/feedparser/tests/microformats/hcard/2-4-2-vcard.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: 2.4.2 VCARD
-Expect:      not bozo and entries[0].vcard == u'BEGIN:vCard\nVERSION:3.0\nAGENT:BEGIN:vCard\\nVERSION:3.0\\nFN:Joe Friday\\nN:Friday\\;Joe\\nTEL\\;TYPE=voi\n ce:+1-919-555-7878\\nEMAIL\\;TYPE=internet:jfriday@host.com\\nTITLE:Area Admi\n nistrator\\, Assistant\\nEND:vCard\\n\nEND:vCard'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<title>2.4.2 VCARD</title>
-<link rel="alternate" type="text/v-card" href="2-4-2-vcard.vcf" />
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<div class="vcard">
-<div class="agent vcard">
- <a class="email fn" href="mailto:jfriday@host.com">Joe Friday</a>
- <div class="tel">+1-919-555-7878</div>
- <div class="title">Area Administrator, Assistant</div>
-</div>
-</div>
-<p><a rel="next test" href="3-1-1-fn.xhtml">next</a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/hcard/3-1-1-fn-unicode-char.xml b/lib/feedparser/tests/microformats/hcard/3-1-1-fn-unicode-char.xml
deleted file mode 100644
index ffbd28530..000000000
--- a/lib/feedparser/tests/microformats/hcard/3-1-1-fn-unicode-char.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless: feedparser.BeautifulSoup
-Description: unicode character in microformat
-Expect: not bozo and entries[0].vcard == u'BEGIN:vCard\nVERSION:3.0\nFN:Tantek \xc7elik\nN:\xc7elik;Tantek\nURL:http://tantek.com/\nEND:vCard'
--->
-<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
-<channel>
-    <item>
-        <content:encoded>
-            <![CDATA[<span class="vcard"><a class="url fn" href="http://tantek.com/">Tantek Çelik</a></span>]]>
-        </content:encoded>
-    </item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/microformats/hcard/3-1-1-fn.xml b/lib/feedparser/tests/microformats/hcard/3-1-1-fn.xml
deleted file mode 100644
index ded9a64ba..000000000
--- a/lib/feedparser/tests/microformats/hcard/3-1-1-fn.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: 3.1.1 FN
-Expect:      not bozo and entries[0].vcard == u'BEGIN:vCard\nVERSION:3.0\nFN:Mr. John Q. Public\\, Esq.\nEND:vCard'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<title>3.1.1 FN</title>
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<div class="vcard">
-<span class="fn">Mr. John Q. Public, Esq.</span>
-</div>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/hcard/3-1-2-n-2-plural.xml b/lib/feedparser/tests/microformats/hcard/3-1-2-n-2-plural.xml
deleted file mode 100644
index 4ddbbcb53..000000000
--- a/lib/feedparser/tests/microformats/hcard/3-1-2-n-2-plural.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: 3.1.2 N (example 2)
-Expect:      not bozo and entries[0].vcard == u'BEGIN:vCard\nVERSION:3.0\nN:Stevenson;John;Philip,Paul;Dr.;Jr.,M.D.,A.C.P.\nEND:vCard'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<title>3.1.2 N (example 2)</title>
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<div class="vcard">
-<span class="n">
- <span class="honorific-prefix">Dr.</span>
- <span class="given-name">John</span>
- <span class="additional-name">Philip</span>
- <span class="additional-name">Paul</span>
- <span class="family-name">Stevenson</span>,
- <span class="honorific-suffix">Jr.</span>,
- <span class="honorific-suffix">M.D.</span>,
- <span class="honorific-suffix">A.C.P.</span>
-</span>
-</div>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/hcard/3-1-2-n-2-singular.xml b/lib/feedparser/tests/microformats/hcard/3-1-2-n-2-singular.xml
deleted file mode 100644
index 07c7ebd05..000000000
--- a/lib/feedparser/tests/microformats/hcard/3-1-2-n-2-singular.xml
+++ /dev/null
@@ -1,30 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: 3.1.2 N (example 2)
-Expect:      not bozo and entries[0].vcard == u'BEGIN:vCard\nVERSION:3.0\nN:Stevenson;John;Philip,Paul;Dr.;Jr.,M.D.,A.C.P.\nEND:vCard'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<title>3.1.2 N (example 2)</title>
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<div class="vcard">
-<span class="n">
- <span class="honorific-prefixes">Dr.</span>
- <span class="given-name">John</span>
- <ul class="additional-names">
-  <li>Philip</li>
-  <li>Paul</li>
- </ul>
- <span class="family-name">Stevenson</span>, 
- <ul class="honorific-suffixes">
-  <li>Jr.</li>
-  <li>M.D.</li>
-  <li>A.C.P.</li>
- </ul>
-</span>
-</div>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/hcard/3-1-2-n-plural.xml b/lib/feedparser/tests/microformats/hcard/3-1-2-n-plural.xml
deleted file mode 100644
index 69efcb182..000000000
--- a/lib/feedparser/tests/microformats/hcard/3-1-2-n-plural.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: 3.1.2 N
-Expect:      not bozo and entries[0].vcard == u'BEGIN:vCard\nVERSION:3.0\nN:Public;John;Quinlan;Mr.;Esq.\nEND:vCard'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<title>3.1.2 N</title>
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<div class="vcard">
-<span class="n">
- <span class="honorific-prefixes">Mr.</span>
- <span class="given-name">John</span>
- <span class="additional-names">Quinlan</span>
- <span class="family-name">Public</span>, 
- <span class="honorific-suffixes">Esq.</span>
-</span>
-</div>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/hcard/3-1-2-n-singular.xml b/lib/feedparser/tests/microformats/hcard/3-1-2-n-singular.xml
deleted file mode 100644
index 5c4087d24..000000000
--- a/lib/feedparser/tests/microformats/hcard/3-1-2-n-singular.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: 3.1.2 N
-Expect:      not bozo and entries[0].vcard == u'BEGIN:vCard\nVERSION:3.0\nN:Public;John;Quinlan;Mr.;Esq.\nEND:vCard'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<title>3.1.2 N</title>
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<div class="vcard">
-<span class="n">
- <span class="honorific-prefix">Mr.</span>
- <span class="given-name">John</span>
- <span class="additional-name">Quinlan</span>
- <span class="family-name">Public</span>, 
- <span class="honorific-suffix">Esq.</span>
-</span>
-</div>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/hcard/3-1-3-nickname-2-plural.xml b/lib/feedparser/tests/microformats/hcard/3-1-3-nickname-2-plural.xml
deleted file mode 100644
index d2423183b..000000000
--- a/lib/feedparser/tests/microformats/hcard/3-1-3-nickname-2-plural.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: 3.1.3 NICKNAME (example 2, plural)
-Expect:      not bozo and entries[0].vcard == u'BEGIN:vCard\nVERSION:3.0\nNICKNAME:Jim,Jimmie\nEND:vCard'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<title>3.1.3 NICKNAME (example 2, plural)</title>
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<div class="vcard">
-<ul class="nickname"><li>Jim</li><li>Jimmie</li></ul>
-</div>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/hcard/3-1-3-nickname-2-singular.xml b/lib/feedparser/tests/microformats/hcard/3-1-3-nickname-2-singular.xml
deleted file mode 100644
index 13cb9890d..000000000
--- a/lib/feedparser/tests/microformats/hcard/3-1-3-nickname-2-singular.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: 3.1.3 NICKNAME (example 2, singular)
-Expect:      not bozo and entries[0].vcard == u'BEGIN:vCard\nVERSION:3.0\nNICKNAME:Jim,Jimmie\nEND:vCard'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<title>3.1.3 NICKNAME (example 2, singular)</title>
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<div class="vcard">
-<span class="nickname">Jim</span>, 
-<span class="nickname">Jimmie</span>
-</div>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/hcard/3-1-3-nickname.xml b/lib/feedparser/tests/microformats/hcard/3-1-3-nickname.xml
deleted file mode 100644
index 84b7f1b66..000000000
--- a/lib/feedparser/tests/microformats/hcard/3-1-3-nickname.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: 3.1.3 NICKNAME
-Expect:      not bozo and entries[0].vcard == u'BEGIN:vCard\nVERSION:3.0\nNICKNAME:Robbie\nEND:vCard'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<title>3.1.3 NICKNAME</title>
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<div class="vcard">
-<span class="nickname">Robbie</span>
-</div>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/hcard/3-1-4-photo-inline.xml b/lib/feedparser/tests/microformats/hcard/3-1-4-photo-inline.xml
deleted file mode 100644
index 25e62beba..000000000
--- a/lib/feedparser/tests/microformats/hcard/3-1-4-photo-inline.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: 3.1.4 PHOTO inline
-Expect:      not bozo and entries[0].vcard == u'BEGIN:vCard\nVERSION:3.0\nPHOTO;ENCODING=b;TYPE=JPEG:MIICajCCAdOgAwIBAgICBEUwDQYJKoZIhvcNAQEEBQAwdzEL\n MAkGA1UEBhMCVVMxLDAqBgNVBAoTI05ldHNjYXBlIENvbW11bmljYXRpb25zIENvcnBvcmF0aW\n 9uMRwwGgYDVQQLExNJbmZvcm1hdGlvbiBTeXN0\nEND:vCard'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<title>3.1.4 PHOTO inline</title>
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<div class="vcard">
-<img class="photo" src="data:image/jpeg;base64,MIICajCCAdOgAwIBAgICBEUwDQYJKoZIhvcNAQEEBQAwdzELMAkGA1UEBhMCVVMxLDAqBgNVBAoTI05ldHNjYXBlIENvbW11bmljYXRpb25zIENvcnBvcmF0aW9uMRwwGgYDVQQLExNJbmZvcm1hdGlvbiBTeXN0" alt="" />
-</div>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/hcard/3-1-4-photo.xml b/lib/feedparser/tests/microformats/hcard/3-1-4-photo.xml
deleted file mode 100644
index 310284f18..000000000
--- a/lib/feedparser/tests/microformats/hcard/3-1-4-photo.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: 3.1.4 PHOTO
-Expect:      not bozo and entries[0].vcard == u'BEGIN:vCard\nVERSION:3.0\nPHOTO;VALUE=uri:http://www.abc.com/pub/photos/jqpublic.gif\nEND:vCard'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<title>3.1.4 PHOTO</title>
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<div class="vcard">
-<img class="photo" src="http://www.abc.com/pub/photos/jqpublic.gif" alt="" />
-</div>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/hcard/3-1-5-bday-2.xml b/lib/feedparser/tests/microformats/hcard/3-1-5-bday-2.xml
deleted file mode 100644
index f6b020d65..000000000
--- a/lib/feedparser/tests/microformats/hcard/3-1-5-bday-2.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: 3.1.5 BCARD (example 2)
-Expect:      not bozo and entries[0].vcard == 'BEGIN:vCard\nVERSION:3.0\nBDAY:1993-10-15T23:10:00Z\nEND:vCard'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<title>3.1.5 BCARD (example 2)</title>
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<div class="vcard">
-<abbr class="bday" title="1993-10-15T23:10:00Z">Oct 15, 1993</abbr>
-</div>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/hcard/3-1-5-bday-3.xml b/lib/feedparser/tests/microformats/hcard/3-1-5-bday-3.xml
deleted file mode 100644
index 3ff0eb3f1..000000000
--- a/lib/feedparser/tests/microformats/hcard/3-1-5-bday-3.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: 3.1.5 BCARD (example 3)
-Expect:      not bozo and entries[0].vcard == 'BEGIN:vCard\nVERSION:3.0\nBDAY:1987-09-27T14:30:00Z\nEND:vCard'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<title>3.1.5 BCARD (example 3)</title>
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<div class="vcard">
-<abbr class="bday" title="1987-09-27T08:30:00-06:00">Sept 9, 1987</abbr>
-</div>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/hcard/3-1-5-bday.xml b/lib/feedparser/tests/microformats/hcard/3-1-5-bday.xml
deleted file mode 100644
index 08a2ff3d9..000000000
--- a/lib/feedparser/tests/microformats/hcard/3-1-5-bday.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: 3.1.5 BCARD
-Expect:      not bozo and entries[0].vcard == 'BEGIN:vCard\nVERSION:3.0\nBDAY:1996-04-15T00:00:00Z\nEND:vCard'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<title>3.1.5 BCARD</title>
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<div class="vcard">
-<abbr class="bday" title="1996-04-15">April 15, 1996</abbr>
-</div>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/hcard/3-2-1-adr.xml b/lib/feedparser/tests/microformats/hcard/3-2-1-adr.xml
deleted file mode 100644
index b9b37a008..000000000
--- a/lib/feedparser/tests/microformats/hcard/3-2-1-adr.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: 3.2.1 ADR
-Expect:      not bozo and entries[0].vcard == u'BEGIN:vCard\nVERSION:3.0\nADR;TYPE=dom,home,postal,parcel:;;123 Main Street;Any Town;CA;91921-1234\nEND:vCard'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<title>3.2.1 ADR</title>
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<div class="vcard">
-<div class="adr">
- <abbr class="type" title="dom">US</abbr>
- <span class="type">home</span> address, for
- <abbr class="type" title="postal">mail</abbr> and
- <abbr class="type" title="parcel">shipments</abbr>:
- <div class="street-address">123 Main Street</div>
- <span class="locality">Any Town</span>, <span class="region">CA</span>, 
- <span class="postal-code">91921-1234</span>
-</div>
-</div>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/hcard/3-2-2-label.xml b/lib/feedparser/tests/microformats/hcard/3-2-2-label.xml
deleted file mode 100644
index 68624e070..000000000
--- a/lib/feedparser/tests/microformats/hcard/3-2-2-label.xml
+++ /dev/null
@@ -1,30 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: 3.2.2 LABEL
-Expect:      not bozo and entries[0].vcard == u'BEGIN:vCard\nVERSION:3.0\nLABEL;TYPE=dom,home,postal,parcel:Mr.John Q. Public, Esq.\nMail Drop: TNE QB\n \n123 Main Street\nAny Town, CA  91921-1234\nU.S.A.\nEND:vCard'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<title>3.2.2 LABEL</title>
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<div class="vcard">
-Please use the following address label for 
-<div class="label">
- <abbr class="type" title="dom">local delivery</abbr>
- <abbr class="type" title="home">to my home</abbr>
- <abbr class="type" title="postal">of mail</abbr>
- <abbr class="type" title="parcel">and packages:</abbr>
-<pre>
-Mr.John Q. Public, Esq.
-Mail Drop: TNE QB
-123 Main Street
-Any Town, CA  91921-1234
-U.S.A.
-</pre>
-</div>
-</div>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/hcard/3-3-1-tel.xml b/lib/feedparser/tests/microformats/hcard/3-3-1-tel.xml
deleted file mode 100644
index 0c59d044d..000000000
--- a/lib/feedparser/tests/microformats/hcard/3-3-1-tel.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: 3.3.1 TEL
-Expect:      not bozo and entries[0].vcard == u'BEGIN:vCard\nVERSION:3.0\nTEL;TYPE=pref,work,voice,msg:+1-213-555-1234\nEND:vCard'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<title>3.3.1 TEL</title>
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<div class="vcard">
-<span class="tel">
- <abbr class="type" title="pref">my</abbr> 
- <span class="type">work</span> 
- <abbr class="type" title="voice">phone</abbr>, with 
- <abbr class="type" title="msg">voicemail</abbr>:
- <span class="value">+1-213-555-1234</span>
-</span>
-</div>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/hcard/3-3-2-email-2.xml b/lib/feedparser/tests/microformats/hcard/3-3-2-email-2.xml
deleted file mode 100644
index 7a2093ec9..000000000
--- a/lib/feedparser/tests/microformats/hcard/3-3-2-email-2.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: 3.3.2 EMAIL (example 2)
-Expect:      not bozo and entries[0].vcard == u'BEGIN:vCard\nVERSION:3.0\nEMAIL;TYPE=internet:jdoe@isp.net\nEND:vCard'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<title>3.3.2 EMAIL (example 2)</title>
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<div class="vcard">
-<a class="email" href="mailto:jdoe@isp.net">email jdoe</a>
-</div>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/hcard/3-3-2-email-3.xml b/lib/feedparser/tests/microformats/hcard/3-3-2-email-3.xml
deleted file mode 100644
index 6864e1e37..000000000
--- a/lib/feedparser/tests/microformats/hcard/3-3-2-email-3.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: 3.3.2 EMAIL (example 3)
-Expect:      not bozo and entries[0].vcard == u'BEGIN:vCard\nVERSION:3.0\nEMAIL;TYPE=internet,pref:jane_doe@abc.com\nEND:vCard'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<title>3.3.2 EMAIL (example 3)</title>
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<div class="vcard">
-<a class="email" href="mailto:jane_doe@abc.com">
- <abbr class="type" title="pref">preferred</abbr> 
- email for jane_doe
-</a>
-</div>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/hcard/3-3-2-email.xml b/lib/feedparser/tests/microformats/hcard/3-3-2-email.xml
deleted file mode 100644
index 6e2715e08..000000000
--- a/lib/feedparser/tests/microformats/hcard/3-3-2-email.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: 3.3.2 EMAIL
-Expect:      not bozo and entries[0].vcard == u'BEGIN:vCard\nVERSION:3.0\nEMAIL;TYPE=internet:jqpublic@xyz.dom1.com\nEND:vCard'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<title>3.3.2 EMAIL</title>
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<div class="vcard">
-<a class="email" href="mailto:jqpublic@xyz.dom1.com">email jqpublic</a>
-</div>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/hcard/3-3-3-mailer.xml b/lib/feedparser/tests/microformats/hcard/3-3-3-mailer.xml
deleted file mode 100644
index 0f71191da..000000000
--- a/lib/feedparser/tests/microformats/hcard/3-3-3-mailer.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: 3.3.3 MAILER
-Expect:      not bozo and entries[0].vcard == u'BEGIN:vCard\nVERSION:3.0\nMAILER:PigeonMail 2.1\nEND:vCard'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<title>3.3.3 MAILER</title>
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<div class="vcard">
-Jane Doe uses <span class="mailer">PigeonMail 2.1</span> for email.
-</div>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/hcard/3-4-1-tz-2.xml b/lib/feedparser/tests/microformats/hcard/3-4-1-tz-2.xml
deleted file mode 100644
index 8ac539602..000000000
--- a/lib/feedparser/tests/microformats/hcard/3-4-1-tz-2.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: 3.4.1 TZ (example 2)
-Expect:      not bozo and entries[0].vcard == u'BEGIN:vCard\nVERSION:3.0\nTZ:-05:00\\; EST\\; Raleigh/North America\\;This example has a single value\\, \n not a structure text value.\nEND:vCard'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<title>3.4.1 TZ (example 2)</title>
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<div class="vcard">
-<abbr class="tz"
- title="-05:00; EST; Raleigh/North America;This example has a single value, not a structure text value.">
- EST
-</abbr>
-</div>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/hcard/3-4-1-tz.xml b/lib/feedparser/tests/microformats/hcard/3-4-1-tz.xml
deleted file mode 100644
index 999a6025f..000000000
--- a/lib/feedparser/tests/microformats/hcard/3-4-1-tz.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: 3.4.1 TZ
-Expect:      not bozo and entries[0].vcard == u'BEGIN:vCard\nVERSION:3.0\nTZ:-05:00\nEND:vCard'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<title>3.4.1 TZ</title>
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<div class="vcard">
-<span class="tz">-05:00</span>
-</div>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/hcard/3-4-2-geo.xml b/lib/feedparser/tests/microformats/hcard/3-4-2-geo.xml
deleted file mode 100644
index b62cff562..000000000
--- a/lib/feedparser/tests/microformats/hcard/3-4-2-geo.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: 3.4.2 GEO
-Expect:      not bozo and entries[0].vcard == u'BEGIN:vCard\nVERSION:3.0\nGEO:37.386013;-122.082932\nEND:vCard'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<title>3.4.2 GEO</title>
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<div class="vcard">
-<span class="geo">
- <span class="latitude">37.386013</span>, 
- <span class="longitude">-122.082932</span>
-</span>
-</div>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/hcard/3-5-1-title.xml b/lib/feedparser/tests/microformats/hcard/3-5-1-title.xml
deleted file mode 100644
index 2831831a6..000000000
--- a/lib/feedparser/tests/microformats/hcard/3-5-1-title.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: 3.5.1 TITLE
-Expect:      not bozo and entries[0].vcard == u'BEGIN:vCard\nVERSION:3.0\nTITLE:Director\\, Research and Development\nEND:vCard'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<title>3.5.1 TITLE</title>
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<div class="vcard">
-<span class="title">Director, Research and Development</span>
-</div>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/hcard/3-5-2-role.xml b/lib/feedparser/tests/microformats/hcard/3-5-2-role.xml
deleted file mode 100644
index bc11530b0..000000000
--- a/lib/feedparser/tests/microformats/hcard/3-5-2-role.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: 3.5.2 ROLE
-Expect:      not bozo and entries[0].vcard == u'BEGIN:vCard\nVERSION:3.0\nROLE:Programmer\nEND:vCard'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<title>3.5.2 ROLE</title>
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<div class="vcard">
-<span class="role">Programmer</span>
-</div>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/hcard/3-5-3-logo-2.xml b/lib/feedparser/tests/microformats/hcard/3-5-3-logo-2.xml
deleted file mode 100644
index 4ad497a8f..000000000
--- a/lib/feedparser/tests/microformats/hcard/3-5-3-logo-2.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: 3.5.3 LOGO (example 2)
-Expect:      not bozo and entries[0].vcard == u'BEGIN:vCard\nVERSION:3.0\nLOGO;ENCODING=b;TYPE=JPEG:MIICajCCAdOgAwIBAgICBEUwDQYJKoZIhvcNAQEEBQAwdzELM\n AkGA1UEBhMCVVMxLDAqBgNVBAoTI05ldHNjYXBlIENvbW11bmljYXRpb25zIENvcnBvcmF0aW9\n uMRwwGgYDVQQLExNJbmZvcm1hdGlvbiBTeXN0\nEND:vCard'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<title>3.5.3 LOGO (example 2)</title>
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<div class="vcard">
-<img class="logo" src="data:image/jpeg;base64,MIICajCCAdOgAwIBAgICBEUwDQYJKoZIhvcNAQEEBQAwdzELMAkGA1UEBhMCVVMxLDAqBgNVBAoTI05ldHNjYXBlIENvbW11bmljYXRpb25zIENvcnBvcmF0aW9uMRwwGgYDVQQLExNJbmZvcm1hdGlvbiBTeXN0" alt="" />
-</div>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/hcard/3-5-3-logo.xml b/lib/feedparser/tests/microformats/hcard/3-5-3-logo.xml
deleted file mode 100644
index 6e5f7bd76..000000000
--- a/lib/feedparser/tests/microformats/hcard/3-5-3-logo.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: 3.5.3 LOGO
-Expect:      not bozo and entries[0].vcard == u'BEGIN:vCard\nVERSION:3.0\nLOGO;VALUE=uri:http://www.abc.com/pub/logos/abccorp.jpg\nEND:vCard'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<title>3.5.3 LOGO</title>
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<div class="vcard">
-<img class="logo" src="http://www.abc.com/pub/logos/abccorp.jpg" alt="my logo" />
-</div>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/hcard/3-5-4-agent-2.xml b/lib/feedparser/tests/microformats/hcard/3-5-4-agent-2.xml
deleted file mode 100644
index 329eae1c8..000000000
--- a/lib/feedparser/tests/microformats/hcard/3-5-4-agent-2.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: 3.5.4 AGENT (example 2)
-Expect:      not bozo and entries[0].vcard == u'BEGIN:vCard\nVERSION:3.0\nAGENT:BEGIN:vCard\\nVERSION:3.0\\nFN:Susan Thomas\\nN:\\nTEL\\;TYPE=voice:+1-919\n -555-1234\\nEMAIL\\;TYPE=internet:sthomas@host.com\\nEND:vCard\\n\nEND:vCard'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<title>3.5.4 AGENT (example 2)</title>
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<div class="vcard">
-<span class="agent vcard">
- <a class="email fn n" href="mailto:sthomas@host.com">Susan Thomas</a>,
- <span class="tel">+1-919-555-1234</span>
-</span>
-</div>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/hcard/3-5-4-agent.xml b/lib/feedparser/tests/microformats/hcard/3-5-4-agent.xml
deleted file mode 100644
index 8e53253c4..000000000
--- a/lib/feedparser/tests/microformats/hcard/3-5-4-agent.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: 3.5.4 AGENT
-Expect:      not bozo and entries[0].vcard == u'BEGIN:vCard\nVERSION:3.0\nAGENT;VALUE=uri:cid:JQPUBLIC.part3.960129T083020.xyzMail@host3.com\nEND:vCard'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<title>3.5.4 AGENT</title>
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<div class="vcard">
-<a class="agent" href="cid:JQPUBLIC.part3.960129T083020.xyzMail@host3.com">JQPUBLIC</a>
-</div>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/hcard/3-5-5-org.xml b/lib/feedparser/tests/microformats/hcard/3-5-5-org.xml
deleted file mode 100644
index 8f2d7b82d..000000000
--- a/lib/feedparser/tests/microformats/hcard/3-5-5-org.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: 3.5.5 ORG
-Expect:      not bozo and entries[0].vcard == u'BEGIN:vCard\nVERSION:3.0\nORG:ABC\\, Inc.;North American Division;Marketing\nEND:vCard'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<title>3.5.5 ORG</title>
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<div class="vcard">
-<span class="org">
- <span class="organization-name">ABC, Inc.</span>, 
- <span class="organization-unit">North American Division</span>,
- <span class="organization-unit">Marketing</span>,
-</span>
-</div>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/hcard/3-6-1-categories-2-plural.xml b/lib/feedparser/tests/microformats/hcard/3-6-1-categories-2-plural.xml
deleted file mode 100644
index 93908196d..000000000
--- a/lib/feedparser/tests/microformats/hcard/3-6-1-categories-2-plural.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: 3.6.1 CATEGORIES (example 2, plural)
-Expect:      not bozo and entries[0].vcard == u'BEGIN:vCard\nVERSION:3.0\nCATEGORIES:INTERNET,IETF,INDUSTRY,INFORMATION TECHNOLOGY\nEND:vCard'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<title>3.6.1 CATEGORIES (example 2, plural)</title>
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<div class="vcard">
-<ul class="categories">
- <li>INTERNET</li>
- <li>IETF</li>
- <li>INDUSTRY</li>
- <li>INFORMATION TECHNOLOGY</li>
-</ul>
-</div>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/hcard/3-6-1-categories-2-singular.xml b/lib/feedparser/tests/microformats/hcard/3-6-1-categories-2-singular.xml
deleted file mode 100644
index fa2ac0663..000000000
--- a/lib/feedparser/tests/microformats/hcard/3-6-1-categories-2-singular.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: 3.6.1 CATEGORIES (example 2, singular)
-Expect:      not bozo and entries[0].vcard == u'BEGIN:vCard\nVERSION:3.0\nCATEGORIES:INTERNET,IETF,INDUSTRY,INFORMATION TECHNOLOGY\nEND:vCard'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<title>3.6.1 CATEGORIES (example 2, singular)</title>
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<div class="vcard">
-<span class="category">INTERNET</span>, 
-<span class="category">IETF</span>, 
-<span class="category">INDUSTRY</span>, 
-<span class="category">INFORMATION TECHNOLOGY</span>
-</div>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/hcard/3-6-1-categories.xml b/lib/feedparser/tests/microformats/hcard/3-6-1-categories.xml
deleted file mode 100644
index 68382508f..000000000
--- a/lib/feedparser/tests/microformats/hcard/3-6-1-categories.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: 3.6.1 CATEGORIES
-Expect:      not bozo and entries[0].vcard == u'BEGIN:vCard\nVERSION:3.0\nCATEGORIES:TRAVEL AGENT\nEND:vCard'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<title>3.6.1 CATEGORIES</title>
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<div class="vcard">
-<span class="categories">TRAVEL AGENT</span>
-</div>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/hcard/3-6-2-note.xml b/lib/feedparser/tests/microformats/hcard/3-6-2-note.xml
deleted file mode 100644
index 1f37e624b..000000000
--- a/lib/feedparser/tests/microformats/hcard/3-6-2-note.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: 3.6.2 NOTE
-Expect:      not bozo and entries[0].vcard == u'BEGIN:vCard\nVERSION:3.0\nNOTE:This fax number is operational 0800 to 1715 EST\\, Mon-Fri.\nEND:vCard'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<title>3.6.2 NOTE</title>
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<div class="vcard">
-<p class="note">This fax number is operational 0800 to 1715 EST, Mon-Fri.</p>
-</div>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/hcard/3-6-4-rev-2.xml b/lib/feedparser/tests/microformats/hcard/3-6-4-rev-2.xml
deleted file mode 100644
index 24fb03970..000000000
--- a/lib/feedparser/tests/microformats/hcard/3-6-4-rev-2.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: 3.6.4 REV (example 2)
-Expect:      not bozo and entries[0].vcard == u'BEGIN:vCard\nVERSION:3.0\nREV:1997-11-15\nEND:vCard'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<title>3.6.4 REV (example 2)</title>
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<div class="vcard">
-<abbr class="rev" title="1997-11-15">Updated: November 15</abbr>
-</div>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/hcard/3-6-4-rev.xml b/lib/feedparser/tests/microformats/hcard/3-6-4-rev.xml
deleted file mode 100644
index bd6daf93b..000000000
--- a/lib/feedparser/tests/microformats/hcard/3-6-4-rev.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: 3.6.4 REV
-Expect:      not bozo and entries[0].vcard == u'BEGIN:vCard\nVERSION:3.0\nREV:1995-10-31T22:27:10Z\nEND:vCard'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<title>3.6.4 REV</title>
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<div class="vcard">
-<abbr class="rev" title="1995-10-31T22:27:10Z">Updated: 10/31 10:27p</abbr>
-</div>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/hcard/3-6-5-sort-string-2.xml b/lib/feedparser/tests/microformats/hcard/3-6-5-sort-string-2.xml
deleted file mode 100644
index ca80cd863..000000000
--- a/lib/feedparser/tests/microformats/hcard/3-6-5-sort-string-2.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: 3.6.5 SORT-STRING (example 2)
-Expect:      not bozo and entries[0].vcard == u'BEGIN:vCard\nVERSION:3.0\nFN:Robert Pau Shou Chang\nN:Pau;Shou Chang;Robert\nSORT-STRING:Pau\nEND:vCard'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<title>3.6.5 SORT-STRING (example 2)</title>
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<div class="vcard">
-<span class="fn n">
- <span class="additional-names">Robert</span>
- <span class="family-name sort-string">Pau</span>
- <span class="given-name">Shou Chang</span>
-</span>
-</div>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/hcard/3-6-5-sort-string-3.xml b/lib/feedparser/tests/microformats/hcard/3-6-5-sort-string-3.xml
deleted file mode 100644
index 72e36ee99..000000000
--- a/lib/feedparser/tests/microformats/hcard/3-6-5-sort-string-3.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: 3.6.5 SORT-STRING (example 3)
-Expect:      not bozo and entries[0].vcard == u'BEGIN:vCard\nVERSION:3.0\nFN:Osamu Koura\nN:Koura;Osamu\nSORT-STRING:Koura\nEND:vCard'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<title>3.6.5 SORT-STRING (example 3)</title>
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<div class="vcard">
-<span class="fn">
- Osamu <span class="sort-string">Koura</span>
-</span>
-</div>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/hcard/3-6-5-sort-string-4.xml b/lib/feedparser/tests/microformats/hcard/3-6-5-sort-string-4.xml
deleted file mode 100644
index 00857ff74..000000000
--- a/lib/feedparser/tests/microformats/hcard/3-6-5-sort-string-4.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: 3.6.5 SORT-STRING (example 4)
-Expect:      not bozo and entries[0].vcard == u'BEGIN:vCard\nVERSION:3.0\nFN:Oscar del Pozo\nN:del Pozo Triscon;Oscar\nSORT-STRING:Pozo\nEND:vCard'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<title>3.6.5 SORT-STRING (example 4)</title>
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<div class="vcard">
-<span class="n">
- <span class="fn">
-  <span class="given-name">Oscar</span>
-  del <span class="sort-string">Pozo</span>
- </span>
- <span class="family-name" style="display:none">
-  del Pozo Triscon
- </span>
-</span>
-</div>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/hcard/3-6-5-sort-string-5.xml b/lib/feedparser/tests/microformats/hcard/3-6-5-sort-string-5.xml
deleted file mode 100644
index 715e4100f..000000000
--- a/lib/feedparser/tests/microformats/hcard/3-6-5-sort-string-5.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: 3.6.5 SORT-STRING (example 5)
-Expect:      not bozo and entries[0].vcard == u"BEGIN:vCard\nVERSION:3.0\nFN:Christine d'Aboville\nN:d'Aboville;Christine\nSORT-STRING:Aboville\nEND:vCard"
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<title>3.6.5 SORT-STRING (example 5)</title>
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<div class="vcard">
-<span class="fn">
- Christine d'<span class="sort-string">Aboville</span>
-</span>
-</div>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/hcard/3-6-5-sort-string.xml b/lib/feedparser/tests/microformats/hcard/3-6-5-sort-string.xml
deleted file mode 100644
index a5ee5c161..000000000
--- a/lib/feedparser/tests/microformats/hcard/3-6-5-sort-string.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: 3.6.5 SORT-STRING
-Expect:      not bozo and entries[0].vcard == u'BEGIN:vCard\nVERSION:3.0\nFN:Rene van der Harten\nN:van der Harten;Rene;J.;Sir;R.D.O.N.\nSORT-STRING:Harten\nEND:vCard'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<title>3.6.5 SORT-STRING</title>
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<div class="vcard">
-<span class="n">
- <span class="honorific-prefixes">Sir</span>
- <span class="fn">
-  <span class="given-name">Rene</span>
-  <span class="family-name">
-   van der <span class="sort-string">Harten</span>
-  </span>
- </span>
- (<span class="additional-names">J.</span>),
- <span class="honorific-suffixes">R.D.O.N.</span>
-</span>
-</div>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/hcard/3-6-6-sound-2.xml b/lib/feedparser/tests/microformats/hcard/3-6-6-sound-2.xml
deleted file mode 100644
index 29e138de7..000000000
--- a/lib/feedparser/tests/microformats/hcard/3-6-6-sound-2.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: 3.6.6 SOUND (example 2)
-Expect:      not bozo and entries[0].vcard == 'BEGIN:vCard\nVERSION:3.0\nSOUND;ENCODING=b;TYPE=BASIC:MIICajCCAdOgAwIBAgICBEUwDQYJKoZIhvcNAQEEBQAwdzE\n LMAkGA1UEBhMCVVMxLDAqBgNVBAoTI05ldHNjYXBlIENvbW11bmljYXRpb25zIENvcnBvcmF0a\n W9uMRwwGgYDVQQLExNJbmZvcm1hdGlvbiBTeXN0\nEND:vCard'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<title>3.6.6 SOUND (example 2)</title>
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<div class="vcard">
-<object class="sound" 
-data="data:audio/basic;base64,MIICajCCAdOgAwIBAgICBEUwDQYJKoZIhvcNAQEEBQAwdzELMAkGA1UEBhMCVVMxLDAqBgNVBAoTI05ldHNjYXBlIENvbW11bmljYXRpb25zIENvcnBvcmF0aW9uMRwwGgYDVQQLExNJbmZvcm1hdGlvbiBTeXN0">
-pronounciation
-</object>
-</div>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/hcard/3-6-6-sound.xml b/lib/feedparser/tests/microformats/hcard/3-6-6-sound.xml
deleted file mode 100644
index 4c130bee8..000000000
--- a/lib/feedparser/tests/microformats/hcard/3-6-6-sound.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: 3.6.6 SOUND
-Expect:      not bozo and entries[0].vcard == 'BEGIN:vCard\nVERSION:3.0\nSOUND;TYPE=BASIC;VALUE=uri:cid:JOHNQPUBLIC.part8.19960229T080000.xyzMail@ho\n st1.com\nEND:vCard'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<title>3.6.6 SOUND</title>
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<div class="vcard">
-<object class="sound" type="audio/basic"
- data="cid:JOHNQPUBLIC.part8.19960229T080000.xyzMail@host1.com">
-pronounciation of "JOHN Q PUBLIC"
-</object>
-</div>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/hcard/3-6-7-uid.xml b/lib/feedparser/tests/microformats/hcard/3-6-7-uid.xml
deleted file mode 100644
index da10a9d18..000000000
--- a/lib/feedparser/tests/microformats/hcard/3-6-7-uid.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: 3.6.7 UID
-Expect:      not bozo and entries[0].vcard == 'BEGIN:vCard\nVERSION:3.0\nUID:19950401-080045-40000F192713-0052\nEND:vCard'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<title>3.6.7 UID</title>
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<div class="vcard">
-Unique id: 
- <span class="uid">19950401-080045-40000F192713-0052</span>
-</div>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/hcard/3-6-8-url.xml b/lib/feedparser/tests/microformats/hcard/3-6-8-url.xml
deleted file mode 100644
index dc1a1c6ec..000000000
--- a/lib/feedparser/tests/microformats/hcard/3-6-8-url.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: 3.6.8 URL
-Expect:      not bozo and entries[0].vcard == 'BEGIN:vCard\nVERSION:3.0\nURL:http://www.swbyps.restaurant.french/~chezchic.html\nEND:vCard'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<title>3.6.8 URL</title>
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<div class="vcard">
-<a class="url" href="http://www.swbyps.restaurant.french/~chezchic.html">Chez Chic</a>
-</div>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/hcard/3-7-1-class-2.xml b/lib/feedparser/tests/microformats/hcard/3-7-1-class-2.xml
deleted file mode 100644
index 2ddcfa2d7..000000000
--- a/lib/feedparser/tests/microformats/hcard/3-7-1-class-2.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: 3.7.1 CLASS (example 2)
-Expect:      not bozo and entries[0].vcard == 'BEGIN:vCard\nVERSION:3.0\nCLASS:PRIVATE\nEND:vCard'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<title>3.7.1 CLASS (example 2)</title>
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<div class="vcard">
-<span class="class">PRIVATE</span>
-</div>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/hcard/3-7-1-class-3.xml b/lib/feedparser/tests/microformats/hcard/3-7-1-class-3.xml
deleted file mode 100644
index 3be1a8896..000000000
--- a/lib/feedparser/tests/microformats/hcard/3-7-1-class-3.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: 3.7.1 CLASS (example 3)
-Expect:      not bozo and entries[0].vcard == 'BEGIN:vCard\nVERSION:3.0\nCLASS:CONFIDENTIAL\nEND:vCard'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<title>3.7.1 CLASS (example 3)</title>
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<div class="vcard">
-<span class="class">CONFIDENTIAL</span>
-</div>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/hcard/3-7-1-class.xml b/lib/feedparser/tests/microformats/hcard/3-7-1-class.xml
deleted file mode 100644
index 795de9786..000000000
--- a/lib/feedparser/tests/microformats/hcard/3-7-1-class.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: 3.7.1 CLASS
-Expect:      not bozo and entries[0].vcard == 'BEGIN:vCard\nVERSION:3.0\nCLASS:PUBLIC\nEND:vCard'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<title>3.7.1 CLASS</title>
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<div class="vcard">
-<span class="class">PUBLIC</span>
-</div>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/hcard/3-7-2-key.xml b/lib/feedparser/tests/microformats/hcard/3-7-2-key.xml
deleted file mode 100644
index c0fc56f81..000000000
--- a/lib/feedparser/tests/microformats/hcard/3-7-2-key.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: 3.7.2 KEY
-Expect:      not bozo and entries[0].vcard == 'BEGIN:vCard\nVERSION:3.0\nKEY;ENCODING=b:MIICajCCAdOgAwIBAgICBEUwDQYJKoZIhvcNAQEEBQAwdzELMAkGA1UEBhMC\n VVMxLDAqBgNVBAoTI05ldHNjYXBlIENbW11bmljYXRpb25zIENvcnBvcmF0aW9uMRwwGgYDVQQ\n LExNJbmZvcm1hdGlvbiBTeXN0ZW1zMRwwGgYDVQQDExNyb290Y2EubmV0c2NhcGUuY29tMB4XD\n Tk3MDYwNjE5NDc1OVoXDTk3MTIwMzE5NDc1OVowgYkxCzAJBgNVBAYTAlVTMSYwJAYDVQQKEx1\n OZXRzY2FwZSBDb21tdW5pY2F0aW9ucyBDb3JwLjEYMBYGA1UEAxMPVGltb3RoeSBBIEhvd2VzM\n SEwHwYJKoZIhvcNAQkBFhJob3dlc0BuZXRzY2FwZS5jb20xFTATBgoJkiaJk/IsZAEBEwVob3d\n lczBcMA0GCSqGSIb3DQEBAQUAA0sAMEgCQQC0JZf6wkg8pLMXHHCUvMfL5H6zjSk4vTTXZpYyr\n dN2dXcoX49LKiOmgeJSzoiFKHtLOIboyludF90CgqcxtwKnAgMBAAGjNjA0MBEGCWCGSAGG+EI\n BAQQEAwIAoDAfBgNVHSMEGDAWgBT84FToB/GV3jr3mcau+hUMbsQukjANBgkqhkiG9w0BAQQFA\n AOBgQBexv7o7mi3PLXadkmNP9LcIPmx93HGp0Kgyx1jIVMyNgsemeAwBM+MSlhMfcpbTrONwNj\n ZYW8vJDSoi//yrZlVt9bJbs7MNYZVsyF1unsqaln4/vy6Uawfg8VUMk1U7jt8LYpo4YULU7UZH\n PYVUaSgVttImOHZIKi4hlPXBOhcUQ==\nEND:vCard'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<title>3.7.2 KEY</title>
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<div class="vcard">
-<object class="key"
- data="data:application/octet-stream;base64,MIICajCCAdOgAwIBAgICBEUwDQYJKoZIhvcNAQEEBQAwdzELMAkGA1UEBhMCVVMxLDAqBgNVBAoTI05ldHNjYXBlIENbW11bmljYXRpb25zIENvcnBvcmF0aW9uMRwwGgYDVQQLExNJbmZvcm1hdGlvbiBTeXN0ZW1zMRwwGgYDVQQDExNyb290Y2EubmV0c2NhcGUuY29tMB4XDTk3MDYwNjE5NDc1OVoXDTk3MTIwMzE5NDc1OVowgYkxCzAJBgNVBAYTAlVTMSYwJAYDVQQKEx1OZXRzY2FwZSBDb21tdW5pY2F0aW9ucyBDb3JwLjEYMBYGA1UEAxMPVGltb3RoeSBBIEhvd2VzMSEwHwYJKoZIhvcNAQkBFhJob3dlc0BuZXRzY2FwZS5jb20xFTATBgoJkiaJk/IsZAEBEwVob3dlczBcMA0GCSqGSIb3DQEBAQUAA0sAMEgCQQC0JZf6wkg8pLMXHHCUvMfL5H6zjSk4vTTXZpYyrdN2dXcoX49LKiOmgeJSzoiFKHtLOIboyludF90CgqcxtwKnAgMBAAGjNjA0MBEGCWCGSAGG+EIBAQQEAwIAoDAfBgNVHSMEGDAWgBT84FToB/GV3jr3mcau+hUMbsQukjANBgkqhkiG9w0BAQQFAAOBgQBexv7o7mi3PLXadkmNP9LcIPmx93HGp0Kgyx1jIVMyNgsemeAwBM+MSlhMfcpbTrONwNjZYW8vJDSoi//yrZlVt9bJbs7MNYZVsyF1unsqaln4/vy6Uawfg8VUMk1U7jt8LYpo4YULU7UZHPYVUaSgVttImOHZIKi4hlPXBOhcUQ==">
-Key
-</object>
-</div>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/hcard/7-authors.xml b/lib/feedparser/tests/microformats/hcard/7-authors.xml
deleted file mode 100644
index 5c134fe12..000000000
--- a/lib/feedparser/tests/microformats/hcard/7-authors.xml
+++ /dev/null
@@ -1,64 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: 7. Authors
-Expect:      not bozo and entries[0].vcard == 'BEGIN:vCard\nVERSION:3.0\nFN:Frank Dawson\nN:Dawson;Frank\nADR;TYPE=work,postal,parcel:;;6544 Battleford Drive;Raleigh;NC;27613-3502;U\n .S.A.\nTEL;TYPE=WORK,VOICE,MSG:+1-919-676-9515\nTEL;TYPE=WORK,FAX:+1-919-676-9564\nEMAIL;TYPE=internet,pref:Frank_Dawson@Lotus.com\nEMAIL;TYPE=internet:fdawson@earthlink.net\nORG:Lotus Development Corporation\nURL:http://home.earthlink.net/~fdawson\nEND:vCard\nBEGIN:vCard\nVERSION:3.0\nFN:Tim Howes\nN:Howes;Tim\nADR;TYPE=work:;;501 E. Middlefield Rd.;Mountain View;CA;94043;U.S.A.\nTEL;TYPE=WORK,VOICE,MSG:+1-415-937-3419\nTEL;TYPE=WORK,FAX:+1-415-528-4164\nEMAIL;TYPE=internet:howes@netscape.com\nORG:Netscape Communications Corp.\nEND:vCard'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<title>7. Authors</title>
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<div class="vcard">
-<a class="url fn" href="http://home.earthlink.net/~fdawson">Frank Dawson</a>
-<div class="org">Lotus Development Corporation</div>
-<div class="adr">
- <span class="type">work</span> address 
-(<abbr class="type" title="postal">mail</abbr> and
- <abbr class="type" title="parcel">packages</abbr>):
- <div class="street-address">6544 Battleford Drive</div>
- <span class="locality">Raleigh</span>
- <span class="region">NC</span>
- <span class="postal-code">27613-3502</span>
- <div class="country-name">U.S.A.</div>
-</div>
-<div class="tel">
- <span class="value">+1-919-676-9515</span> 
-(<abbr class="type" title="WORK">w</abbr>,
- <abbr class="type" title="VOICE">v</abbr><abbr class="type" title="MSG">m</abbr>)
-</div>
-<div class="tel">
- <span class="value">+1-919-676-9564</span>
-(<abbr class="type" title="WORK">w</abbr><abbr class="type" title="FAX">f</abbr>)
-</div>
-<a class="email" href="mailto:Frank_Dawson@Lotus.com">
- <span class="type">pref</span>erred email
-</a>,
-<a class="email" href="mailto:fdawson@earthlink.net">
- alternate email
-</a>
-</div>
-<div class="vcard">
-<a class="email fn" href="mailto:howes@netscape.com">Tim Howes</a>
-<div class="org">Netscape Communications Corp.</div>
-<div class="adr">
- <span class="type">work</span> address:
- <div class="street-address">501 E. Middlefield Rd.</div>
- <span class="locality">Mountain View</span>, 
- <span class="region">CA</span>
- <span class="postal-code">94043</span>
- <div class="country-name">U.S.A.</div>
-</div>
-<div class="tel">
- <span class="value">+1-415-937-3419</span> 
-(<abbr class="type" title="WORK">w</abbr>,
- <abbr class="type" title="VOICE">v</abbr><abbr class="type" title="MSG">m</abbr>)
-</div>
-<div class="tel">
- <span class="value">+1-415-528-4164</span>
-(<abbr class="type" title="WORK">w</abbr><abbr class="type" title="FAX">f</abbr>)
-</div>
-</div>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href.xml b/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href.xml
deleted file mode 100644
index bc86bacf0..000000000
--- a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains rel='enclosure' link
-Expect:      not bozo and entries[0]['enclosures'][0]['href'] == u'http://example.com/movie.mp4'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a rel="enclosure" href="http://example.com/movie.mp4" type="video/mpeg">my movie</a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_avi.xml b/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_avi.xml
deleted file mode 100644
index 02ba14fbb..000000000
--- a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_avi.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains rel='enclosure' link
-Expect:      not bozo and entries[0]['enclosures'][0]['href'] == u'http://example.com/enclosure.avi'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a href="http://example.com/enclosure.avi">click here</a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_bin.xml b/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_bin.xml
deleted file mode 100644
index 069e3abb4..000000000
--- a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_bin.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains rel='enclosure' link
-Expect:      not bozo and entries[0]['enclosures'][0]['href'] == u'http://example.com/enclosure.bin'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a href="http://example.com/enclosure.bin">click here</a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_bz2.xml b/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_bz2.xml
deleted file mode 100644
index ad3e8721d..000000000
--- a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_bz2.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains rel='enclosure' link
-Expect:      not bozo and entries[0]['enclosures'][0]['href'] == u'http://example.com/enclosure.bz2'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a href="http://example.com/enclosure.bz2">click here</a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_deb.xml b/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_deb.xml
deleted file mode 100644
index 602638eae..000000000
--- a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_deb.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains rel='enclosure' link
-Expect:      not bozo and entries[0]['enclosures'][0]['href'] == u'http://example.com/enclosure.deb'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a href="http://example.com/enclosure.deb">click here</a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_dmg.xml b/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_dmg.xml
deleted file mode 100644
index d0e74b20e..000000000
--- a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_dmg.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains rel='enclosure' link
-Expect:      not bozo and entries[0]['enclosures'][0]['href'] == u'http://example.com/enclosure.dmg'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a href="http://example.com/enclosure.dmg">click here</a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_exe.xml b/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_exe.xml
deleted file mode 100644
index 73fd39f21..000000000
--- a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_exe.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains rel='enclosure' link
-Expect:      not bozo and entries[0]['enclosures'][0]['href'] == u'http://example.com/enclosure.exe'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a href="http://example.com/enclosure.exe">click here</a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_gz.xml b/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_gz.xml
deleted file mode 100644
index 9c95cdb81..000000000
--- a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_gz.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains rel='enclosure' link
-Expect:      not bozo and entries[0]['enclosures'][0]['href'] == u'http://example.com/enclosure.gz'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a href="http://example.com/enclosure.gz">click here</a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_hqx.xml b/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_hqx.xml
deleted file mode 100644
index 4047a729d..000000000
--- a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_hqx.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains rel='enclosure' link
-Expect:      not bozo and entries[0]['enclosures'][0]['href'] == u'http://example.com/enclosure.hqx'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a href="http://example.com/enclosure.hqx">click here</a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_img.xml b/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_img.xml
deleted file mode 100644
index 322125ea9..000000000
--- a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_img.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains rel='enclosure' link
-Expect:      not bozo and entries[0]['enclosures'][0]['href'] == u'http://example.com/enclosure.img'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a href="http://example.com/enclosure.img">click here</a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_iso.xml b/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_iso.xml
deleted file mode 100644
index 683add447..000000000
--- a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_iso.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains rel='enclosure' link
-Expect:      not bozo and entries[0]['enclosures'][0]['href'] == u'http://example.com/enclosure.iso'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a href="http://example.com/enclosure.iso">click here</a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_jar.xml b/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_jar.xml
deleted file mode 100644
index e39f8325c..000000000
--- a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_jar.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains rel='enclosure' link
-Expect:      not bozo and entries[0]['enclosures'][0]['href'] == u'http://example.com/enclosure.jar'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a href="http://example.com/enclosure.jar">click here</a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_m4a.xml b/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_m4a.xml
deleted file mode 100644
index 84fc77825..000000000
--- a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_m4a.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains rel='enclosure' link
-Expect:      not bozo and entries[0]['enclosures'][0]['href'] == u'http://example.com/enclosure.m4a'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a href="http://example.com/enclosure.m4a">click here</a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_m4v.xml b/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_m4v.xml
deleted file mode 100644
index b3dcd9091..000000000
--- a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_m4v.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains rel='enclosure' link
-Expect:      not bozo and entries[0]['enclosures'][0]['href'] == u'http://example.com/enclosure.m4v'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a href="http://example.com/enclosure.m4v">click here</a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_mp2.xml b/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_mp2.xml
deleted file mode 100644
index 3d3c6c70b..000000000
--- a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_mp2.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains rel='enclosure' link
-Expect:      not bozo and entries[0]['enclosures'][0]['href'] == u'http://example.com/enclosure.mp2'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a href="http://example.com/enclosure.mp2">click here</a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_mp3.xml b/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_mp3.xml
deleted file mode 100644
index c67a41439..000000000
--- a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_mp3.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains rel='enclosure' link
-Expect:      not bozo and entries[0]['enclosures'][0]['href'] == u'http://example.com/enclosure.mp3'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a href="http://example.com/enclosure.mp3">click here</a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_mp4.xml b/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_mp4.xml
deleted file mode 100644
index e10bb622b..000000000
--- a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_mp4.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains rel='enclosure' link
-Expect:      not bozo and entries[0]['enclosures'][0]['href'] == u'http://example.com/enclosure.mp4'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a href="http://example.com/enclosure.mp4">click here</a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_msi.xml b/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_msi.xml
deleted file mode 100644
index fcf83d2c3..000000000
--- a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_msi.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains rel='enclosure' link
-Expect:      not bozo and entries[0]['enclosures'][0]['href'] == u'http://example.com/enclosure.msi'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a href="http://example.com/enclosure.msi">click here</a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_ogg.xml b/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_ogg.xml
deleted file mode 100644
index 4547dda09..000000000
--- a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_ogg.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains rel='enclosure' link
-Expect:      not bozo and entries[0]['enclosures'][0]['href'] == u'http://example.com/enclosure.ogg'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a href="http://example.com/enclosure.ogg">click here</a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_rar.xml b/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_rar.xml
deleted file mode 100644
index 81a56ee0e..000000000
--- a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_rar.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains rel='enclosure' link
-Expect:      not bozo and entries[0]['enclosures'][0]['href'] == u'http://example.com/enclosure.rar'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a href="http://example.com/enclosure.rar">click here</a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_rpm.xml b/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_rpm.xml
deleted file mode 100644
index e635cf246..000000000
--- a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_rpm.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains rel='enclosure' link
-Expect:      not bozo and entries[0]['enclosures'][0]['href'] == u'http://example.com/enclosure.rpm'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a href="http://example.com/enclosure.rpm">click here</a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_sit.xml b/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_sit.xml
deleted file mode 100644
index fb3845a7a..000000000
--- a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_sit.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains rel='enclosure' link
-Expect:      not bozo and entries[0]['enclosures'][0]['href'] == u'http://example.com/enclosure.sit'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a href="http://example.com/enclosure.sit">click here</a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_sitx.xml b/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_sitx.xml
deleted file mode 100644
index 5ac2cb294..000000000
--- a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_sitx.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains rel='enclosure' link
-Expect:      not bozo and entries[0]['enclosures'][0]['href'] == u'http://example.com/enclosure.sitx'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a href="http://example.com/enclosure.sitx">click here</a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_tar.xml b/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_tar.xml
deleted file mode 100644
index 1ad3e78e2..000000000
--- a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_tar.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains rel='enclosure' link
-Expect:      not bozo and entries[0]['enclosures'][0]['href'] == u'http://example.com/enclosure.tar'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a href="http://example.com/enclosure.tar">click here</a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_tbz2.xml b/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_tbz2.xml
deleted file mode 100644
index c53147bdc..000000000
--- a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_tbz2.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains rel='enclosure' link
-Expect:      not bozo and entries[0]['enclosures'][0]['href'] == u'http://example.com/enclosure.tbz2'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a href="http://example.com/enclosure.tbz2">click here</a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_tgz.xml b/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_tgz.xml
deleted file mode 100644
index 676fb48ab..000000000
--- a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_tgz.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains rel='enclosure' link
-Expect:      not bozo and entries[0]['enclosures'][0]['href'] == u'http://example.com/enclosure.tgz'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a href="http://example.com/enclosure.tgz">click here</a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_wma.xml b/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_wma.xml
deleted file mode 100644
index 626d6ba47..000000000
--- a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_wma.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains rel='enclosure' link
-Expect:      not bozo and entries[0]['enclosures'][0]['href'] == u'http://example.com/enclosure.wma'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a href="http://example.com/enclosure.wma">click here</a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_wmv.xml b/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_wmv.xml
deleted file mode 100644
index 4f1931b2b..000000000
--- a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_wmv.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains rel='enclosure' link
-Expect:      not bozo and entries[0]['enclosures'][0]['href'] == u'http://example.com/enclosure.wmv'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a href="http://example.com/enclosure.wmv">click here</a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_z.xml b/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_z.xml
deleted file mode 100644
index ed2bc37ac..000000000
--- a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_z.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains rel='enclosure' link
-Expect:      not bozo and entries[0]['enclosures'][0]['href'] == u'http://example.com/enclosure.z'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a href="http://example.com/enclosure.z">click here</a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_zip.xml b/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_zip.xml
deleted file mode 100644
index ba6759c2f..000000000
--- a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_zip.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains rel='enclosure' link
-Expect:      not bozo and entries[0]['enclosures'][0]['href'] == u'http://example.com/enclosure.zip'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a href="http://example.com/enclosure.zip">click here</a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_type_application_ogg.xml b/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_type_application_ogg.xml
deleted file mode 100644
index 1ccbe63a6..000000000
--- a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_type_application_ogg.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains rel='enclosure' link
-Expect:      not bozo and entries[0]['enclosures'][0]['href'] == u'http://example.com/generate-enclosure.php'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a href="http://example.com/generate-enclosure.php" type="application/ogg">my song</a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_type_audio.xml b/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_type_audio.xml
deleted file mode 100644
index 908e90162..000000000
--- a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_type_audio.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains rel='enclosure' link
-Expect:      not bozo and entries[0]['enclosures'][0]['href'] == u'http://example.com/generate-audio.php'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a href="http://example.com/generate-audio.php" type="audio/aiff">my movie</a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_type_video.xml b/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_type_video.xml
deleted file mode 100644
index 6ac974795..000000000
--- a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_type_video.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains rel='enclosure' link
-Expect:      not bozo and entries[0]['enclosures'][0]['href'] == u'http://example.com/generate-movie.php'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a href="http://example.com/generate-movie.php" type="video/mpeg">my movie</a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_invalid.xml b/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_invalid.xml
deleted file mode 100644
index 0cf5716f8..000000000
--- a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_invalid.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: ensure that isProbablyDownloadable() will not throw ValueError on a bad URL
-Expect:      not bozo
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a href="http://bad]test">isProbablyDownloadable crasher</a></p>
-</div>
-</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_no_autodetect.xml b/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_no_autodetect.xml
deleted file mode 100644
index 18a5fd469..000000000
--- a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_no_autodetect.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains rel='enclosure' link
-Expect:      not bozo and not entries[0].has_key('enclosures')
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a href="http://example.com/generate-enclosure.php">my song</a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_no_autodetect_xml.xml b/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_no_autodetect_xml.xml
deleted file mode 100644
index b5d2d3a7f..000000000
--- a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_no_autodetect_xml.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains rel='enclosure' link
-Expect:      not bozo and not entries[0].has_key('enclosures')
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a href="http://example.com/generate-enclosure.php" type="application/atom+xml">my song</a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_title.xml b/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_title.xml
deleted file mode 100644
index ba812b5ca..000000000
--- a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_title.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains rel='enclosure' link
-Expect:      not bozo and entries[0]['enclosures'][0]['title'] == u'my movie'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a rel="enclosure" href="http://example.com/movie.mp4" type="video/mpeg" title="my movie"></a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_title_from_link_text.xml b/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_title_from_link_text.xml
deleted file mode 100644
index b69d85e76..000000000
--- a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_title_from_link_text.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains rel='enclosure' link
-Expect:      not bozo and entries[0]['enclosures'][0]['title'] == u'my movie'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a rel="enclosure" href="http://example.com/movie.mp4" type="video/mpeg">my movie</a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_title_overrides_link_text.xml b/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_title_overrides_link_text.xml
deleted file mode 100644
index 79c2a7132..000000000
--- a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_title_overrides_link_text.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains rel='enclosure' link
-Expect:      not bozo and entries[0]['enclosures'][0]['title'] == u'real title'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a rel="enclosure" href="http://example.com/movie.mp4" type="video/mpeg" title="real title">my movie</a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_type.xml b/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_type.xml
deleted file mode 100644
index bc6ced7ed..000000000
--- a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_type.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains rel='enclosure' link
-Expect:      not bozo and entries[0]['enclosures'][0]['type'] == u'video/mpeg'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a rel="enclosure" href="http://example.com/movie.mp4" type="video/mpeg">my movie</a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/rel_tag/rel_tag_duplicate.xml b/lib/feedparser/tests/microformats/rel_tag/rel_tag_duplicate.xml
deleted file mode 100644
index 62ae4950d..000000000
--- a/lib/feedparser/tests/microformats/rel_tag/rel_tag_duplicate.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains duplicate rel='tag' link
-Expect:      not bozo and len(entries[0]['tags']) == 1
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<category term="tech" scheme="http://del.icio.us/tag/" label="Technology"/>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a rel="tag" href="http://del.icio.us/tag/tech">Technology</a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/rel_tag/rel_tag_label.xml b/lib/feedparser/tests/microformats/rel_tag/rel_tag_label.xml
deleted file mode 100644
index 81aacadb0..000000000
--- a/lib/feedparser/tests/microformats/rel_tag/rel_tag_label.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains rel='tag' link
-Expect:      not bozo and entries[0]['tags'][0]['label'] == u'Technology'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a rel="tag" href="http://del.icio.us/tag/tech">Technology</a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/rel_tag/rel_tag_scheme.xml b/lib/feedparser/tests/microformats/rel_tag/rel_tag_scheme.xml
deleted file mode 100644
index 50a115e27..000000000
--- a/lib/feedparser/tests/microformats/rel_tag/rel_tag_scheme.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains rel='tag' link
-Expect:      not bozo and entries[0]['tags'][0]['scheme'] == u'http://del.icio.us/tag/'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a rel="tag" href="http://del.icio.us/tag/tech">Technology</a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/rel_tag/rel_tag_term.xml b/lib/feedparser/tests/microformats/rel_tag/rel_tag_term.xml
deleted file mode 100644
index c78765303..000000000
--- a/lib/feedparser/tests/microformats/rel_tag/rel_tag_term.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains rel='tag' link
-Expect:      not bozo and entries[0]['tags'][0]['term'] == u'tech'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a rel="tag" href="http://del.icio.us/tag/tech">Technology</a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/rel_tag/rel_tag_term_trailing_slash.xml b/lib/feedparser/tests/microformats/rel_tag/rel_tag_term_trailing_slash.xml
deleted file mode 100644
index 56f75e2b2..000000000
--- a/lib/feedparser/tests/microformats/rel_tag/rel_tag_term_trailing_slash.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains rel='tag' link
-Expect:      not bozo and entries[0]['tags'][0]['term'] == u'tech'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a rel="tag" href="http://del.icio.us/tag/tech/">Technology</a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/xfn/xfn_acquaintance.xml b/lib/feedparser/tests/microformats/xfn/xfn_acquaintance.xml
deleted file mode 100644
index aef6e3762..000000000
--- a/lib/feedparser/tests/microformats/xfn/xfn_acquaintance.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains XFN link
-Expect:      not bozo and entries[0]['xfn'][0]['relationships'] == [u'acquaintance']
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a rel="acquaintance" href="http://example.com/johndoe">John Doe</a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/xfn/xfn_brother.xml b/lib/feedparser/tests/microformats/xfn/xfn_brother.xml
deleted file mode 100644
index eb201bf0a..000000000
--- a/lib/feedparser/tests/microformats/xfn/xfn_brother.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains XFN link
-Expect:      not bozo and entries[0]['xfn'][0]['relationships'] == [u'brother']
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a rel="brother" href="http://example.com/johndoe">John Doe</a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/xfn/xfn_child.xml b/lib/feedparser/tests/microformats/xfn/xfn_child.xml
deleted file mode 100644
index 507d91bb1..000000000
--- a/lib/feedparser/tests/microformats/xfn/xfn_child.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains XFN link
-Expect:      not bozo and entries[0]['xfn'][0]['relationships'] == [u'child']
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a rel="child" href="http://example.com/johndoe">John Doe</a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/xfn/xfn_co-resident.xml b/lib/feedparser/tests/microformats/xfn/xfn_co-resident.xml
deleted file mode 100644
index 10267a9a4..000000000
--- a/lib/feedparser/tests/microformats/xfn/xfn_co-resident.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains XFN link
-Expect:      not bozo and entries[0]['xfn'][0]['relationships'] == [u'co-resident']
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a rel="co-resident" href="http://example.com/johndoe">John Doe</a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/xfn/xfn_co-worker.xml b/lib/feedparser/tests/microformats/xfn/xfn_co-worker.xml
deleted file mode 100644
index c385aeec1..000000000
--- a/lib/feedparser/tests/microformats/xfn/xfn_co-worker.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains XFN link
-Expect:      not bozo and entries[0]['xfn'][0]['relationships'] == [u'co-worker']
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a rel="co-worker" href="http://example.com/johndoe">John Doe</a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/xfn/xfn_colleague.xml b/lib/feedparser/tests/microformats/xfn/xfn_colleague.xml
deleted file mode 100644
index 9a8ca3b1c..000000000
--- a/lib/feedparser/tests/microformats/xfn/xfn_colleague.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains XFN link
-Expect:      not bozo and entries[0]['xfn'][0]['relationships'] == [u'colleague']
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a rel="colleague" href="http://example.com/johndoe">John Doe</a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/xfn/xfn_contact.xml b/lib/feedparser/tests/microformats/xfn/xfn_contact.xml
deleted file mode 100644
index 8ba482e62..000000000
--- a/lib/feedparser/tests/microformats/xfn/xfn_contact.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains XFN link
-Expect:      not bozo and entries[0]['xfn'][0]['relationships'] == [u'contact']
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a rel="contact" href="http://example.com/johndoe">John Doe</a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/xfn/xfn_coresident.xml b/lib/feedparser/tests/microformats/xfn/xfn_coresident.xml
deleted file mode 100644
index 64ecec5ed..000000000
--- a/lib/feedparser/tests/microformats/xfn/xfn_coresident.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains XFN link
-Expect:      not bozo and entries[0]['xfn'][0]['relationships'] == [u'coresident']
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a rel="coresident" href="http://example.com/johndoe">John Doe</a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/xfn/xfn_coworker.xml b/lib/feedparser/tests/microformats/xfn/xfn_coworker.xml
deleted file mode 100644
index 9217d4004..000000000
--- a/lib/feedparser/tests/microformats/xfn/xfn_coworker.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains XFN link
-Expect:      not bozo and entries[0]['xfn'][0]['relationships'] == [u'coworker']
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a rel="coworker" href="http://example.com/johndoe">John Doe</a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/xfn/xfn_crush.xml b/lib/feedparser/tests/microformats/xfn/xfn_crush.xml
deleted file mode 100644
index f5675382a..000000000
--- a/lib/feedparser/tests/microformats/xfn/xfn_crush.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains XFN link
-Expect:      not bozo and entries[0]['xfn'][0]['relationships'] == [u'crush']
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a rel="crush" href="http://example.com/johndoe">John Doe</a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/xfn/xfn_date.xml b/lib/feedparser/tests/microformats/xfn/xfn_date.xml
deleted file mode 100644
index 104876501..000000000
--- a/lib/feedparser/tests/microformats/xfn/xfn_date.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains XFN link
-Expect:      not bozo and entries[0]['xfn'][0]['relationships'] == [u'date']
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a rel="date" href="http://example.com/johndoe">John Doe</a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/xfn/xfn_friend.xml b/lib/feedparser/tests/microformats/xfn/xfn_friend.xml
deleted file mode 100644
index b70aa2a36..000000000
--- a/lib/feedparser/tests/microformats/xfn/xfn_friend.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains XFN link
-Expect:      not bozo and entries[0]['xfn'][0]['relationships'] == [u'friend']
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a rel="friend" href="http://example.com/johndoe">John Doe</a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/xfn/xfn_href.xml b/lib/feedparser/tests/microformats/xfn/xfn_href.xml
deleted file mode 100644
index e05a65914..000000000
--- a/lib/feedparser/tests/microformats/xfn/xfn_href.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains XFN link
-Expect:      not bozo and entries[0]['xfn'][0]['href'] == u'http://example.com/johndoe'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a rel="coworker" href="http://example.com/johndoe">John Doe</a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/xfn/xfn_husband.xml b/lib/feedparser/tests/microformats/xfn/xfn_husband.xml
deleted file mode 100644
index e68275bc6..000000000
--- a/lib/feedparser/tests/microformats/xfn/xfn_husband.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains XFN link
-Expect:      not bozo and entries[0]['xfn'][0]['relationships'] == [u'husband']
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a rel="husband" href="http://example.com/johndoe">John Doe</a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/xfn/xfn_kin.xml b/lib/feedparser/tests/microformats/xfn/xfn_kin.xml
deleted file mode 100644
index 1d07e0796..000000000
--- a/lib/feedparser/tests/microformats/xfn/xfn_kin.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains XFN link
-Expect:      not bozo and entries[0]['xfn'][0]['relationships'] == [u'kin']
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a rel="kin" href="http://example.com/johndoe">John Doe</a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/xfn/xfn_me.xml b/lib/feedparser/tests/microformats/xfn/xfn_me.xml
deleted file mode 100644
index cffd9fded..000000000
--- a/lib/feedparser/tests/microformats/xfn/xfn_me.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains XFN link
-Expect:      not bozo and entries[0]['xfn'][0]['relationships'] == [u'me']
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a rel="me" href="http://example.com/johndoe">John Doe</a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/xfn/xfn_met.xml b/lib/feedparser/tests/microformats/xfn/xfn_met.xml
deleted file mode 100644
index f8df859ef..000000000
--- a/lib/feedparser/tests/microformats/xfn/xfn_met.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains XFN link
-Expect:      not bozo and entries[0]['xfn'][0]['relationships'] == [u'met']
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a rel="met" href="http://example.com/johndoe">John Doe</a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/xfn/xfn_multiple.xml b/lib/feedparser/tests/microformats/xfn/xfn_multiple.xml
deleted file mode 100644
index 9574495de..000000000
--- a/lib/feedparser/tests/microformats/xfn/xfn_multiple.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains XFN link
-Expect:      not bozo and entries[0]['xfn'][0]['relationships'] == [u'coworker', u'friend']
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a rel="coworker friend" href="http://example.com/johndoe">John Doe</a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/xfn/xfn_muse.xml b/lib/feedparser/tests/microformats/xfn/xfn_muse.xml
deleted file mode 100644
index 7832f542b..000000000
--- a/lib/feedparser/tests/microformats/xfn/xfn_muse.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains XFN link
-Expect:      not bozo and entries[0]['xfn'][0]['relationships'] == [u'muse']
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a rel="muse" href="http://example.com/johndoe">John Doe</a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/xfn/xfn_name.xml b/lib/feedparser/tests/microformats/xfn/xfn_name.xml
deleted file mode 100644
index cd1e9c377..000000000
--- a/lib/feedparser/tests/microformats/xfn/xfn_name.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains XFN link
-Expect:      not bozo and entries[0]['xfn'][0]['name'] == u'John Doe'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a rel="coworker" href="http://example.com/johndoe">John Doe</a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/xfn/xfn_neighbor.xml b/lib/feedparser/tests/microformats/xfn/xfn_neighbor.xml
deleted file mode 100644
index 6b1b1aae2..000000000
--- a/lib/feedparser/tests/microformats/xfn/xfn_neighbor.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains XFN link
-Expect:      not bozo and entries[0]['xfn'][0]['relationships'] == [u'neighbor']
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a rel="neighbor" href="http://example.com/johndoe">John Doe</a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/xfn/xfn_parent.xml b/lib/feedparser/tests/microformats/xfn/xfn_parent.xml
deleted file mode 100644
index 13739d324..000000000
--- a/lib/feedparser/tests/microformats/xfn/xfn_parent.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains XFN link
-Expect:      not bozo and entries[0]['xfn'][0]['relationships'] == [u'parent']
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a rel="parent" href="http://example.com/johndoe">John Doe</a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/xfn/xfn_relative.xml b/lib/feedparser/tests/microformats/xfn/xfn_relative.xml
deleted file mode 100644
index 06e5e3714..000000000
--- a/lib/feedparser/tests/microformats/xfn/xfn_relative.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains XFN link
-Expect:      not bozo and entries[0]['xfn'][0]['relationships'] == [u'relative']
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a rel="relative" href="http://example.com/johndoe">John Doe</a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/xfn/xfn_sibling.xml b/lib/feedparser/tests/microformats/xfn/xfn_sibling.xml
deleted file mode 100644
index 7c12ed3cd..000000000
--- a/lib/feedparser/tests/microformats/xfn/xfn_sibling.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains XFN link
-Expect:      not bozo and entries[0]['xfn'][0]['relationships'] == [u'sibling']
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a rel="sibling" href="http://example.com/johndoe">John Doe</a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/xfn/xfn_sister.xml b/lib/feedparser/tests/microformats/xfn/xfn_sister.xml
deleted file mode 100644
index 411ac9832..000000000
--- a/lib/feedparser/tests/microformats/xfn/xfn_sister.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains XFN link
-Expect:      not bozo and entries[0]['xfn'][0]['relationships'] == [u'sister']
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a rel="sister" href="http://example.com/johndoe">John Doe</a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/xfn/xfn_spouse.xml b/lib/feedparser/tests/microformats/xfn/xfn_spouse.xml
deleted file mode 100644
index 157f26a54..000000000
--- a/lib/feedparser/tests/microformats/xfn/xfn_spouse.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains XFN link
-Expect:      not bozo and entries[0]['xfn'][0]['relationships'] == [u'spouse']
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a rel="spouse" href="http://example.com/johndoe">John Doe</a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/xfn/xfn_sweetheart.xml b/lib/feedparser/tests/microformats/xfn/xfn_sweetheart.xml
deleted file mode 100644
index 427156123..000000000
--- a/lib/feedparser/tests/microformats/xfn/xfn_sweetheart.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains XFN link
-Expect:      not bozo and entries[0]['xfn'][0]['relationships'] == [u'sweetheart']
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a rel="sweetheart" href="http://example.com/johndoe">John Doe</a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/xfn/xfn_wife.xml b/lib/feedparser/tests/microformats/xfn/xfn_wife.xml
deleted file mode 100644
index 529b7af91..000000000
--- a/lib/feedparser/tests/microformats/xfn/xfn_wife.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains XFN link
-Expect:      not bozo and entries[0]['xfn'][0]['relationships'] == [u'wife']
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a rel="wife" href="http://example.com/johndoe">John Doe</a></p>
-</div>
-</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/amp/amp01.xml b/lib/feedparser/tests/wellformed/amp/amp01.xml
deleted file mode 100644
index 3ca458353..000000000
--- a/lib/feedparser/tests/wellformed/amp/amp01.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: & test 1
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'&#38;'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-	  <title type="text/html" mode="escaped">&#38;#38;</title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/amp/amp02.xml b/lib/feedparser/tests/wellformed/amp/amp02.xml
deleted file mode 100644
index 86e049f59..000000000
--- a/lib/feedparser/tests/wellformed/amp/amp02.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: & test 2
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'&#x26;'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-	  <title type="text/html" mode="escaped">&#38;#x26;</title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/amp/amp03.xml b/lib/feedparser/tests/wellformed/amp/amp03.xml
deleted file mode 100644
index 8fe783013..000000000
--- a/lib/feedparser/tests/wellformed/amp/amp03.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: & test 3
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'&'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-	  <title>&#38;</title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/amp/amp04.xml b/lib/feedparser/tests/wellformed/amp/amp04.xml
deleted file mode 100644
index 7df221df0..000000000
--- a/lib/feedparser/tests/wellformed/amp/amp04.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: & test 4
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'&amp;'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-	  <title type="text/html" mode="escaped">&#38;amp;</title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/amp/amp05.xml b/lib/feedparser/tests/wellformed/amp/amp05.xml
deleted file mode 100644
index 4a8a46e32..000000000
--- a/lib/feedparser/tests/wellformed/amp/amp05.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: & test 5
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'&#38;'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-	  <title type="text/html" mode="escaped">&#x26;#38;</title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/amp/amp06.xml b/lib/feedparser/tests/wellformed/amp/amp06.xml
deleted file mode 100644
index 5a59cd4dd..000000000
--- a/lib/feedparser/tests/wellformed/amp/amp06.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: & test 6
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'&#x26;'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-	  <title type="text/html" mode="escaped">&#x26;#x26;</title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/amp/amp07.xml b/lib/feedparser/tests/wellformed/amp/amp07.xml
deleted file mode 100644
index a324d4ba1..000000000
--- a/lib/feedparser/tests/wellformed/amp/amp07.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: & test 7
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'&'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-	  <title>&#x26;</title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/amp/amp08.xml b/lib/feedparser/tests/wellformed/amp/amp08.xml
deleted file mode 100644
index 42ac2c70c..000000000
--- a/lib/feedparser/tests/wellformed/amp/amp08.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: & test 8
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'&amp;'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-	  <title type="text/html" mode="escaped">&#x26;amp;</title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/amp/amp09.xml b/lib/feedparser/tests/wellformed/amp/amp09.xml
deleted file mode 100644
index b634a90fd..000000000
--- a/lib/feedparser/tests/wellformed/amp/amp09.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: & test 9
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'&#38;'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-	  <title type="text/html" mode="escaped">&amp;#38;</title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/amp/amp10.xml b/lib/feedparser/tests/wellformed/amp/amp10.xml
deleted file mode 100644
index 87a050c52..000000000
--- a/lib/feedparser/tests/wellformed/amp/amp10.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: & test 10
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'&#x26;'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-	  <title type="text/html" mode="escaped">&amp;#x26;</title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/amp/amp11.xml b/lib/feedparser/tests/wellformed/amp/amp11.xml
deleted file mode 100644
index 2b8d57447..000000000
--- a/lib/feedparser/tests/wellformed/amp/amp11.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: & test 11
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'&'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-	  <title>&amp;</title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/amp/amp12.xml b/lib/feedparser/tests/wellformed/amp/amp12.xml
deleted file mode 100644
index ff9622c77..000000000
--- a/lib/feedparser/tests/wellformed/amp/amp12.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: & test 12
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'&amp;'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-	  <title type="text/html" mode="escaped">&amp;amp;</title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/amp/amp13.xml b/lib/feedparser/tests/wellformed/amp/amp13.xml
deleted file mode 100644
index 486ce4858..000000000
--- a/lib/feedparser/tests/wellformed/amp/amp13.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: & test 13
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'<b>&#38;</b>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-	  <title type="text/html" mode="escaped">&lt;b&gt;&#38;#38;&lt;/b&gt;</title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/amp/amp14.xml b/lib/feedparser/tests/wellformed/amp/amp14.xml
deleted file mode 100644
index fc60ae17d..000000000
--- a/lib/feedparser/tests/wellformed/amp/amp14.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: & test 14
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'<b>&#x26;</b>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-	  <title type="text/html" mode="escaped">&lt;b&gt;&#38;#x26;&lt;/b&gt;</title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/amp/amp15.xml b/lib/feedparser/tests/wellformed/amp/amp15.xml
deleted file mode 100644
index f2fecbdd4..000000000
--- a/lib/feedparser/tests/wellformed/amp/amp15.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: & test 15
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'<b>&amp;</b>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-	  <title type="text/html" mode="escaped">&lt;b&gt;&#38;amp;&lt;/b&gt;</title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/amp/amp16.xml b/lib/feedparser/tests/wellformed/amp/amp16.xml
deleted file mode 100644
index 92ab7e45b..000000000
--- a/lib/feedparser/tests/wellformed/amp/amp16.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: & test 16
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'<b>&#38;</b>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-	  <title type="text/html" mode="escaped">&lt;b&gt;&#x26;#38;&lt;/b&gt;</title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/amp/amp17.xml b/lib/feedparser/tests/wellformed/amp/amp17.xml
deleted file mode 100644
index 1a4f2fa01..000000000
--- a/lib/feedparser/tests/wellformed/amp/amp17.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: & test 17
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'<b>&#x26;</b>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-	  <title type="text/html" mode="escaped">&lt;b&gt;&#x26;#x26;&lt;/b&gt;</title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/amp/amp18.xml b/lib/feedparser/tests/wellformed/amp/amp18.xml
deleted file mode 100644
index dda68b05a..000000000
--- a/lib/feedparser/tests/wellformed/amp/amp18.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: & test 18
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'<b>&amp;</b>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-	  <title type="text/html" mode="escaped">&lt;b&gt;&#x26;amp;&lt;/b&gt;</title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/amp/amp19.xml b/lib/feedparser/tests/wellformed/amp/amp19.xml
deleted file mode 100644
index 168e7446b..000000000
--- a/lib/feedparser/tests/wellformed/amp/amp19.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: & test 19
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'<b>&#38;</b>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-	  <title type="text/html" mode="escaped">&lt;b&gt;&amp;#38;&lt;/b&gt;</title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/amp/amp20.xml b/lib/feedparser/tests/wellformed/amp/amp20.xml
deleted file mode 100644
index d105aba1b..000000000
--- a/lib/feedparser/tests/wellformed/amp/amp20.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: & test 20
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'<b>&#x26;</b>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-	  <title type="text/html" mode="escaped">&lt;b&gt;&amp;#x26;&lt;/b&gt;</title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/amp/amp21.xml b/lib/feedparser/tests/wellformed/amp/amp21.xml
deleted file mode 100644
index 15b987d8e..000000000
--- a/lib/feedparser/tests/wellformed/amp/amp21.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: & test 21
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'<b>&amp;</b>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-	  <title type="text/html" mode="escaped">&lt;b&gt;&amp;amp;&lt;/b&gt;</title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/amp/amp22.xml b/lib/feedparser/tests/wellformed/amp/amp22.xml
deleted file mode 100644
index a54b0aa6e..000000000
--- a/lib/feedparser/tests/wellformed/amp/amp22.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: & test 22
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'<b>&#38;</b>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-	  <title type="text/html" mode="escaped">&lt;b>&#38;#38;&lt;/b></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/amp/amp23.xml b/lib/feedparser/tests/wellformed/amp/amp23.xml
deleted file mode 100644
index c4b09b534..000000000
--- a/lib/feedparser/tests/wellformed/amp/amp23.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: & test 23
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'<b>&#x26;</b>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-	  <title type="text/html" mode="escaped">&lt;b>&#38;#x26;&lt;/b></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/amp/amp24.xml b/lib/feedparser/tests/wellformed/amp/amp24.xml
deleted file mode 100644
index 8ff8f50b1..000000000
--- a/lib/feedparser/tests/wellformed/amp/amp24.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: & test 24
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'<b>&amp;</b>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-	  <title type="text/html" mode="escaped">&lt;b>&#38;amp;&lt;/b></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/amp/amp25.xml b/lib/feedparser/tests/wellformed/amp/amp25.xml
deleted file mode 100644
index edac63bc1..000000000
--- a/lib/feedparser/tests/wellformed/amp/amp25.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: & test 25
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'<b>&#38;</b>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-	  <title type="text/html" mode="escaped">&lt;b>&#x26;#38;&lt;/b></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/amp/amp26.xml b/lib/feedparser/tests/wellformed/amp/amp26.xml
deleted file mode 100644
index 0b0752faf..000000000
--- a/lib/feedparser/tests/wellformed/amp/amp26.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: & test 26
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'<b>&#x26;</b>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-	  <title type="text/html" mode="escaped">&lt;b>&#x26;#x26;&lt;/b></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/amp/amp27.xml b/lib/feedparser/tests/wellformed/amp/amp27.xml
deleted file mode 100644
index 9c9419d1d..000000000
--- a/lib/feedparser/tests/wellformed/amp/amp27.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: & test 27
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'<b>&amp;</b>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-	  <title type="text/html" mode="escaped">&lt;b>&#x26;amp;&lt;/b></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/amp/amp28.xml b/lib/feedparser/tests/wellformed/amp/amp28.xml
deleted file mode 100644
index 8d6da5301..000000000
--- a/lib/feedparser/tests/wellformed/amp/amp28.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: & test 28
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'<b>&#38;</b>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-	  <title type="text/html" mode="escaped">&lt;b>&amp;#38;&lt;/b></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/amp/amp29.xml b/lib/feedparser/tests/wellformed/amp/amp29.xml
deleted file mode 100644
index 7baae50b2..000000000
--- a/lib/feedparser/tests/wellformed/amp/amp29.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: & test 29
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'<b>&#x26;</b>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-	  <title type="text/html" mode="escaped">&lt;b>&amp;#x26;&lt;/b></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/amp/amp30.xml b/lib/feedparser/tests/wellformed/amp/amp30.xml
deleted file mode 100644
index 5f6399c82..000000000
--- a/lib/feedparser/tests/wellformed/amp/amp30.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: & test 30
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'<b>&amp;</b>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-	  <title type="text/html" mode="escaped">&lt;b>&amp;amp;&lt;/b></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/amp/amp31.xml b/lib/feedparser/tests/wellformed/amp/amp31.xml
deleted file mode 100644
index 47b445ed6..000000000
--- a/lib/feedparser/tests/wellformed/amp/amp31.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: & test 31
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'<strong>&#38;</strong>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-	  <title type="text/html" mode="escaped">&lt;strong&gt;&#38;#38;&lt;/strong&gt;</title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/amp/amp32.xml b/lib/feedparser/tests/wellformed/amp/amp32.xml
deleted file mode 100644
index ac95fffd0..000000000
--- a/lib/feedparser/tests/wellformed/amp/amp32.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: & test 32
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'<strong>&#x26;</strong>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-	  <title type="text/html" mode="escaped">&lt;strong&gt;&#38;#x26;&lt;/strong&gt;</title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/amp/amp33.xml b/lib/feedparser/tests/wellformed/amp/amp33.xml
deleted file mode 100644
index 442c79e0e..000000000
--- a/lib/feedparser/tests/wellformed/amp/amp33.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: & test 33
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'<strong>&amp;</strong>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-	  <title type="text/html" mode="escaped">&lt;strong&gt;&#38;amp;&lt;/strong&gt;</title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/amp/amp34.xml b/lib/feedparser/tests/wellformed/amp/amp34.xml
deleted file mode 100644
index fd69c6800..000000000
--- a/lib/feedparser/tests/wellformed/amp/amp34.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: & test 34
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'<strong>&#38;</strong>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-	  <title type="text/html" mode="escaped">&lt;strong&gt;&#x26;#38;&lt;/strong&gt;</title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/amp/amp35.xml b/lib/feedparser/tests/wellformed/amp/amp35.xml
deleted file mode 100644
index d2e6c6049..000000000
--- a/lib/feedparser/tests/wellformed/amp/amp35.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: & test 35
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'<strong>&#x26;</strong>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-	  <title type="text/html" mode="escaped">&lt;strong&gt;&#x26;#x26;&lt;/strong&gt;</title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/amp/amp36.xml b/lib/feedparser/tests/wellformed/amp/amp36.xml
deleted file mode 100644
index 545f4ddd3..000000000
--- a/lib/feedparser/tests/wellformed/amp/amp36.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: & test 36
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'<strong>&amp;</strong>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-	  <title type="text/html" mode="escaped">&lt;strong&gt;&#x26;amp;&lt;/strong&gt;</title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/amp/amp37.xml b/lib/feedparser/tests/wellformed/amp/amp37.xml
deleted file mode 100644
index 5ed3590d0..000000000
--- a/lib/feedparser/tests/wellformed/amp/amp37.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: & test 37
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'<strong>&#38;</strong>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-	  <title type="text/html" mode="escaped">&lt;strong&gt;&amp;#38;&lt;/strong&gt;</title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/amp/amp38.xml b/lib/feedparser/tests/wellformed/amp/amp38.xml
deleted file mode 100644
index c4710040a..000000000
--- a/lib/feedparser/tests/wellformed/amp/amp38.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: & test 38
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'<strong>&#x26;</strong>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-	  <title type="text/html" mode="escaped">&lt;strong&gt;&amp;#x26;&lt;/strong&gt;</title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/amp/amp39.xml b/lib/feedparser/tests/wellformed/amp/amp39.xml
deleted file mode 100644
index 2d3a3d2b4..000000000
--- a/lib/feedparser/tests/wellformed/amp/amp39.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: & test 39
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'<strong>&amp;</strong>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-	  <title type="text/html" mode="escaped">&lt;strong&gt;&amp;amp;&lt;/strong&gt;</title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/amp/amp40.xml b/lib/feedparser/tests/wellformed/amp/amp40.xml
deleted file mode 100644
index ddf24f362..000000000
--- a/lib/feedparser/tests/wellformed/amp/amp40.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: & test 40
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'<strong>&#38;</strong>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-	  <title type="text/html" mode="escaped">&lt;strong>&#38;#38;&lt;/strong></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/amp/amp41.xml b/lib/feedparser/tests/wellformed/amp/amp41.xml
deleted file mode 100644
index 18f570e8c..000000000
--- a/lib/feedparser/tests/wellformed/amp/amp41.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: & test 41
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'<strong>&#x26;</strong>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-	  <title type="text/html" mode="escaped">&lt;strong>&#38;#x26;&lt;/strong></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/amp/amp42.xml b/lib/feedparser/tests/wellformed/amp/amp42.xml
deleted file mode 100644
index 3857d6076..000000000
--- a/lib/feedparser/tests/wellformed/amp/amp42.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: & test 42
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'<strong>&amp;</strong>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-	  <title type="text/html" mode="escaped">&lt;strong>&#38;amp;&lt;/strong></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/amp/amp43.xml b/lib/feedparser/tests/wellformed/amp/amp43.xml
deleted file mode 100644
index e5e35cf76..000000000
--- a/lib/feedparser/tests/wellformed/amp/amp43.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: & test 43
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'<strong>&#38;</strong>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-	  <title type="text/html" mode="escaped">&lt;strong>&#x26;#38;&lt;/strong></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/amp/amp44.xml b/lib/feedparser/tests/wellformed/amp/amp44.xml
deleted file mode 100644
index 290c33352..000000000
--- a/lib/feedparser/tests/wellformed/amp/amp44.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: & test 44
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'<strong>&#x26;</strong>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-	  <title type="text/html" mode="escaped">&lt;strong>&#x26;#x26;&lt;/strong></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/amp/amp45.xml b/lib/feedparser/tests/wellformed/amp/amp45.xml
deleted file mode 100644
index ecba32b02..000000000
--- a/lib/feedparser/tests/wellformed/amp/amp45.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: & test 45
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'<strong>&amp;</strong>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-	  <title type="text/html" mode="escaped">&lt;strong>&#x26;amp;&lt;/strong></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/amp/amp46.xml b/lib/feedparser/tests/wellformed/amp/amp46.xml
deleted file mode 100644
index 32b2f633d..000000000
--- a/lib/feedparser/tests/wellformed/amp/amp46.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: & test 46
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'<strong>&#38;</strong>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-	  <title type="text/html" mode="escaped">&lt;strong>&amp;#38;&lt;/strong></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/amp/amp47.xml b/lib/feedparser/tests/wellformed/amp/amp47.xml
deleted file mode 100644
index 9e81f91f1..000000000
--- a/lib/feedparser/tests/wellformed/amp/amp47.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: & test 47
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'<strong>&#x26;</strong>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-	  <title type="text/html" mode="escaped">&lt;strong>&amp;#x26;&lt;/strong></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/amp/amp48.xml b/lib/feedparser/tests/wellformed/amp/amp48.xml
deleted file mode 100644
index 3c0c26ea3..000000000
--- a/lib/feedparser/tests/wellformed/amp/amp48.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: & test 48
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'<strong>&amp;</strong>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-	  <title type="text/html" mode="escaped">&lt;strong>&amp;amp;&lt;/strong></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/amp/amp49.xml b/lib/feedparser/tests/wellformed/amp/amp49.xml
deleted file mode 100644
index 102f803a3..000000000
--- a/lib/feedparser/tests/wellformed/amp/amp49.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: & test 49
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'&#38;'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-	  <title type="text/html" mode="escaped"><![CDATA[&#38;]]></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/amp/amp50.xml b/lib/feedparser/tests/wellformed/amp/amp50.xml
deleted file mode 100644
index 3f1ae00cb..000000000
--- a/lib/feedparser/tests/wellformed/amp/amp50.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: & test 50
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'&#x26;'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-	  <title type="text/html" mode="escaped"><![CDATA[&#x26;]]></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/amp/amp51.xml b/lib/feedparser/tests/wellformed/amp/amp51.xml
deleted file mode 100644
index a5644ff18..000000000
--- a/lib/feedparser/tests/wellformed/amp/amp51.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: & test 51
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'&'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-	  <title><![CDATA[&]]></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/amp/amp52.xml b/lib/feedparser/tests/wellformed/amp/amp52.xml
deleted file mode 100644
index b6e89c263..000000000
--- a/lib/feedparser/tests/wellformed/amp/amp52.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: & test 52
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'&amp;'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-	  <title type="text/html" mode="escaped"><![CDATA[&amp;]]></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/amp/amp53.xml b/lib/feedparser/tests/wellformed/amp/amp53.xml
deleted file mode 100644
index 0556638d6..000000000
--- a/lib/feedparser/tests/wellformed/amp/amp53.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: & test 53
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'<b>&#38;</b>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-	  <title type="text/html" mode="escaped"><![CDATA[<b>&#38;</b>]]></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/amp/amp54.xml b/lib/feedparser/tests/wellformed/amp/amp54.xml
deleted file mode 100644
index 69dbde91f..000000000
--- a/lib/feedparser/tests/wellformed/amp/amp54.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: & test 54
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'<b>&#x26;</b>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-	  <title type="text/html" mode="escaped"><![CDATA[<b>&#x26;</b>]]></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/amp/amp55.xml b/lib/feedparser/tests/wellformed/amp/amp55.xml
deleted file mode 100644
index 3173c7757..000000000
--- a/lib/feedparser/tests/wellformed/amp/amp55.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: & test 55
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'<b>&amp;</b>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-	  <title type="text/html" mode="escaped"><![CDATA[<b>&amp;</b>]]></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/amp/amp56.xml b/lib/feedparser/tests/wellformed/amp/amp56.xml
deleted file mode 100644
index c577628ba..000000000
--- a/lib/feedparser/tests/wellformed/amp/amp56.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: & test 56
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'<strong>&#38;</strong>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-	  <title type="text/html" mode="escaped"><![CDATA[<strong>&#38;</strong>]]></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/amp/amp57.xml b/lib/feedparser/tests/wellformed/amp/amp57.xml
deleted file mode 100644
index 7abad46b9..000000000
--- a/lib/feedparser/tests/wellformed/amp/amp57.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: & test 57
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'<strong>&#x26;</strong>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-	  <title type="text/html" mode="escaped"><![CDATA[<strong>&#x26;</strong>]]></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/amp/amp58.xml b/lib/feedparser/tests/wellformed/amp/amp58.xml
deleted file mode 100644
index a204980d8..000000000
--- a/lib/feedparser/tests/wellformed/amp/amp58.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: & test 58
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'<strong>&amp;</strong>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-	  <title type="text/html" mode="escaped"><![CDATA[<strong>&amp;</strong>]]></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/amp/amp59.xml b/lib/feedparser/tests/wellformed/amp/amp59.xml
deleted file mode 100644
index 708471ad1..000000000
--- a/lib/feedparser/tests/wellformed/amp/amp59.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: & test 59
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'<div><b>&amp;</b></div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-	  <title type="application/xhtml+xml" mode="xml"><div xmlns="http://www.w3.org/1999/xhtml"><b>&#38;</b></div></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/amp/amp60.xml b/lib/feedparser/tests/wellformed/amp/amp60.xml
deleted file mode 100644
index baac7d49b..000000000
--- a/lib/feedparser/tests/wellformed/amp/amp60.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: & test 60
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'<div><b>&amp;</b></div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-	  <title type="application/xhtml+xml" mode="xml"><div xmlns="http://www.w3.org/1999/xhtml"><b>&#x26;</b></div></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/amp/amp61.xml b/lib/feedparser/tests/wellformed/amp/amp61.xml
deleted file mode 100644
index c77686f6d..000000000
--- a/lib/feedparser/tests/wellformed/amp/amp61.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: & test 61
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'<div><b>&amp;</b></div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-	  <title type="application/xhtml+xml" mode="xml"><div xmlns="http://www.w3.org/1999/xhtml"><b>&amp;</b></div></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/amp/amp62.xml b/lib/feedparser/tests/wellformed/amp/amp62.xml
deleted file mode 100644
index 4016635e6..000000000
--- a/lib/feedparser/tests/wellformed/amp/amp62.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: & test 62
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'<div><strong>&amp;</strong></div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-	  <title type="application/xhtml+xml" mode="xml"><div xmlns="http://www.w3.org/1999/xhtml"><strong>&#38;</strong></div></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/amp/amp63.xml b/lib/feedparser/tests/wellformed/amp/amp63.xml
deleted file mode 100644
index 29eb52668..000000000
--- a/lib/feedparser/tests/wellformed/amp/amp63.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: & test 63
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'<div><strong>&amp;</strong></div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-	  <title type="application/xhtml+xml" mode="xml"><div xmlns="http://www.w3.org/1999/xhtml"><strong>&#x26;</strong></div></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/amp/amp64.xml b/lib/feedparser/tests/wellformed/amp/amp64.xml
deleted file mode 100644
index b26a921e9..000000000
--- a/lib/feedparser/tests/wellformed/amp/amp64.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: & test 64
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'<div><strong>&amp;</strong></div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-	  <title type="application/xhtml+xml" mode="xml"><div xmlns="http://www.w3.org/1999/xhtml"><strong>&amp;</strong></div></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/amp/attr01.xml b/lib/feedparser/tests/wellformed/amp/attr01.xml
deleted file mode 100644
index 1f3cdbc42..000000000
--- a/lib/feedparser/tests/wellformed/amp/attr01.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: & attr test 1
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'<a title="&#38;">&#38;</a>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-	  <title type="text/html" mode="escaped">&lt;a title="&#38;#38;"&gt;&#38;#38;&lt;/a&gt;</title>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/amp/attr02.xml b/lib/feedparser/tests/wellformed/amp/attr02.xml
deleted file mode 100644
index 8086e7b0a..000000000
--- a/lib/feedparser/tests/wellformed/amp/attr02.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: & attr test 2
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'<a title="&amp;">&amp;</a>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-	  <title type="text/html" mode="escaped">&lt;a title="&amp;amp;"&gt;&amp;amp;&lt;/a&gt;</title>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/amp/attr03.xml b/lib/feedparser/tests/wellformed/amp/attr03.xml
deleted file mode 100644
index 33d79f94d..000000000
--- a/lib/feedparser/tests/wellformed/amp/attr03.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: & attr test 3
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'<a title="&#x26;">&#x26;</a>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-	  <title type="text/html" mode="escaped">&lt;a title="&#x26;#x26;"&gt;&#x26;#x26;&lt;/a&gt;</title>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/amp/attr04.xml b/lib/feedparser/tests/wellformed/amp/attr04.xml
deleted file mode 100644
index a4be12190..000000000
--- a/lib/feedparser/tests/wellformed/amp/attr04.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: & attr test 4
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'<a title="&amp;">&amp;</a>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-	  <title type="application/xhtml+xml" mode="xml"><div xmlns="http://www.w3.org/1999/xhtml"><a title="&#38;">&#38;</a></div></title>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/amp/attr05.xml b/lib/feedparser/tests/wellformed/amp/attr05.xml
deleted file mode 100644
index 3457934b6..000000000
--- a/lib/feedparser/tests/wellformed/amp/attr05.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: & attr test 5
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'<a title="&amp;">&amp;</a>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-	  <title type="application/xhtml+xml" mode="xml"><div xmlns="http://www.w3.org/1999/xhtml"><a title="&amp;">&amp;</a></div></title>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/amp/attr06.xml b/lib/feedparser/tests/wellformed/amp/attr06.xml
deleted file mode 100644
index b01196e79..000000000
--- a/lib/feedparser/tests/wellformed/amp/attr06.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: & attr test 6
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'<a title="&amp;">&amp;</a>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-	  <title type="application/xhtml+xml" mode="xml"><div xmlns="http://www.w3.org/1999/xhtml"><a title="&#x26;">&#x26;</a></div></title>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom/atom_namespace_1.xml b/lib/feedparser/tests/wellformed/atom/atom_namespace_1.xml
deleted file mode 100644
index 96a90ce69..000000000
--- a/lib/feedparser/tests/wellformed/atom/atom_namespace_1.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: Atom namespace (official)
-Expect:      not bozo and feed['title'] == u'Example Atom'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <title>Example Atom</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/atom_namespace_2.xml b/lib/feedparser/tests/wellformed/atom/atom_namespace_2.xml
deleted file mode 100644
index 90cc0d3bf..000000000
--- a/lib/feedparser/tests/wellformed/atom/atom_namespace_2.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: Atom namespace (example.com)
-Expect:      not bozo and feed['title'] == u'Example Atom'
--->
-<feed version="0.3" xmlns="http://example.com/newformat#">
-  <title>Example Atom</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/atom_namespace_3.xml b/lib/feedparser/tests/wellformed/atom/atom_namespace_3.xml
deleted file mode 100644
index d866205d5..000000000
--- a/lib/feedparser/tests/wellformed/atom/atom_namespace_3.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: Atom namespace (necho)
-Expect:      not bozo and feed['title'] == u'Example Atom'
--->
-<feed version="0.3" xmlns="http://example.com/necho">
-  <title>Example Atom</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/atom_namespace_4.xml b/lib/feedparser/tests/wellformed/atom/atom_namespace_4.xml
deleted file mode 100644
index a805d9781..000000000
--- a/lib/feedparser/tests/wellformed/atom/atom_namespace_4.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: Atom namespace (echo)
-Expect:      not bozo and feed['title'] == u'Example Atom'
--->
-<feed version="0.3" xmlns="http://purl.org/echo/">
-  <title>Example Atom</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/atom_namespace_5.xml b/lib/feedparser/tests/wellformed/atom/atom_namespace_5.xml
deleted file mode 100644
index 0e6fa46ef..000000000
--- a/lib/feedparser/tests/wellformed/atom/atom_namespace_5.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: Atom namespace (pie)
-Expect:      not bozo and feed['title'] == u'Example Atom'
--->
-<feed version="0.3" xmlns="http://purl.org/pie/">
-  <title>Example Atom</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/entry_author_email.xml b/lib/feedparser/tests/wellformed/atom/entry_author_email.xml
deleted file mode 100644
index 8210f4cab..000000000
--- a/lib/feedparser/tests/wellformed/atom/entry_author_email.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<!--
-Description: entry author email
-Expect:      not bozo and entries[0]['author_detail']['email'] == u'me@example.com'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-  <author>
-    <name>Example author</name>
-    <email>me@example.com</email>
-    <url>http://example.com/</url>
-  </author>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/entry_author_homepage.xml b/lib/feedparser/tests/wellformed/atom/entry_author_homepage.xml
deleted file mode 100644
index 21fdcae76..000000000
--- a/lib/feedparser/tests/wellformed/atom/entry_author_homepage.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<!--
-Description: entry author homepage
-Expect:      not bozo and entries[0]['author_detail']['url'] == u'http://example.com/'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-  <author>
-    <name>Example author</name>
-    <email>me@example.com</email>
-    <homepage>http://example.com/</homepage>
-  </author>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/entry_author_map_author.xml b/lib/feedparser/tests/wellformed/atom/entry_author_map_author.xml
deleted file mode 100644
index dfb004dc7..000000000
--- a/lib/feedparser/tests/wellformed/atom/entry_author_map_author.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<!--
-Description: entry author name + email maps to author
-Expect:      not bozo and entries[0]['author'] == u'Example author (me@example.com)'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-  <author>
-    <name>Example author</name>
-    <email>me@example.com</email>
-    <url>http://example.com/</url>
-  </author>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/entry_author_map_author_2.xml b/lib/feedparser/tests/wellformed/atom/entry_author_map_author_2.xml
deleted file mode 100644
index bcd47e778..000000000
--- a/lib/feedparser/tests/wellformed/atom/entry_author_map_author_2.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<!--
-Description: entry author name maps to author if no email present
-Expect:      not bozo and entries[0]['author'] == u'Example author'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-  <author>
-    <name>Example author</name>
-    <url>http://example.com/</url>
-  </author>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/entry_author_name.xml b/lib/feedparser/tests/wellformed/atom/entry_author_name.xml
deleted file mode 100644
index 6b302b01e..000000000
--- a/lib/feedparser/tests/wellformed/atom/entry_author_name.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<!--
-Description: entry author name
-Expect:      not bozo and entries[0]['author_detail']['name'] == u'Example author'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-  <author>
-    <name>Example author</name>
-    <email>me@example.com</email>
-    <url>http://example.com/</url>
-  </author>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/entry_author_uri.xml b/lib/feedparser/tests/wellformed/atom/entry_author_uri.xml
deleted file mode 100644
index 653980846..000000000
--- a/lib/feedparser/tests/wellformed/atom/entry_author_uri.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<!--
-Description: entry author uri
-Expect:      not bozo and entries[0]['author_detail']['url'] == u'http://example.com/'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-  <author>
-    <name>Example author</name>
-    <email>me@example.com</email>
-    <uri>http://example.com/</uri>
-  </author>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/entry_author_url.xml b/lib/feedparser/tests/wellformed/atom/entry_author_url.xml
deleted file mode 100644
index 7192d04a9..000000000
--- a/lib/feedparser/tests/wellformed/atom/entry_author_url.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<!--
-Description: entry author url
-Expect:      not bozo and entries[0]['author_detail']['url'] == u'http://example.com/'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-  <author>
-    <name>Example author</name>
-    <email>me@example.com</email>
-    <url>http://example.com/</url>
-  </author>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/entry_content_mode_base64.xml b/lib/feedparser/tests/wellformed/atom/entry_content_mode_base64.xml
deleted file mode 100644
index 91818ba7c..000000000
--- a/lib/feedparser/tests/wellformed/atom/entry_content_mode_base64.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: entry content mode=base64
-Expect:      1
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-  <content mode="base64">
-    RXhhbXBsZSA8Yj5BdG9tPC9iPg==
-  </content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/entry_content_mode_escaped.xml b/lib/feedparser/tests/wellformed/atom/entry_content_mode_escaped.xml
deleted file mode 100644
index 67da8383e..000000000
--- a/lib/feedparser/tests/wellformed/atom/entry_content_mode_escaped.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry content mode=escaped
-Expect:      1
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-  <content type="text/html" mode="escaped">Example &lt;b&gt;Atom&lt;/b&gt;</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/entry_content_type.xml b/lib/feedparser/tests/wellformed/atom/entry_content_type.xml
deleted file mode 100644
index fd556e882..000000000
--- a/lib/feedparser/tests/wellformed/atom/entry_content_type.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry content content type defaults to 'text/plain'
-Expect:      not bozo and entries[0]['content'][0]['type'] == u'text/plain'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-  <content>Example Atom</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/entry_content_type_text_plain.xml b/lib/feedparser/tests/wellformed/atom/entry_content_type_text_plain.xml
deleted file mode 100644
index 656dbd455..000000000
--- a/lib/feedparser/tests/wellformed/atom/entry_content_type_text_plain.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry content type='text/plain'
-Expect:      not bozo and entries[0]['content'][0]['type'] == u'text/plain'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-  <content type="text/plain">Example Atom</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/entry_content_value.xml b/lib/feedparser/tests/wellformed/atom/entry_content_value.xml
deleted file mode 100644
index 6da460d0a..000000000
--- a/lib/feedparser/tests/wellformed/atom/entry_content_value.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry content content value
-Expect:      not bozo and entries[0]['content'][0]['value'] == u'Example Atom'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-  <content>Example Atom</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/entry_contributor_email.xml b/lib/feedparser/tests/wellformed/atom/entry_contributor_email.xml
deleted file mode 100644
index f51fc17a0..000000000
--- a/lib/feedparser/tests/wellformed/atom/entry_contributor_email.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<!--
-Description: entry contributor email
-Expect:      not bozo and entries[0]['contributors'][0]['email'] == u'me@example.com'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-  <contributor>
-    <name>Example contributor</name>
-    <email>me@example.com</email>
-    <url>http://example.com/</url>
-  </contributor>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/entry_contributor_homepage.xml b/lib/feedparser/tests/wellformed/atom/entry_contributor_homepage.xml
deleted file mode 100644
index f5a398d12..000000000
--- a/lib/feedparser/tests/wellformed/atom/entry_contributor_homepage.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<!--
-Description: entry contributor homepage
-Expect:      not bozo and entries[0]['contributors'][0]['url'] == u'http://example.com/'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-  <contributor>
-    <name>Example contributor</name>
-    <email>me@example.com</email>
-    <homepage>http://example.com/</homepage>
-  </contributor>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/entry_contributor_multiple.xml b/lib/feedparser/tests/wellformed/atom/entry_contributor_multiple.xml
deleted file mode 100644
index c58cd9165..000000000
--- a/lib/feedparser/tests/wellformed/atom/entry_contributor_multiple.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<!--
-Description: multiple entry contributors
-Expect:      not bozo and entries[0]['contributors'][0] == {'name': u'Contributor 1', 'email': u'me@example.com', 'href': u'http://example.com/'} and entries[0]['contributors'][1] == {'name': u'Contributor 2', 'email': u'you@example.com', 'href': u'http://two.example.com/'}
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-  <contributor>
-    <name>Contributor 1</name>
-    <email>me@example.com</email>
-    <url>http://example.com/</url>
-  </contributor>
-  <contributor>
-    <name>Contributor 2</name>
-    <email>you@example.com</email>
-    <url>http://two.example.com/</url>
-  </contributor>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom/entry_contributor_name.xml b/lib/feedparser/tests/wellformed/atom/entry_contributor_name.xml
deleted file mode 100644
index 1b82beebb..000000000
--- a/lib/feedparser/tests/wellformed/atom/entry_contributor_name.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<!--
-Description: entry contributor name
-Expect:      not bozo and entries[0]['contributors'][0]['name'] == u'Example contributor'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-  <contributor>
-    <name>Example contributor</name>
-    <email>me@example.com</email>
-    <url>http://example.com/</url>
-  </contributor>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/entry_contributor_uri.xml b/lib/feedparser/tests/wellformed/atom/entry_contributor_uri.xml
deleted file mode 100644
index a37f5773d..000000000
--- a/lib/feedparser/tests/wellformed/atom/entry_contributor_uri.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<!--
-Description: entry contributor uri
-Expect:      not bozo and entries[0]['contributors'][0]['url'] == u'http://example.com/'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-  <contributor>
-    <name>Example contributor</name>
-    <email>me@example.com</email>
-    <uri>http://example.com/</uri>
-  </contributor>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/entry_contributor_url.xml b/lib/feedparser/tests/wellformed/atom/entry_contributor_url.xml
deleted file mode 100644
index 618511902..000000000
--- a/lib/feedparser/tests/wellformed/atom/entry_contributor_url.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<!--
-Description: entry contributor url
-Expect:      not bozo and entries[0]['contributors'][0]['url'] == u'http://example.com/'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-  <contributor>
-    <name>Example contributor</name>
-    <email>me@example.com</email>
-    <url>http://example.com/</url>
-  </contributor>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/entry_created.xml b/lib/feedparser/tests/wellformed/atom/entry_created.xml
deleted file mode 100644
index 3175de027..000000000
--- a/lib/feedparser/tests/wellformed/atom/entry_created.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry created
-Expect:      not bozo and entries[0]['created'] == u'Thu, 01 Jan 2004 19:48:21 GMT'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<created>Thu, 01 Jan 2004 19:48:21 GMT</created>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/entry_created_multiple_values.xml b/lib/feedparser/tests/wellformed/atom/entry_created_multiple_values.xml
deleted file mode 100644
index 95688edd3..000000000
--- a/lib/feedparser/tests/wellformed/atom/entry_created_multiple_values.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<!--
-Description: entry parsed created, multiple values, ensure overwrite
-Expect:      not bozo and entries[0]['created_parsed'] == (2003, 12, 31, 10, 14, 55, 2, 365, 0)
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<created>2010-12-01T10:14:55Z</created>
-<created>2003-12-31T10:14:55Z</created>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom/entry_created_parsed.xml b/lib/feedparser/tests/wellformed/atom/entry_created_parsed.xml
deleted file mode 100644
index e7f9e9c38..000000000
--- a/lib/feedparser/tests/wellformed/atom/entry_created_parsed.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry created parsed
-Expect:      not bozo and entries[0]['created_parsed'] == (2003, 12, 31, 10, 14, 55, 2, 365, 0)
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<created>2003-12-31T10:14:55Z</created>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom/entry_id.xml b/lib/feedparser/tests/wellformed/atom/entry_id.xml
deleted file mode 100644
index 827ca3792..000000000
--- a/lib/feedparser/tests/wellformed/atom/entry_id.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry id
-Expect:      not bozo and entries[0]['id'] == u'http://example.com/'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-  <id>http://example.com/</id>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/entry_id_map_guid.xml b/lib/feedparser/tests/wellformed/atom/entry_id_map_guid.xml
deleted file mode 100644
index bc2dfb10d..000000000
--- a/lib/feedparser/tests/wellformed/atom/entry_id_map_guid.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry id maps to guid
-Expect:      not bozo and entries[0]['guid'] == u'http://example.com/'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-  <id>http://example.com/</id>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/entry_issued.xml b/lib/feedparser/tests/wellformed/atom/entry_issued.xml
deleted file mode 100644
index fdc508141..000000000
--- a/lib/feedparser/tests/wellformed/atom/entry_issued.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry issued
-Expect:      not bozo and entries[0]['published'] == u'Thu, 01 Jan 2004 19:48:21 GMT'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<issued>Thu, 01 Jan 2004 19:48:21 GMT</issued>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom/entry_issued_parsed.xml b/lib/feedparser/tests/wellformed/atom/entry_issued_parsed.xml
deleted file mode 100644
index 5cf272985..000000000
--- a/lib/feedparser/tests/wellformed/atom/entry_issued_parsed.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry issued parsed
-Expect:      not bozo and entries[0]['published_parsed'] == (2003, 12, 31, 10, 14, 55, 2, 365, 0)
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<issued>2003-12-31T10:14:55Z</issued>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom/entry_link_alternate_map_link.xml b/lib/feedparser/tests/wellformed/atom/entry_link_alternate_map_link.xml
deleted file mode 100644
index d618df928..000000000
--- a/lib/feedparser/tests/wellformed/atom/entry_link_alternate_map_link.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry link href maps to link if rel="alternate" and type="text/html"
-Expect:      not bozo and entries[0]['link'] == u'http://www.example.com/'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-  <link rel="alternate" type="text/html" href="http://www.example.com/"/>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/entry_link_alternate_map_link_2.xml b/lib/feedparser/tests/wellformed/atom/entry_link_alternate_map_link_2.xml
deleted file mode 100644
index 11e03b46f..000000000
--- a/lib/feedparser/tests/wellformed/atom/entry_link_alternate_map_link_2.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry link href maps to link if rel="alternate" and type="application/xhtml+xml"
-Expect:      not bozo and entries[0]['link'] == u'http://www.example.com/'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-  <link rel="alternate" type="application/xhtml+xml" href="http://www.example.com/"/>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/entry_link_href.xml b/lib/feedparser/tests/wellformed/atom/entry_link_href.xml
deleted file mode 100644
index 2be6dc7fa..000000000
--- a/lib/feedparser/tests/wellformed/atom/entry_link_href.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry link href
-Expect:      not bozo and entries[0]['links'][0]['href'] == u'http://www.example.com/'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-  <link rel="alternate" type="text/html" href="http://www.example.com/"/>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/entry_link_multiple.xml b/lib/feedparser/tests/wellformed/atom/entry_link_multiple.xml
deleted file mode 100644
index 9d7228cef..000000000
--- a/lib/feedparser/tests/wellformed/atom/entry_link_multiple.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<!--
-Description: entry multiple links
-Expect:      not bozo and entries[0]['links'][0] == {'rel': u'alternate', 'type': u'application/xhtml+xml', 'href': u'http://www.example.com/'} and entries[0]['links'][1] == {'rel': u'service.post', 'type': u'application/atom+xml', 'href': u'http://www.example.com/post'}
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-  <link rel="alternate" type="application/xhtml+xml" href="http://www.example.com/"/>
-  <link rel="service.post" type="application/atom+xml" href="http://www.example.com/post"/>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom/entry_link_rel.xml b/lib/feedparser/tests/wellformed/atom/entry_link_rel.xml
deleted file mode 100644
index db5d78a2a..000000000
--- a/lib/feedparser/tests/wellformed/atom/entry_link_rel.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry link rel
-Expect:      not bozo and entries[0]['links'][0]['rel'] == u'alternate'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-  <link rel="alternate" type="text/html" href="http://www.example.com/"/>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/entry_link_title.xml b/lib/feedparser/tests/wellformed/atom/entry_link_title.xml
deleted file mode 100644
index 4d71c0574..000000000
--- a/lib/feedparser/tests/wellformed/atom/entry_link_title.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry link title
-Expect:      not bozo and entries[0]['links'][0]['title'] == u'Example title'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-  <link rel="alternate" type="text/html" title="Example title" href="http://www.example.com/"/>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/entry_link_type.xml b/lib/feedparser/tests/wellformed/atom/entry_link_type.xml
deleted file mode 100644
index 8dbe49555..000000000
--- a/lib/feedparser/tests/wellformed/atom/entry_link_type.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry link type
-Expect:      not bozo and entries[0]['links'][0]['type'] == u'text/html'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-  <link rel="alternate" type="text/html" href="http://www.example.com/"/>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/entry_modified.xml b/lib/feedparser/tests/wellformed/atom/entry_modified.xml
deleted file mode 100644
index 7bf362ccd..000000000
--- a/lib/feedparser/tests/wellformed/atom/entry_modified.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry modified
-Expect:      not bozo and entries[0]['updated'] == u'Thu, 01 Jan 2004 19:48:21 GMT'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<modified>Thu, 01 Jan 2004 19:48:21 GMT</modified>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom/entry_modified_map_updated_parsed.xml b/lib/feedparser/tests/wellformed/atom/entry_modified_map_updated_parsed.xml
deleted file mode 100644
index 0eaa5c101..000000000
--- a/lib/feedparser/tests/wellformed/atom/entry_modified_map_updated_parsed.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry modified parsed and mapped to updated_parsed
-Expect:      not bozo and entries[0]['updated_parsed'] == (2004, 1, 1, 19, 48, 21, 3, 1, 0)
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<modified>Thu, 01 Jan 2004 19:48:21 GMT</modified>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom/entry_published_parsed.xml b/lib/feedparser/tests/wellformed/atom/entry_published_parsed.xml
deleted file mode 100644
index 6c0c05058..000000000
--- a/lib/feedparser/tests/wellformed/atom/entry_published_parsed.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry published parsed
-Expect:      not bozo and entries[0]['published_parsed'] == (2003, 12, 31, 10, 14, 55, 2, 365, 0)
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<published>2003-12-31T10:14:55Z</published>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom/entry_published_parsed_date_overwriting.xml b/lib/feedparser/tests/wellformed/atom/entry_published_parsed_date_overwriting.xml
deleted file mode 100644
index bd30e91ac..000000000
--- a/lib/feedparser/tests/wellformed/atom/entry_published_parsed_date_overwriting.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<!--
-Description: entry conflicting published/issued values overwrite parsed values
-Expect:      not bozo and entries[0]['published_parsed'] == (2010, 1, 1, 19, 48, 21, 4, 1, 0)
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<issued>Thu, 01 Jan 2004 19:48:21 GMT</issued>
-<published>Sat, 01 Jan 2010 19:48:21 GMT</published>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom/entry_source_updated_parsed.xml b/lib/feedparser/tests/wellformed/atom/entry_source_updated_parsed.xml
deleted file mode 100644
index d518d3dfb..000000000
--- a/lib/feedparser/tests/wellformed/atom/entry_source_updated_parsed.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: entry source updated parsed
-Expect:      not bozo and entries[0]['source']['updated_parsed'] == (2003, 12, 31, 10, 14, 55, 2, 365, 0)
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<source>
-<updated>2003-12-31T10:14:55Z</updated>
-</source>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom/entry_summary.xml b/lib/feedparser/tests/wellformed/atom/entry_summary.xml
deleted file mode 100644
index e12454b11..000000000
--- a/lib/feedparser/tests/wellformed/atom/entry_summary.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry summary
-Expect:      not bozo and entries[0]['summary'] == u'Example Atom'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-  <summary>Example Atom</summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/entry_summary_base64.xml b/lib/feedparser/tests/wellformed/atom/entry_summary_base64.xml
deleted file mode 100644
index 9c34f5775..000000000
--- a/lib/feedparser/tests/wellformed/atom/entry_summary_base64.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: entry summary base64-encoded
-Expect:      not bozo and entries[0]['summary'] == u'Example <b>Atom</b>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-  <summary mode="base64">
-    RXhhbXBsZSA8Yj5BdG9tPC9iPg==
-  </summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/entry_summary_base64_2.xml b/lib/feedparser/tests/wellformed/atom/entry_summary_base64_2.xml
deleted file mode 100644
index bfcd18369..000000000
--- a/lib/feedparser/tests/wellformed/atom/entry_summary_base64_2.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: entry summary base64-encoded
-Expect:      not bozo and entries[0]['summary'] == u'<p>History of the &lt;blink&gt; tag</p>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<summary mode="base64">
-PHA+SGlzdG9yeSBvZiB0aGUgJmx0O2JsaW5rJmd0OyB0YWc8L3A+
-</summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/entry_summary_content_mode_base64.xml b/lib/feedparser/tests/wellformed/atom/entry_summary_content_mode_base64.xml
deleted file mode 100644
index 282cff83b..000000000
--- a/lib/feedparser/tests/wellformed/atom/entry_summary_content_mode_base64.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: entry summary mode=base64
-Expect:      1
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-  <summary mode="base64">
-    RXhhbXBsZSA8Yj5BdG9tPC9iPg==
-  </summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/entry_summary_content_mode_escaped.xml b/lib/feedparser/tests/wellformed/atom/entry_summary_content_mode_escaped.xml
deleted file mode 100644
index 1be7ac651..000000000
--- a/lib/feedparser/tests/wellformed/atom/entry_summary_content_mode_escaped.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry summary mode=escaped
-Expect:      1
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-  <summary type="text/html" mode="escaped">Example &lt;b&gt;Atom&lt;/b&gt;</summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/entry_summary_content_type.xml b/lib/feedparser/tests/wellformed/atom/entry_summary_content_type.xml
deleted file mode 100644
index f20078f7d..000000000
--- a/lib/feedparser/tests/wellformed/atom/entry_summary_content_type.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry summary content type defaults to 'text/plain'
-Expect:      not bozo and entries[0]['summary_detail']['type'] == u'text/plain'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-  <summary>Example Atom</summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/entry_summary_content_type_text_plain.xml b/lib/feedparser/tests/wellformed/atom/entry_summary_content_type_text_plain.xml
deleted file mode 100644
index 704d21b60..000000000
--- a/lib/feedparser/tests/wellformed/atom/entry_summary_content_type_text_plain.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry summary type='text/plain'
-Expect:      not bozo and entries[0]['summary_detail']['type'] == u'text/plain'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-  <summary type="text/plain">Example Atom</summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/entry_summary_content_value.xml b/lib/feedparser/tests/wellformed/atom/entry_summary_content_value.xml
deleted file mode 100644
index bbb74f71e..000000000
--- a/lib/feedparser/tests/wellformed/atom/entry_summary_content_value.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry summary content value
-Expect:      not bozo and entries[0]['summary_detail']['value'] == u'Example Atom'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-  <summary>Example Atom</summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/entry_summary_escaped_markup.xml b/lib/feedparser/tests/wellformed/atom/entry_summary_escaped_markup.xml
deleted file mode 100644
index fa1cd246e..000000000
--- a/lib/feedparser/tests/wellformed/atom/entry_summary_escaped_markup.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry summary escaped HTML
-Expect:      not bozo and entries[0]['summary'] == u'Example <b>Atom</b>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-  <summary type="text/html" mode="escaped">Example &lt;b&gt;Atom&lt;/b&gt;</summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/entry_summary_inline_markup.xml b/lib/feedparser/tests/wellformed/atom/entry_summary_inline_markup.xml
deleted file mode 100644
index be60d2c18..000000000
--- a/lib/feedparser/tests/wellformed/atom/entry_summary_inline_markup.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry summary inline XHTML
-Expect:      not bozo and entries[0]['summary'] == u'<div>Example <b>Atom</b></div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-  <summary type="application/xhtml+xml"><div xmlns="http://www.w3.org/1999/xhtml">Example <b>Atom</b></div></summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/entry_summary_inline_markup_2.xml b/lib/feedparser/tests/wellformed/atom/entry_summary_inline_markup_2.xml
deleted file mode 100644
index fbd4dd800..000000000
--- a/lib/feedparser/tests/wellformed/atom/entry_summary_inline_markup_2.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry summary inline XHTML with escaped markup
-Expect:      not bozo and entries[0]['summary'] == u'<div>History of the &lt;blink&gt; tag</div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-  <summary type="application/xhtml+xml"><div xmlns="http://www.w3.org/1999/xhtml">History of the &lt;blink&gt; tag</div></summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/entry_summary_naked_markup.xml b/lib/feedparser/tests/wellformed/atom/entry_summary_naked_markup.xml
deleted file mode 100644
index d5926a7b2..000000000
--- a/lib/feedparser/tests/wellformed/atom/entry_summary_naked_markup.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry summary with undeclared unqualified inline markup
-Expect:      not bozo and entries[0]['summary'] == u'Example <b>Atom</b>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-  <summary>Example <b>Atom</b></summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/entry_summary_text_plain.xml b/lib/feedparser/tests/wellformed/atom/entry_summary_text_plain.xml
deleted file mode 100644
index 3839a854c..000000000
--- a/lib/feedparser/tests/wellformed/atom/entry_summary_text_plain.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry summary with explicit type='text/plain'
-Expect:      not bozo and entries[0]['summary'] == u'Example Atom'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-  <summary type="text/plain">Example Atom</summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/entry_title.xml b/lib/feedparser/tests/wellformed/atom/entry_title.xml
deleted file mode 100644
index 1dd56fcdc..000000000
--- a/lib/feedparser/tests/wellformed/atom/entry_title.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry title
-Expect:      not bozo and entries[0]['title'] == u'Example Atom'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-  <title>Example Atom</title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/entry_title_base64.xml b/lib/feedparser/tests/wellformed/atom/entry_title_base64.xml
deleted file mode 100644
index 85ac6caa5..000000000
--- a/lib/feedparser/tests/wellformed/atom/entry_title_base64.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: entry title base64-encoded
-Expect:      not bozo and entries[0]['title'] == u'Example <b>Atom</b>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-  <title mode="base64">
-    RXhhbXBsZSA8Yj5BdG9tPC9iPg==
-  </title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/entry_title_base64_2.xml b/lib/feedparser/tests/wellformed/atom/entry_title_base64_2.xml
deleted file mode 100644
index 330d38738..000000000
--- a/lib/feedparser/tests/wellformed/atom/entry_title_base64_2.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: entry title base64-encoded
-Expect:      not bozo and entries[0]['title'] == u'<p>History of the &lt;blink&gt; tag</p>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<title mode="base64">
-PHA+SGlzdG9yeSBvZiB0aGUgJmx0O2JsaW5rJmd0OyB0YWc8L3A+
-</title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/entry_title_content_mode_base64.xml b/lib/feedparser/tests/wellformed/atom/entry_title_content_mode_base64.xml
deleted file mode 100644
index fc9893de0..000000000
--- a/lib/feedparser/tests/wellformed/atom/entry_title_content_mode_base64.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: entry title mode=base64
-Expect:      1
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-  <title mode="base64">
-    RXhhbXBsZSA8Yj5BdG9tPC9iPg==
-  </title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/entry_title_content_mode_escaped.xml b/lib/feedparser/tests/wellformed/atom/entry_title_content_mode_escaped.xml
deleted file mode 100644
index eb6dd1bf0..000000000
--- a/lib/feedparser/tests/wellformed/atom/entry_title_content_mode_escaped.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry title mode=escaped
-Expect:      1
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-  <title type="text/html" mode="escaped">Example &lt;b&gt;Atom&lt;/b&gt;</title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/entry_title_content_type.xml b/lib/feedparser/tests/wellformed/atom/entry_title_content_type.xml
deleted file mode 100644
index c14ef5a7a..000000000
--- a/lib/feedparser/tests/wellformed/atom/entry_title_content_type.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry title content type defaults to 'text/plain'
-Expect:      not bozo and entries[0]['title_detail']['type'] == u'text/plain'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-  <title>Example Atom</title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/entry_title_content_type_text_plain.xml b/lib/feedparser/tests/wellformed/atom/entry_title_content_type_text_plain.xml
deleted file mode 100644
index bb0a1dcef..000000000
--- a/lib/feedparser/tests/wellformed/atom/entry_title_content_type_text_plain.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry title type='text/plain'
-Expect:      not bozo and entries[0]['title_detail']['type'] == u'text/plain'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-  <title type="text/plain">Example Atom</title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/entry_title_content_value.xml b/lib/feedparser/tests/wellformed/atom/entry_title_content_value.xml
deleted file mode 100644
index 043d0af58..000000000
--- a/lib/feedparser/tests/wellformed/atom/entry_title_content_value.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry title content value
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'Example Atom'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-  <title>Example Atom</title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/entry_title_escaped_markup.xml b/lib/feedparser/tests/wellformed/atom/entry_title_escaped_markup.xml
deleted file mode 100644
index ccc24b8a7..000000000
--- a/lib/feedparser/tests/wellformed/atom/entry_title_escaped_markup.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry title escaped HTML
-Expect:      not bozo and entries[0]['title'] == u'Example <b>Atom</b>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-  <title type="text/html" mode="escaped">Example &lt;b&gt;Atom&lt;/b&gt;</title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/entry_title_inline_markup.xml b/lib/feedparser/tests/wellformed/atom/entry_title_inline_markup.xml
deleted file mode 100644
index eb7c9315e..000000000
--- a/lib/feedparser/tests/wellformed/atom/entry_title_inline_markup.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry title inline XHTML
-Expect:      not bozo and entries[0]['title'] == u'<div>Example <b>Atom</b></div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-  <title type="application/xhtml+xml"><div xmlns="http://www.w3.org/1999/xhtml">Example <b>Atom</b></div></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/entry_title_inline_markup_2.xml b/lib/feedparser/tests/wellformed/atom/entry_title_inline_markup_2.xml
deleted file mode 100644
index 71cfc5072..000000000
--- a/lib/feedparser/tests/wellformed/atom/entry_title_inline_markup_2.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry title inline XHTML with escaped markup
-Expect:      not bozo and entries[0]['title'] == u'<div>History of the &lt;blink&gt; tag</div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-  <title type="application/xhtml+xml"><div xmlns="http://www.w3.org/1999/xhtml">History of the &lt;blink&gt; tag</div></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/entry_title_naked_markup.xml b/lib/feedparser/tests/wellformed/atom/entry_title_naked_markup.xml
deleted file mode 100644
index ffc9aa93f..000000000
--- a/lib/feedparser/tests/wellformed/atom/entry_title_naked_markup.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry title with undeclared unqualified inline markup
-Expect:      not bozo and entries[0]['title'] == u'Example <b>Atom</b>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-  <title>Example <b>Atom</b></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/entry_title_text_plain.xml b/lib/feedparser/tests/wellformed/atom/entry_title_text_plain.xml
deleted file mode 100644
index f02a6264b..000000000
--- a/lib/feedparser/tests/wellformed/atom/entry_title_text_plain.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry title with explicit type='text/plain'
-Expect:      not bozo and entries[0]['title'] == u'Example Atom'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-  <title type="text/plain">Example Atom</title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/entry_title_text_plain_brackets.xml b/lib/feedparser/tests/wellformed/atom/entry_title_text_plain_brackets.xml
deleted file mode 100644
index cbd327cb1..000000000
--- a/lib/feedparser/tests/wellformed/atom/entry_title_text_plain_brackets.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry title with explicit type='text/plain' contains brackets that are not markup
-Expect:      not bozo and entries[0]['title'] == u'History of the <blink> tag'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-  <title type="text/plain">History of the &lt;blink&gt; tag</title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/entry_updated_multiple_values.xml b/lib/feedparser/tests/wellformed/atom/entry_updated_multiple_values.xml
deleted file mode 100644
index 386cd0761..000000000
--- a/lib/feedparser/tests/wellformed/atom/entry_updated_multiple_values.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<!--
-Description: entry parsed updated, multiple values, ensure overwrite
-Expect:      not bozo and entries[0]['updated_parsed'] == (2003, 12, 31, 10, 14, 55, 2, 365, 0)
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<updated>2010-12-01T10:14:55Z</updated>
-<updated>2003-12-31T10:14:55Z</updated>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom/entry_updated_parsed.xml b/lib/feedparser/tests/wellformed/atom/entry_updated_parsed.xml
deleted file mode 100644
index 66a315be9..000000000
--- a/lib/feedparser/tests/wellformed/atom/entry_updated_parsed.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry updated parsed
-Expect:      not bozo and entries[0]['updated_parsed'] == (2003, 12, 31, 10, 14, 55, 2, 365, 0)
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<updated>2003-12-31T10:14:55Z</updated>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom/feed_author_email.xml b/lib/feedparser/tests/wellformed/atom/feed_author_email.xml
deleted file mode 100644
index 3eb3f4a51..000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_author_email.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: feed author email
-Expect:      not bozo and feed['author_detail']['email'] == u'me@example.com'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <author>
-    <name>Example author</name>
-    <email>me@example.com</email>
-    <url>http://example.com/</url>
-  </author>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_author_homepage.xml b/lib/feedparser/tests/wellformed/atom/feed_author_homepage.xml
deleted file mode 100644
index 3d7abf799..000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_author_homepage.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: feed author homepage
-Expect:      not bozo and feed['author_detail']['url'] == u'http://example.com/'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <author>
-    <name>Example author</name>
-    <email>me@example.com</email>
-    <homepage>http://example.com/</homepage>
-  </author>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_author_map_author.xml b/lib/feedparser/tests/wellformed/atom/feed_author_map_author.xml
deleted file mode 100644
index 003a1f4d4..000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_author_map_author.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: feed author name + email maps to author
-Expect:      not bozo and feed['author'] == u'Example author (me@example.com)'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <author>
-    <name>Example author</name>
-    <email>me@example.com</email>
-    <url>http://example.com/</url>
-  </author>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_author_map_author_2.xml b/lib/feedparser/tests/wellformed/atom/feed_author_map_author_2.xml
deleted file mode 100644
index 977142f86..000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_author_map_author_2.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<!--
-Description: feed author name maps to author if no email present
-Expect:      not bozo and feed['author'] == u'Example author'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <author>
-    <name>Example author</name>
-    <url>http://example.com/</url>
-  </author>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_author_name.xml b/lib/feedparser/tests/wellformed/atom/feed_author_name.xml
deleted file mode 100644
index 8e2e0277f..000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_author_name.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: feed author name
-Expect:      not bozo and feed['author_detail']['name'] == u'Example author'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <author>
-    <name>Example author</name>
-    <email>me@example.com</email>
-    <url>http://example.com/</url>
-  </author>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_author_uri.xml b/lib/feedparser/tests/wellformed/atom/feed_author_uri.xml
deleted file mode 100644
index 3df7ce32b..000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_author_uri.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: feed author uri
-Expect:      not bozo and feed['author_detail']['url'] == u'http://example.com/'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <author>
-    <name>Example author</name>
-    <email>me@example.com</email>
-    <uri>http://example.com/</uri>
-  </author>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_author_url.xml b/lib/feedparser/tests/wellformed/atom/feed_author_url.xml
deleted file mode 100644
index dd7cb1f90..000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_author_url.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: feed author url
-Expect:      not bozo and feed['author_detail']['url'] == u'http://example.com/'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <author>
-    <name>Example author</name>
-    <email>me@example.com</email>
-    <url>http://example.com/</url>
-  </author>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_contributor_email.xml b/lib/feedparser/tests/wellformed/atom/feed_contributor_email.xml
deleted file mode 100644
index 664e2a5e6..000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_contributor_email.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: feed contributor email
-Expect:      not bozo and feed['contributors'][0]['email'] == u'me@example.com'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <contributor>
-    <name>Example contributor</name>
-    <email>me@example.com</email>
-    <url>http://example.com/</url>
-  </contributor>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_contributor_homepage.xml b/lib/feedparser/tests/wellformed/atom/feed_contributor_homepage.xml
deleted file mode 100644
index 14d518e2b..000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_contributor_homepage.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: feed contributor homepage
-Expect:      not bozo and feed['contributors'][0]['url'] == u'http://example.com/'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <contributor>
-    <name>Example contributor</name>
-    <email>me@example.com</email>
-    <homepage>http://example.com/</homepage>
-  </contributor>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_contributor_multiple.xml b/lib/feedparser/tests/wellformed/atom/feed_contributor_multiple.xml
deleted file mode 100644
index 64a1326ec..000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_contributor_multiple.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-<!--
-Description: multiple feed contributors
-Expect:      not bozo and feed['contributors'][0] == {'name': u'Contributor 1', 'email': u'me@example.com', 'href': u'http://example.com/'} and feed['contributors'][1] == {'name': u'Contributor 2', 'email': u'you@example.com', 'href': u'http://two.example.com/'}
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <contributor>
-    <name>Contributor 1</name>
-    <email>me@example.com</email>
-    <url>http://example.com/</url>
-  </contributor>
-  <contributor>
-    <name>Contributor 2</name>
-    <email>you@example.com</email>
-    <url>http://two.example.com/</url>
-  </contributor>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom/feed_contributor_name.xml b/lib/feedparser/tests/wellformed/atom/feed_contributor_name.xml
deleted file mode 100644
index 56de55938..000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_contributor_name.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: feed contributor name
-Expect:      not bozo and feed['contributors'][0]['name'] == u'Example contributor'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <contributor>
-    <name>Example contributor</name>
-    <email>me@example.com</email>
-    <url>http://example.com/</url>
-  </contributor>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_contributor_uri.xml b/lib/feedparser/tests/wellformed/atom/feed_contributor_uri.xml
deleted file mode 100644
index c462dcabb..000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_contributor_uri.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: feed contributor uri
-Expect:      not bozo and feed['contributors'][0]['url'] == u'http://example.com/'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <contributor>
-    <name>Example contributor</name>
-    <email>me@example.com</email>
-    <uri>http://example.com/</uri>
-  </contributor>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_contributor_url.xml b/lib/feedparser/tests/wellformed/atom/feed_contributor_url.xml
deleted file mode 100644
index f42c4ea9c..000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_contributor_url.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: feed contributor url
-Expect:      not bozo and feed['contributors'][0]['url'] == u'http://example.com/'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <contributor>
-    <name>Example contributor</name>
-    <email>me@example.com</email>
-    <url>http://example.com/</url>
-  </contributor>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_copyright.xml b/lib/feedparser/tests/wellformed/atom/feed_copyright.xml
deleted file mode 100644
index e1a821816..000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_copyright.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed copyright
-Expect:      not bozo and feed['copyright'] == u'Example Atom'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <copyright>Example Atom</copyright>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_copyright_base64.xml b/lib/feedparser/tests/wellformed/atom/feed_copyright_base64.xml
deleted file mode 100644
index 7b6599935..000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_copyright_base64.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: feed copyright base64-encoded
-Expect:      not bozo and feed['copyright'] == u'Example <b>Atom</b>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <copyright mode="base64">
-    RXhhbXBsZSA8Yj5BdG9tPC9iPg==
-  </copyright>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_copyright_base64_2.xml b/lib/feedparser/tests/wellformed/atom/feed_copyright_base64_2.xml
deleted file mode 100644
index 3cffcff44..000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_copyright_base64_2.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: feed copyright base64-encoded
-Expect:      not bozo and feed['copyright'] == u'<p>History of the &lt;blink&gt; tag</p>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<copyright mode="base64">
-PHA+SGlzdG9yeSBvZiB0aGUgJmx0O2JsaW5rJmd0OyB0YWc8L3A+
-</copyright>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_copyright_content_mode_base64.xml b/lib/feedparser/tests/wellformed/atom/feed_copyright_content_mode_base64.xml
deleted file mode 100644
index 3c68739ac..000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_copyright_content_mode_base64.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: feed copyright mode=base64
-Expect:      1
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <copyright mode="base64">
-    RXhhbXBsZSA8Yj5BdG9tPC9iPg==
-  </copyright>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_copyright_content_mode_escaped.xml b/lib/feedparser/tests/wellformed/atom/feed_copyright_content_mode_escaped.xml
deleted file mode 100644
index 72132f8e1..000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_copyright_content_mode_escaped.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed copyright mode=escaped
-Expect:      1
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <copyright type="text/html" mode="escaped">Example &lt;b&gt;Atom&lt;/b&gt;</copyright>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_copyright_content_type.xml b/lib/feedparser/tests/wellformed/atom/feed_copyright_content_type.xml
deleted file mode 100644
index e77a8ee0c..000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_copyright_content_type.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed copyright content type defaults to 'text/plain'
-Expect:      not bozo and feed['copyright_detail']['type'] == u'text/plain'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <copyright>Example Atom</copyright>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_copyright_content_type_text_plain.xml b/lib/feedparser/tests/wellformed/atom/feed_copyright_content_type_text_plain.xml
deleted file mode 100644
index 390313961..000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_copyright_content_type_text_plain.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed copyright type='text/plain'
-Expect:      not bozo and feed['copyright_detail']['type'] == u'text/plain'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <copyright type="text/plain">Example Atom</copyright>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_copyright_content_value.xml b/lib/feedparser/tests/wellformed/atom/feed_copyright_content_value.xml
deleted file mode 100644
index 491c10e41..000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_copyright_content_value.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed copyright content value
-Expect:      not bozo and feed['copyright_detail']['value'] == u'Example Atom'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <copyright>Example Atom</copyright>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_copyright_escaped_markup.xml b/lib/feedparser/tests/wellformed/atom/feed_copyright_escaped_markup.xml
deleted file mode 100644
index 2f97df3e1..000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_copyright_escaped_markup.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed copyright escaped HTML
-Expect:      not bozo and feed['copyright'] == u'Example <b>Atom</b>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <copyright type="text/html" mode="escaped">Example &lt;b&gt;Atom&lt;/b&gt;</copyright>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_copyright_inline_markup.xml b/lib/feedparser/tests/wellformed/atom/feed_copyright_inline_markup.xml
deleted file mode 100644
index bf8f211b0..000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_copyright_inline_markup.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed copyright inline XHTML
-Expect:      not bozo and feed['copyright'] == u'<div>Example <b>Atom</b></div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <copyright type="application/xhtml+xml"><div xmlns="http://www.w3.org/1999/xhtml">Example <b>Atom</b></div></copyright>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_copyright_inline_markup_2.xml b/lib/feedparser/tests/wellformed/atom/feed_copyright_inline_markup_2.xml
deleted file mode 100644
index d4e4df3a4..000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_copyright_inline_markup_2.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed copyright inline XHTML with escaped markup
-Expect:      not bozo and feed['copyright'] == u'<div>History of the &lt;blink&gt; tag</div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <copyright type="application/xhtml+xml"><div xmlns="http://www.w3.org/1999/xhtml">History of the &lt;blink&gt; tag</div></copyright>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_copyright_naked_markup.xml b/lib/feedparser/tests/wellformed/atom/feed_copyright_naked_markup.xml
deleted file mode 100644
index a04eed41b..000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_copyright_naked_markup.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed copyright with undeclared unqualified inline markup
-Expect:      not bozo and feed['copyright'] == u'Example <b>Atom</b>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <copyright>Example <b>Atom</b></copyright>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_copyright_text_plain.xml b/lib/feedparser/tests/wellformed/atom/feed_copyright_text_plain.xml
deleted file mode 100644
index 5c71c1b9e..000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_copyright_text_plain.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed copyright with explicit type='text/plain'
-Expect:      not bozo and feed['copyright'] == u'Example Atom'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <copyright type="text/plain">Example Atom</copyright>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_generator.xml b/lib/feedparser/tests/wellformed/atom/feed_generator.xml
deleted file mode 100644
index 21bce92b6..000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_generator.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed generator
-Expect:      not bozo and feed['generator'] == u'Example generator'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <generator url="http://example.com/" version="2.65">Example generator</generator>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_generator_name.xml b/lib/feedparser/tests/wellformed/atom/feed_generator_name.xml
deleted file mode 100644
index 349ed2deb..000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_generator_name.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed generator name
-Expect:      not bozo and feed['generator_detail']['name'] == u'Example generator'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <generator url="http://example.com/" version="2.65">Example generator</generator>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_generator_url.xml b/lib/feedparser/tests/wellformed/atom/feed_generator_url.xml
deleted file mode 100644
index 4efaed264..000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_generator_url.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed generator url
-Expect:      not bozo and feed['generator_detail']['url'] == u'http://example.com/'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <generator url="http://example.com/" version="2.65">Example generator</generator>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_generator_version.xml b/lib/feedparser/tests/wellformed/atom/feed_generator_version.xml
deleted file mode 100644
index c6c088559..000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_generator_version.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed generator version
-Expect:      not bozo and feed['generator_detail']['version'] == u'2.65'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <generator url="http://example.com/" version="2.65">Example generator</generator>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_id.xml b/lib/feedparser/tests/wellformed/atom/feed_id.xml
deleted file mode 100644
index a875baeb9..000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_id.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed id
-Expect:      not bozo and feed['id'] == u'http://example.com/'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <id>http://example.com/</id>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_id_map_guid.xml b/lib/feedparser/tests/wellformed/atom/feed_id_map_guid.xml
deleted file mode 100644
index 9e6392dc7..000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_id_map_guid.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed id
-Expect:      not bozo and feed['guid'] == u'http://example.com/'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <id>http://example.com/</id>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_info.xml b/lib/feedparser/tests/wellformed/atom/feed_info.xml
deleted file mode 100644
index a4f98f723..000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_info.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed info
-Expect:      not bozo and feed['info'] == u'Example Atom'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <info>Example Atom</info>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_info_base64.xml b/lib/feedparser/tests/wellformed/atom/feed_info_base64.xml
deleted file mode 100644
index df6136f36..000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_info_base64.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: feed info base64-encoded
-Expect:      not bozo and feed['info'] == u'Example <b>Atom</b>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <info mode="base64">
-    RXhhbXBsZSA8Yj5BdG9tPC9iPg==
-  </info>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_info_base64_2.xml b/lib/feedparser/tests/wellformed/atom/feed_info_base64_2.xml
deleted file mode 100644
index 4f50e30f0..000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_info_base64_2.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: feed info base64-encoded
-Expect:      not bozo and feed['info'] == u'<p>History of the &lt;blink&gt; tag</p>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<info mode="base64">
-PHA+SGlzdG9yeSBvZiB0aGUgJmx0O2JsaW5rJmd0OyB0YWc8L3A+
-</info>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_info_content_mode_base64.xml b/lib/feedparser/tests/wellformed/atom/feed_info_content_mode_base64.xml
deleted file mode 100644
index 0c3de7043..000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_info_content_mode_base64.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: feed info mode=base64
-Expect:      1
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <info mode="base64">
-    RXhhbXBsZSA8Yj5BdG9tPC9iPg==
-  </info>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_info_content_mode_escaped.xml b/lib/feedparser/tests/wellformed/atom/feed_info_content_mode_escaped.xml
deleted file mode 100644
index fdc27e69a..000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_info_content_mode_escaped.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed info mode=escaped
-Expect:      1
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <info type="text/html" mode="escaped">Example &lt;b&gt;Atom&lt;/b&gt;</info>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_info_content_type.xml b/lib/feedparser/tests/wellformed/atom/feed_info_content_type.xml
deleted file mode 100644
index 615d4d685..000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_info_content_type.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed info content type defaults to 'text/plain'
-Expect:      not bozo and feed['info_detail']['type'] == u'text/plain'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <info>Example Atom</info>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_info_content_type_text_plain.xml b/lib/feedparser/tests/wellformed/atom/feed_info_content_type_text_plain.xml
deleted file mode 100644
index c97aef9e0..000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_info_content_type_text_plain.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed info type='text/plain'
-Expect:      not bozo and feed['info_detail']['type'] == u'text/plain'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <info type="text/plain">Example Atom</info>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_info_content_value.xml b/lib/feedparser/tests/wellformed/atom/feed_info_content_value.xml
deleted file mode 100644
index d601f03ea..000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_info_content_value.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed info content value
-Expect:      not bozo and feed['info_detail']['value'] == u'Example Atom'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <info>Example Atom</info>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_info_escaped_markup.xml b/lib/feedparser/tests/wellformed/atom/feed_info_escaped_markup.xml
deleted file mode 100644
index 4820f8be6..000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_info_escaped_markup.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed info escaped HTML
-Expect:      not bozo and feed['info'] == u'Example <b>Atom</b>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <info type="text/html" mode="escaped">Example &lt;b&gt;Atom&lt;/b&gt;</info>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_info_inline_markup.xml b/lib/feedparser/tests/wellformed/atom/feed_info_inline_markup.xml
deleted file mode 100644
index 76e02eb06..000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_info_inline_markup.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed info inline XHTML
-Expect:      not bozo and feed['info'] == u'<div>Example <b>Atom</b></div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <info type="application/xhtml+xml"><div xmlns="http://www.w3.org/1999/xhtml">Example <b>Atom</b></div></info>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_info_inline_markup_2.xml b/lib/feedparser/tests/wellformed/atom/feed_info_inline_markup_2.xml
deleted file mode 100644
index a6313b75a..000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_info_inline_markup_2.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed info inline XHTML with escaped markup
-Expect:      not bozo and feed['info'] == u'<div>History of the &lt;blink&gt; tag</div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <info type="application/xhtml+xml"><div xmlns="http://www.w3.org/1999/xhtml">History of the &lt;blink&gt; tag</div></info>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_info_naked_markup.xml b/lib/feedparser/tests/wellformed/atom/feed_info_naked_markup.xml
deleted file mode 100644
index 9dab661cc..000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_info_naked_markup.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed info with undeclared unqualified inline markup
-Expect:      not bozo and feed['info'] == u'Example <b>Atom</b>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <info>Example <b>Atom</b></info>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_info_text_plain.xml b/lib/feedparser/tests/wellformed/atom/feed_info_text_plain.xml
deleted file mode 100644
index e61ed050a..000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_info_text_plain.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed info with explicit type='text/plain'
-Expect:      not bozo and feed['info'] == u'Example Atom'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <info type="text/plain">Example Atom</info>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_link_alternate_map_link.xml b/lib/feedparser/tests/wellformed/atom/feed_link_alternate_map_link.xml
deleted file mode 100644
index 12842ffd7..000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_link_alternate_map_link.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed link href maps to link if rel="alternate" and type="text/html"
-Expect:      not bozo and feed['link'] == u'http://www.example.com/'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <link rel="alternate" type="text/html" href="http://www.example.com/"/>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_link_alternate_map_link_2.xml b/lib/feedparser/tests/wellformed/atom/feed_link_alternate_map_link_2.xml
deleted file mode 100644
index e63141c53..000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_link_alternate_map_link_2.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed link href maps to link if rel="alternate" and type="application/xhtml+xml"
-Expect:      not bozo and feed['link'] == u'http://www.example.com/'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <link rel="alternate" type="application/xhtml+xml" href="http://www.example.com/"/>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_link_href.xml b/lib/feedparser/tests/wellformed/atom/feed_link_href.xml
deleted file mode 100644
index 6ab44d88b..000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_link_href.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed link href
-Expect:      not bozo and feed['links'][0]['href'] == u'http://www.example.com/'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <link rel="alternate" type="text/html" href="http://www.example.com/"/>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_link_multiple.xml b/lib/feedparser/tests/wellformed/atom/feed_link_multiple.xml
deleted file mode 100644
index 154fbbc33..000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_link_multiple.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<!--
-Description: feed multiple links
-Expect:      not bozo and feed['links'][0] == {'rel': u'alternate', 'type': u'application/xhtml+xml', 'href': u'http://www.example.com/'} and feed['links'][1] == {'rel': u'service.post', 'type': u'application/atom+xml', 'href': u'http://www.example.com/post'}
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <link rel="alternate" type="application/xhtml+xml" href="http://www.example.com/"/>
-  <link rel="service.post" type="application/atom+xml" href="http://www.example.com/post"/>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom/feed_link_rel.xml b/lib/feedparser/tests/wellformed/atom/feed_link_rel.xml
deleted file mode 100644
index dd2fe64a4..000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_link_rel.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed link rel
-Expect:      not bozo and feed['links'][0]['rel'] == u'alternate'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <link rel="alternate" type="text/html" href="http://www.example.com/"/>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_link_title.xml b/lib/feedparser/tests/wellformed/atom/feed_link_title.xml
deleted file mode 100644
index b8339eb3c..000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_link_title.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed link title
-Expect:      not bozo and feed['links'][0]['title'] == u'Example title'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <link rel="alternate" type="text/html" title="Example title" href="http://www.example.com/"/>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_link_type.xml b/lib/feedparser/tests/wellformed/atom/feed_link_type.xml
deleted file mode 100644
index 4fddbfd8f..000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_link_type.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed link type
-Expect:      not bozo and feed['links'][0]['type'] == u'text/html'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <link rel="alternate" type="text/html" href="http://www.example.com/"/>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_modified.xml b/lib/feedparser/tests/wellformed/atom/feed_modified.xml
deleted file mode 100644
index 984f8ab6b..000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_modified.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: feed modified
-Expect:      not bozo and feed['updated'] == u'Thu, 01 Jan 2004 19:48:21 GMT'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-
-<modified>Thu, 01 Jan 2004 19:48:21 GMT</modified>
-
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom/feed_modified_map_updated_parsed.xml b/lib/feedparser/tests/wellformed/atom/feed_modified_map_updated_parsed.xml
deleted file mode 100644
index 9099adaf7..000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_modified_map_updated_parsed.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: feed modified parsed and mapped to updated_parsed
-Expect:      not bozo and feed['updated_parsed'] == (2004, 1, 1, 19, 48, 21, 3, 1, 0)
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-
-<modified>Thu, 01 Jan 2004 19:48:21 GMT</modified>
-
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom/feed_tagline.xml b/lib/feedparser/tests/wellformed/atom/feed_tagline.xml
deleted file mode 100644
index ce170ef83..000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_tagline.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed tagline
-Expect:      not bozo and feed['tagline'] == u'Example Atom'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <tagline>Example Atom</tagline>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_tagline_base64.xml b/lib/feedparser/tests/wellformed/atom/feed_tagline_base64.xml
deleted file mode 100644
index 196e08603..000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_tagline_base64.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: feed tagline base64-encoded
-Expect:      not bozo and feed['tagline'] == u'Example <b>Atom</b>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <tagline mode="base64">
-    RXhhbXBsZSA8Yj5BdG9tPC9iPg==
-  </tagline>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_tagline_base64_2.xml b/lib/feedparser/tests/wellformed/atom/feed_tagline_base64_2.xml
deleted file mode 100644
index eb57d1515..000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_tagline_base64_2.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: feed tagline base64-encoded
-Expect:      not bozo and feed['tagline'] == u'<p>History of the &lt;blink&gt; tag</p>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<tagline mode="base64">
-PHA+SGlzdG9yeSBvZiB0aGUgJmx0O2JsaW5rJmd0OyB0YWc8L3A+
-</tagline>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_tagline_content_mode_base64.xml b/lib/feedparser/tests/wellformed/atom/feed_tagline_content_mode_base64.xml
deleted file mode 100644
index ff55466c0..000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_tagline_content_mode_base64.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: feed tagline mode=base64
-Expect:      1
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <tagline mode="base64">
-    RXhhbXBsZSA8Yj5BdG9tPC9iPg==
-  </tagline>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_tagline_content_mode_escaped.xml b/lib/feedparser/tests/wellformed/atom/feed_tagline_content_mode_escaped.xml
deleted file mode 100644
index 2a28f0b49..000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_tagline_content_mode_escaped.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed tagline mode=escaped
-Expect:      1
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <tagline type="text/html" mode="escaped">Example &lt;b&gt;Atom&lt;/b&gt;</tagline>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_tagline_content_type.xml b/lib/feedparser/tests/wellformed/atom/feed_tagline_content_type.xml
deleted file mode 100644
index 8d7c831aa..000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_tagline_content_type.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed tagline content type defaults to 'text/plain'
-Expect:      not bozo and feed['tagline_detail']['type'] == u'text/plain'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <tagline>Example Atom</tagline>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_tagline_content_type_text_plain.xml b/lib/feedparser/tests/wellformed/atom/feed_tagline_content_type_text_plain.xml
deleted file mode 100644
index a63a3ca78..000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_tagline_content_type_text_plain.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed tagline type='text/plain'
-Expect:      not bozo and feed['tagline_detail']['type'] == u'text/plain'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <tagline type="text/plain">Example Atom</tagline>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_tagline_content_value.xml b/lib/feedparser/tests/wellformed/atom/feed_tagline_content_value.xml
deleted file mode 100644
index 24bc7ae77..000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_tagline_content_value.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed tagline content value
-Expect:      not bozo and feed['tagline_detail']['value'] == u'Example Atom'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <tagline>Example Atom</tagline>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_tagline_escaped_markup.xml b/lib/feedparser/tests/wellformed/atom/feed_tagline_escaped_markup.xml
deleted file mode 100644
index 4530eabc8..000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_tagline_escaped_markup.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed tagline escaped HTML
-Expect:      not bozo and feed['tagline'] == u'Example <b>Atom</b>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <tagline type="text/html" mode="escaped">Example &lt;b&gt;Atom&lt;/b&gt;</tagline>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_tagline_inline_markup.xml b/lib/feedparser/tests/wellformed/atom/feed_tagline_inline_markup.xml
deleted file mode 100644
index 6330c385d..000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_tagline_inline_markup.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed tagline inline XHTML
-Expect:      not bozo and feed['tagline'] == u'<div>Example <b>Atom</b></div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <tagline type="application/xhtml+xml"><div xmlns="http://www.w3.org/1999/xhtml">Example <b>Atom</b></div></tagline>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_tagline_inline_markup_2.xml b/lib/feedparser/tests/wellformed/atom/feed_tagline_inline_markup_2.xml
deleted file mode 100644
index afb7ebee6..000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_tagline_inline_markup_2.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed tagline inline XHTML with escaped markup
-Expect:      not bozo and feed['tagline'] == u'<div>History of the &lt;blink&gt; tag</div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <tagline type="application/xhtml+xml"><div xmlns="http://www.w3.org/1999/xhtml">History of the &lt;blink&gt; tag</div></tagline>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_tagline_naked_markup.xml b/lib/feedparser/tests/wellformed/atom/feed_tagline_naked_markup.xml
deleted file mode 100644
index 4e213464d..000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_tagline_naked_markup.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed tagline with undeclared unqualified inline markup
-Expect:      not bozo and feed['tagline'] == u'Example <b>Atom</b>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <tagline>Example <b>Atom</b></tagline>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_tagline_text_plain.xml b/lib/feedparser/tests/wellformed/atom/feed_tagline_text_plain.xml
deleted file mode 100644
index 96d7d9cd2..000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_tagline_text_plain.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed tagline with explicit type='text/plain'
-Expect:      not bozo and feed['tagline'] == u'Example Atom'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <tagline type="text/plain">Example Atom</tagline>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_title.xml b/lib/feedparser/tests/wellformed/atom/feed_title.xml
deleted file mode 100644
index b59200cb7..000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_title.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed title
-Expect:      not bozo and feed['title'] == u'Example Atom'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <title>Example Atom</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_title_base64.xml b/lib/feedparser/tests/wellformed/atom/feed_title_base64.xml
deleted file mode 100644
index f13b3c13c..000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_title_base64.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: feed title base64-encoded
-Expect:      not bozo and feed['title'] == u'Example <b>Atom</b>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <title mode="base64">
-    RXhhbXBsZSA8Yj5BdG9tPC9iPg==
-  </title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_title_base64_2.xml b/lib/feedparser/tests/wellformed/atom/feed_title_base64_2.xml
deleted file mode 100644
index a372b8396..000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_title_base64_2.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: feed title base64-encoded
-Expect:      not bozo and feed['title'] == u'<p>History of the &lt;blink&gt; tag</p>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title mode="base64">
-PHA+SGlzdG9yeSBvZiB0aGUgJmx0O2JsaW5rJmd0OyB0YWc8L3A+
-</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_title_content_mode_base64.xml b/lib/feedparser/tests/wellformed/atom/feed_title_content_mode_base64.xml
deleted file mode 100644
index ac9ff5942..000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_title_content_mode_base64.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: feed title mode=base64
-Expect:      1
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <title mode="base64">
-    RXhhbXBsZSA8Yj5BdG9tPC9iPg==
-  </title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_title_content_mode_escaped.xml b/lib/feedparser/tests/wellformed/atom/feed_title_content_mode_escaped.xml
deleted file mode 100644
index 3ff055a1d..000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_title_content_mode_escaped.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed title mode=escaped
-Expect:      1
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <title type="text/html" mode="escaped">Example &lt;b&gt;Atom&lt;/b&gt;</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_title_content_type.xml b/lib/feedparser/tests/wellformed/atom/feed_title_content_type.xml
deleted file mode 100644
index c20750317..000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_title_content_type.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed title content type defaults to 'text/plain'
-Expect:      not bozo and feed['title_detail']['type'] == u'text/plain'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <title>Example Atom</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_title_content_type_text_plain.xml b/lib/feedparser/tests/wellformed/atom/feed_title_content_type_text_plain.xml
deleted file mode 100644
index 8bf0060bd..000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_title_content_type_text_plain.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed title type='text/plain'
-Expect:      not bozo and feed['title_detail']['type'] == u'text/plain'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <title type="text/plain">Example Atom</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_title_content_value.xml b/lib/feedparser/tests/wellformed/atom/feed_title_content_value.xml
deleted file mode 100644
index ac5cbdbe8..000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_title_content_value.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed title content value
-Expect:      not bozo and feed['title_detail']['value'] == u'Example Atom'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <title>Example Atom</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_title_escaped_markup.xml b/lib/feedparser/tests/wellformed/atom/feed_title_escaped_markup.xml
deleted file mode 100644
index b2daea2b0..000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_title_escaped_markup.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed title escaped HTML
-Expect:      not bozo and feed['title'] == u'Example <b>Atom</b>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <title type="text/html" mode="escaped">Example &lt;b&gt;Atom&lt;/b&gt;</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_title_inline_markup.xml b/lib/feedparser/tests/wellformed/atom/feed_title_inline_markup.xml
deleted file mode 100644
index 0b675936b..000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_title_inline_markup.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed title inline XHTML
-Expect:      not bozo and feed['title'] == u'<div>Example <b>Atom</b></div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <title type="application/xhtml+xml"><div xmlns="http://www.w3.org/1999/xhtml">Example <b>Atom</b></div></title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_title_inline_markup_2.xml b/lib/feedparser/tests/wellformed/atom/feed_title_inline_markup_2.xml
deleted file mode 100644
index e687f4029..000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_title_inline_markup_2.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed title inline XHTML with escaped markup
-Expect:      not bozo and feed['title'] == u'<div>History of the &lt;blink&gt; tag</div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <title type="application/xhtml+xml"><div xmlns="http://www.w3.org/1999/xhtml">History of the &lt;blink&gt; tag</div></title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_title_naked_markup.xml b/lib/feedparser/tests/wellformed/atom/feed_title_naked_markup.xml
deleted file mode 100644
index fa4c30561..000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_title_naked_markup.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed title with undeclared unqualified inline markup
-Expect:      not bozo and feed['title'] == u'Example <b>Atom</b>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <title>Example <b>Atom</b></title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_title_text_plain.xml b/lib/feedparser/tests/wellformed/atom/feed_title_text_plain.xml
deleted file mode 100644
index 3c94b7eef..000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_title_text_plain.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed title with explicit type='text/plain'
-Expect:      not bozo and feed['title'] == u'Example Atom'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <title type="text/plain">Example Atom</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_updated_parsed.xml b/lib/feedparser/tests/wellformed/atom/feed_updated_parsed.xml
deleted file mode 100644
index a5ddfec1a..000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_updated_parsed.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed updated parsed
-Expect:      not bozo and feed['updated_parsed'] == (2003, 12, 31, 10, 14, 55, 2, 365, 0)
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<updated>2003-12-31T10:14:55Z</updated>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom/media_player1.xml b/lib/feedparser/tests/wellformed/atom/media_player1.xml
deleted file mode 100644
index c95a7b2c6..000000000
--- a/lib/feedparser/tests/wellformed/atom/media_player1.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<!--
-Description: media player content
-Expect:      not bozo and entries[0]['media_player']['url'] == u'http://www.example.com/'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-  <media:player xmlns:media="http://search.yahoo.com/mrss/" url="http://www.example.com/" />
-  <title>Example Atom</title>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom/media_thumbnail.xml b/lib/feedparser/tests/wellformed/atom/media_thumbnail.xml
deleted file mode 100644
index 6288bfa57..000000000
--- a/lib/feedparser/tests/wellformed/atom/media_thumbnail.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: media_thumbnail
-Expect:      entries[0]['media_thumbnail'][0]['url'] == u'http://example.com/thumbnail.jpg'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-  <media:thumbnail xmlns:media="http://search.yahoo.com/mrss/"
-    url="http://example.com/thumbnail.jpg" height="72" width="72" />
-  <title>Example Atom</title>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom/relative_uri.xml b/lib/feedparser/tests/wellformed/atom/relative_uri.xml
deleted file mode 100644
index 0de466ddc..000000000
--- a/lib/feedparser/tests/wellformed/atom/relative_uri.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed title contains relative URI resolved relative to xml:base
-Expect:      not bozo and feed['title_detail']['value'] == u'<div>Example <a href="http://example.com/test/test.html">test</a></div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <title type="application/xhtml+xml" xml:base="http://example.com/test/"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/relative_uri_inherit.xml b/lib/feedparser/tests/wellformed/atom/relative_uri_inherit.xml
deleted file mode 100644
index a2195de9c..000000000
--- a/lib/feedparser/tests/wellformed/atom/relative_uri_inherit.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed title contains relative URI resolved relative to xml:base inherited from parent element
-Expect:      not bozo and feed['title_detail']['value'] == u'<div>Example <a href="http://example.com/test/test.html">test</a></div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:base="http://example.com/test/">
-  <title type="application/xhtml+xml"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/relative_uri_inherit_2.xml b/lib/feedparser/tests/wellformed/atom/relative_uri_inherit_2.xml
deleted file mode 100644
index 8ce7778a6..000000000
--- a/lib/feedparser/tests/wellformed/atom/relative_uri_inherit_2.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed title contains relative URI resolved relative to xml:base overriding parent xml:base
-Expect:      not bozo and feed['title_detail']['value'] == u'<div>Example <a href="http://example.com/test/test.html">test</a></div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:base="http://example.com/parent/">
-  <title type="application/xhtml+xml" xml:base="http://example.com/test/"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/ampersand_in_attr.xml b/lib/feedparser/tests/wellformed/atom10/ampersand_in_attr.xml
deleted file mode 100644
index 2dcec4289..000000000
--- a/lib/feedparser/tests/wellformed/atom10/ampersand_in_attr.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed title contains URI with an ampersand
-Expect:      not bozo and feed['title_detail']['value'] == u'Example <a href="http://example.com/?a=1&amp;b=2">test</a>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <title type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="http://example.com/?a=1&amp;b=2">test</a></div></title>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom10/atom10_namespace.xml b/lib/feedparser/tests/wellformed/atom10/atom10_namespace.xml
deleted file mode 100644
index c12785300..000000000
--- a/lib/feedparser/tests/wellformed/atom10/atom10_namespace.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: Atom namespace (official)
-Expect:      not bozo and feed['title'] == u'Example Atom'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <title>Example Atom</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/atom10_version.xml b/lib/feedparser/tests/wellformed/atom10/atom10_version.xml
deleted file mode 100644
index e27c91110..000000000
--- a/lib/feedparser/tests/wellformed/atom10/atom10_version.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-<!--
-Description: Atom 1.0 version from namespace
-Expect:      not bozo and version == u'atom10'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_author_email.xml b/lib/feedparser/tests/wellformed/atom10/entry_author_email.xml
deleted file mode 100644
index 45d71fbf1..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_author_email.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<!--
-Description: entry author email
-Expect:      not bozo and entries[0]['author_detail']['email'] == u'me@example.com'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <author>
-    <name>Example author</name>
-    <email>me@example.com</email>
-    <uri>http://example.com/</uri>
-  </author>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_author_map_author.xml b/lib/feedparser/tests/wellformed/atom10/entry_author_map_author.xml
deleted file mode 100644
index 84a0776a2..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_author_map_author.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<!--
-Description: entry author name + email maps to author
-Expect:      not bozo and entries[0]['author'] == u'Example author (me@example.com)'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <author>
-    <name>Example author</name>
-    <email>me@example.com</email>
-    <uri>http://example.com/</uri>
-  </author>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_author_map_author_2.xml b/lib/feedparser/tests/wellformed/atom10/entry_author_map_author_2.xml
deleted file mode 100644
index 687d3d036..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_author_map_author_2.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<!--
-Description: entry author name maps to author if no email present
-Expect:      not bozo and entries[0]['author'] == u'Example author'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <author>
-    <name>Example author</name>
-    <uri>http://example.com/</uri>
-  </author>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_author_name.xml b/lib/feedparser/tests/wellformed/atom10/entry_author_name.xml
deleted file mode 100644
index fb2157d62..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_author_name.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<!--
-Description: entry author name
-Expect:      not bozo and entries[0]['author_detail']['name'] == u'Example author'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <author>
-    <name>Example author</name>
-    <email>me@example.com</email>
-    <uri>http://example.com/</uri>
-  </author>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_author_uri.xml b/lib/feedparser/tests/wellformed/atom10/entry_author_uri.xml
deleted file mode 100644
index 86e1e8568..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_author_uri.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<!--
-Description: entry author uri
-Expect:      not bozo and entries[0]['author_detail']['url'] == u'http://example.com/'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <author>
-    <name>Example author</name>
-    <email>me@example.com</email>
-    <uri>http://example.com/</uri>
-  </author>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_author_url.xml b/lib/feedparser/tests/wellformed/atom10/entry_author_url.xml
deleted file mode 100644
index dae246ae4..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_author_url.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<!--
-Description: entry author url
-Expect:      not bozo and entries[0]['author_detail']['url'] == u'http://example.com/'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <author>
-    <name>Example author</name>
-    <email>me@example.com</email>
-    <url>http://example.com/</url>
-  </author>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_authors_email.xml b/lib/feedparser/tests/wellformed/atom10/entry_authors_email.xml
deleted file mode 100644
index d5a6369a7..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_authors_email.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-Description: entry contains multiple author emails
-Expect: not bozo and (entries[0]['authors'][0]['email'] == u'one@one.com') and (entries[0]['authors'][1]['email'] == u'two@two.com')
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <entry>
-    <author>
-      <email>one@one.com</email>
-    </author>
-    <author>
-      <email>two@two.com</email>
-    </author>
-  </entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_authors_name.xml b/lib/feedparser/tests/wellformed/atom10/entry_authors_name.xml
deleted file mode 100644
index a0e74ae4d..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_authors_name.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-Description: entry contains multiple author names
-Expect: not bozo and (entries[0]['authors'][0]['name'] == u'one') and (entries[0]['authors'][1]['name'] == u'two')
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <entry>
-    <author>
-      <name>one</name>
-    </author>
-    <author>
-      <name>two</name>
-    </author>
-  </entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_authors_uri.xml b/lib/feedparser/tests/wellformed/atom10/entry_authors_uri.xml
deleted file mode 100644
index 68dbc03b3..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_authors_uri.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-Description: entry contains multiple author uris
-Expect: not bozo and (entries[0]['authors'][0]['url'] == u'http://one.com/') and (entries[0]['authors'][1]['url'] == u'http://two.com/')
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <entry>
-    <author>
-      <uri>http://one.com/</uri>
-    </author>
-    <author>
-      <uri>http://two.com/</uri>
-    </author>
-  </entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_authors_url.xml b/lib/feedparser/tests/wellformed/atom10/entry_authors_url.xml
deleted file mode 100644
index 09a1f843f..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_authors_url.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-Description: entry contains multiple author urls
-Expect: not bozo and (entries[0]['authors'][0]['url'] == u'http://one.com/') and (entries[0]['authors'][1]['url'] == u'http://two.com/')
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <entry>
-    <author>
-      <url>http://one.com/</url>
-    </author>
-    <author>
-      <url>http://two.com/</url>
-    </author>
-  </entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_category_label.xml b/lib/feedparser/tests/wellformed/atom10/entry_category_label.xml
deleted file mode 100644
index 7691de379..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_category_label.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry category label
-Expect:      not bozo and entries[0]['tags'][0]['label'] == u'Atom 1.0 tests'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <category term="atom10" scheme="http://feedparser.org/tests/" label="Atom 1.0 tests"/>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_category_scheme.xml b/lib/feedparser/tests/wellformed/atom10/entry_category_scheme.xml
deleted file mode 100644
index a88defc21..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_category_scheme.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry category scheme
-Expect:      not bozo and entries[0]['tags'][0]['scheme'] == u'http://feedparser.org/tests/'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <category term="atom10" scheme="http://feedparser.org/tests/" label="Atom 1.0 tests"/>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_category_term.xml b/lib/feedparser/tests/wellformed/atom10/entry_category_term.xml
deleted file mode 100644
index f0755b39f..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_category_term.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry category term
-Expect:      not bozo and entries[0]['tags'][0]['term'] == u'atom10'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <category term="atom10" scheme="http://feedparser.org/tests/" label="Atom 1.0 tests"/>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_category_term_non_ascii.xml b/lib/feedparser/tests/wellformed/atom10/entry_category_term_non_ascii.xml
deleted file mode 100644
index a2529b5f7..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_category_term_non_ascii.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry category term
-Expect:      not bozo and entries[0]['tags'][0]['term'] == u'Freir\xe4ume'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <category term="Freiräume" scheme="http://feedparser.org/tests/" label="Atom 1.0 tests"/>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_content_application_xml.xml b/lib/feedparser/tests/wellformed/atom10/entry_content_application_xml.xml
deleted file mode 100644
index 9506726e6..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_content_application_xml.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry content inline XML
-Expect:      not bozo and entries[0]['content'][0]['value'] == u'Example <b>Atom</b>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">Example <b>Atom</b></div></content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_content_base64.xml b/lib/feedparser/tests/wellformed/atom10/entry_content_base64.xml
deleted file mode 100644
index 09ff3b0ca..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_content_base64.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: entry content base64-encoded
-Expect:      not bozo and entries[0]['content'][0]['value'] == u'Example <b>Atom</b>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <content type="application/octet-stream">
-    RXhhbXBsZSA8Yj5BdG9tPC9iPg==
-  </content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_content_base64_2.xml b/lib/feedparser/tests/wellformed/atom10/entry_content_base64_2.xml
deleted file mode 100644
index 84de7fe1a..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_content_base64_2.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: entry content base64-encoded
-Expect:      not bozo and entries[0]['content'][0]['value'] == u'<p>History of the &lt;blink&gt; tag</p>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="application/octet-stream">
-PHA+SGlzdG9yeSBvZiB0aGUgJmx0O2JsaW5rJmd0OyB0YWc8L3A+
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_content_div_escaped_markup.xml b/lib/feedparser/tests/wellformed/atom10/entry_content_div_escaped_markup.xml
deleted file mode 100644
index f1f0a974c..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_content_div_escaped_markup.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: typepad style entry content escaped HTML with div
-Expect:      not bozo and entries[0]['content'][0]['value'] == u'Example <b>Atom</b>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <content type="html"><div xmlns="http://www.w3.org/1999/xhtml">Example &lt;b&gt;Atom&lt;/b&gt;</div></content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_content_escaped_markup.xml b/lib/feedparser/tests/wellformed/atom10/entry_content_escaped_markup.xml
deleted file mode 100644
index 44a6e0a27..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_content_escaped_markup.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry content escaped HTML
-Expect:      not bozo and entries[0]['content'][0]['value'] == u'Example <b>Atom</b>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <content type="html">Example &lt;b&gt;Atom&lt;/b&gt;</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_content_inline_markup.xml b/lib/feedparser/tests/wellformed/atom10/entry_content_inline_markup.xml
deleted file mode 100644
index 1dc354e63..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_content_inline_markup.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry content inline XHTML
-Expect:      not bozo and entries[0]['content'][0]['value'] == u'Example <b>Atom</b>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">Example <b>Atom</b></div></content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_content_inline_markup_2.xml b/lib/feedparser/tests/wellformed/atom10/entry_content_inline_markup_2.xml
deleted file mode 100644
index e47e68f84..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_content_inline_markup_2.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry content inline XHTML with escaped markup
-Expect:      not bozo and entries[0]['content'][0]['value'] == u'History of the &lt;blink&gt; tag'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">History of the &lt;blink&gt; tag</div></content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_content_src.xml b/lib/feedparser/tests/wellformed/atom10/entry_content_src.xml
deleted file mode 100644
index 0b808a8de..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_content_src.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry content src
-Expect:      not bozo and entries[0]['content'][0]['src'] == u'http://example.com/movie.mp4'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <content src="http://example.com/movie.mp4"/>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_content_text_plain.xml b/lib/feedparser/tests/wellformed/atom10/entry_content_text_plain.xml
deleted file mode 100644
index 402d6dd93..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_content_text_plain.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry content with explicit type='text'
-Expect:      not bozo and entries[0]['content'][0]['value'] == u'Example Atom'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <content type="text">Example Atom</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_content_text_plain_brackets.xml b/lib/feedparser/tests/wellformed/atom10/entry_content_text_plain_brackets.xml
deleted file mode 100644
index b6f7401cc..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_content_text_plain_brackets.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry content with explicit type='text' contains brackets that are not markup
-Expect:      not bozo and entries[0]['content'][0]['value'] == u'History of the <blink> tag'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <content type="text">History of the &lt;blink&gt; tag</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_content_type.xml b/lib/feedparser/tests/wellformed/atom10/entry_content_type.xml
deleted file mode 100644
index c2d3adb84..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_content_type.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry content content type defaults to 'text/plain'
-Expect:      not bozo and entries[0]['content'][0]['type'] == u'text/plain'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <content>Example Atom</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_content_type_text.xml b/lib/feedparser/tests/wellformed/atom10/entry_content_type_text.xml
deleted file mode 100644
index e6a5e98b9..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_content_type_text.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry content type='text'
-Expect:      not bozo and entries[0]['content'][0]['type'] == 'text/plain'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <content type="text">Example Atom</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_content_value.xml b/lib/feedparser/tests/wellformed/atom10/entry_content_value.xml
deleted file mode 100644
index 9fd290b40..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_content_value.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry content content value
-Expect:      not bozo and entries[0]['content'][0]['value'] == u'Example Atom'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <content>Example Atom</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_contributor_email.xml b/lib/feedparser/tests/wellformed/atom10/entry_contributor_email.xml
deleted file mode 100644
index ab60eeff2..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_contributor_email.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<!--
-Description: entry contributor email
-Expect:      not bozo and entries[0]['contributors'][0]['email'] == u'me@example.com'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <contributor>
-    <name>Example contributor</name>
-    <email>me@example.com</email>
-    <uri>http://example.com/</uri>
-  </contributor>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_contributor_multiple.xml b/lib/feedparser/tests/wellformed/atom10/entry_contributor_multiple.xml
deleted file mode 100644
index f132f41b4..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_contributor_multiple.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<!--
-Description: multiple entry contributors
-Expect:      not bozo and entries[0]['contributors'][0] == {'name': u'Contributor 1', 'email': u'me@example.com', 'href': u'http://example.com/'} and entries[0]['contributors'][1] == {'name': u'Contributor 2', 'email': u'you@example.com', 'href': 'http://two.example.com/'}
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <contributor>
-    <name>Contributor 1</name>
-    <email>me@example.com</email>
-    <uri>http://example.com/</uri>
-  </contributor>
-  <contributor>
-    <name>Contributor 2</name>
-    <email>you@example.com</email>
-    <uri>http://two.example.com/</uri>
-  </contributor>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_contributor_name.xml b/lib/feedparser/tests/wellformed/atom10/entry_contributor_name.xml
deleted file mode 100644
index 3ac96e823..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_contributor_name.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<!--
-Description: entry contributor name
-Expect:      not bozo and entries[0]['contributors'][0]['name'] == u'Example contributor'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <contributor>
-    <name>Example contributor</name>
-    <email>me@example.com</email>
-    <uri>http://example.com/</uri>
-  </contributor>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_contributor_uri.xml b/lib/feedparser/tests/wellformed/atom10/entry_contributor_uri.xml
deleted file mode 100644
index 4a176b6d5..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_contributor_uri.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<!--
-Description: entry contributor uri
-Expect:      not bozo and entries[0]['contributors'][0]['url'] == u'http://example.com/'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <contributor>
-    <name>Example contributor</name>
-    <email>me@example.com</email>
-    <uri>http://example.com/</uri>
-  </contributor>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_contributor_url.xml b/lib/feedparser/tests/wellformed/atom10/entry_contributor_url.xml
deleted file mode 100644
index dcc87f9be..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_contributor_url.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<!--
-Description: entry contributor url
-Expect:      not bozo and entries[0]['contributors'][0]['url'] == u'http://example.com/'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <contributor>
-    <name>Example contributor</name>
-    <email>me@example.com</email>
-    <url>http://example.com/</url>
-  </contributor>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_id.xml b/lib/feedparser/tests/wellformed/atom10/entry_id.xml
deleted file mode 100644
index b06db1b54..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_id.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry id
-Expect:      not bozo and entries[0]['id'] == u'http://example.com/'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <id>http://example.com/</id>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_id_map_guid.xml b/lib/feedparser/tests/wellformed/atom10/entry_id_map_guid.xml
deleted file mode 100644
index aa4b2befe..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_id_map_guid.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry id maps to guid
-Expect:      not bozo and entries[0]['guid'] == u'http://example.com/'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <id>http://example.com/</id>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_id_no_normalization_1.xml b/lib/feedparser/tests/wellformed/atom10/entry_id_no_normalization_1.xml
deleted file mode 100644
index ea4f6e5c1..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_id_no_normalization_1.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry id not normalized (see Atom 1.0 section 4.2.6.1)
-Expect:      not bozo and entries[0]['id'] == u'http://www.example.org/thing'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <id>http://www.example.org/thing</id>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_id_no_normalization_2.xml b/lib/feedparser/tests/wellformed/atom10/entry_id_no_normalization_2.xml
deleted file mode 100644
index 8b4df51c1..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_id_no_normalization_2.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry id not normalized (see Atom 1.0 section 4.2.6.1)
-Expect:      not bozo and entries[0]['id'] == u'http://www.example.org/Thing'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <id>http://www.example.org/Thing</id>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_id_no_normalization_3.xml b/lib/feedparser/tests/wellformed/atom10/entry_id_no_normalization_3.xml
deleted file mode 100644
index e7f613eab..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_id_no_normalization_3.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry id not normalized (see Atom 1.0 section 4.2.6.1)
-Expect:      not bozo and entries[0]['id'] == u'http://www.EXAMPLE.org/thing'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <id>http://www.EXAMPLE.org/thing</id>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_id_no_normalization_4.xml b/lib/feedparser/tests/wellformed/atom10/entry_id_no_normalization_4.xml
deleted file mode 100644
index 323293663..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_id_no_normalization_4.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry id not normalized (see Atom 1.0 section 4.2.6.1)
-Expect:      not bozo and entries[0]['id'] == u'HTTP://www.example.org/thing'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <id>HTTP://www.example.org/thing</id>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_id_no_normalization_5.xml b/lib/feedparser/tests/wellformed/atom10/entry_id_no_normalization_5.xml
deleted file mode 100644
index 0c08db8d4..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_id_no_normalization_5.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry id not normalized (see Atom 1.0 section 4.2.6.1)
-Expect:      not bozo and entries[0]['id'] == u'http://www.example.com/~bob'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <id>http://www.example.com/~bob</id>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_id_no_normalization_6.xml b/lib/feedparser/tests/wellformed/atom10/entry_id_no_normalization_6.xml
deleted file mode 100644
index 45db81fa4..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_id_no_normalization_6.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry id not normalized (see Atom 1.0 section 4.2.6.1)
-Expect:      not bozo and entries[0]['id'] == u'http://www.example.com/%7ebob'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <id>http://www.example.com/%7ebob</id>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_id_no_normalization_7.xml b/lib/feedparser/tests/wellformed/atom10/entry_id_no_normalization_7.xml
deleted file mode 100644
index 25b6f7c77..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_id_no_normalization_7.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry id not normalized (see Atom 1.0 section 4.2.6.1)
-Expect:      not bozo and entries[0]['id'] == u'http://www.example.com/%7Ebob'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <id>http://www.example.com/%7Ebob</id>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_id_with_attributes.xml b/lib/feedparser/tests/wellformed/atom10/entry_id_with_attributes.xml
deleted file mode 100644
index 0829da911..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_id_with_attributes.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry id retrieved when element contains attributes
-Expect: not bozo and entries[0]['id'] == u'right'
--->
-<feed xmlns:bogus="http://dom.test/ns">
-    <entry>
-        <id bogus:attr="wrong">right</id>
-    </entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_link_alternate_map_link.xml b/lib/feedparser/tests/wellformed/atom10/entry_link_alternate_map_link.xml
deleted file mode 100644
index a507ee3e6..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_link_alternate_map_link.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry link href maps to link if rel="alternate" and type="text/html"
-Expect:      not bozo and entries[0]['link'] == u'http://www.example.com/'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <link rel="alternate" type="text/html" href="http://www.example.com/"/>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_link_alternate_map_link_2.xml b/lib/feedparser/tests/wellformed/atom10/entry_link_alternate_map_link_2.xml
deleted file mode 100644
index f46e8b619..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_link_alternate_map_link_2.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry link href maps to link if rel="alternate" and type="application/xhtml+xml"
-Expect:      not bozo and entries[0]['link'] == u'http://www.example.com/'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <link rel="alternate" type="application/xhtml+xml" href="http://www.example.com/"/>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_link_alternate_map_link_3.xml b/lib/feedparser/tests/wellformed/atom10/entry_link_alternate_map_link_3.xml
deleted file mode 100644
index ec49b5604..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_link_alternate_map_link_3.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: entry link href maps to link if rel="alternate", even if type is not present
-Expect:      not bozo and entries[0]['link'] == u'http://www.example.com/alternate'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-    <link rel="alternate" href="http://www.example.com/alternate"></link>
-    <link rel="related" type="text/html" href="http://www.example.com/related"></link>
-    <link rel="via" type="text/html" href="http://www.example.com/via"></link>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_link_href.xml b/lib/feedparser/tests/wellformed/atom10/entry_link_href.xml
deleted file mode 100644
index f69da53bb..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_link_href.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry link href
-Expect:      not bozo and entries[0]['links'][0]['href'] == u'http://www.example.com/'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <link rel="alternate" type="text/html" href="http://www.example.com/"/>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_link_hreflang.xml b/lib/feedparser/tests/wellformed/atom10/entry_link_hreflang.xml
deleted file mode 100644
index 15b23a0e9..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_link_hreflang.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry link hreflang
-Expect:      not bozo and entries[0]['links'][0]['hreflang'] == u'en'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <link rel="alternate" type="text/html" title="Example title" href="http://www.example.com/" hreflang="en"/>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_link_length.xml b/lib/feedparser/tests/wellformed/atom10/entry_link_length.xml
deleted file mode 100644
index c41378ee0..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_link_length.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry link length
-Expect:      not bozo and entries[0]['links'][0]['length'] == u'42301'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <link rel="enclosure" type="video/mpeg4" href="http://www.example.com/movie.mp4" length="42301"/>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_link_multiple.xml b/lib/feedparser/tests/wellformed/atom10/entry_link_multiple.xml
deleted file mode 100644
index c50f93eeb..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_link_multiple.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<!--
-Description: entry multiple links
-Expect:      not bozo and entries[0]['links'][0] == {'rel': u'alternate', 'type': u'application/xhtml+xml', 'href': u'http://www.example.com/'} and entries[0]['links'][1] == {'rel': u'service.post', 'type': u'application/atom+xml', 'href': 'http://www.example.com/post'}
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <link rel="alternate" type="application/xhtml+xml" href="http://www.example.com/"/>
-  <link rel="service.post" type="application/atom+xml" href="http://www.example.com/post"/>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_link_no_rel.xml b/lib/feedparser/tests/wellformed/atom10/entry_link_no_rel.xml
deleted file mode 100644
index d18a8115c..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_link_no_rel.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry link rel defaults to 'alternate'
-Expect:      not bozo and entries[0]['links'][0]['rel'] == u'alternate'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <link type="text/html" href="http://www.example.com/"/>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_link_rel.xml b/lib/feedparser/tests/wellformed/atom10/entry_link_rel.xml
deleted file mode 100644
index a056a8a7c..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_link_rel.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry link rel
-Expect:      not bozo and entries[0]['links'][0]['rel'] == u'alternate'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <link rel="alternate" type="text/html" href="http://www.example.com/"/>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_link_rel_enclosure.xml b/lib/feedparser/tests/wellformed/atom10/entry_link_rel_enclosure.xml
deleted file mode 100644
index 26f4d7f79..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_link_rel_enclosure.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry link rel='enclosure'
-Expect:      not bozo and entries[0]['links'][0]['rel'] == u'enclosure'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <link rel="enclosure" type="text/html" href="http://www.example.com/"/>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_link_rel_enclosure_map_enclosure_length.xml b/lib/feedparser/tests/wellformed/atom10/entry_link_rel_enclosure_map_enclosure_length.xml
deleted file mode 100644
index 8798fa0e9..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_link_rel_enclosure_map_enclosure_length.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry link rel='enclosure'
-Expect:      not bozo and entries[0]['enclosures'][0]['length'] == u'42301'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <link rel="enclosure" type="video/mpeg4" href="http://www.example.com/movie.mp4" length="42301"/>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_link_rel_enclosure_map_enclosure_type.xml b/lib/feedparser/tests/wellformed/atom10/entry_link_rel_enclosure_map_enclosure_type.xml
deleted file mode 100644
index 73e8e16e8..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_link_rel_enclosure_map_enclosure_type.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry link rel='enclosure'
-Expect:      not bozo and entries[0]['enclosures'][0]['type'] == u'video/mpeg4'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <link rel="enclosure" type="video/mpeg4" href="http://www.example.com/movie.mp4"/>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_link_rel_enclosure_map_enclosure_url.xml b/lib/feedparser/tests/wellformed/atom10/entry_link_rel_enclosure_map_enclosure_url.xml
deleted file mode 100644
index 4c085d6ba..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_link_rel_enclosure_map_enclosure_url.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry link rel='enclosure'
-Expect:      not bozo and entries[0]['enclosures'][0]['href'] == u'http://www.example.com/movie.mp4'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <link rel="enclosure" type="video/mpeg4" href="http://www.example.com/movie.mp4"/>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_link_rel_license.xml b/lib/feedparser/tests/wellformed/atom10/entry_link_rel_license.xml
deleted file mode 100644
index 2438a177c..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_link_rel_license.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry link rel='enclosure'
-Expect:      not bozo and entries[0]['links'][0]['rel'] == u'license' and entries[0]['links'][0]['href'] == u'http://www.creativecommons.org/licenses/by-nc/1.0'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <link rel="license" href="http://www.creativecommons.org/licenses/by-nc/1.0"/>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_link_rel_other.xml b/lib/feedparser/tests/wellformed/atom10/entry_link_rel_other.xml
deleted file mode 100644
index b4117738f..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_link_rel_other.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry link rel as URI
-Expect:      not bozo and entries[0]['links'][0]['rel'] == u'http://feedparser.org/rel/test'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <link rel="http://feedparser.org/rel/test" type="text/html" href="http://www.example.com/"/>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_link_rel_related.xml b/lib/feedparser/tests/wellformed/atom10/entry_link_rel_related.xml
deleted file mode 100644
index 566140506..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_link_rel_related.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry link rel='related'
-Expect:      not bozo and entries[0]['links'][0]['rel'] == u'related'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <link rel="related" type="text/html" href="http://www.example.com/"/>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_link_rel_self.xml b/lib/feedparser/tests/wellformed/atom10/entry_link_rel_self.xml
deleted file mode 100644
index cf0570cb0..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_link_rel_self.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry link rel='self'
-Expect:      not bozo and entries[0]['links'][0]['rel'] == u'self'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <link rel="self" type="text/html" href="http://www.example.com/"/>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_link_rel_via.xml b/lib/feedparser/tests/wellformed/atom10/entry_link_rel_via.xml
deleted file mode 100644
index e60edd954..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_link_rel_via.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry link rel='via'
-Expect:      not bozo and entries[0]['links'][0]['rel'] == u'via'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <link rel="via" type="text/html" href="http://www.example.com/"/>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_link_title.xml b/lib/feedparser/tests/wellformed/atom10/entry_link_title.xml
deleted file mode 100644
index 590c9b3b9..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_link_title.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry link title
-Expect:      not bozo and entries[0]['links'][0]['title'] == u'Example title'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <link rel="alternate" type="text/html" title="Example title" href="http://www.example.com/"/>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_link_type.xml b/lib/feedparser/tests/wellformed/atom10/entry_link_type.xml
deleted file mode 100644
index 04ec5f7d2..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_link_type.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry link type
-Expect:      not bozo and entries[0]['links'][0]['type'] == u'text/html'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <link rel="alternate" type="text/html" href="http://www.example.com/"/>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_rights.xml b/lib/feedparser/tests/wellformed/atom10/entry_rights.xml
deleted file mode 100644
index c86d9b940..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_rights.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry rights
-Expect:      not bozo and entries[0]['rights'] == u'Example Atom'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <rights>Example Atom</rights>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_rights_content_value.xml b/lib/feedparser/tests/wellformed/atom10/entry_rights_content_value.xml
deleted file mode 100644
index 4f8276538..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_rights_content_value.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry rights content value
-Expect:      not bozo and entries[0]['rights_detail']['value'] == u'Example Atom'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <rights>Example Atom</rights>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_rights_escaped_markup.xml b/lib/feedparser/tests/wellformed/atom10/entry_rights_escaped_markup.xml
deleted file mode 100644
index 94dabcb7d..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_rights_escaped_markup.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry rights escaped HTML
-Expect:      not bozo and entries[0]['rights'] == u'Example <b>Atom</b>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <rights type="html">Example &lt;b&gt;Atom&lt;/b&gt;</rights>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_rights_inline_markup.xml b/lib/feedparser/tests/wellformed/atom10/entry_rights_inline_markup.xml
deleted file mode 100644
index 95d20ace9..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_rights_inline_markup.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry rights inline XHTML
-Expect:      not bozo and entries[0]['rights'] == u'Example <b>Atom</b>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <rights type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">Example <b>Atom</b></div></rights>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_rights_inline_markup_2.xml b/lib/feedparser/tests/wellformed/atom10/entry_rights_inline_markup_2.xml
deleted file mode 100644
index 276167311..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_rights_inline_markup_2.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry rights inline XHTML with escaped markup
-Expect:      not bozo and entries[0]['rights'] == u'History of the &lt;blink&gt; tag'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <rights type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">History of the &lt;blink&gt; tag</div></rights>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_rights_text_plain.xml b/lib/feedparser/tests/wellformed/atom10/entry_rights_text_plain.xml
deleted file mode 100644
index bc887b305..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_rights_text_plain.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry rights with explicit type='text'
-Expect:      not bozo and entries[0]['rights'] == u'Example Atom'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <rights type="text">Example Atom</rights>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_rights_text_plain_brackets.xml b/lib/feedparser/tests/wellformed/atom10/entry_rights_text_plain_brackets.xml
deleted file mode 100644
index 3516f9617..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_rights_text_plain_brackets.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry rights with explicit type='text' contains brackets that are not markup
-Expect:      not bozo and entries[0]['rights'] == u'History of the <blink> tag'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <rights type="text">History of the &lt;blink&gt; tag</rights>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_rights_type_default.xml b/lib/feedparser/tests/wellformed/atom10/entry_rights_type_default.xml
deleted file mode 100644
index 31b400197..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_rights_type_default.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry rights content type defaults to 'text/plain'
-Expect:      not bozo and entries[0]['rights_detail']['type'] == u'text/plain'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <rights>Example Atom</rights>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_rights_type_text.xml b/lib/feedparser/tests/wellformed/atom10/entry_rights_type_text.xml
deleted file mode 100644
index c1b82cef7..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_rights_type_text.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry rights type='text'
-Expect:      not bozo and entries[0]['rights_detail']['type'] == 'text/plain'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <rights type="text">Example Atom</rights>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_author_email.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_author_email.xml
deleted file mode 100644
index fffb31979..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_source_author_email.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-<!--
-Description: entry source author email
-Expect:      not bozo and entries[0]['source']['author_detail']['email'] == u'me@example.com'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<source>
-  <author>
-    <name>Example author</name>
-    <email>me@example.com</email>
-    <uri>http://example.com/</uri>
-  </author>
-</source>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_author_map_author.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_author_map_author.xml
deleted file mode 100644
index 4db9605e9..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_source_author_map_author.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-<!--
-Description: entry source author name + email maps to author
-Expect:      not bozo and entries[0]['source']['author'] == u'Example author (me@example.com)'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<source>
-  <author>
-    <name>Example author</name>
-    <email>me@example.com</email>
-    <uri>http://example.com/</uri>
-  </author>
-</source>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_author_map_author_2.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_author_map_author_2.xml
deleted file mode 100644
index 6d2c00df9..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_source_author_map_author_2.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-Description: entry source author name maps to author if no email present
-Expect:      not bozo and entries[0]['source']['author'] == u'Example author'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<source>
-  <author>
-    <name>Example author</name>
-    <uri>http://example.com/</uri>
-  </author>
-</source>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_author_name.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_author_name.xml
deleted file mode 100644
index d4d5c74f9..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_source_author_name.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-<!--
-Description: entry source author name
-Expect:      not bozo and entries[0]['source']['author_detail']['name'] == u'Example author'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<source>
-  <author>
-    <name>Example author</name>
-    <email>me@example.com</email>
-    <uri>http://example.com/</uri>
-  </author>
-</source>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_author_uri.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_author_uri.xml
deleted file mode 100644
index df971db85..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_source_author_uri.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-<!--
-Description: entry source author uri
-Expect:      not bozo and entries[0]['source']['author_detail']['url'] == u'http://example.com/'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<source>
-  <author>
-    <name>Example author</name>
-    <email>me@example.com</email>
-    <uri>http://example.com/</uri>
-  </author>
-</source>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_authors_email.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_authors_email.xml
deleted file mode 100644
index b8125eb10..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_source_authors_email.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-Description: entry contains multiple author emails
-Expect: not bozo and (entries[0]['source']['authors'][0]['email'] == u'one@one.com') and (entries[0]['source']['authors'][1]['email'] == u'two@two.com')
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <entry>
-    <source>
-      <author>
-        <email>one@one.com</email>
-      </author>
-      <author>
-        <email>two@two.com</email>
-      </author>
-    </source>
-  </entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_authors_name.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_authors_name.xml
deleted file mode 100644
index 1c846064b..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_source_authors_name.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-Description: entry contains multiple author names
-Expect: not bozo and (entries[0]['source']['authors'][0]['name'] == u'one') and (entries[0]['source']['authors'][1]['name'] == u'two')
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <entry>
-    <source>
-      <author>
-        <name>one</name>
-      </author>
-      <author>
-        <name>two</name>
-      </author>
-    </source>
-  </entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_authors_uri.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_authors_uri.xml
deleted file mode 100644
index 9901ab75d..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_source_authors_uri.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-Description: entry contains multiple author uris
-Expect: not bozo and (entries[0]['source']['authors'][0]['url'] == u'http://one.com/') and (entries[0]['source']['authors'][1]['url'] == u'http://two.com/')
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <entry>
-    <source>
-      <author>
-        <uri>http://one.com/</uri>
-      </author>
-      <author>
-        <uri>http://two.com/</uri>
-      </author>
-    </source>
-  </entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_authors_url.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_authors_url.xml
deleted file mode 100644
index c48af3437..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_source_authors_url.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-Description: entry contains multiple author urls
-Expect: not bozo and (entries[0]['source']['authors'][0]['url'] == u'http://one.com/') and (entries[0]['source']['authors'][1]['url'] == u'http://two.com/')
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <entry>
-    <source>
-      <author>
-        <url>http://one.com/</url>
-      </author>
-      <author>
-        <url>http://two.com/</url>
-      </author>
-    </source>
-  </entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_category_label.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_category_label.xml
deleted file mode 100644
index 037b357af..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_source_category_label.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: entry source category label
-Expect:      not bozo and entries[0]['source']['tags'][0]['label'] == u'Atom 1.0 tests'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<source>
-  <category term="atom10" scheme="http://feedparser.org/tests/" label="Atom 1.0 tests"/>
-</source>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_category_scheme.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_category_scheme.xml
deleted file mode 100644
index a93edaaba..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_source_category_scheme.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: entry source category scheme
-Expect:      not bozo and entries[0]['source']['tags'][0]['scheme'] == u'http://feedparser.org/tests/'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<source>
-  <category term="atom10" scheme="http://feedparser.org/tests/" label="Atom 1.0 tests"/>
-</source>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_category_term.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_category_term.xml
deleted file mode 100644
index d75748d93..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_source_category_term.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: entry source category term
-Expect:      not bozo and entries[0]['source']['tags'][0]['term'] == u'atom10'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<source>
-  <category term="atom10" scheme="http://feedparser.org/tests/" label="Atom 1.0 tests"/>
-</source>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_category_term_non_ascii.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_category_term_non_ascii.xml
deleted file mode 100644
index 5b1bd1446..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_source_category_term_non_ascii.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: entry source category term
-Expect:      not bozo and entries[0]['source']['tags'][0]['term'] == u'Freir\xe4ume'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<source>
-  <category term="Freiräume" scheme="http://feedparser.org/tests/" label="Atom 1.0 tests"/>
-</source>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_contributor_email.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_contributor_email.xml
deleted file mode 100644
index 8662a9ac5..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_source_contributor_email.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-<!--
-Description: entry source contributor email
-Expect:      not bozo and entries[0]['source']['contributors'][0]['email'] == u'me@example.com'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<source>
-  <contributor>
-    <name>Example contributor</name>
-    <email>me@example.com</email>
-    <uri>http://example.com/</uri>
-  </contributor>
-</source>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_contributor_multiple.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_contributor_multiple.xml
deleted file mode 100644
index 4dd68e37d..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_source_contributor_multiple.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<!--
-Description: multiple entry source contributors
-Expect:      not bozo and entries[0]['source']['contributors'][0] == {'name': u'Contributor 1', 'email': u'me@example.com', 'href': u'http://example.com/'} and entries[0]['source']['contributors'][1] == {'name': u'Contributor 2', 'email': u'you@example.com', 'href': 'http://two.example.com/'}
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<source>
-  <contributor>
-    <name>Contributor 1</name>
-    <email>me@example.com</email>
-    <uri>http://example.com/</uri>
-  </contributor>
-  <contributor>
-    <name>Contributor 2</name>
-    <email>you@example.com</email>
-    <uri>http://two.example.com/</uri>
-  </contributor>
-</source>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_contributor_name.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_contributor_name.xml
deleted file mode 100644
index 6455366e8..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_source_contributor_name.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-<!--
-Description: entry source contributor name
-Expect:      not bozo and entries[0]['source']['contributors'][0]['name'] == u'Example contributor'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<source>
-  <contributor>
-    <name>Example contributor</name>
-    <email>me@example.com</email>
-    <uri>http://example.com/</uri>
-  </contributor>
-</source>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_contributor_uri.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_contributor_uri.xml
deleted file mode 100644
index cedf60f8e..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_source_contributor_uri.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-<!--
-Description: entry source contributor uri
-Expect:      not bozo and entries[0]['source']['contributors'][0]['url'] == u'http://example.com/'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<source>
-  <contributor>
-    <name>Example contributor</name>
-    <email>me@example.com</email>
-    <uri>http://example.com/</uri>
-  </contributor>
-</source>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_generator.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_generator.xml
deleted file mode 100644
index 6c4605bf1..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_source_generator.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: entry source generator
-Expect:      not bozo and entries[0]['source']['generator'] == u'Example generator'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<source>
-  <generator uri="http://example.com/" version="2.65">Example generator</generator>
-</source>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_generator_name.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_generator_name.xml
deleted file mode 100644
index be328aafb..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_source_generator_name.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: entry source generator name
-Expect:      not bozo and entries[0]['source']['generator_detail']['name'] == u'Example generator'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<source>
-  <generator uri="http://example.com/" version="2.65">Example generator</generator>
-</source>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_generator_uri.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_generator_uri.xml
deleted file mode 100644
index ec5696a6d..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_source_generator_uri.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: entry source generator uri
-Expect:      not bozo and entries[0]['source']['generator_detail']['href'] == u'http://example.com/'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<source>
-  <generator uri="http://example.com/" version="2.65">Example generator</generator>
-</source>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_generator_version.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_generator_version.xml
deleted file mode 100644
index cfbe01d0c..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_source_generator_version.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: entry source generator version
-Expect:      not bozo and entries[0]['source']['generator_detail']['version'] == u'2.65'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<source>
-  <generator uri="http://example.com/" version="2.65">Example generator</generator>
-</source>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_icon.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_icon.xml
deleted file mode 100644
index 1b40b28f3..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_source_icon.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: entry source icon
-Expect:      not bozo and entries[0]['source']['icon'] == u'http://example.com/favicon.ico'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<source>
-  <icon>http://example.com/favicon.ico</icon>
-</source>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_id.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_id.xml
deleted file mode 100644
index 56fa81917..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_source_id.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: entry source id
-Expect:      not bozo and entries[0]['source']['id'] == u'http://example.com/'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<source>
-  <id>http://example.com/</id>
-</source>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_link_alternate_map_link.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_link_alternate_map_link.xml
deleted file mode 100644
index 9982b6b5e..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_source_link_alternate_map_link.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: entry source link href maps to link if rel="alternate" and type="text/html"
-Expect:      not bozo and entries[0]['source']['link'] == u'http://www.example.com/'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<source>
-  <link rel="alternate" type="text/html" href="http://www.example.com/"/>
-</source>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_link_alternate_map_link_2.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_link_alternate_map_link_2.xml
deleted file mode 100644
index 140e749cd..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_source_link_alternate_map_link_2.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: entry source link href maps to link if rel="alternate" and type="application/xhtml+xml"
-Expect:      not bozo and entries[0]['source']['link'] == u'http://www.example.com/'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<source>
-  <link rel="alternate" type="application/xhtml+xml" href="http://www.example.com/"/>
-</source>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_link_href.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_link_href.xml
deleted file mode 100644
index 5e2bccf41..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_source_link_href.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: entry source link href
-Expect:      not bozo and entries[0]['source']['links'][0]['href'] == u'http://www.example.com/'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<source>
-  <link rel="alternate" type="text/html" href="http://www.example.com/"/>
-</source>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_link_hreflang.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_link_hreflang.xml
deleted file mode 100644
index 973a28df1..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_source_link_hreflang.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: entry source link hreflang
-Expect:      not bozo and entries[0]['source']['links'][0]['hreflang'] == u'en'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<source>
-  <link rel="alternate" type="text/html" title="Example title" href="http://www.example.com/" hreflang="en"/>
-</source>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_link_length.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_link_length.xml
deleted file mode 100644
index 5fd2f8596..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_source_link_length.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: entry source link length
-Expect:      not bozo and entries[0]['source']['links'][0]['length'] == u'42301'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<source>
-  <link rel="enclosure" type="video/mpeg4" href="http://www.example.com/movie.mp4" length="42301"/>
-</source>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_link_multiple.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_link_multiple.xml
deleted file mode 100644
index a96562426..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_source_link_multiple.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<!--
-Description: entry source multiple links
-Expect:      not bozo and entries[0]['source']['links'][0] == {'rel': u'alternate', 'type': u'application/xhtml+xml', 'href': u'http://www.example.com/'} and entries[0]['source']['links'][1] == {'rel': u'service.post', 'type': u'application/atom+xml', 'href': 'http://www.example.com/post'}
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<source>
-  <link rel="alternate" type="application/xhtml+xml" href="http://www.example.com/"/>
-  <link rel="service.post" type="application/atom+xml" href="http://www.example.com/post"/>
-</source>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_link_no_rel.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_link_no_rel.xml
deleted file mode 100644
index ee9a6ea77..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_source_link_no_rel.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: entry source link rel defaults to 'alternate'
-Expect:      not bozo and entries[0]['source']['links'][0]['rel'] == u'alternate'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<source>
-  <link type="text/html" href="http://www.example.com/"/>
-</source>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_link_rel.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_link_rel.xml
deleted file mode 100644
index 5b1a8cdd2..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_source_link_rel.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: entry source link rel
-Expect:      not bozo and entries[0]['source']['links'][0]['rel'] == u'alternate'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<source>
-  <link rel="alternate" type="text/html" href="http://www.example.com/"/>
-</source>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_link_rel_other.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_link_rel_other.xml
deleted file mode 100644
index e24399f30..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_source_link_rel_other.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: entry source link rel as URI
-Expect:      not bozo and entries[0]['source']['links'][0]['rel'] == u'http://feedparser.org/rel/test'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<source>
-  <link rel="http://feedparser.org/rel/test" type="text/html" href="http://www.example.com/"/>
-</source>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_link_rel_related.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_link_rel_related.xml
deleted file mode 100644
index 5eb719768..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_source_link_rel_related.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: entries sourcelink rel='related'
-Expect:      not bozo and entries[0]['source']['links'][0]['rel'] == u'related'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<source>
-  <link rel="related" type="text/html" href="http://www.example.com/"/>
-</source>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_link_rel_self.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_link_rel_self.xml
deleted file mode 100644
index ee04ef85a..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_source_link_rel_self.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: entry source link rel='self'
-Expect:      not bozo and entries[0]['source']['links'][0]['rel'] == u'self'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<source>
-  <link rel="self" type="text/html" href="http://www.example.com/"/>
-</source>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_link_rel_via.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_link_rel_via.xml
deleted file mode 100644
index 15b9bbfb7..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_source_link_rel_via.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: entry source link rel='via'
-Expect:      not bozo and entries[0]['source']['links'][0]['rel'] == u'via'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<source>
-  <link rel="via" type="text/html" href="http://www.example.com/"/>
-</source>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_link_title.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_link_title.xml
deleted file mode 100644
index 1c8ff561d..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_source_link_title.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: entry source link title
-Expect:      not bozo and entries[0]['source']['links'][0]['title'] == u'Example title'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<source>
-  <link rel="alternate" type="text/html" title="Example title" href="http://www.example.com/"/>
-</source>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_link_type.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_link_type.xml
deleted file mode 100644
index d77060bb3..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_source_link_type.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: entry source link type
-Expect:      not bozo and entries[0]['source']['links'][0]['type'] == u'text/html'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<source>
-  <link rel="alternate" type="text/html" href="http://www.example.com/"/>
-</source>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_logo.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_logo.xml
deleted file mode 100644
index 2b43b39c3..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_source_logo.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: entry source logo
-Expect:      not bozo and entries[0]['source']['logo'] == u'http://example.com/logo.jpg'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<source>
-  <logo>http://example.com/logo.jpg</logo>
-</source>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_rights.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_rights.xml
deleted file mode 100644
index d8d6ede84..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_source_rights.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: entry source rights
-Expect:      not bozo and entries[0]['source']['rights'] == u'Example Atom'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<source>
-  <rights>Example Atom</rights>
-</source>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_rights_base64.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_rights_base64.xml
deleted file mode 100644
index a101d3f1a..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_source_rights_base64.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<!--
-Description: entry source rights base64-encoded
-Expect:      not bozo and entries[0]['source']['rights'] == u'Example <b>Atom</b>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<source>
-  <rights type="application/octet-stream">
-    RXhhbXBsZSA8Yj5BdG9tPC9iPg==
-  </rights>
-</source>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_rights_base64_2.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_rights_base64_2.xml
deleted file mode 100644
index f0a5c1de9..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_source_rights_base64_2.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<!--
-Description: entry source rights base64-encoded
-Expect:      not bozo and entries[0]['source']['rights'] == u'<p>History of the &lt;blink&gt; tag</p>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<source>
-<rights type="application/octet-stream">
-PHA+SGlzdG9yeSBvZiB0aGUgJmx0O2JsaW5rJmd0OyB0YWc8L3A+
-</rights>
-</source>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_rights_content_type.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_rights_content_type.xml
deleted file mode 100644
index acf70585f..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_source_rights_content_type.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: entry source rights content type defaults to 'text/plain'
-Expect:      not bozo and entries[0]['source']['rights_detail']['type'] == u'text/plain'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<source>
-  <rights>Example Atom</rights>
-</source>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_rights_content_type_text.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_rights_content_type_text.xml
deleted file mode 100644
index 5bd7d1316..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_source_rights_content_type_text.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: entry source rights type='text'
-Expect:      not bozo and entries[0]['source']['rights_detail']['type'] == 'text/plain'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<source>
-  <rights type="text">Example Atom</rights>
-</source>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_rights_content_value.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_rights_content_value.xml
deleted file mode 100644
index 7a47e880d..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_source_rights_content_value.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: entry source rights content value
-Expect:      not bozo and entries[0]['source']['rights_detail']['value'] == u'Example Atom'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<source>
-  <rights>Example Atom</rights>
-</source>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_rights_escaped_markup.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_rights_escaped_markup.xml
deleted file mode 100644
index 4501ae592..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_source_rights_escaped_markup.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: entry source rights escaped HTML
-Expect:      not bozo and entries[0]['source']['rights'] == u'Example <b>Atom</b>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<source>
-  <rights type="html">Example &lt;b&gt;Atom&lt;/b&gt;</rights>
-</source>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_rights_inline_markup.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_rights_inline_markup.xml
deleted file mode 100644
index 1c264fb55..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_source_rights_inline_markup.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: entry source rights inline XHTML
-Expect:      not bozo and entries[0]['source']['rights'] == u'Example <b>Atom</b>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<source>
-  <rights type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">Example <b>Atom</b></div></rights>
-</source>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_rights_inline_markup_2.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_rights_inline_markup_2.xml
deleted file mode 100644
index 9467b79b8..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_source_rights_inline_markup_2.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: entry source rights inline XHTML with escaped markup
-Expect:      not bozo and entries[0]['source']['rights'] == u'History of the &lt;blink&gt; tag'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<source>
-  <rights type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">History of the &lt;blink&gt; tag</div></rights>
-</source>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_rights_text_plain.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_rights_text_plain.xml
deleted file mode 100644
index f5bc9d36b..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_source_rights_text_plain.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: entry source rights with explicit type='text'
-Expect:      not bozo and entries[0]['source']['rights'] == u'Example Atom'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<source>
-  <rights type="text">Example Atom</rights>
-</source>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_subittle_content_type_text.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_subittle_content_type_text.xml
deleted file mode 100644
index c4dda8320..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_source_subittle_content_type_text.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: entry source subtitle type='text'
-Expect:      not bozo and entries[0]['source']['subtitle_detail']['type'] == 'text/plain'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<source>
-  <subtitle type="text">Example Atom</subtitle>
-</source>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_subtitle.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_subtitle.xml
deleted file mode 100644
index 828129b03..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_source_subtitle.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: entry source subtitle
-Expect:      not bozo and entries[0]['source']['subtitle'] == u'Example Atom'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<source>
-  <subtitle>Example Atom</subtitle>
-</source>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_subtitle_base64.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_subtitle_base64.xml
deleted file mode 100644
index 5821b8cd6..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_source_subtitle_base64.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<!--
-Description: entry source subtitle base64-encoded
-Expect:      not bozo and entries[0]['source']['subtitle'] == u'Example <b>Atom</b>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<source>
-  <subtitle type="application/octet-stream">
-    RXhhbXBsZSA8Yj5BdG9tPC9iPg==
-  </subtitle>
-</source>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_subtitle_base64_2.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_subtitle_base64_2.xml
deleted file mode 100644
index 10fea62ba..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_source_subtitle_base64_2.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<!--
-Description: entry source subtitle base64-encoded
-Expect:      not bozo and entries[0]['source']['subtitle'] == u'<p>History of the &lt;blink&gt; tag</p>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<source>
-<subtitle type="application/octet-stream">
-PHA+SGlzdG9yeSBvZiB0aGUgJmx0O2JsaW5rJmd0OyB0YWc8L3A+
-</subtitle>
-</source>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_subtitle_content_type.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_subtitle_content_type.xml
deleted file mode 100644
index b92408ede..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_source_subtitle_content_type.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: entry source subtitle content type defaults to 'text/plain'
-Expect:      not bozo and entries[0]['source']['subtitle_detail']['type'] == u'text/plain'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<source>
-  <subtitle>Example Atom</subtitle>
-</source>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_subtitle_content_value.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_subtitle_content_value.xml
deleted file mode 100644
index 5a8d120eb..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_source_subtitle_content_value.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: entry source subtitle content value
-Expect:      not bozo and entries[0]['source']['subtitle_detail']['value'] == u'Example Atom'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<source>
-  <subtitle>Example Atom</subtitle>
-</source>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_subtitle_escaped_markup.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_subtitle_escaped_markup.xml
deleted file mode 100644
index 4b7cf90c2..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_source_subtitle_escaped_markup.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: entry source subtitle escaped HTML
-Expect:      not bozo and entries[0]['source']['subtitle'] == u'Example <b>Atom</b>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<source>
-  <subtitle type="html">Example &lt;b&gt;Atom&lt;/b&gt;</subtitle>
-</source>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_subtitle_inline_markup.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_subtitle_inline_markup.xml
deleted file mode 100644
index a82035be0..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_source_subtitle_inline_markup.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: entry source subtitle inline XHTML
-Expect:      not bozo and entries[0]['source']['subtitle'] == u'Example <b>Atom</b>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<source>
-  <subtitle type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">Example <b>Atom</b></div></subtitle>
-</source>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_subtitle_inline_markup_2.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_subtitle_inline_markup_2.xml
deleted file mode 100644
index 10df20c06..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_source_subtitle_inline_markup_2.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: entry source subtitle inline XHTML with escaped markup
-Expect:      not bozo and entries[0]['source']['subtitle'] == u'History of the &lt;blink&gt; tag'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<source>
-  <subtitle type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">History of the &lt;blink&gt; tag</div></subtitle>
-</source>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_subtitle_text_plain.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_subtitle_text_plain.xml
deleted file mode 100644
index e59944801..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_source_subtitle_text_plain.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: entry source subtitle with explicit type='text'
-Expect:      not bozo and entries[0]['source']['subtitle'] == u'Example Atom'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<source>
-  <subtitle type="text">Example Atom</subtitle>
-</source>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_title.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_title.xml
deleted file mode 100644
index f76409796..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_source_title.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: entry source title
-Expect:      not bozo and entries[0]['source']['title'] == u'Example Atom'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<source>
-  <title>Example Atom</title>
-</source>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_title_base64.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_title_base64.xml
deleted file mode 100644
index 32727421c..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_source_title_base64.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<!--
-Description: entry source title base64-encoded
-Expect:      not bozo and entries[0]['source']['title'] == u'Example <b>Atom</b>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<source>
-  <title type="application/octet-stream">
-    RXhhbXBsZSA8Yj5BdG9tPC9iPg==
-  </title>
-</source>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_title_base64_2.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_title_base64_2.xml
deleted file mode 100644
index 1687b7cb8..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_source_title_base64_2.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<!--
-Description: entry source title base64-encoded
-Expect:      not bozo and entries[0]['source']['title'] == u'<p>History of the &lt;blink&gt; tag</p>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<source>
-<title type="application/octet-stream">
-PHA+SGlzdG9yeSBvZiB0aGUgJmx0O2JsaW5rJmd0OyB0YWc8L3A+
-</title>
-</source>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_title_content_type.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_title_content_type.xml
deleted file mode 100644
index de8c0d330..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_source_title_content_type.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: entry source title content type defaults to 'text/plain'
-Expect:      not bozo and entries[0]['source']['title_detail']['type'] == u'text/plain'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<source>
-  <title>Example Atom</title>
-</source>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_title_content_type_text.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_title_content_type_text.xml
deleted file mode 100644
index d14b9aff3..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_source_title_content_type_text.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: entry source title type='text'
-Expect:      not bozo and entries[0]['source']['title_detail']['type'] == 'text/plain'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<source>
-  <title type="text">Example Atom</title>
-</source>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_title_content_value.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_title_content_value.xml
deleted file mode 100644
index 149e9a5c4..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_source_title_content_value.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: entry source title content value
-Expect:      not bozo and entries[0]['source']['title_detail']['value'] == u'Example Atom'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<source>
-  <title>Example Atom</title>
-</source>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_title_escaped_markup.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_title_escaped_markup.xml
deleted file mode 100644
index 1d6068686..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_source_title_escaped_markup.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: entry source title escaped HTML
-Expect:      not bozo and entries[0]['source']['title'] == u'Example <b>Atom</b>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<source>
-  <title type="html">Example &lt;b&gt;Atom&lt;/b&gt;</title>
-</source>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_title_inline_markup.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_title_inline_markup.xml
deleted file mode 100644
index e2060b56e..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_source_title_inline_markup.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: entry source title inline XHTML
-Expect:      not bozo and entries[0]['source']['title'] == u'Example <b>Atom</b>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<source>
-  <title type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">Example <b>Atom</b></div></title>
-</source>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_title_inline_markup_2.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_title_inline_markup_2.xml
deleted file mode 100644
index bc1867188..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_source_title_inline_markup_2.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: entry source title inline XHTML with escaped markup
-Expect:      not bozo and entries[0]['source']['title'] == u'History of the &lt;blink&gt; tag'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<source>
-  <title type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">History of the &lt;blink&gt; tag</div></title>
-</source>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_title_text_plain.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_title_text_plain.xml
deleted file mode 100644
index 34f190b91..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_source_title_text_plain.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: entry source title with explicit type='text'
-Expect:      not bozo and entries[0]['source']['title'] == u'Example Atom'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<source>
-  <title type="text">Example Atom</title>
-</source>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_summary.xml b/lib/feedparser/tests/wellformed/atom10/entry_summary.xml
deleted file mode 100644
index 65ed3d6d8..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_summary.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry summary
-Expect:      not bozo and entries[0]['summary'] == u'Example Atom'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <summary>Example Atom</summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_summary_base64.xml b/lib/feedparser/tests/wellformed/atom10/entry_summary_base64.xml
deleted file mode 100644
index 8c34a40d1..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_summary_base64.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: entry summary base64-encoded
-Expect:      not bozo and entries[0]['summary'] == u'Example <b>Atom</b>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <summary type="application/octet-stream">
-    RXhhbXBsZSA8Yj5BdG9tPC9iPg==
-  </summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_summary_base64_2.xml b/lib/feedparser/tests/wellformed/atom10/entry_summary_base64_2.xml
deleted file mode 100644
index 7cd162589..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_summary_base64_2.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: entry summary base64-encoded
-Expect:      not bozo and entries[0]['summary'] == u'<p>History of the &lt;blink&gt; tag</p>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<summary type="application/octet-stream">
-PHA+SGlzdG9yeSBvZiB0aGUgJmx0O2JsaW5rJmd0OyB0YWc8L3A+
-</summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_summary_content_value.xml b/lib/feedparser/tests/wellformed/atom10/entry_summary_content_value.xml
deleted file mode 100644
index ecf48929e..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_summary_content_value.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry summary content value
-Expect:      not bozo and entries[0]['summary_detail']['value'] == u'Example Atom'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <summary>Example Atom</summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_summary_escaped_markup.xml b/lib/feedparser/tests/wellformed/atom10/entry_summary_escaped_markup.xml
deleted file mode 100644
index c6236c1da..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_summary_escaped_markup.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry summary escaped HTML
-Expect:      not bozo and entries[0]['summary'] == u'Example <b>Atom</b>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <summary type="html">Example &lt;b&gt;Atom&lt;/b&gt;</summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_summary_inline_markup.xml b/lib/feedparser/tests/wellformed/atom10/entry_summary_inline_markup.xml
deleted file mode 100644
index b174bf8ff..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_summary_inline_markup.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry summary inline XHTML
-Expect:      not bozo and entries[0]['summary'] == u'Example <b>Atom</b>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">Example <b>Atom</b></div></summary>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_summary_inline_markup_2.xml b/lib/feedparser/tests/wellformed/atom10/entry_summary_inline_markup_2.xml
deleted file mode 100644
index 45ecf4528..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_summary_inline_markup_2.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry summary inline XHTML with escaped markup
-Expect:      not bozo and entries[0]['summary'] == u'History of the &lt;blink&gt; tag'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">History of the &lt;blink&gt; tag</div></summary>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_summary_text_plain.xml b/lib/feedparser/tests/wellformed/atom10/entry_summary_text_plain.xml
deleted file mode 100644
index 2a1731f99..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_summary_text_plain.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry summary with explicit type='text'
-Expect:      not bozo and entries[0]['summary'] == u'Example Atom'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <summary type="text">Example Atom</summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_summary_type_default.xml b/lib/feedparser/tests/wellformed/atom10/entry_summary_type_default.xml
deleted file mode 100644
index ac7d18ef5..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_summary_type_default.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry summary content type defaults to 'text/plain'
-Expect:      not bozo and entries[0]['summary_detail']['type'] == u'text/plain'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <summary>Example Atom</summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_summary_type_text.xml b/lib/feedparser/tests/wellformed/atom10/entry_summary_type_text.xml
deleted file mode 100644
index 70a0e23c0..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_summary_type_text.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry summary type='text'
-Expect:      not bozo and entries[0]['summary_detail']['type'] == 'text/plain'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <summary type="text">Example Atom</summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_title.xml b/lib/feedparser/tests/wellformed/atom10/entry_title.xml
deleted file mode 100644
index b3ed03f84..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_title.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry title
-Expect:      not bozo and entries[0]['title'] == u'Example Atom'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <title>Example Atom</title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_title_base64.xml b/lib/feedparser/tests/wellformed/atom10/entry_title_base64.xml
deleted file mode 100644
index 856b9b2c7..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_title_base64.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: entry title base64-encoded
-Expect:      not bozo and entries[0]['title'] == u'Example <b>Atom</b>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <title type="application/octet-stream">
-    RXhhbXBsZSA8Yj5BdG9tPC9iPg==
-  </title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_title_base64_2.xml b/lib/feedparser/tests/wellformed/atom10/entry_title_base64_2.xml
deleted file mode 100644
index 30e2bd8e0..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_title_base64_2.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: entry title base64-encoded
-Expect:      not bozo and entries[0]['title'] == u'<p>History of the &lt;blink&gt; tag</p>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<title type="application/octet-stream">
-PHA+SGlzdG9yeSBvZiB0aGUgJmx0O2JsaW5rJmd0OyB0YWc8L3A+
-</title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_title_content_value.xml b/lib/feedparser/tests/wellformed/atom10/entry_title_content_value.xml
deleted file mode 100644
index b33242057..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_title_content_value.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry title content value
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'Example Atom'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <title>Example Atom</title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_title_escaped_markup.xml b/lib/feedparser/tests/wellformed/atom10/entry_title_escaped_markup.xml
deleted file mode 100644
index 71e6e6d5b..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_title_escaped_markup.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry title escaped HTML
-Expect:      not bozo and entries[0]['title'] == u'Example <b>Atom</b>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <title type="html">Example &lt;b&gt;Atom&lt;/b&gt;</title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_title_inline_markup.xml b/lib/feedparser/tests/wellformed/atom10/entry_title_inline_markup.xml
deleted file mode 100644
index 650468b48..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_title_inline_markup.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry title inline XHTML
-Expect:      not bozo and entries[0]['title'] == u'Example <b>Atom</b>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <title type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">Example <b>Atom</b></div></title>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_title_inline_markup_2.xml b/lib/feedparser/tests/wellformed/atom10/entry_title_inline_markup_2.xml
deleted file mode 100644
index 6998214db..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_title_inline_markup_2.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry title inline XHTML with escaped markup
-Expect:      not bozo and entries[0]['title'] == u'History of the &lt;blink&gt; tag'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <title type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">History of the &lt;blink&gt; tag</div></title>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_title_text_plain.xml b/lib/feedparser/tests/wellformed/atom10/entry_title_text_plain.xml
deleted file mode 100644
index 7692469e2..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_title_text_plain.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry title with explicit type='text'
-Expect:      not bozo and entries[0]['title'] == u'Example Atom'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <title type="text">Example Atom</title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_title_text_plain_brackets.xml b/lib/feedparser/tests/wellformed/atom10/entry_title_text_plain_brackets.xml
deleted file mode 100644
index 5a6e72e07..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_title_text_plain_brackets.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry title with explicit type='text' contains brackets that are not markup
-Expect:      not bozo and entries[0]['title'] == u'History of the <blink> tag'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <title type="text">History of the &lt;blink&gt; tag</title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_title_type_default.xml b/lib/feedparser/tests/wellformed/atom10/entry_title_type_default.xml
deleted file mode 100644
index 07fd597ff..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_title_type_default.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry title content type defaults to 'text/plain'
-Expect:      not bozo and entries[0]['title_detail']['type'] == u'text/plain'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <title>Example Atom</title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_title_type_text.xml b/lib/feedparser/tests/wellformed/atom10/entry_title_type_text.xml
deleted file mode 100644
index d7621b06d..000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_title_type_text.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry title type='text'
-Expect:      not bozo and entries[0]['title_detail']['type'] == 'text/plain'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <title type="text">Example Atom</title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/feed_author_email.xml b/lib/feedparser/tests/wellformed/atom10/feed_author_email.xml
deleted file mode 100644
index 78e898d2d..000000000
--- a/lib/feedparser/tests/wellformed/atom10/feed_author_email.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: feed author email
-Expect:      not bozo and feed['author_detail']['email'] == u'me@example.com'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <author>
-    <name>Example author</name>
-    <email>me@example.com</email>
-    <uri>http://example.com/</uri>
-  </author>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/feed_author_map_author.xml b/lib/feedparser/tests/wellformed/atom10/feed_author_map_author.xml
deleted file mode 100644
index a85c04367..000000000
--- a/lib/feedparser/tests/wellformed/atom10/feed_author_map_author.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: feed author name + email maps to author
-Expect:      not bozo and feed['author'] == u'Example author (me@example.com)'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <author>
-    <name>Example author</name>
-    <email>me@example.com</email>
-    <uri>http://example.com/</uri>
-  </author>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/feed_author_map_author_2.xml b/lib/feedparser/tests/wellformed/atom10/feed_author_map_author_2.xml
deleted file mode 100644
index af8eb617c..000000000
--- a/lib/feedparser/tests/wellformed/atom10/feed_author_map_author_2.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<!--
-Description: feed author name maps to author if no email present
-Expect:      not bozo and feed['author'] == u'Example author'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <author>
-    <name>Example author</name>
-    <uri>http://example.com/</uri>
-  </author>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/feed_author_name.xml b/lib/feedparser/tests/wellformed/atom10/feed_author_name.xml
deleted file mode 100644
index d0aa2f71b..000000000
--- a/lib/feedparser/tests/wellformed/atom10/feed_author_name.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: feed author name
-Expect:      not bozo and feed['author_detail']['name'] == u'Example author'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <author>
-    <name>Example author</name>
-    <email>me@example.com</email>
-    <uri>http://example.com/</uri>
-  </author>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/feed_author_uri.xml b/lib/feedparser/tests/wellformed/atom10/feed_author_uri.xml
deleted file mode 100644
index b5e56f5d1..000000000
--- a/lib/feedparser/tests/wellformed/atom10/feed_author_uri.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: feed author uri
-Expect:      not bozo and feed['author_detail']['url'] == u'http://example.com/'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <author>
-    <name>Example author</name>
-    <email>me@example.com</email>
-    <uri>http://example.com/</uri>
-  </author>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/feed_author_url.xml b/lib/feedparser/tests/wellformed/atom10/feed_author_url.xml
deleted file mode 100644
index 0b6e40f27..000000000
--- a/lib/feedparser/tests/wellformed/atom10/feed_author_url.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: feed author url
-Expect:      not bozo and feed['author_detail']['url'] == u'http://example.com/'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <author>
-    <name>Example author</name>
-    <email>me@example.com</email>
-    <url>http://example.com/</url>
-  </author>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/feed_authors_email.xml b/lib/feedparser/tests/wellformed/atom10/feed_authors_email.xml
deleted file mode 100644
index 83591e131..000000000
--- a/lib/feedparser/tests/wellformed/atom10/feed_authors_email.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-Description: feed contains multiple author emails
-Expect: not bozo and (feed['authors'][0]['email'] == u'one@one.com') and (feed['authors'][1]['email'] == u'two@two.com')
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <author>
-    <email>one@one.com</email>
-  </author>
-  <author>
-    <email>two@two.com</email>
-  </author>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom10/feed_authors_name.xml b/lib/feedparser/tests/wellformed/atom10/feed_authors_name.xml
deleted file mode 100644
index 7b02089cb..000000000
--- a/lib/feedparser/tests/wellformed/atom10/feed_authors_name.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-Description: feed contains multiple author names
-Expect: not bozo and (feed['authors'][0]['name'] == u'one') and (feed['authors'][1]['name'] == u'two')
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <author>
-    <name>one</name>
-  </author>
-  <author>
-    <name>two</name>
-  </author>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom10/feed_authors_uri.xml b/lib/feedparser/tests/wellformed/atom10/feed_authors_uri.xml
deleted file mode 100644
index 794299677..000000000
--- a/lib/feedparser/tests/wellformed/atom10/feed_authors_uri.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-Description: feed contains multiple author uris
-Expect: not bozo and (feed['authors'][0]['url'] == u'http://one.com/') and (feed['authors'][1]['url'] == u'http://two.com/')
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <author>
-    <uri>http://one.com/</uri>
-  </author>
-  <author>
-    <uri>http://two.com/</uri>
-  </author>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom10/feed_authors_url.xml b/lib/feedparser/tests/wellformed/atom10/feed_authors_url.xml
deleted file mode 100644
index d7fcde820..000000000
--- a/lib/feedparser/tests/wellformed/atom10/feed_authors_url.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-Description: feed contains multiple author urls
-Expect: not bozo and (feed['authors'][0]['url'] == u'http://one.com/') and (feed['authors'][1]['url'] == u'http://two.com/')
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <author>
-    <url>http://one.com/</url>
-  </author>
-  <author>
-    <url>http://two.com/</url>
-  </author>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom10/feed_contributor_email.xml b/lib/feedparser/tests/wellformed/atom10/feed_contributor_email.xml
deleted file mode 100644
index f93819174..000000000
--- a/lib/feedparser/tests/wellformed/atom10/feed_contributor_email.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: feed contributor email
-Expect:      not bozo and feed['contributors'][0]['email'] == u'me@example.com'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <contributor>
-    <name>Example contributor</name>
-    <email>me@example.com</email>
-    <uri>http://example.com/</uri>
-  </contributor>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/feed_contributor_multiple.xml b/lib/feedparser/tests/wellformed/atom10/feed_contributor_multiple.xml
deleted file mode 100644
index 8095a7411..000000000
--- a/lib/feedparser/tests/wellformed/atom10/feed_contributor_multiple.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-<!--
-Description: multiple feed contributors
-Expect:      not bozo and feed['contributors'][0] == {'name': u'Contributor 1', 'email': u'me@example.com', 'href': u'http://example.com/'} and feed['contributors'][1] == {'name': u'Contributor 2', 'email': u'you@example.com', 'href': 'http://two.example.com/'}
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <contributor>
-    <name>Contributor 1</name>
-    <email>me@example.com</email>
-    <uri>http://example.com/</uri>
-  </contributor>
-  <contributor>
-    <name>Contributor 2</name>
-    <email>you@example.com</email>
-    <uri>http://two.example.com/</uri>
-  </contributor>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom10/feed_contributor_name.xml b/lib/feedparser/tests/wellformed/atom10/feed_contributor_name.xml
deleted file mode 100644
index 4d7d163bc..000000000
--- a/lib/feedparser/tests/wellformed/atom10/feed_contributor_name.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: feed contributor name
-Expect:      not bozo and feed['contributors'][0]['name'] == u'Example contributor'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <contributor>
-    <name>Example contributor</name>
-    <email>me@example.com</email>
-    <uri>http://example.com/</uri>
-  </contributor>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/feed_contributor_uri.xml b/lib/feedparser/tests/wellformed/atom10/feed_contributor_uri.xml
deleted file mode 100644
index a8fc8626e..000000000
--- a/lib/feedparser/tests/wellformed/atom10/feed_contributor_uri.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: feed contributor uri
-Expect:      not bozo and feed['contributors'][0]['url'] == u'http://example.com/'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <contributor>
-    <name>Example contributor</name>
-    <email>me@example.com</email>
-    <uri>http://example.com/</uri>
-  </contributor>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/feed_contributor_url.xml b/lib/feedparser/tests/wellformed/atom10/feed_contributor_url.xml
deleted file mode 100644
index b6cc8da90..000000000
--- a/lib/feedparser/tests/wellformed/atom10/feed_contributor_url.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: feed contributor url
-Expect:      not bozo and feed['contributors'][0]['url'] == u'http://example.com/'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <contributor>
-    <name>Example contributor</name>
-    <email>me@example.com</email>
-    <url>http://example.com/</url>
-  </contributor>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/feed_generator.xml b/lib/feedparser/tests/wellformed/atom10/feed_generator.xml
deleted file mode 100644
index 88c3abfb0..000000000
--- a/lib/feedparser/tests/wellformed/atom10/feed_generator.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed generator
-Expect:      not bozo and feed['generator'] == u'Example generator'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <generator uri="http://example.com/" version="2.65">Example generator</generator>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/feed_generator_name.xml b/lib/feedparser/tests/wellformed/atom10/feed_generator_name.xml
deleted file mode 100644
index fd89ce59d..000000000
--- a/lib/feedparser/tests/wellformed/atom10/feed_generator_name.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed generator name
-Expect:      not bozo and feed['generator_detail']['name'] == u'Example generator'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <generator uri="http://example.com/" version="2.65">Example generator</generator>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/feed_generator_url.xml b/lib/feedparser/tests/wellformed/atom10/feed_generator_url.xml
deleted file mode 100644
index a321577ec..000000000
--- a/lib/feedparser/tests/wellformed/atom10/feed_generator_url.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed generator uri
-Expect:      not bozo and feed['generator_detail']['href'] == u'http://example.com/'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <generator uri="http://example.com/" version="2.65">Example generator</generator>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/feed_generator_version.xml b/lib/feedparser/tests/wellformed/atom10/feed_generator_version.xml
deleted file mode 100644
index 0660672ce..000000000
--- a/lib/feedparser/tests/wellformed/atom10/feed_generator_version.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed generator version
-Expect:      not bozo and feed['generator_detail']['version'] == u'2.65'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <generator uri="http://example.com/" version="2.65">Example generator</generator>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/feed_icon.xml b/lib/feedparser/tests/wellformed/atom10/feed_icon.xml
deleted file mode 100644
index 498b4d07c..000000000
--- a/lib/feedparser/tests/wellformed/atom10/feed_icon.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed icon
-Expect:      not bozo and feed['icon'] == u'http://example.com/favicon.ico'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <icon>http://example.com/favicon.ico</icon>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/feed_id.xml b/lib/feedparser/tests/wellformed/atom10/feed_id.xml
deleted file mode 100644
index dae9b121b..000000000
--- a/lib/feedparser/tests/wellformed/atom10/feed_id.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed id
-Expect:      not bozo and feed['id'] == u'http://example.com/'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <id>http://example.com/</id>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/feed_id_map_guid.xml b/lib/feedparser/tests/wellformed/atom10/feed_id_map_guid.xml
deleted file mode 100644
index 94fe01c81..000000000
--- a/lib/feedparser/tests/wellformed/atom10/feed_id_map_guid.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed id
-Expect:      not bozo and feed['guid'] == u'http://example.com/'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <id>http://example.com/</id>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/feed_link_alternate_map_link.xml b/lib/feedparser/tests/wellformed/atom10/feed_link_alternate_map_link.xml
deleted file mode 100644
index e25189f0f..000000000
--- a/lib/feedparser/tests/wellformed/atom10/feed_link_alternate_map_link.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed link href maps to link if rel="alternate" and type="text/html"
-Expect:      not bozo and feed['link'] == u'http://www.example.com/'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <link rel="alternate" type="text/html" href="http://www.example.com/"/>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/feed_link_alternate_map_link_2.xml b/lib/feedparser/tests/wellformed/atom10/feed_link_alternate_map_link_2.xml
deleted file mode 100644
index 26f09699d..000000000
--- a/lib/feedparser/tests/wellformed/atom10/feed_link_alternate_map_link_2.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed link href maps to link if rel="alternate" and type="application/xhtml+xml"
-Expect:      not bozo and feed['link'] == u'http://www.example.com/'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <link rel="alternate" type="application/xhtml+xml" href="http://www.example.com/"/>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/feed_link_href.xml b/lib/feedparser/tests/wellformed/atom10/feed_link_href.xml
deleted file mode 100644
index 6d8919fce..000000000
--- a/lib/feedparser/tests/wellformed/atom10/feed_link_href.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed link href
-Expect:      not bozo and feed['links'][0]['href'] == u'http://www.example.com/'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <link rel="alternate" type="text/html" href="http://www.example.com/"/>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/feed_link_hreflang.xml b/lib/feedparser/tests/wellformed/atom10/feed_link_hreflang.xml
deleted file mode 100644
index ea0361295..000000000
--- a/lib/feedparser/tests/wellformed/atom10/feed_link_hreflang.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed link hreflang
-Expect:      not bozo and feed['links'][0]['hreflang'] == u'en'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <link rel="alternate" type="text/html" title="Example title" href="http://www.example.com/" hreflang="en"/>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/feed_link_length.xml b/lib/feedparser/tests/wellformed/atom10/feed_link_length.xml
deleted file mode 100644
index b9e04e95d..000000000
--- a/lib/feedparser/tests/wellformed/atom10/feed_link_length.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed link length
-Expect:      not bozo and feed['links'][0]['length'] == u'42301'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <link rel="enclosure" type="video/mpeg4" href="http://www.example.com/movie.mp4" length="42301"/>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/feed_link_multiple.xml b/lib/feedparser/tests/wellformed/atom10/feed_link_multiple.xml
deleted file mode 100644
index 8745e6ef4..000000000
--- a/lib/feedparser/tests/wellformed/atom10/feed_link_multiple.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<!--
-Description: feed multiple links
-Expect:      not bozo and feed['links'][0] == {'rel': u'alternate', 'type': u'application/xhtml+xml', 'href': u'http://www.example.com/'} and feed['links'][1] == {'rel': u'service.post', 'type': u'application/atom+xml', 'href': 'http://www.example.com/post'}
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <link rel="alternate" type="application/xhtml+xml" href="http://www.example.com/"/>
-  <link rel="service.post" type="application/atom+xml" href="http://www.example.com/post"/>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom10/feed_link_no_rel.xml b/lib/feedparser/tests/wellformed/atom10/feed_link_no_rel.xml
deleted file mode 100644
index 69af2b886..000000000
--- a/lib/feedparser/tests/wellformed/atom10/feed_link_no_rel.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed link rel defaults to 'alternate'
-Expect:      not bozo and feed['links'][0]['rel'] == u'alternate'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <link type="text/html" href="http://www.example.com/"/>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/feed_link_rel.xml b/lib/feedparser/tests/wellformed/atom10/feed_link_rel.xml
deleted file mode 100644
index eb935d8d5..000000000
--- a/lib/feedparser/tests/wellformed/atom10/feed_link_rel.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed link rel
-Expect:      not bozo and feed['links'][0]['rel'] == u'alternate'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <link rel="alternate" type="text/html" href="http://www.example.com/"/>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/feed_link_rel_other.xml b/lib/feedparser/tests/wellformed/atom10/feed_link_rel_other.xml
deleted file mode 100644
index c721a447b..000000000
--- a/lib/feedparser/tests/wellformed/atom10/feed_link_rel_other.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed link rel as URI
-Expect:      not bozo and feed['links'][0]['rel'] == u'http://feedparser.org/rel/test'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <link rel="http://feedparser.org/rel/test" type="text/html" href="http://www.example.com/"/>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/feed_link_rel_related.xml b/lib/feedparser/tests/wellformed/atom10/feed_link_rel_related.xml
deleted file mode 100644
index b19d09bb6..000000000
--- a/lib/feedparser/tests/wellformed/atom10/feed_link_rel_related.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed link rel='related'
-Expect:      not bozo and feed['links'][0]['rel'] == u'related'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <link rel="related" type="text/html" href="http://www.example.com/"/>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/feed_link_rel_self.xml b/lib/feedparser/tests/wellformed/atom10/feed_link_rel_self.xml
deleted file mode 100644
index 601402acc..000000000
--- a/lib/feedparser/tests/wellformed/atom10/feed_link_rel_self.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed link rel='self'
-Expect:      not bozo and feed['links'][0]['rel'] == u'self'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <link rel="self" type="application/atom+xml" href="http://www.example.com/"/>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom10/feed_link_rel_self_default_type.xml b/lib/feedparser/tests/wellformed/atom10/feed_link_rel_self_default_type.xml
deleted file mode 100644
index 11a542e3f..000000000
--- a/lib/feedparser/tests/wellformed/atom10/feed_link_rel_self_default_type.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed link rel='self' default mimetype
-Expect:      not bozo and feed['links'][0]['type'] == u'application/atom+xml'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <link rel="self" href="http://www.example.com/"/>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom10/feed_link_rel_via.xml b/lib/feedparser/tests/wellformed/atom10/feed_link_rel_via.xml
deleted file mode 100644
index 12993fde2..000000000
--- a/lib/feedparser/tests/wellformed/atom10/feed_link_rel_via.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed link rel='via'
-Expect:      not bozo and feed['links'][0]['rel'] == u'via'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <link rel="via" type="text/html" href="http://www.example.com/"/>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/feed_link_title.xml b/lib/feedparser/tests/wellformed/atom10/feed_link_title.xml
deleted file mode 100644
index 72cc9e922..000000000
--- a/lib/feedparser/tests/wellformed/atom10/feed_link_title.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed link title
-Expect:      not bozo and feed['links'][0]['title'] == u'Example title'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <link rel="alternate" type="text/html" title="Example title" href="http://www.example.com/"/>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/feed_link_type.xml b/lib/feedparser/tests/wellformed/atom10/feed_link_type.xml
deleted file mode 100644
index 8bf83efbe..000000000
--- a/lib/feedparser/tests/wellformed/atom10/feed_link_type.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed link type
-Expect:      not bozo and feed['links'][0]['type'] == u'text/html'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <link rel="alternate" type="text/html" href="http://www.example.com/"/>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/feed_logo.xml b/lib/feedparser/tests/wellformed/atom10/feed_logo.xml
deleted file mode 100644
index 1dbf1a1d2..000000000
--- a/lib/feedparser/tests/wellformed/atom10/feed_logo.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed logo
-Expect:      not bozo and feed['logo'] == u'http://example.com/logo.jpg'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <logo>http://example.com/logo.jpg</logo>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/feed_rights.xml b/lib/feedparser/tests/wellformed/atom10/feed_rights.xml
deleted file mode 100644
index a44db6faf..000000000
--- a/lib/feedparser/tests/wellformed/atom10/feed_rights.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed rights
-Expect:      not bozo and feed['rights'] == u'Example Atom'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <rights>Example Atom</rights>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/feed_rights_base64.xml b/lib/feedparser/tests/wellformed/atom10/feed_rights_base64.xml
deleted file mode 100644
index 956daca3e..000000000
--- a/lib/feedparser/tests/wellformed/atom10/feed_rights_base64.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: feed rights base64-encoded
-Expect:      not bozo and feed['rights'] == u'Example <b>Atom</b>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <rights type="application/octet-stream">
-    RXhhbXBsZSA8Yj5BdG9tPC9iPg==
-  </rights>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/feed_rights_base64_2.xml b/lib/feedparser/tests/wellformed/atom10/feed_rights_base64_2.xml
deleted file mode 100644
index 76b1b2b7c..000000000
--- a/lib/feedparser/tests/wellformed/atom10/feed_rights_base64_2.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: feed rights base64-encoded
-Expect:      not bozo and feed['rights'] == u'<p>History of the &lt;blink&gt; tag</p>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<rights type="application/octet-stream">
-PHA+SGlzdG9yeSBvZiB0aGUgJmx0O2JsaW5rJmd0OyB0YWc8L3A+
-</rights>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/feed_rights_content_type.xml b/lib/feedparser/tests/wellformed/atom10/feed_rights_content_type.xml
deleted file mode 100644
index ee44d5adf..000000000
--- a/lib/feedparser/tests/wellformed/atom10/feed_rights_content_type.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed rights content type defaults to 'text/plain'
-Expect:      not bozo and feed['rights_detail']['type'] == u'text/plain'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <rights>Example Atom</rights>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/feed_rights_content_type_text.xml b/lib/feedparser/tests/wellformed/atom10/feed_rights_content_type_text.xml
deleted file mode 100644
index 6aa0412aa..000000000
--- a/lib/feedparser/tests/wellformed/atom10/feed_rights_content_type_text.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed rights type='text'
-Expect:      not bozo and feed['rights_detail']['type'] == 'text/plain'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <rights type="text">Example Atom</rights>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/feed_rights_content_value.xml b/lib/feedparser/tests/wellformed/atom10/feed_rights_content_value.xml
deleted file mode 100644
index fb0780031..000000000
--- a/lib/feedparser/tests/wellformed/atom10/feed_rights_content_value.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed rights content value
-Expect:      not bozo and feed['rights_detail']['value'] == u'Example Atom'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <rights>Example Atom</rights>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/feed_rights_escaped_markup.xml b/lib/feedparser/tests/wellformed/atom10/feed_rights_escaped_markup.xml
deleted file mode 100644
index 8384d2998..000000000
--- a/lib/feedparser/tests/wellformed/atom10/feed_rights_escaped_markup.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed rights escaped HTML
-Expect:      not bozo and feed['rights'] == u'Example <b>Atom</b>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <rights type="html">Example &lt;b&gt;Atom&lt;/b&gt;</rights>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/feed_rights_inline_markup.xml b/lib/feedparser/tests/wellformed/atom10/feed_rights_inline_markup.xml
deleted file mode 100644
index 080f880e3..000000000
--- a/lib/feedparser/tests/wellformed/atom10/feed_rights_inline_markup.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed rights inline XHTML
-Expect:      not bozo and feed['rights'] == u'Example <b>Atom</b>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <rights type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">Example <b>Atom</b></div></rights>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom10/feed_rights_inline_markup_2.xml b/lib/feedparser/tests/wellformed/atom10/feed_rights_inline_markup_2.xml
deleted file mode 100644
index d8b953fd2..000000000
--- a/lib/feedparser/tests/wellformed/atom10/feed_rights_inline_markup_2.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed rights inline XHTML with escaped markup
-Expect:      not bozo and feed['rights'] == u'History of the &lt;blink&gt; tag'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <rights type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">History of the &lt;blink&gt; tag</div></rights>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom10/feed_rights_text_plain.xml b/lib/feedparser/tests/wellformed/atom10/feed_rights_text_plain.xml
deleted file mode 100644
index 54e7e612d..000000000
--- a/lib/feedparser/tests/wellformed/atom10/feed_rights_text_plain.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed rights with explicit type='text'
-Expect:      not bozo and feed['rights'] == u'Example Atom'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <rights type="text">Example Atom</rights>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/feed_subtitle.xml b/lib/feedparser/tests/wellformed/atom10/feed_subtitle.xml
deleted file mode 100644
index 8a07142c4..000000000
--- a/lib/feedparser/tests/wellformed/atom10/feed_subtitle.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed subtitle
-Expect:      not bozo and feed['subtitle'] == u'Example Atom'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <subtitle>Example Atom</subtitle>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/feed_subtitle_base64.xml b/lib/feedparser/tests/wellformed/atom10/feed_subtitle_base64.xml
deleted file mode 100644
index 8dd6a864f..000000000
--- a/lib/feedparser/tests/wellformed/atom10/feed_subtitle_base64.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: feed subtitle base64-encoded
-Expect:      not bozo and feed['subtitle'] == u'Example <b>Atom</b>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <subtitle type="application/octet-stream">
-    RXhhbXBsZSA8Yj5BdG9tPC9iPg==
-  </subtitle>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/feed_subtitle_base64_2.xml b/lib/feedparser/tests/wellformed/atom10/feed_subtitle_base64_2.xml
deleted file mode 100644
index d2ef0d6e7..000000000
--- a/lib/feedparser/tests/wellformed/atom10/feed_subtitle_base64_2.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: feed subtitle base64-encoded
-Expect:      not bozo and feed['subtitle'] == u'<p>History of the &lt;blink&gt; tag</p>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<subtitle type="application/octet-stream">
-PHA+SGlzdG9yeSBvZiB0aGUgJmx0O2JsaW5rJmd0OyB0YWc8L3A+
-</subtitle>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/feed_subtitle_content_type.xml b/lib/feedparser/tests/wellformed/atom10/feed_subtitle_content_type.xml
deleted file mode 100644
index 2e3395140..000000000
--- a/lib/feedparser/tests/wellformed/atom10/feed_subtitle_content_type.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed subtitle content type defaults to 'text/plain'
-Expect:      not bozo and feed['subtitle_detail']['type'] == u'text/plain'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <subtitle>Example Atom</subtitle>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/feed_subtitle_content_type_text.xml b/lib/feedparser/tests/wellformed/atom10/feed_subtitle_content_type_text.xml
deleted file mode 100644
index ce2073666..000000000
--- a/lib/feedparser/tests/wellformed/atom10/feed_subtitle_content_type_text.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed subtitle type='text'
-Expect:      not bozo and feed['subtitle_detail']['type'] == 'text/plain'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <subtitle type="text">Example Atom</subtitle>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/feed_subtitle_content_value.xml b/lib/feedparser/tests/wellformed/atom10/feed_subtitle_content_value.xml
deleted file mode 100644
index 309deafbe..000000000
--- a/lib/feedparser/tests/wellformed/atom10/feed_subtitle_content_value.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed subtitle content value
-Expect:      not bozo and feed['subtitle_detail']['value'] == u'Example Atom'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <subtitle>Example Atom</subtitle>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/feed_subtitle_escaped_markup.xml b/lib/feedparser/tests/wellformed/atom10/feed_subtitle_escaped_markup.xml
deleted file mode 100644
index fc7a85b87..000000000
--- a/lib/feedparser/tests/wellformed/atom10/feed_subtitle_escaped_markup.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed subtitle escaped HTML
-Expect:      not bozo and feed['subtitle'] == u'Example <b>Atom</b>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <subtitle type="html">Example &lt;b&gt;Atom&lt;/b&gt;</subtitle>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/feed_subtitle_inline_markup.xml b/lib/feedparser/tests/wellformed/atom10/feed_subtitle_inline_markup.xml
deleted file mode 100644
index 2742f68e5..000000000
--- a/lib/feedparser/tests/wellformed/atom10/feed_subtitle_inline_markup.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed subtitle inline XHTML
-Expect:      not bozo and feed['subtitle'] == u'Example <b>Atom</b>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <subtitle type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">Example <b>Atom</b></div></subtitle>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom10/feed_subtitle_inline_markup_2.xml b/lib/feedparser/tests/wellformed/atom10/feed_subtitle_inline_markup_2.xml
deleted file mode 100644
index 4b36e24ab..000000000
--- a/lib/feedparser/tests/wellformed/atom10/feed_subtitle_inline_markup_2.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed subtitle inline XHTML with escaped markup
-Expect:      not bozo and feed['subtitle'] == u'History of the &lt;blink&gt; tag'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <subtitle type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">History of the &lt;blink&gt; tag</div></subtitle>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom10/feed_subtitle_text_plain.xml b/lib/feedparser/tests/wellformed/atom10/feed_subtitle_text_plain.xml
deleted file mode 100644
index bf97397ab..000000000
--- a/lib/feedparser/tests/wellformed/atom10/feed_subtitle_text_plain.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed subtitle with explicit type='text'
-Expect:      not bozo and feed['subtitle'] == u'Example Atom'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <subtitle type="text">Example Atom</subtitle>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/feed_title.xml b/lib/feedparser/tests/wellformed/atom10/feed_title.xml
deleted file mode 100644
index 37a26ea51..000000000
--- a/lib/feedparser/tests/wellformed/atom10/feed_title.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed title
-Expect:      not bozo and feed['title'] == u'Example Atom'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <title>Example Atom</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/feed_title_base64.xml b/lib/feedparser/tests/wellformed/atom10/feed_title_base64.xml
deleted file mode 100644
index 5c07e7295..000000000
--- a/lib/feedparser/tests/wellformed/atom10/feed_title_base64.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: feed title base64-encoded
-Expect:      not bozo and feed['title'] == u'Example <b>Atom</b>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <title type="application/octet-stream">
-    RXhhbXBsZSA8Yj5BdG9tPC9iPg==
-  </title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/feed_title_base64_2.xml b/lib/feedparser/tests/wellformed/atom10/feed_title_base64_2.xml
deleted file mode 100644
index 409c1f328..000000000
--- a/lib/feedparser/tests/wellformed/atom10/feed_title_base64_2.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: feed title base64-encoded
-Expect:      not bozo and feed['title'] == u'<p>History of the &lt;blink&gt; tag</p>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<title type="application/octet-stream">
-PHA+SGlzdG9yeSBvZiB0aGUgJmx0O2JsaW5rJmd0OyB0YWc8L3A+
-</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/feed_title_content_type.xml b/lib/feedparser/tests/wellformed/atom10/feed_title_content_type.xml
deleted file mode 100644
index 52d456757..000000000
--- a/lib/feedparser/tests/wellformed/atom10/feed_title_content_type.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed title content type defaults to 'text/plain'
-Expect:      not bozo and feed['title_detail']['type'] == u'text/plain'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <title>Example Atom</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/feed_title_content_type_text.xml b/lib/feedparser/tests/wellformed/atom10/feed_title_content_type_text.xml
deleted file mode 100644
index d1649921c..000000000
--- a/lib/feedparser/tests/wellformed/atom10/feed_title_content_type_text.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed title type='text'
-Expect:      not bozo and feed['title_detail']['type'] == 'text/plain'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <title type="text">Example Atom</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/feed_title_content_value.xml b/lib/feedparser/tests/wellformed/atom10/feed_title_content_value.xml
deleted file mode 100644
index 7d31b22e4..000000000
--- a/lib/feedparser/tests/wellformed/atom10/feed_title_content_value.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed title content value
-Expect:      not bozo and feed['title_detail']['value'] == u'Example Atom'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <title>Example Atom</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/feed_title_escaped_markup.xml b/lib/feedparser/tests/wellformed/atom10/feed_title_escaped_markup.xml
deleted file mode 100644
index ba23dc0bf..000000000
--- a/lib/feedparser/tests/wellformed/atom10/feed_title_escaped_markup.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed title escaped HTML
-Expect:      not bozo and feed['title'] == u'Example <b>Atom</b>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <title type="html">Example &lt;b&gt;Atom&lt;/b&gt;</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/feed_title_inline_markup.xml b/lib/feedparser/tests/wellformed/atom10/feed_title_inline_markup.xml
deleted file mode 100644
index fea23a77c..000000000
--- a/lib/feedparser/tests/wellformed/atom10/feed_title_inline_markup.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed title inline XHTML
-Expect:      not bozo and feed['title'] == u'Example <b>Atom</b>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <title type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">Example <b>Atom</b></div></title>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom10/feed_title_inline_markup_2.xml b/lib/feedparser/tests/wellformed/atom10/feed_title_inline_markup_2.xml
deleted file mode 100644
index ec2da6b04..000000000
--- a/lib/feedparser/tests/wellformed/atom10/feed_title_inline_markup_2.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed title inline XHTML with escaped markup
-Expect:      not bozo and feed['title'] == u'History of the &lt;blink&gt; tag'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <title type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">History of the &lt;blink&gt; tag</div></title>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom10/feed_title_text_plain.xml b/lib/feedparser/tests/wellformed/atom10/feed_title_text_plain.xml
deleted file mode 100644
index 0f7ff9592..000000000
--- a/lib/feedparser/tests/wellformed/atom10/feed_title_text_plain.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed title with explicit type='text'
-Expect:      not bozo and feed['title'] == u'Example Atom'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <title type="text">Example Atom</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/item_media_category_label.xml b/lib/feedparser/tests/wellformed/atom10/item_media_category_label.xml
deleted file mode 100644
index c66c46d1c..000000000
--- a/lib/feedparser/tests/wellformed/atom10/item_media_category_label.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: multiple media:category tags - label
-Expect: not bozo and entries[0].tags[0].label == u'lab1'
--->
-<rss version="2.0" xmlns:media="http://search.yahoo.com/mrss">
-   <channel>
-        <item>
-            <media:category label="lab1">cat1</media:category>
-        </item>
-    </channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/atom10/item_media_category_multiple.xml b/lib/feedparser/tests/wellformed/atom10/item_media_category_multiple.xml
deleted file mode 100644
index 95b2f48c6..000000000
--- a/lib/feedparser/tests/wellformed/atom10/item_media_category_multiple.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<!--
-Description: multiple media:category tags - multiple categories
-Expect: not bozo and len(entries[0].tags) == 2 and entries[0].tags[1].term == u'cat2'
--->
-<rss version="2.0" xmlns:media="http://search.yahoo.com/mrss">
-   <channel>
-        <item>
-            <media:category>cat1</media:category>
-            <media:category>cat2</media:category>
-        </item>
-    </channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/atom10/item_media_category_scheme1.xml b/lib/feedparser/tests/wellformed/atom10/item_media_category_scheme1.xml
deleted file mode 100644
index d1de91e2b..000000000
--- a/lib/feedparser/tests/wellformed/atom10/item_media_category_scheme1.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: multiple media:category tags - default scheme
-Expect: not bozo and entries[0].tags[0].scheme == u'http://search.yahoo.com/mrss/category_schema'
--->
-<rss version="2.0" xmlns:media="http://search.yahoo.com/mrss">
-   <channel>
-        <item>
-            <media:category>cat1</media:category>
-        </item>
-    </channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/atom10/item_media_category_scheme2.xml b/lib/feedparser/tests/wellformed/atom10/item_media_category_scheme2.xml
deleted file mode 100644
index 62f5c3657..000000000
--- a/lib/feedparser/tests/wellformed/atom10/item_media_category_scheme2.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: multiple media:category tags - custom scheme
-Expect: not bozo and entries[0].tags[0].scheme == u'http://example.INVALID/'
--->
-<rss version="2.0" xmlns:media="http://search.yahoo.com/mrss">
-   <channel>
-        <item>
-            <media:category scheme="http://example.INVALID/">cat1</media:category>
-        </item>
-    </channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/atom10/item_media_category_term.xml b/lib/feedparser/tests/wellformed/atom10/item_media_category_term.xml
deleted file mode 100644
index d01d81fb0..000000000
--- a/lib/feedparser/tests/wellformed/atom10/item_media_category_term.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: multiple media:category tags - term
-Expect: not bozo and entries[0].tags[0].term == u'cat1'
--->
-<rss version="2.0" xmlns:media="http://search.yahoo.com/mrss">
-   <channel>
-        <item>
-            <media:category>cat1</media:category>
-        </item>
-    </channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/atom10/item_media_title_type_plain.xml b/lib/feedparser/tests/wellformed/atom10/item_media_title_type_plain.xml
deleted file mode 100644
index 4262d1962..000000000
--- a/lib/feedparser/tests/wellformed/atom10/item_media_title_type_plain.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: media:title @type="plain"
-Expect:      not bozo and entries[0]['title_detail']['type'] == u'text/plain'
--->
-<rss xmlns:media="http://search.yahoo.com/mrss/">
-  <channel>
-    <item>
-      <media:title type="plain">plain means text/plain</media:title>
-    </item>
-  </channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/atom10/missing_quote_in_attr.xml b/lib/feedparser/tests/wellformed/atom10/missing_quote_in_attr.xml
deleted file mode 100644
index a62a0d9ec..000000000
--- a/lib/feedparser/tests/wellformed/atom10/missing_quote_in_attr.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: href is missing a quote
-Expect:      not bozo and feed['title_detail']['value'] == u'<a href="http://example.com/&quot;">example</a>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <title type="html"><![CDATA[<a href=http://example.com/">example</a>]]></title>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom10/qna.xml b/lib/feedparser/tests/wellformed/atom10/qna.xml
deleted file mode 100644
index 6198ec1e3..000000000
--- a/lib/feedparser/tests/wellformed/atom10/qna.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: Q&A
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'Q&amp;A session'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-	  <title type="html">Q&amp;A session</title>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom10/quote_in_attr.xml b/lib/feedparser/tests/wellformed/atom10/quote_in_attr.xml
deleted file mode 100644
index 88c133c76..000000000
--- a/lib/feedparser/tests/wellformed/atom10/quote_in_attr.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed title contains URI with an amperand
-Expect:      not bozo and feed['title_detail']['value'] == u'<a title="&quot;test&quot;">test</a>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <title type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><a title='"test"'>test</a></div></title>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom10/relative_uri.xml b/lib/feedparser/tests/wellformed/atom10/relative_uri.xml
deleted file mode 100644
index 8c5509bd4..000000000
--- a/lib/feedparser/tests/wellformed/atom10/relative_uri.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed title contains relative URI resolved relative to xml:base
-Expect:      not bozo and feed['title_detail']['value'] == u'Example <a href="http://example.com/test/test.html">test</a>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <title type="xhtml" xml:base="http://example.com/test/"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></title>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom10/relative_uri_inherit.xml b/lib/feedparser/tests/wellformed/atom10/relative_uri_inherit.xml
deleted file mode 100644
index 5462c18f4..000000000
--- a/lib/feedparser/tests/wellformed/atom10/relative_uri_inherit.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed title contains relative URI resolved relative to xml:base inherited from parent element
-Expect:      not bozo and feed['title_detail']['value'] == u'Example <a href="http://example.com/test/test.html">test</a>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom" xml:base="http://example.com/test/">
-  <title type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></title>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom10/relative_uri_inherit_2.xml b/lib/feedparser/tests/wellformed/atom10/relative_uri_inherit_2.xml
deleted file mode 100644
index e018e2df2..000000000
--- a/lib/feedparser/tests/wellformed/atom10/relative_uri_inherit_2.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed title contains relative URI resolved relative to xml:base overriding parent xml:base
-Expect:      not bozo and feed['title_detail']['value'] == u'Example <a href="http://example.com/test/test.html">test</a>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom" xml:base="http://example.com/parent/">
-  <title type="xhtml" xml:base="http://example.com/test/"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></title>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom10/tag_in_attr.xml b/lib/feedparser/tests/wellformed/atom10/tag_in_attr.xml
deleted file mode 100644
index 9e4d3bebb..000000000
--- a/lib/feedparser/tests/wellformed/atom10/tag_in_attr.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: image attribute contains angle brackets
-Expect:      not bozo and feed['title_detail']['value'] == u'<img alt="cat&lt;br /&gt;dog" src="http://example.com/cat-dog.jpg" />'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <title type="html"><![CDATA[<img src="http://example.com/cat-dog.jpg" alt="cat<br />dog">]]></title>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/base/cdf_item_abstract_xml_base.xml b/lib/feedparser/tests/wellformed/base/cdf_item_abstract_xml_base.xml
deleted file mode 100644
index f90968e40..000000000
--- a/lib/feedparser/tests/wellformed/base/cdf_item_abstract_xml_base.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<!--
-Description: CDF item abstract xml:base
-Expect:      not bozo and entries[0]['summary_detail']['base'] == u'http://base.example.org/'
--->
-<CHANNEL
-  BASE="http://base.example.org/"
-  HREF="http://www.example.org/"
-  LASTMOD="2004-04-06T23:05:43-05:00"
-  PRECACHE="No">
-  <TITLE>channel title</TITLE>
-  <ABSTRACT>channel abstract</ABSTRACT>
-  <ITEM HREF="/item/1"
-    PRECACHE="No"
-    LASTMOD="2004-04-06T23:05:43-05:00">
-    <TITLE>item title</TITLE>
-    <ABSTRACT>item abstract</ABSTRACT>
-  </ITEM>
-</CHANNEL>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/entry_content_xml_base.xml b/lib/feedparser/tests/wellformed/base/entry_content_xml_base.xml
deleted file mode 100644
index d64344ec9..000000000
--- a/lib/feedparser/tests/wellformed/base/entry_content_xml_base.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry content xml:base
-Expect:      not bozo and entries[0]['content'][0]['base'] == u'http://example.com/test/'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-  <content type="application/xhtml+xml" xml:base="http://example.com/test/"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/entry_content_xml_base_inherit.xml b/lib/feedparser/tests/wellformed/base/entry_content_xml_base_inherit.xml
deleted file mode 100644
index cd09929e7..000000000
--- a/lib/feedparser/tests/wellformed/base/entry_content_xml_base_inherit.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry content xml:base inherited from parent element
-Expect:      not bozo and entries[0]['content'][0]['base'] == u'http://example.com/test/'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:base="http://example.com/test/">
-<entry>
-  <content type="application/xhtml+xml"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/entry_content_xml_base_inherit_2.xml b/lib/feedparser/tests/wellformed/base/entry_content_xml_base_inherit_2.xml
deleted file mode 100644
index 58c699d4c..000000000
--- a/lib/feedparser/tests/wellformed/base/entry_content_xml_base_inherit_2.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry content xml:base overrides parent element
-Expect:      not bozo and entries[0]['content'][0]['base'] == u'http://example.com/test/'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:base="http://example.com/parent/">
-<entry>
-  <content type="application/xhtml+xml" xml:base="http://example.com/test/"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/entry_content_xml_base_inherit_3.xml b/lib/feedparser/tests/wellformed/base/entry_content_xml_base_inherit_3.xml
deleted file mode 100644
index 49c3ceabe..000000000
--- a/lib/feedparser/tests/wellformed/base/entry_content_xml_base_inherit_3.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<!--
-Description: entry content xml:base resets properly on new element
-Expect:      not bozo and entries[0]['content'][0]['base'] == u'http://example.com/test/'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:base="http://example.com/parent/">
-<entry>
-  <summary type="application/xhtml+xml" xml:base="http://example.com/info/"><div xmlns="http://www.w3.org/1999/xhtml">blah blah blah</div></summary>
-  <content type="application/xhtml+xml" xml:base="http://example.com/test/"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/entry_content_xml_base_inherit_4.xml b/lib/feedparser/tests/wellformed/base/entry_content_xml_base_inherit_4.xml
deleted file mode 100644
index 64053cf42..000000000
--- a/lib/feedparser/tests/wellformed/base/entry_content_xml_base_inherit_4.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<!--
-Description: entry content xml:base inherits properly on new element
-Expect:      not bozo and entries[0]['content'][0]['base'] == u'http://example.com/parent/'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:base="http://example.com/parent/">
-<entry>
-  <summary type="application/xhtml+xml" xml:base="http://example.com/info/"><div xmlns="http://www.w3.org/1999/xhtml">blah blah blah</div></summary>
-  <content type="application/xhtml+xml"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/entry_summary_xml_base.xml b/lib/feedparser/tests/wellformed/base/entry_summary_xml_base.xml
deleted file mode 100644
index ae49ecf39..000000000
--- a/lib/feedparser/tests/wellformed/base/entry_summary_xml_base.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry summary content xml:base
-Expect:      not bozo and entries[0]['summary_detail']['base'] == u'http://example.com/test/'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-  <summary type="application/xhtml+xml" xml:base="http://example.com/test/"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/entry_summary_xml_base_inherit.xml b/lib/feedparser/tests/wellformed/base/entry_summary_xml_base_inherit.xml
deleted file mode 100644
index 3fe233480..000000000
--- a/lib/feedparser/tests/wellformed/base/entry_summary_xml_base_inherit.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry summary content xml:base inherited from parent element
-Expect:      not bozo and entries[0]['summary_detail']['base'] == u'http://example.com/test/'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:base="http://example.com/test/">
-<entry>
-  <summary type="application/xhtml+xml"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/entry_summary_xml_base_inherit_2.xml b/lib/feedparser/tests/wellformed/base/entry_summary_xml_base_inherit_2.xml
deleted file mode 100644
index cf0c95fd8..000000000
--- a/lib/feedparser/tests/wellformed/base/entry_summary_xml_base_inherit_2.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry summary content xml:base overrides parent element
-Expect:      not bozo and entries[0]['summary_detail']['base'] == u'http://example.com/test/'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:base="http://example.com/parent/">
-<entry>
-  <summary type="application/xhtml+xml" xml:base="http://example.com/test/"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/entry_summary_xml_base_inherit_3.xml b/lib/feedparser/tests/wellformed/base/entry_summary_xml_base_inherit_3.xml
deleted file mode 100644
index 75f442b6c..000000000
--- a/lib/feedparser/tests/wellformed/base/entry_summary_xml_base_inherit_3.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<!--
-Description: entry summary content xml:base resets properly on new element
-Expect:      not bozo and entries[0]['summary_detail']['base'] == u'http://example.com/summary/'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:base="http://example.com/parent/">
-<entry>
-  <title type="application/xhtml+xml" xml:base="http://example.com/test/"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></title>
-  <summary type="application/xhtml+xml" xml:base="http://example.com/summary/"><div xmlns="http://www.w3.org/1999/xhtml">blah blah blah</div></summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/entry_summary_xml_base_inherit_4.xml b/lib/feedparser/tests/wellformed/base/entry_summary_xml_base_inherit_4.xml
deleted file mode 100644
index d36029944..000000000
--- a/lib/feedparser/tests/wellformed/base/entry_summary_xml_base_inherit_4.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<!--
-Description: entry summary content xml:base inherits properly on new element
-Expect:      not bozo and entries[0]['summary_detail']['base'] == u'http://example.com/parent/'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:base="http://example.com/parent/">
-<entry>
-  <title type="application/xhtml+xml" xml:base="http://example.com/test/"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></title>
-  <summary type="application/xhtml+xml"><div xmlns="http://www.w3.org/1999/xhtml">blah blah blah</div></summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/entry_title_xml_base.xml b/lib/feedparser/tests/wellformed/base/entry_title_xml_base.xml
deleted file mode 100644
index 10a13fe86..000000000
--- a/lib/feedparser/tests/wellformed/base/entry_title_xml_base.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry title content xml:base
-Expect:      not bozo and entries[0]['title_detail']['base'] == u'http://example.com/test/'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-  <title type="application/xhtml+xml" xml:base="http://example.com/test/"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/entry_title_xml_base_inherit.xml b/lib/feedparser/tests/wellformed/base/entry_title_xml_base_inherit.xml
deleted file mode 100644
index b838c9ec3..000000000
--- a/lib/feedparser/tests/wellformed/base/entry_title_xml_base_inherit.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry title content xml:base inherited from parent element
-Expect:      not bozo and entries[0]['title_detail']['base'] == u'http://example.com/test/'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:base="http://example.com/test/">
-<entry>
-  <title type="application/xhtml+xml"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/entry_title_xml_base_inherit_2.xml b/lib/feedparser/tests/wellformed/base/entry_title_xml_base_inherit_2.xml
deleted file mode 100644
index 7bef55e66..000000000
--- a/lib/feedparser/tests/wellformed/base/entry_title_xml_base_inherit_2.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry title content xml:base overrides parent element
-Expect:      not bozo and entries[0]['title_detail']['base'] == u'http://example.com/test/'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:base="http://example.com/parent/">
-<entry>
-  <title type="application/xhtml+xml" xml:base="http://example.com/test/"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/entry_title_xml_base_inherit_3.xml b/lib/feedparser/tests/wellformed/base/entry_title_xml_base_inherit_3.xml
deleted file mode 100644
index 28518d98f..000000000
--- a/lib/feedparser/tests/wellformed/base/entry_title_xml_base_inherit_3.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<!--
-Description: entry title content xml:base resets properly on new element
-Expect:      not bozo and entries[0]['title_detail']['base'] == u'http://example.com/test/'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:base="http://example.com/parent/">
-<entry>
-  <summary type="application/xhtml+xml" xml:base="http://example.com/info/"><div xmlns="http://www.w3.org/1999/xhtml">blah blah blah</div></summary>
-  <title type="application/xhtml+xml" xml:base="http://example.com/test/"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/entry_title_xml_base_inherit_4.xml b/lib/feedparser/tests/wellformed/base/entry_title_xml_base_inherit_4.xml
deleted file mode 100644
index 7104e0981..000000000
--- a/lib/feedparser/tests/wellformed/base/entry_title_xml_base_inherit_4.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<!--
-Description: entry title content xml:base inherits properly on new element
-Expect:      not bozo and entries[0]['title_detail']['base'] == u'http://example.com/parent/'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:base="http://example.com/parent/">
-<entry>
-  <summary type="application/xhtml+xml" xml:base="http://example.com/info/"><div xmlns="http://www.w3.org/1999/xhtml">blah blah blah</div></summary>
-  <title type="application/xhtml+xml"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/feed_copyright_xml_base.xml b/lib/feedparser/tests/wellformed/base/feed_copyright_xml_base.xml
deleted file mode 100644
index 22a3de836..000000000
--- a/lib/feedparser/tests/wellformed/base/feed_copyright_xml_base.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed copyright content xml:base
-Expect:      not bozo and feed['copyright_detail']['base'] == u'http://example.com/test/'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <copyright type="application/xhtml+xml" xml:base="http://example.com/test/"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></copyright>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/feed_copyright_xml_base_inherit.xml b/lib/feedparser/tests/wellformed/base/feed_copyright_xml_base_inherit.xml
deleted file mode 100644
index fd19cc4b8..000000000
--- a/lib/feedparser/tests/wellformed/base/feed_copyright_xml_base_inherit.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed copyright content xml:base inherited from parent element
-Expect:      not bozo and feed['copyright_detail']['base'] == u'http://example.com/test/'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:base="http://example.com/test/">
-  <copyright type="application/xhtml+xml"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></copyright>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/feed_copyright_xml_base_inherit_2.xml b/lib/feedparser/tests/wellformed/base/feed_copyright_xml_base_inherit_2.xml
deleted file mode 100644
index 5d2b7a66c..000000000
--- a/lib/feedparser/tests/wellformed/base/feed_copyright_xml_base_inherit_2.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed copyright content xml:base overrides parent element
-Expect:      not bozo and feed['copyright_detail']['base'] == u'http://example.com/test/'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:base="http://example.com/parent/">
-  <copyright type="application/xhtml+xml" xml:base="http://example.com/test/"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></copyright>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/feed_copyright_xml_base_inherit_3.xml b/lib/feedparser/tests/wellformed/base/feed_copyright_xml_base_inherit_3.xml
deleted file mode 100644
index eddb60afa..000000000
--- a/lib/feedparser/tests/wellformed/base/feed_copyright_xml_base_inherit_3.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<!--
-Description: feed copyright content xml:base resets properly on new element
-Expect:      not bozo and feed['copyright_detail']['base'] == u'http://example.com/test/'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:base="http://example.com/parent/">
-  <info type="application/xhtml+xml" xml:base="http://example.com/info/"><div xmlns="http://www.w3.org/1999/xhtml">blah blah blah</div></info>
-  <copyright type="application/xhtml+xml" xml:base="http://example.com/test/"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></copyright>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/feed_copyright_xml_base_inherit_4.xml b/lib/feedparser/tests/wellformed/base/feed_copyright_xml_base_inherit_4.xml
deleted file mode 100644
index 14afc9d78..000000000
--- a/lib/feedparser/tests/wellformed/base/feed_copyright_xml_base_inherit_4.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<!--
-Description: feed copyright content xml:base inherits properly on new element
-Expect:      not bozo and feed['copyright_detail']['base'] == u'http://example.com/parent/'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:base="http://example.com/parent/">
-  <info type="application/xhtml+xml" xml:base="http://example.com/info/"><div xmlns="http://www.w3.org/1999/xhtml">blah blah blah</div></info>
-  <copyright type="application/xhtml+xml"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></copyright>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/feed_info_xml_base.xml b/lib/feedparser/tests/wellformed/base/feed_info_xml_base.xml
deleted file mode 100644
index 2f830c6ad..000000000
--- a/lib/feedparser/tests/wellformed/base/feed_info_xml_base.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed info content xml:base
-Expect:      not bozo and feed['info_detail']['base'] == u'http://example.com/test/'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <info type="application/xhtml+xml" xml:base="http://example.com/test/"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></info>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/feed_info_xml_base_inherit.xml b/lib/feedparser/tests/wellformed/base/feed_info_xml_base_inherit.xml
deleted file mode 100644
index 50cf9cd47..000000000
--- a/lib/feedparser/tests/wellformed/base/feed_info_xml_base_inherit.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed info content xml:base inherited from parent element
-Expect:      not bozo and feed['info_detail']['base'] == u'http://example.com/test/'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:base="http://example.com/test/">
-  <info type="application/xhtml+xml"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></info>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/feed_info_xml_base_inherit_2.xml b/lib/feedparser/tests/wellformed/base/feed_info_xml_base_inherit_2.xml
deleted file mode 100644
index 3a095a58e..000000000
--- a/lib/feedparser/tests/wellformed/base/feed_info_xml_base_inherit_2.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed info content xml:base overrides parent element
-Expect:      not bozo and feed['info_detail']['base'] == u'http://example.com/test/'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:base="http://example.com/parent/">
-  <info type="application/xhtml+xml" xml:base="http://example.com/test/"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></info>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/feed_info_xml_base_inherit_3.xml b/lib/feedparser/tests/wellformed/base/feed_info_xml_base_inherit_3.xml
deleted file mode 100644
index 92f6d36f6..000000000
--- a/lib/feedparser/tests/wellformed/base/feed_info_xml_base_inherit_3.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<!--
-Description: feed info content xml:base resets properly on new element
-Expect:      not bozo and feed['info_detail']['base'] == u'http://example.com/info/'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:base="http://example.com/parent/">
-  <title type="application/xhtml+xml" xml:base="http://example.com/test/"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></title>
-  <info type="application/xhtml+xml" xml:base="http://example.com/info/"><div xmlns="http://www.w3.org/1999/xhtml">blah blah blah</div></info>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/feed_info_xml_base_inherit_4.xml b/lib/feedparser/tests/wellformed/base/feed_info_xml_base_inherit_4.xml
deleted file mode 100644
index 09dcc337d..000000000
--- a/lib/feedparser/tests/wellformed/base/feed_info_xml_base_inherit_4.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<!--
-Description: feed info content xml:base inherits properly on new element
-Expect:      not bozo and feed['info_detail']['base'] == u'http://example.com/parent/'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:base="http://example.com/parent/">
-  <title type="application/xhtml+xml" xml:base="http://example.com/test/"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></title>
-  <info type="application/xhtml+xml"><div xmlns="http://www.w3.org/1999/xhtml">blah blah blah</div></info>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/feed_link_xml_base_iri.xml b/lib/feedparser/tests/wellformed/base/feed_link_xml_base_iri.xml
deleted file mode 100644
index 4777baa2e..000000000
--- a/lib/feedparser/tests/wellformed/base/feed_link_xml_base_iri.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: xml:base is an IRI
-Expect:      not bozo and feed['links'][0]['href'] == u'http://www.\u8a79\u59c6\u65af.com/feed'
--->
-<feed xmlns="http://www.w3.org/2005/Atom" xml:base="http://www.詹姆斯.com/feed">
-  <link rel="self" type="application/atom+xml" href=""/>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/base/feed_tagline_xml_base.xml b/lib/feedparser/tests/wellformed/base/feed_tagline_xml_base.xml
deleted file mode 100644
index 953f2b808..000000000
--- a/lib/feedparser/tests/wellformed/base/feed_tagline_xml_base.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed tagline content xml:base
-Expect:      not bozo and feed['tagline_detail']['base'] == u'http://example.com/test/'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <tagline type="application/xhtml+xml" xml:base="http://example.com/test/"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></tagline>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/feed_tagline_xml_base_inherit.xml b/lib/feedparser/tests/wellformed/base/feed_tagline_xml_base_inherit.xml
deleted file mode 100644
index c6339d7f0..000000000
--- a/lib/feedparser/tests/wellformed/base/feed_tagline_xml_base_inherit.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed tagline content xml:base inherited from parent element
-Expect:      not bozo and feed['tagline_detail']['base'] == u'http://example.com/test/'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:base="http://example.com/test/">
-  <tagline type="application/xhtml+xml"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></tagline>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/feed_tagline_xml_base_inherit_2.xml b/lib/feedparser/tests/wellformed/base/feed_tagline_xml_base_inherit_2.xml
deleted file mode 100644
index 5ce1d77f2..000000000
--- a/lib/feedparser/tests/wellformed/base/feed_tagline_xml_base_inherit_2.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed tagline content xml:base overrides parent element
-Expect:      not bozo and feed['tagline_detail']['base'] == u'http://example.com/test/'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:base="http://example.com/parent/">
-  <tagline type="application/xhtml+xml" xml:base="http://example.com/test/"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></tagline>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/feed_tagline_xml_base_inherit_3.xml b/lib/feedparser/tests/wellformed/base/feed_tagline_xml_base_inherit_3.xml
deleted file mode 100644
index 0e8403636..000000000
--- a/lib/feedparser/tests/wellformed/base/feed_tagline_xml_base_inherit_3.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<!--
-Description: feed tagline content xml:base resets properly on new element
-Expect:      not bozo and feed['tagline_detail']['base'] == u'http://example.com/test/'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:base="http://example.com/parent/">
-  <info type="application/xhtml+xml" xml:base="http://example.com/info/"><div xmlns="http://www.w3.org/1999/xhtml">blah blah blah</div></info>
-  <tagline type="application/xhtml+xml" xml:base="http://example.com/test/"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></tagline>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/feed_tagline_xml_base_inherit_4.xml b/lib/feedparser/tests/wellformed/base/feed_tagline_xml_base_inherit_4.xml
deleted file mode 100644
index 6248bbd6a..000000000
--- a/lib/feedparser/tests/wellformed/base/feed_tagline_xml_base_inherit_4.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<!--
-Description: feed tagline content xml:base inherits properly on new element
-Expect:      not bozo and feed['tagline_detail']['base'] == u'http://example.com/parent/'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:base="http://example.com/parent/">
-  <info type="application/xhtml+xml" xml:base="http://example.com/info/"><div xmlns="http://www.w3.org/1999/xhtml">blah blah blah</div></info>
-  <tagline type="application/xhtml+xml"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></tagline>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/feed_title_xml_base.xml b/lib/feedparser/tests/wellformed/base/feed_title_xml_base.xml
deleted file mode 100644
index 3613c680b..000000000
--- a/lib/feedparser/tests/wellformed/base/feed_title_xml_base.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed title content xml:base
-Expect:      not bozo and feed['title_detail']['base'] == u'http://example.com/test/'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <title type="application/xhtml+xml" xml:base="http://example.com/test/"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/feed_title_xml_base_inherit.xml b/lib/feedparser/tests/wellformed/base/feed_title_xml_base_inherit.xml
deleted file mode 100644
index 8c06788b8..000000000
--- a/lib/feedparser/tests/wellformed/base/feed_title_xml_base_inherit.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed title content xml:base inherited from parent element
-Expect:      not bozo and feed['title_detail']['base'] == u'http://example.com/test/'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:base="http://example.com/test/">
-  <title type="application/xhtml+xml"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/feed_title_xml_base_inherit_2.xml b/lib/feedparser/tests/wellformed/base/feed_title_xml_base_inherit_2.xml
deleted file mode 100644
index 8137b7f54..000000000
--- a/lib/feedparser/tests/wellformed/base/feed_title_xml_base_inherit_2.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed title content xml:base overrides parent element
-Expect:      not bozo and feed['title_detail']['base'] == u'http://example.com/test/'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:base="http://example.com/parent/">
-  <title type="application/xhtml+xml" xml:base="http://example.com/test/"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/feed_title_xml_base_inherit_3.xml b/lib/feedparser/tests/wellformed/base/feed_title_xml_base_inherit_3.xml
deleted file mode 100644
index 5123fb5db..000000000
--- a/lib/feedparser/tests/wellformed/base/feed_title_xml_base_inherit_3.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<!--
-Description: feed title content xml:base resets properly on new element
-Expect:      not bozo and feed['title_detail']['base'] == u'http://example.com/test/'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:base="http://example.com/parent/">
-  <info type="application/xhtml+xml" xml:base="http://example.com/info/"><div xmlns="http://www.w3.org/1999/xhtml">blah blah blah</div></info>
-  <title type="application/xhtml+xml" xml:base="http://example.com/test/"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/feed_title_xml_base_inherit_4.xml b/lib/feedparser/tests/wellformed/base/feed_title_xml_base_inherit_4.xml
deleted file mode 100644
index 5675be27c..000000000
--- a/lib/feedparser/tests/wellformed/base/feed_title_xml_base_inherit_4.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<!--
-Description: feed title content xml:base inherits properly on new element
-Expect:      not bozo and feed['title_detail']['base'] == u'http://example.com/parent/'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:base="http://example.com/parent/">
-  <info type="application/xhtml+xml" xml:base="http://example.com/info/"><div xmlns="http://www.w3.org/1999/xhtml">blah blah blah</div></info>
-  <title type="application/xhtml+xml"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_channel_docs_base_content_location.xml b/lib/feedparser/tests/wellformed/base/http_channel_docs_base_content_location.xml
deleted file mode 100644
index 26f7ccd16..000000000
--- a/lib/feedparser/tests/wellformed/base/http_channel_docs_base_content_location.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<!--
-Header:      Content-Location: http://example.com/
-Description: channel docs relative to Content-Location header
-Expect:      not bozo and feed['docs'] == u'http://example.com/relative/uri'
--->
-<rss version="2.0">
-<channel>
-<docs>/relative/uri</docs>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_channel_docs_base_docuri.xml b/lib/feedparser/tests/wellformed/base/http_channel_docs_base_docuri.xml
deleted file mode 100644
index 933567e05..000000000
--- a/lib/feedparser/tests/wellformed/base/http_channel_docs_base_docuri.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: channel docs relative to document URI
-Expect:      not bozo and feed['docs'] == u'http://127.0.0.1:8097/relative/uri'
--->
-<rss version="2.0">
-<channel>
-<docs>/relative/uri</docs>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_channel_link_base_content_location.xml b/lib/feedparser/tests/wellformed/base/http_channel_link_base_content_location.xml
deleted file mode 100644
index 400976b31..000000000
--- a/lib/feedparser/tests/wellformed/base/http_channel_link_base_content_location.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<!--
-Header:      Content-Location: http://example.com/
-Description: channel link relative to Content-Location header
-Expect:      not bozo and feed['link'] == u'http://example.com/relative/uri'
--->
-<rss version="2.0">
-<channel>
-<link>/relative/uri</link>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_channel_link_base_docuri.xml b/lib/feedparser/tests/wellformed/base/http_channel_link_base_docuri.xml
deleted file mode 100644
index 4611b5918..000000000
--- a/lib/feedparser/tests/wellformed/base/http_channel_link_base_docuri.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: channel link relative to document URI
-Expect:      not bozo and feed['link'] == u'http://127.0.0.1:8097/relative/uri'
--->
-<rss version="2.0">
-<channel>
-<link>/relative/uri</link>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_entry_author_url_base_content_location.xml b/lib/feedparser/tests/wellformed/base/http_entry_author_url_base_content_location.xml
deleted file mode 100644
index ad89d1d45..000000000
--- a/lib/feedparser/tests/wellformed/base/http_entry_author_url_base_content_location.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<!--
-Header:      Content-Location: http://example.com/
-Description: entry author url relative to Content-Location header
-Expect:      not bozo and entries[0]['author_detail']['url'] == u'http://example.com/relative/link'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<author>
-  <url>/relative/link</url>
-</author>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_entry_author_url_base_docuri.xml b/lib/feedparser/tests/wellformed/base/http_entry_author_url_base_docuri.xml
deleted file mode 100644
index 90de1ea27..000000000
--- a/lib/feedparser/tests/wellformed/base/http_entry_author_url_base_docuri.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: entry author url relative to document URI
-Expect:      not bozo and entries[0]['author_detail']['url'] == u'http://127.0.0.1:8097/relative/link'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<author>
-  <url>/relative/link</url>
-</author>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_entry_content_base64_base_content_location.xml b/lib/feedparser/tests/wellformed/base/http_entry_content_base64_base_content_location.xml
deleted file mode 100644
index 5bdf866d6..000000000
--- a/lib/feedparser/tests/wellformed/base/http_entry_content_base64_base_content_location.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<!--
-Header:      Content-Location: http://example.com/
-Description: entry content relative to Content-Location header
-Expect:      not bozo and entries[0]['content'][0]['value'] == u'<div><a href="http://example.com/relative/uri">click here</a></div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<content type="text/html" mode="base64">
-PGRpdj48YSBocmVmPSIvcmVsYXRpdmUvdXJpIj5jbGljayBoZXJlPC9hPjwvZGl2Pg==
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_entry_content_base64_base_docuri.xml b/lib/feedparser/tests/wellformed/base/http_entry_content_base64_base_docuri.xml
deleted file mode 100644
index c2672064c..000000000
--- a/lib/feedparser/tests/wellformed/base/http_entry_content_base64_base_docuri.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: entry content relative to document URI
-Expect:      not bozo and entries[0]['content'][0]['value'] == u'<div><a href="http://127.0.0.1:8097/relative/uri">click here</a></div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<content type="text/html" mode="base64">
-PGRpdj48YSBocmVmPSIvcmVsYXRpdmUvdXJpIj5jbGljayBoZXJlPC9hPjwvZGl2Pg==
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_entry_content_base_content_location.xml b/lib/feedparser/tests/wellformed/base/http_entry_content_base_content_location.xml
deleted file mode 100644
index 650fbd93a..000000000
--- a/lib/feedparser/tests/wellformed/base/http_entry_content_base_content_location.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<!--
-Header:      Content-Location: http://example.com/
-Description: entry content relative to Content-Location header
-Expect:      not bozo and entries[0]['content'][0]['value'] == u'<div><a href="http://example.com/relative/uri">click here</a></div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<content type="text/html" mode="escaped">&lt;div>&lt;a href="/relative/uri">click here&lt;/a>&lt;/div></content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_entry_content_base_docuri.xml b/lib/feedparser/tests/wellformed/base/http_entry_content_base_docuri.xml
deleted file mode 100644
index 97c0e437a..000000000
--- a/lib/feedparser/tests/wellformed/base/http_entry_content_base_docuri.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry content relative to document URI
-Expect:      not bozo and entries[0]['content'][0]['value'] == u'<div><a href="http://127.0.0.1:8097/relative/uri">click here</a></div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<content type="text/html" mode="escaped">&lt;div>&lt;a href="/relative/uri">click here&lt;/a>&lt;/div></content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_entry_content_inline_base_content_location.xml b/lib/feedparser/tests/wellformed/base/http_entry_content_inline_base_content_location.xml
deleted file mode 100644
index 718557236..000000000
--- a/lib/feedparser/tests/wellformed/base/http_entry_content_inline_base_content_location.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<!--
-Header:      Content-Location: http://example.com/
-Description: entry content relative to Content-Location header
-Expect:      not bozo and entries[0]['content'][0]['value'] == u'<div><a href="http://example.com/relative/uri">click here</a></div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<content type="application/xhtml+xml" mode="xml"><div xmlns="http://www.w3.org/1999/xhtml"><a href="/relative/uri">click here</a></div></content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_entry_content_inline_base_docuri.xml b/lib/feedparser/tests/wellformed/base/http_entry_content_inline_base_docuri.xml
deleted file mode 100644
index cbd82ca0d..000000000
--- a/lib/feedparser/tests/wellformed/base/http_entry_content_inline_base_docuri.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry content relative to document URI
-Expect:      not bozo and entries[0]['content'][0]['value'] == u'<div><a href="http://127.0.0.1:8097/relative/uri">click here</a></div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<content type="application/xhtml+xml" mode="xml"><div xmlns="http://www.w3.org/1999/xhtml"><a href="/relative/uri">click here</a></div></content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_entry_contributor_url_base_content_location.xml b/lib/feedparser/tests/wellformed/base/http_entry_contributor_url_base_content_location.xml
deleted file mode 100644
index 84f38b96f..000000000
--- a/lib/feedparser/tests/wellformed/base/http_entry_contributor_url_base_content_location.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<!--
-Header:      Content-Location: http://example.com/
-Description: entry contributor url relative to Content-Location header
-Expect:      not bozo and entries[0]['contributors'][0]['url'] == u'http://example.com/relative/link'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<item>
-<contributor>
-  <url>/relative/link</url>
-</contributor>
-</item>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_entry_contributor_url_base_docuri.xml b/lib/feedparser/tests/wellformed/base/http_entry_contributor_url_base_docuri.xml
deleted file mode 100644
index 7bf7738b5..000000000
--- a/lib/feedparser/tests/wellformed/base/http_entry_contributor_url_base_docuri.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: entry contributor url relative to document URI
-Expect:      not bozo and entries[0]['contributors'][0]['url'] == u'http://127.0.0.1:8097/relative/link'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<item>
-<contributor>
-  <url>/relative/link</url>
-</contributor>
-</item>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_entry_id_base_content_location.xml b/lib/feedparser/tests/wellformed/base/http_entry_id_base_content_location.xml
deleted file mode 100644
index 2a3cf901b..000000000
--- a/lib/feedparser/tests/wellformed/base/http_entry_id_base_content_location.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<!--
-Header:      Content-Location: http://example.com/
-Description: entry id relative to Content-Location header
-Expect:      not bozo and entries[0]['id'] == u'http://example.com/relative/link'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-  <id>/relative/link</id>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_entry_id_base_docuri.xml b/lib/feedparser/tests/wellformed/base/http_entry_id_base_docuri.xml
deleted file mode 100644
index a9e146d0d..000000000
--- a/lib/feedparser/tests/wellformed/base/http_entry_id_base_docuri.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry id relative to document URI
-Expect:      not bozo and entries[0]['id'] == u'http://127.0.0.1:8097/relative/link'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-  <id>/relative/link</id>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_entry_link_base_content_location.xml b/lib/feedparser/tests/wellformed/base/http_entry_link_base_content_location.xml
deleted file mode 100644
index b09bde693..000000000
--- a/lib/feedparser/tests/wellformed/base/http_entry_link_base_content_location.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<!--
-Header:      Content-Location: http://example.com/
-Description: entry link href relative to Content-Location header
-Expect:      not bozo and entries[0]['links'][0]['href'] == u'http://example.com/relative/link'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-  <link rel="alternate" type="text/html" href="/relative/link"/>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_entry_link_base_docuri.xml b/lib/feedparser/tests/wellformed/base/http_entry_link_base_docuri.xml
deleted file mode 100644
index ec49b0825..000000000
--- a/lib/feedparser/tests/wellformed/base/http_entry_link_base_docuri.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry link href relative to document URI
-Expect:      not bozo and entries[0]['links'][0]['href'] == u'http://127.0.0.1:8097/relative/link'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-  <link rel="alternate" type="text/html" href="/relative/link"/>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_entry_summary_base64_base_content_location.xml b/lib/feedparser/tests/wellformed/base/http_entry_summary_base64_base_content_location.xml
deleted file mode 100644
index 0833f8112..000000000
--- a/lib/feedparser/tests/wellformed/base/http_entry_summary_base64_base_content_location.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<!--
-Header:      Content-Location: http://example.com/
-Description: entry summary relative to Content-Location header
-Expect:      not bozo and entries[0]['summary'] == u'<div><a href="http://example.com/relative/uri">click here</a></div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<summary type="text/html" mode="base64">
-PGRpdj48YSBocmVmPSIvcmVsYXRpdmUvdXJpIj5jbGljayBoZXJlPC9hPjwvZGl2Pg==
-</summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_entry_summary_base64_base_docuri.xml b/lib/feedparser/tests/wellformed/base/http_entry_summary_base64_base_docuri.xml
deleted file mode 100644
index 4ae879cf7..000000000
--- a/lib/feedparser/tests/wellformed/base/http_entry_summary_base64_base_docuri.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: entry summary relative to document URI
-Expect:      not bozo and entries[0]['summary'] == u'<div><a href="http://127.0.0.1:8097/relative/uri">click here</a></div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<summary type="text/html" mode="base64">
-PGRpdj48YSBocmVmPSIvcmVsYXRpdmUvdXJpIj5jbGljayBoZXJlPC9hPjwvZGl2Pg==
-</summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_entry_summary_base_content_location.xml b/lib/feedparser/tests/wellformed/base/http_entry_summary_base_content_location.xml
deleted file mode 100644
index 031cbdcce..000000000
--- a/lib/feedparser/tests/wellformed/base/http_entry_summary_base_content_location.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<!--
-Header:      Content-Location: http://example.com/
-Description: entry summary relative to Content-Location header
-Expect:      not bozo and entries[0]['summary'] == u'<div><a href="http://example.com/relative/uri">click here</a></div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<summary type="text/html" mode="escaped">&lt;div>&lt;a href="/relative/uri">click here&lt;/a>&lt;/div></summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_entry_summary_base_docuri.xml b/lib/feedparser/tests/wellformed/base/http_entry_summary_base_docuri.xml
deleted file mode 100644
index 27279f602..000000000
--- a/lib/feedparser/tests/wellformed/base/http_entry_summary_base_docuri.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry summary relative to document URI
-Expect:      not bozo and entries[0]['summary'] == u'<div><a href="http://127.0.0.1:8097/relative/uri">click here</a></div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<summary type="text/html" mode="escaped">&lt;div>&lt;a href="/relative/uri">click here&lt;/a>&lt;/div></summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_entry_summary_inline_base_content_location.xml b/lib/feedparser/tests/wellformed/base/http_entry_summary_inline_base_content_location.xml
deleted file mode 100644
index 32c365e5c..000000000
--- a/lib/feedparser/tests/wellformed/base/http_entry_summary_inline_base_content_location.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<!--
-Header:      Content-Location: http://example.com/
-Description: entry summary relative to Content-Location header
-Expect:      not bozo and entries[0]['summary'] == u'<div><a href="http://example.com/relative/uri">click here</a></div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<summary type="application/xhtml+xml" mode="xml"><div xmlns="http://www.w3.org/1999/xhtml"><a href="/relative/uri">click here</a></div></summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_entry_summary_inline_base_docuri.xml b/lib/feedparser/tests/wellformed/base/http_entry_summary_inline_base_docuri.xml
deleted file mode 100644
index ea7820db2..000000000
--- a/lib/feedparser/tests/wellformed/base/http_entry_summary_inline_base_docuri.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry summary relative to document URI
-Expect:      not bozo and entries[0]['summary'] == u'<div><a href="http://127.0.0.1:8097/relative/uri">click here</a></div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<summary type="application/xhtml+xml" mode="xml"><div xmlns="http://www.w3.org/1999/xhtml"><a href="/relative/uri">click here</a></div></summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_entry_title_base64_base_content_location.xml b/lib/feedparser/tests/wellformed/base/http_entry_title_base64_base_content_location.xml
deleted file mode 100644
index e23bdbb5a..000000000
--- a/lib/feedparser/tests/wellformed/base/http_entry_title_base64_base_content_location.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<!--
-Header:      Content-Location: http://example.com/
-Description: entry title relative to Content-Location header
-Expect:      not bozo and entries[0]['title'] == u'<div><a href="http://example.com/relative/uri">click here</a></div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<title type="text/html" mode="base64">
-PGRpdj48YSBocmVmPSIvcmVsYXRpdmUvdXJpIj5jbGljayBoZXJlPC9hPjwvZGl2Pg==
-</title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_entry_title_base64_base_docuri.xml b/lib/feedparser/tests/wellformed/base/http_entry_title_base64_base_docuri.xml
deleted file mode 100644
index b9a673f0a..000000000
--- a/lib/feedparser/tests/wellformed/base/http_entry_title_base64_base_docuri.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: entry title relative to document URI
-Expect:      not bozo and entries[0]['title'] == u'<div><a href="http://127.0.0.1:8097/relative/uri">click here</a></div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<title type="text/html" mode="base64">
-PGRpdj48YSBocmVmPSIvcmVsYXRpdmUvdXJpIj5jbGljayBoZXJlPC9hPjwvZGl2Pg==
-</title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_entry_title_base_content_location.xml b/lib/feedparser/tests/wellformed/base/http_entry_title_base_content_location.xml
deleted file mode 100644
index 9a0bc2b44..000000000
--- a/lib/feedparser/tests/wellformed/base/http_entry_title_base_content_location.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<!--
-Header:      Content-Location: http://example.com/
-Description: entry title relative to Content-Location header
-Expect:      not bozo and entries[0]['title'] == u'<div><a href="http://example.com/relative/uri">click here</a></div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<title type="text/html" mode="escaped">&lt;div>&lt;a href="/relative/uri">click here&lt;/a>&lt;/div></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_entry_title_base_docuri.xml b/lib/feedparser/tests/wellformed/base/http_entry_title_base_docuri.xml
deleted file mode 100644
index 776fbcde6..000000000
--- a/lib/feedparser/tests/wellformed/base/http_entry_title_base_docuri.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry title relative to document URI
-Expect:      not bozo and entries[0]['title'] == u'<div><a href="http://127.0.0.1:8097/relative/uri">click here</a></div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<title type="text/html" mode="escaped">&lt;div>&lt;a href="/relative/uri">click here&lt;/a>&lt;/div></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_entry_title_inline_base_content_location.xml b/lib/feedparser/tests/wellformed/base/http_entry_title_inline_base_content_location.xml
deleted file mode 100644
index 95f6bc07a..000000000
--- a/lib/feedparser/tests/wellformed/base/http_entry_title_inline_base_content_location.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<!--
-Header:      Content-Location: http://example.com/
-Description: entry title relative to Content-Location header
-Expect:      not bozo and entries[0]['title'] == u'<div><a href="http://example.com/relative/uri">click here</a></div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<title type="application/xhtml+xml" mode="xml"><div xmlns="http://www.w3.org/1999/xhtml"><a href="/relative/uri">click here</a></div></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_entry_title_inline_base_docuri.xml b/lib/feedparser/tests/wellformed/base/http_entry_title_inline_base_docuri.xml
deleted file mode 100644
index cb7668936..000000000
--- a/lib/feedparser/tests/wellformed/base/http_entry_title_inline_base_docuri.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry title relative to document URI
-Expect:      not bozo and entries[0]['title'] == u'<div><a href="http://127.0.0.1:8097/relative/uri">click here</a></div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<title type="application/xhtml+xml" mode="xml"><div xmlns="http://www.w3.org/1999/xhtml"><a href="/relative/uri">click here</a></div></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_feed_author_url_base_content_location.xml b/lib/feedparser/tests/wellformed/base/http_feed_author_url_base_content_location.xml
deleted file mode 100644
index f9c757fc8..000000000
--- a/lib/feedparser/tests/wellformed/base/http_feed_author_url_base_content_location.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<!--
-Header:      Content-Location: http://example.com/
-Description: feed author url relative to Content-Location header
-Expect:      not bozo and feed['author_detail']['url'] == u'http://example.com/relative/link'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<author>
-  <url>/relative/link</url>
-</author>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_feed_author_url_base_docuri.xml b/lib/feedparser/tests/wellformed/base/http_feed_author_url_base_docuri.xml
deleted file mode 100644
index f4c5ab2be..000000000
--- a/lib/feedparser/tests/wellformed/base/http_feed_author_url_base_docuri.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: feed author url relative to document URI
-Expect:      not bozo and feed['author_detail']['url'] == u'http://127.0.0.1:8097/relative/link'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<author>
-  <url>/relative/link</url>
-</author>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_feed_contributor_url_base_content_location.xml b/lib/feedparser/tests/wellformed/base/http_feed_contributor_url_base_content_location.xml
deleted file mode 100644
index 07c762e62..000000000
--- a/lib/feedparser/tests/wellformed/base/http_feed_contributor_url_base_content_location.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<!--
-Header:      Content-Location: http://example.com/
-Description: feed contributor url relative to Content-Location header
-Expect:      not bozo and feed['contributors'][0]['url'] == u'http://example.com/relative/link'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<contributor>
-  <url>/relative/link</url>
-</contributor>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_feed_contributor_url_base_docuri.xml b/lib/feedparser/tests/wellformed/base/http_feed_contributor_url_base_docuri.xml
deleted file mode 100644
index 962836c82..000000000
--- a/lib/feedparser/tests/wellformed/base/http_feed_contributor_url_base_docuri.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: feed contributor url relative to document URI
-Expect:      not bozo and feed['contributors'][0]['url'] == u'http://127.0.0.1:8097/relative/link'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<contributor>
-  <url>/relative/link</url>
-</contributor>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_feed_copyright_base64_base_content_location.xml b/lib/feedparser/tests/wellformed/base/http_feed_copyright_base64_base_content_location.xml
deleted file mode 100644
index 045f730ec..000000000
--- a/lib/feedparser/tests/wellformed/base/http_feed_copyright_base64_base_content_location.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<!--
-Header:      Content-Location: http://example.com/
-Description: feed copyright relative to Content-Location header
-Expect:      not bozo and feed['copyright'] == u'<div><a href="http://example.com/relative/uri">click here</a></div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<copyright type="text/html" mode="base64">
-PGRpdj48YSBocmVmPSIvcmVsYXRpdmUvdXJpIj5jbGljayBoZXJlPC9hPjwvZGl2Pg==
-</copyright>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_feed_copyright_base64_base_docuri.xml b/lib/feedparser/tests/wellformed/base/http_feed_copyright_base64_base_docuri.xml
deleted file mode 100644
index 717641426..000000000
--- a/lib/feedparser/tests/wellformed/base/http_feed_copyright_base64_base_docuri.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: feed copyright relative to document URI
-Expect:      not bozo and feed['copyright'] == u'<div><a href="http://127.0.0.1:8097/relative/uri">click here</a></div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<copyright type="text/html" mode="base64">
-PGRpdj48YSBocmVmPSIvcmVsYXRpdmUvdXJpIj5jbGljayBoZXJlPC9hPjwvZGl2Pg==
-</copyright>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_feed_copyright_base_content_location.xml b/lib/feedparser/tests/wellformed/base/http_feed_copyright_base_content_location.xml
deleted file mode 100644
index a15fe2a01..000000000
--- a/lib/feedparser/tests/wellformed/base/http_feed_copyright_base_content_location.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<!--
-Header:      Content-Location: http://example.com/
-Description: feed copyright relative to Content-Location header
-Expect:      not bozo and feed['copyright'] == u'<div><a href="http://example.com/relative/uri">click here</a></div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<copyright type="text/html" mode="escaped">&lt;div>&lt;a href="/relative/uri">click here&lt;/a>&lt;/div></copyright>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_feed_copyright_base_docuri.xml b/lib/feedparser/tests/wellformed/base/http_feed_copyright_base_docuri.xml
deleted file mode 100644
index ff363af77..000000000
--- a/lib/feedparser/tests/wellformed/base/http_feed_copyright_base_docuri.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed copyright relative to document URI
-Expect:      not bozo and feed['copyright'] == u'<div><a href="http://127.0.0.1:8097/relative/uri">click here</a></div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<copyright type="text/html" mode="escaped">&lt;div>&lt;a href="/relative/uri">click here&lt;/a>&lt;/div></copyright>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_feed_copyright_inline_base_content_location.xml b/lib/feedparser/tests/wellformed/base/http_feed_copyright_inline_base_content_location.xml
deleted file mode 100644
index f9e8555f3..000000000
--- a/lib/feedparser/tests/wellformed/base/http_feed_copyright_inline_base_content_location.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<!--
-Header:      Content-Location: http://example.com/
-Description: feed copyright relative to Content-Location header
-Expect:      not bozo and feed['copyright'] == u'<div><a href="http://example.com/relative/uri">click here</a></div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<copyright type="application/xhtml+xml" mode="xml"><div xmlns="http://www.w3.org/1999/xhtml"><a href="/relative/uri">click here</a></div></copyright>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_feed_copyright_inline_base_docuri.xml b/lib/feedparser/tests/wellformed/base/http_feed_copyright_inline_base_docuri.xml
deleted file mode 100644
index b076c7a1b..000000000
--- a/lib/feedparser/tests/wellformed/base/http_feed_copyright_inline_base_docuri.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed copyright relative to document URI
-Expect:      not bozo and feed['copyright'] == u'<div><a href="http://127.0.0.1:8097/relative/uri">click here</a></div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<copyright type="application/xhtml+xml" mode="xml"><div xmlns="http://www.w3.org/1999/xhtml"><a href="/relative/uri">click here</a></div></copyright>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_feed_generator_url_base_content_location.xml b/lib/feedparser/tests/wellformed/base/http_feed_generator_url_base_content_location.xml
deleted file mode 100644
index 3b418bc0d..000000000
--- a/lib/feedparser/tests/wellformed/base/http_feed_generator_url_base_content_location.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<!--
-Header:      Content-Location: http://example.com/
-Description: feed generator url relative to Content-Location header
-Expect:      not bozo and feed['generator_detail']['url'] == u'http://example.com/relative/link'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<generator url="/relative/link" version="2.66">Movable Type</generator>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_feed_generator_url_base_docuri.xml b/lib/feedparser/tests/wellformed/base/http_feed_generator_url_base_docuri.xml
deleted file mode 100644
index b9d9e66e0..000000000
--- a/lib/feedparser/tests/wellformed/base/http_feed_generator_url_base_docuri.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed generator url relative to document URI
-Expect:      not bozo and feed['generator_detail']['url'] == u'http://127.0.0.1:8097/relative/link'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<generator url="/relative/link" version="2.66">Movable Type</generator>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_feed_id_base_content_location.xml b/lib/feedparser/tests/wellformed/base/http_feed_id_base_content_location.xml
deleted file mode 100644
index 3f8b6ae62..000000000
--- a/lib/feedparser/tests/wellformed/base/http_feed_id_base_content_location.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<!--
-Header:      Content-Location: http://example.com/
-Description: feed id relative to Content-Location header
-Expect:      not bozo and feed['id'] == u'http://example.com/relative/link'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <id>/relative/link</id>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_feed_id_base_docuri.xml b/lib/feedparser/tests/wellformed/base/http_feed_id_base_docuri.xml
deleted file mode 100644
index a4c670224..000000000
--- a/lib/feedparser/tests/wellformed/base/http_feed_id_base_docuri.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed id relative to document URI
-Expect:      not bozo and feed['id'] == u'http://127.0.0.1:8097/relative/link'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <id>/relative/link</id>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_feed_info_base64_base_content_location.xml b/lib/feedparser/tests/wellformed/base/http_feed_info_base64_base_content_location.xml
deleted file mode 100644
index 6bb78e83c..000000000
--- a/lib/feedparser/tests/wellformed/base/http_feed_info_base64_base_content_location.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<!--
-Header:      Content-Location: http://example.com/
-Description: feed info relative to Content-Location header
-Expect:      not bozo and feed['info'] == u'<div><a href="http://example.com/relative/uri">click here</a></div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<info type="text/html" mode="base64">
-PGRpdj48YSBocmVmPSIvcmVsYXRpdmUvdXJpIj5jbGljayBoZXJlPC9hPjwvZGl2Pg==
-</info>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_feed_info_base64_base_docuri.xml b/lib/feedparser/tests/wellformed/base/http_feed_info_base64_base_docuri.xml
deleted file mode 100644
index 66ba7854f..000000000
--- a/lib/feedparser/tests/wellformed/base/http_feed_info_base64_base_docuri.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: feed info relative to document URI
-Expect:      not bozo and feed['info'] == u'<div><a href="http://127.0.0.1:8097/relative/uri">click here</a></div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<info type="text/html" mode="base64">
-PGRpdj48YSBocmVmPSIvcmVsYXRpdmUvdXJpIj5jbGljayBoZXJlPC9hPjwvZGl2Pg==
-</info>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_feed_info_base_content_location.xml b/lib/feedparser/tests/wellformed/base/http_feed_info_base_content_location.xml
deleted file mode 100644
index 78a09e5af..000000000
--- a/lib/feedparser/tests/wellformed/base/http_feed_info_base_content_location.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<!--
-Header:      Content-Location: http://example.com/
-Description: feed info relative to Content-Location header
-Expect:      not bozo and feed['info'] == u'<div><a href="http://example.com/relative/uri">click here</a></div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<info type="text/html" mode="escaped">&lt;div>&lt;a href="/relative/uri">click here&lt;/a>&lt;/div></info>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_feed_info_base_docuri.xml b/lib/feedparser/tests/wellformed/base/http_feed_info_base_docuri.xml
deleted file mode 100644
index a19e737e8..000000000
--- a/lib/feedparser/tests/wellformed/base/http_feed_info_base_docuri.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed info relative to document URI
-Expect:      not bozo and feed['info'] == u'<div><a href="http://127.0.0.1:8097/relative/uri">click here</a></div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<info type="text/html" mode="escaped">&lt;div>&lt;a href="/relative/uri">click here&lt;/a>&lt;/div></info>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_feed_info_inline_base_content_location.xml b/lib/feedparser/tests/wellformed/base/http_feed_info_inline_base_content_location.xml
deleted file mode 100644
index 8e60e1572..000000000
--- a/lib/feedparser/tests/wellformed/base/http_feed_info_inline_base_content_location.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<!--
-Header:      Content-Location: http://example.com/
-Description: feed info relative to Content-Location header
-Expect:      not bozo and feed['info'] == u'<div><a href="http://example.com/relative/uri">click here</a></div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<info type="application/xhtml+xml" mode="xml"><div xmlns="http://www.w3.org/1999/xhtml"><a href="/relative/uri">click here</a></div></info>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_feed_info_inline_base_docuri.xml b/lib/feedparser/tests/wellformed/base/http_feed_info_inline_base_docuri.xml
deleted file mode 100644
index 41bd64a1a..000000000
--- a/lib/feedparser/tests/wellformed/base/http_feed_info_inline_base_docuri.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed info relative to document URI
-Expect:      not bozo and feed['info'] == u'<div><a href="http://127.0.0.1:8097/relative/uri">click here</a></div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<info type="application/xhtml+xml" mode="xml"><div xmlns="http://www.w3.org/1999/xhtml"><a href="/relative/uri">click here</a></div></info>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_feed_link_base_content_location.xml b/lib/feedparser/tests/wellformed/base/http_feed_link_base_content_location.xml
deleted file mode 100644
index 3c416b1f4..000000000
--- a/lib/feedparser/tests/wellformed/base/http_feed_link_base_content_location.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<!--
-Header:      Content-Location: http://example.com/
-Description: feed link href relative to Content-Location header
-Expect:      not bozo and feed['links'][0]['href'] == u'http://example.com/relative/link'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <link rel="alternate" type="text/html" href="/relative/link"/>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_feed_link_base_docuri.xml b/lib/feedparser/tests/wellformed/base/http_feed_link_base_docuri.xml
deleted file mode 100644
index ab7fe93d7..000000000
--- a/lib/feedparser/tests/wellformed/base/http_feed_link_base_docuri.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed link href relative to document URI
-Expect:      not bozo and feed['links'][0]['href'] == u'http://127.0.0.1:8097/relative/link'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <link rel="alternate" type="text/html" href="/relative/link"/>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_feed_tagline_base64_base_content_location.xml b/lib/feedparser/tests/wellformed/base/http_feed_tagline_base64_base_content_location.xml
deleted file mode 100644
index cfa216da7..000000000
--- a/lib/feedparser/tests/wellformed/base/http_feed_tagline_base64_base_content_location.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<!--
-Header:      Content-Location: http://example.com/
-Description: feed tagline relative to Content-Location header
-Expect:      not bozo and feed['tagline'] == u'<div><a href="http://example.com/relative/uri">click here</a></div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<tagline type="text/html" mode="base64">
-PGRpdj48YSBocmVmPSIvcmVsYXRpdmUvdXJpIj5jbGljayBoZXJlPC9hPjwvZGl2Pg==
-</tagline>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_feed_tagline_base64_base_docuri.xml b/lib/feedparser/tests/wellformed/base/http_feed_tagline_base64_base_docuri.xml
deleted file mode 100644
index 2bd632327..000000000
--- a/lib/feedparser/tests/wellformed/base/http_feed_tagline_base64_base_docuri.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: feed tagline relative to document URI
-Expect:      not bozo and feed['tagline'] == u'<div><a href="http://127.0.0.1:8097/relative/uri">click here</a></div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<tagline type="text/html" mode="base64">
-PGRpdj48YSBocmVmPSIvcmVsYXRpdmUvdXJpIj5jbGljayBoZXJlPC9hPjwvZGl2Pg==
-</tagline>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_feed_tagline_base_content_location.xml b/lib/feedparser/tests/wellformed/base/http_feed_tagline_base_content_location.xml
deleted file mode 100644
index 29e93e545..000000000
--- a/lib/feedparser/tests/wellformed/base/http_feed_tagline_base_content_location.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<!--
-Header:      Content-Location: http://example.com/
-Description: feed tagline relative to Content-Location header
-Expect:      not bozo and feed['tagline'] == u'<div><a href="http://example.com/relative/uri">click here</a></div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<tagline type="text/html" mode="escaped">&lt;div>&lt;a href="/relative/uri">click here&lt;/a>&lt;/div></tagline>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_feed_tagline_base_docuri.xml b/lib/feedparser/tests/wellformed/base/http_feed_tagline_base_docuri.xml
deleted file mode 100644
index 2fe14caa3..000000000
--- a/lib/feedparser/tests/wellformed/base/http_feed_tagline_base_docuri.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed tagline relative to document URI
-Expect:      not bozo and feed['tagline'] == u'<div><a href="http://127.0.0.1:8097/relative/uri">click here</a></div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<tagline type="text/html" mode="escaped">&lt;div>&lt;a href="/relative/uri">click here&lt;/a>&lt;/div></tagline>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_feed_tagline_inline_base_content_location.xml b/lib/feedparser/tests/wellformed/base/http_feed_tagline_inline_base_content_location.xml
deleted file mode 100644
index 619b3a6ac..000000000
--- a/lib/feedparser/tests/wellformed/base/http_feed_tagline_inline_base_content_location.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<!--
-Header:      Content-Location: http://example.com/
-Description: feed tagline relative to Content-Location header
-Expect:      not bozo and feed['tagline'] == u'<div><a href="http://example.com/relative/uri">click here</a></div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<tagline type="application/xhtml+xml" mode="xml"><div xmlns="http://www.w3.org/1999/xhtml"><a href="/relative/uri">click here</a></div></tagline>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_feed_tagline_inline_base_docuri.xml b/lib/feedparser/tests/wellformed/base/http_feed_tagline_inline_base_docuri.xml
deleted file mode 100644
index e5a05f409..000000000
--- a/lib/feedparser/tests/wellformed/base/http_feed_tagline_inline_base_docuri.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed tagline relative to document URI
-Expect:      not bozo and feed['tagline'] == u'<div><a href="http://127.0.0.1:8097/relative/uri">click here</a></div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<tagline type="application/xhtml+xml" mode="xml"><div xmlns="http://www.w3.org/1999/xhtml"><a href="/relative/uri">click here</a></div></tagline>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_feed_title_base64_base_content_location.xml b/lib/feedparser/tests/wellformed/base/http_feed_title_base64_base_content_location.xml
deleted file mode 100644
index 38975b42e..000000000
--- a/lib/feedparser/tests/wellformed/base/http_feed_title_base64_base_content_location.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<!--
-Header:      Content-Location: http://example.com/
-Description: feed title relative to Content-Location header
-Expect:      not bozo and feed['title'] == u'<div><a href="http://example.com/relative/uri">click here</a></div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title type="text/html" mode="base64">
-PGRpdj48YSBocmVmPSIvcmVsYXRpdmUvdXJpIj5jbGljayBoZXJlPC9hPjwvZGl2Pg==
-</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_feed_title_base64_base_docuri.xml b/lib/feedparser/tests/wellformed/base/http_feed_title_base64_base_docuri.xml
deleted file mode 100644
index 88ee5ab39..000000000
--- a/lib/feedparser/tests/wellformed/base/http_feed_title_base64_base_docuri.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: feed title relative to document URI
-Expect:      not bozo and feed['title'] == u'<div><a href="http://127.0.0.1:8097/relative/uri">click here</a></div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title type="text/html" mode="base64">
-PGRpdj48YSBocmVmPSIvcmVsYXRpdmUvdXJpIj5jbGljayBoZXJlPC9hPjwvZGl2Pg==
-</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_feed_title_base_content_location.xml b/lib/feedparser/tests/wellformed/base/http_feed_title_base_content_location.xml
deleted file mode 100644
index a0d294068..000000000
--- a/lib/feedparser/tests/wellformed/base/http_feed_title_base_content_location.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<!--
-Header:      Content-Location: http://example.com/
-Description: feed title relative to Content-Location header
-Expect:      not bozo and feed['title'] == u'<div><a href="http://example.com/relative/uri">click here</a></div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title type="text/html" mode="escaped">&lt;div>&lt;a href="/relative/uri">click here&lt;/a>&lt;/div></title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_feed_title_base_docuri.xml b/lib/feedparser/tests/wellformed/base/http_feed_title_base_docuri.xml
deleted file mode 100644
index 0a9a94144..000000000
--- a/lib/feedparser/tests/wellformed/base/http_feed_title_base_docuri.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed title relative to document URI
-Expect:      not bozo and feed['title'] == u'<div><a href="http://127.0.0.1:8097/relative/uri">click here</a></div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title type="text/html" mode="escaped">&lt;div>&lt;a href="/relative/uri">click here&lt;/a>&lt;/div></title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_feed_title_inline_base_content_location.xml b/lib/feedparser/tests/wellformed/base/http_feed_title_inline_base_content_location.xml
deleted file mode 100644
index 2287791d6..000000000
--- a/lib/feedparser/tests/wellformed/base/http_feed_title_inline_base_content_location.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<!--
-Header:      Content-Location: http://example.com/
-Description: feed title relative to Content-Location header
-Expect:      not bozo and feed['title'] == u'<div><a href="http://example.com/relative/uri">click here</a></div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title type="application/xhtml+xml" mode="xml"><div xmlns="http://www.w3.org/1999/xhtml"><a href="/relative/uri">click here</a></div></title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_feed_title_inline_base_docuri.xml b/lib/feedparser/tests/wellformed/base/http_feed_title_inline_base_docuri.xml
deleted file mode 100644
index 2eb83ad46..000000000
--- a/lib/feedparser/tests/wellformed/base/http_feed_title_inline_base_docuri.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed title relative to document URI
-Expect:      not bozo and feed['title'] == u'<div><a href="http://127.0.0.1:8097/relative/uri">click here</a></div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title type="application/xhtml+xml" mode="xml"><div xmlns="http://www.w3.org/1999/xhtml"><a href="/relative/uri">click here</a></div></title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_item_body_base_content_location.xml b/lib/feedparser/tests/wellformed/base/http_item_body_base_content_location.xml
deleted file mode 100644
index 036295ac8..000000000
--- a/lib/feedparser/tests/wellformed/base/http_item_body_base_content_location.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<!--
-Header:      Content-Location: http://example.com/
-Description: item body relative to Content-Location header
-Expect:      not bozo and entries[0]['content'][0]['value'] == u'<a href="http://example.com/relative/uri">click here</a>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<body><a href="/relative/uri">click here</a></body>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_item_body_base_docuri.xml b/lib/feedparser/tests/wellformed/base/http_item_body_base_docuri.xml
deleted file mode 100644
index 1abea1066..000000000
--- a/lib/feedparser/tests/wellformed/base/http_item_body_base_docuri.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item body relative to document URI
-Expect:      not bozo and entries[0]['content'][0]['value'] == u'<a href="http://127.0.0.1:8097/relative/uri">click here</a>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<body><a href="/relative/uri">click here</a></body>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_item_comments_base_content_location.xml b/lib/feedparser/tests/wellformed/base/http_item_comments_base_content_location.xml
deleted file mode 100644
index 128cdddd2..000000000
--- a/lib/feedparser/tests/wellformed/base/http_item_comments_base_content_location.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<!--
-Header:      Content-Location: http://example.com/
-Description: item comments relative to Content-Location header
-Expect:      not bozo and entries[0]['comments'] == u'http://example.com/relative/uri'
--->
-<rss version="2.0">
-<channel>
-<item>
-<comments>/relative/uri</comments>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_item_comments_base_docuri.xml b/lib/feedparser/tests/wellformed/base/http_item_comments_base_docuri.xml
deleted file mode 100644
index a42a28481..000000000
--- a/lib/feedparser/tests/wellformed/base/http_item_comments_base_docuri.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item comments relative to document URI
-Expect:      not bozo and entries[0]['comments'] == u'http://127.0.0.1:8097/relative/uri'
--->
-<rss version="2.0">
-<channel>
-<item>
-<comments>/relative/uri</comments>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_item_content_encoded_base_content_location.xml b/lib/feedparser/tests/wellformed/base/http_item_content_encoded_base_content_location.xml
deleted file mode 100644
index 03526eba2..000000000
--- a/lib/feedparser/tests/wellformed/base/http_item_content_encoded_base_content_location.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<!--
-Header:      Content-Location: http://example.com/
-Description: item content:encoded relative to Content-Location header
-Expect:      not bozo and entries[0]['content'][0]['value'] == u'<a href="http://example.com/relative/uri">click here</a>'
--->
-<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
-<channel>
-<item>
-<content:encoded>&lt;a href="/relative/uri">click here&lt;/a></content:encoded>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_item_content_encoded_base_docuri.xml b/lib/feedparser/tests/wellformed/base/http_item_content_encoded_base_docuri.xml
deleted file mode 100644
index d7e7430b1..000000000
--- a/lib/feedparser/tests/wellformed/base/http_item_content_encoded_base_docuri.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item content:encoded relative to document URI
-Expect:      not bozo and entries[0]['content'][0]['value'] == u'<a href="http://127.0.0.1:8097/relative/uri">click here</a>'
--->
-<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
-<channel>
-<item>
-<content:encoded>&lt;a href="/relative/uri">click here&lt;/a></content:encoded>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_item_description_base_content_location.xml b/lib/feedparser/tests/wellformed/base/http_item_description_base_content_location.xml
deleted file mode 100644
index f935976f0..000000000
--- a/lib/feedparser/tests/wellformed/base/http_item_description_base_content_location.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<!--
-Header:      Content-Location: http://example.com/
-Description: item description relative to Content-Location header
-Expect:      not bozo and entries[0]['description'] == u'<a href="http://example.com/relative/uri">click here</a>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;a href="/relative/uri">click here&lt;/a></description>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_item_description_base_docuri.xml b/lib/feedparser/tests/wellformed/base/http_item_description_base_docuri.xml
deleted file mode 100644
index 0e56e0a89..000000000
--- a/lib/feedparser/tests/wellformed/base/http_item_description_base_docuri.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item description relative to document URI
-Expect:      not bozo and entries[0]['description'] == u'<a href="http://127.0.0.1:8097/relative/uri">click here</a>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;a href="/relative/uri">click here&lt;/a></description>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_item_description_spaces.xml b/lib/feedparser/tests/wellformed/base/http_item_description_spaces.xml
deleted file mode 100644
index 1efc8b7c3..000000000
--- a/lib/feedparser/tests/wellformed/base/http_item_description_spaces.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item description relative to document URI
-Expect:      not bozo and entries[0]['description'] == u'<a href="http://127.0.0.1:8097/relative/uri">click here</a>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;a href=" /relative/uri ">click here&lt;/a></description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/base/http_item_fullitem_base_content_location.xml b/lib/feedparser/tests/wellformed/base/http_item_fullitem_base_content_location.xml
deleted file mode 100644
index a10d10545..000000000
--- a/lib/feedparser/tests/wellformed/base/http_item_fullitem_base_content_location.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<!--
-Header:      Content-Location: http://example.com/
-Description: item fullitem relative to Content-Location header
-Expect:      not bozo and entries[0]['content'][0]['value'] == u'<a href="http://example.com/relative/uri">click here</a>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<fullitem>&lt;a href="/relative/uri">click here&lt;/a></fullitem>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_item_fullitem_base_docuri.xml b/lib/feedparser/tests/wellformed/base/http_item_fullitem_base_docuri.xml
deleted file mode 100644
index 145fb7c10..000000000
--- a/lib/feedparser/tests/wellformed/base/http_item_fullitem_base_docuri.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item fullitem relative to document URI
-Expect:      not bozo and entries[0]['content'][0]['value'] == u'<a href="http://127.0.0.1:8097/relative/uri">click here</a>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<fullitem>&lt;a href="/relative/uri">click here&lt;/a></fullitem>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_item_link_base_content_location.xml b/lib/feedparser/tests/wellformed/base/http_item_link_base_content_location.xml
deleted file mode 100644
index ad5fec181..000000000
--- a/lib/feedparser/tests/wellformed/base/http_item_link_base_content_location.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<!--
-Header:      Content-Location: http://example.com/
-Description: item link relative to Content-Location header
-Expect:      not bozo and entries[0]['link'] == u'http://example.com/relative/uri'
--->
-<rss version="2.0">
-<channel>
-<item>
-<link>/relative/uri</link>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_item_link_base_docuri.xml b/lib/feedparser/tests/wellformed/base/http_item_link_base_docuri.xml
deleted file mode 100644
index c3dabac3a..000000000
--- a/lib/feedparser/tests/wellformed/base/http_item_link_base_docuri.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item link relative to document URI
-Expect:      not bozo and entries[0]['link'] == u'http://127.0.0.1:8097/relative/uri'
--->
-<rss version="2.0">
-<channel>
-<item>
-<link>/relative/uri</link>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_item_wfw_commentRSS_base_content_location.xml b/lib/feedparser/tests/wellformed/base/http_item_wfw_commentRSS_base_content_location.xml
deleted file mode 100644
index fe5c1a721..000000000
--- a/lib/feedparser/tests/wellformed/base/http_item_wfw_commentRSS_base_content_location.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<!--
-Header:      Content-Location: http://example.com/
-Description: item wfw:commentRSS relative to Content-Location header
-Expect:      not bozo and entries[0]['wfw_commentrss'] == u'http://example.com/relative/uri'
--->
-<rss version="2.0" xmlns:wfw="http://wellformedweb.org/CommentAPI/">
-<channel>
-<item>
-<wfw:commentRSS>/relative/uri</wfw:commentRSS>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_item_wfw_commentRSS_base_docuri.xml b/lib/feedparser/tests/wellformed/base/http_item_wfw_commentRSS_base_docuri.xml
deleted file mode 100644
index 0704efdbd..000000000
--- a/lib/feedparser/tests/wellformed/base/http_item_wfw_commentRSS_base_docuri.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item wfw:commentRSS relative to document URI
-Expect:      not bozo and entries[0]['wfw_commentrss'] == u'http://127.0.0.1:8097/relative/uri'
--->
-<rss version="2.0" xmlns:wfw="http://wellformedweb.org/CommentAPI/">
-<channel>
-<item>
-<wfw:commentRSS>/relative/uri</wfw:commentRSS>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_item_wfw_comment_base_content_location.xml b/lib/feedparser/tests/wellformed/base/http_item_wfw_comment_base_content_location.xml
deleted file mode 100644
index f15c73a17..000000000
--- a/lib/feedparser/tests/wellformed/base/http_item_wfw_comment_base_content_location.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<!--
-Header:      Content-Location: http://example.com/
-Description: item wfw:comment relative to Content-Location header
-Expect:      not bozo and entries[0]['wfw_comment'] == u'http://example.com/relative/uri'
--->
-<rss version="2.0" xmlns:wfw="http://wellformedweb.org/CommentAPI/">
-<channel>
-<item>
-<wfw:comment>/relative/uri</wfw:comment>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_item_wfw_comment_base_docuri.xml b/lib/feedparser/tests/wellformed/base/http_item_wfw_comment_base_docuri.xml
deleted file mode 100644
index f01880b12..000000000
--- a/lib/feedparser/tests/wellformed/base/http_item_wfw_comment_base_docuri.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item wfw:comment relative to document URI
-Expect:      not bozo and entries[0]['wfw_comment'] == u'http://127.0.0.1:8097/relative/uri'
--->
-<rss version="2.0" xmlns:wfw="http://wellformedweb.org/CommentAPI/">
-<channel>
-<item>
-<wfw:comment>/relative/uri</wfw:comment>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_item_xhtml_body_base_content_location.xml b/lib/feedparser/tests/wellformed/base/http_item_xhtml_body_base_content_location.xml
deleted file mode 100644
index a30fdcea7..000000000
--- a/lib/feedparser/tests/wellformed/base/http_item_xhtml_body_base_content_location.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<!--
-Header:      Content-Location: http://example.com/
-Description: item body relative to Content-Location header
-Expect:      not bozo and entries[0]['content'][0]['value'] == u'<a href="http://example.com/relative/uri">click here</a>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<body xmlns="http://www.w3.org/1999/xhtml"><a href="/relative/uri">click here</a></body>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_item_xhtml_body_base_docuri.xml b/lib/feedparser/tests/wellformed/base/http_item_xhtml_body_base_docuri.xml
deleted file mode 100644
index c7a441ea3..000000000
--- a/lib/feedparser/tests/wellformed/base/http_item_xhtml_body_base_docuri.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item body relative to document URI
-Expect:      not bozo and entries[0]['content'][0]['value'] == u'<a href="http://127.0.0.1:8097/relative/uri">click here</a>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<body xmlns="http://www.w3.org/1999/xhtml"><a href="/relative/uri">click here</a></body>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_relative_xml_base.xml b/lib/feedparser/tests/wellformed/base/http_relative_xml_base.xml
deleted file mode 100644
index 46aa556e1..000000000
--- a/lib/feedparser/tests/wellformed/base/http_relative_xml_base.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<!--
-Header:      Content-Location: http://example.com/
-Description: xml:base relative to parent (and Content-Location)
-Expect:      not bozo and entries[0]['title_detail']['base'] == u'http://example.com/feed/entry/title/'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:base="feed/">
-<entry xml:base="entry/">
-  <title type="application/xhtml+xml" xml:base="title/"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_relative_xml_base_2.xml b/lib/feedparser/tests/wellformed/base/http_relative_xml_base_2.xml
deleted file mode 100644
index 362d948e6..000000000
--- a/lib/feedparser/tests/wellformed/base/http_relative_xml_base_2.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<!--
-Header:      Content-Location: http://example.com/
-Description: xml:base relative to parent (and Content-Location)
-Expect:      not bozo and entries[0]['title_detail']['base'] == u'http://example.com/entry/'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:base="feed/base/">
-<entry xml:base="/entry/base/">
-  <title type="application/xhtml+xml" xml:base="../"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/item_media_title1.xml b/lib/feedparser/tests/wellformed/base/item_media_title1.xml
deleted file mode 100644
index d3c272e38..000000000
--- a/lib/feedparser/tests/wellformed/base/item_media_title1.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: media title as a fallback
-Expect:      not bozo and entries[0]['title'] == u'bar'
--->
-<rss xmlns:media="http://search.yahoo.com/mrss/">
-  <channel>
-    <item>
-      <media:title>bar</media:title>
-    </item>
-  </channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/base/item_media_title2.xml b/lib/feedparser/tests/wellformed/base/item_media_title2.xml
deleted file mode 100644
index 57c7aef9f..000000000
--- a/lib/feedparser/tests/wellformed/base/item_media_title2.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<!--
-Description: media title as a fallback
-Expect:      not bozo and entries[0]['title'] == u'foo'
--->
-<rss xmlns:media="http://search.yahoo.com/mrss/">
-  <channel>
-    <item>
-      <media:title>bar</media:title>
-      <title>foo</title>
-    </item>
-  </channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/base/item_media_title3.xml b/lib/feedparser/tests/wellformed/base/item_media_title3.xml
deleted file mode 100644
index a9fbd31c5..000000000
--- a/lib/feedparser/tests/wellformed/base/item_media_title3.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<!--
-Description: media title as a fallback
-Expect:      not bozo and entries[0]['title'] == u'foo'
--->
-<rss xmlns:media="http://search.yahoo.com/mrss/">
-  <channel>
-    <item>
-      <title>foo</title>
-      <media:title>bar</media:title>
-    </item>
-  </channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/base/malformed_base.xml b/lib/feedparser/tests/wellformed/base/malformed_base.xml
deleted file mode 100644
index 3bed7b02f..000000000
--- a/lib/feedparser/tests/wellformed/base/malformed_base.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: xml:base is malformed (too many slashes after scheme)
-Expect:      not bozo and entries[0]['title_detail']['base'] == u'http://example.com/test/'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry xml:base="http://example.com/">
-  <title type="application/xhtml+xml" xml:base="http:///example.com/test/"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/rel_uri_with_unicode_character.xml b/lib/feedparser/tests/wellformed/base/rel_uri_with_unicode_character.xml
deleted file mode 100644
index 2f8d9330a..000000000
--- a/lib/feedparser/tests/wellformed/base/rel_uri_with_unicode_character.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: relative uri resolution with non-ascii characters
-Expect: not bozo and entries[0]['content'][0]['value'] == u'<a href="http://any.test/\u00c0">uri</a>'
--->
-<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xml:base="http://any.test/">
-<channel>
-<item>
-    <content:encoded>&lt;a href=&quot;&#192;&quot;&gt;uri&lt;/a&gt;</content:encoded>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/base/relative_xml_base.xml b/lib/feedparser/tests/wellformed/base/relative_xml_base.xml
deleted file mode 100644
index 1c686c63f..000000000
--- a/lib/feedparser/tests/wellformed/base/relative_xml_base.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: xml:base relative to parent
-Expect:      not bozo and entries[0]['title_detail']['base'] == u'http://example.com/test/'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry xml:base="http://example.com/">
-  <title type="application/xhtml+xml" xml:base="test/"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/relative_xml_base_2.xml b/lib/feedparser/tests/wellformed/base/relative_xml_base_2.xml
deleted file mode 100644
index 4d2115e4b..000000000
--- a/lib/feedparser/tests/wellformed/base/relative_xml_base_2.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: xml:base relative to parent (recursive)
-Expect:      not bozo and entries[0]['title_detail']['base'] == u'http://example.com/test/'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:base="http://example.com/">
-<entry xml:base="test/entry/">
-  <title type="application/xhtml+xml" xml:base="../"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/unsafe_base.xml b/lib/feedparser/tests/wellformed/base/unsafe_base.xml
deleted file mode 100644
index 50b8c30fd..000000000
--- a/lib/feedparser/tests/wellformed/base/unsafe_base.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<!--
-SkipUnless:  feedparser.ACCEPTABLE_URI_SCHEMES
-Description: xml:base is unsafe (uses unacceptable URI protocol)
-Expect:      not bozo and entries[0]['title_detail']['base'] == u'http://example.com/'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry xml:base="http://example.com/">
-  <title type="application/xhtml+xml" xml:base="javascript:alert('unsafe')"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></title>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/cdf/channel_abstract_map_description.xml b/lib/feedparser/tests/wellformed/cdf/channel_abstract_map_description.xml
deleted file mode 100644
index 8bce8d9ee..000000000
--- a/lib/feedparser/tests/wellformed/cdf/channel_abstract_map_description.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: CDF channel abstract maps to description
-Expect:      not bozo and feed['description'] == u'Example description'
--->
-<CHANNEL>
-  <ABSTRACT>Example description</ABSTRACT>
-</CHANNEL>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/cdf/channel_abstract_map_tagline.xml b/lib/feedparser/tests/wellformed/cdf/channel_abstract_map_tagline.xml
deleted file mode 100644
index 04feca0c1..000000000
--- a/lib/feedparser/tests/wellformed/cdf/channel_abstract_map_tagline.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: CDF channel abstract maps to tagline
-Expect:      not bozo and feed['tagline_detail']['value'] == u'Example description'
--->
-<CHANNEL>
-  <ABSTRACT>Example description</ABSTRACT>
-</CHANNEL>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/cdf/channel_href_map_link.xml b/lib/feedparser/tests/wellformed/cdf/channel_href_map_link.xml
deleted file mode 100644
index 133f14194..000000000
--- a/lib/feedparser/tests/wellformed/cdf/channel_href_map_link.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-<!--
-Description: CDF channel href maps to link
-Expect:      not bozo and feed['link'] == u'http://www.example.org/'
--->
-<CHANNEL HREF="http://www.example.org/">
-</CHANNEL>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/cdf/channel_href_map_links.xml b/lib/feedparser/tests/wellformed/cdf/channel_href_map_links.xml
deleted file mode 100644
index 0c65bc27a..000000000
--- a/lib/feedparser/tests/wellformed/cdf/channel_href_map_links.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-<!--
-Description: CDF channel href maps to links
-Expect:      not bozo and feed['links'][0]['href'] == u'http://www.example.org/'
--->
-<CHANNEL HREF="http://www.example.org/">
-</CHANNEL>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/cdf/channel_lastmod.xml b/lib/feedparser/tests/wellformed/cdf/channel_lastmod.xml
deleted file mode 100644
index 7b91da4df..000000000
--- a/lib/feedparser/tests/wellformed/cdf/channel_lastmod.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-<!--
-Description: CDF channel lastmod
-Expect:      not bozo and feed['updated'] == u'2004-04-06T23:05:43-05:00'
--->
-<CHANNEL LASTMOD="2004-04-06T23:05:43-05:00">
-</CHANNEL>
diff --git a/lib/feedparser/tests/wellformed/cdf/channel_lastmod_parsed.xml b/lib/feedparser/tests/wellformed/cdf/channel_lastmod_parsed.xml
deleted file mode 100644
index 65faa72c1..000000000
--- a/lib/feedparser/tests/wellformed/cdf/channel_lastmod_parsed.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-<!--
-Description: CDF channel lastmod parsed
-Expect:      not bozo and feed['updated_parsed'] == (2004, 4, 7, 4, 5, 43, 2, 98, 0)
--->
-<CHANNEL LASTMOD="2004-04-06T23:05:43-05:00">
-</CHANNEL>
diff --git a/lib/feedparser/tests/wellformed/cdf/channel_title.xml b/lib/feedparser/tests/wellformed/cdf/channel_title.xml
deleted file mode 100644
index 080c725fa..000000000
--- a/lib/feedparser/tests/wellformed/cdf/channel_title.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: CDF channel title
-Expect:      not bozo and feed['title'] == u'Example feed'
--->
-<CHANNEL>
-  <TITLE>Example feed</TITLE>
-</CHANNEL>
diff --git a/lib/feedparser/tests/wellformed/cdf/item_abstract_map_description.xml b/lib/feedparser/tests/wellformed/cdf/item_abstract_map_description.xml
deleted file mode 100644
index 64821d07d..000000000
--- a/lib/feedparser/tests/wellformed/cdf/item_abstract_map_description.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: CDF item abstract maps to description
-Expect:      not bozo and entries[0]['description'] == u'Example description'
--->
-<CHANNEL>
-<ITEM>
-  <ABSTRACT>Example description</ABSTRACT>
-</ITEM>
-</CHANNEL>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/cdf/item_abstract_map_summary.xml b/lib/feedparser/tests/wellformed/cdf/item_abstract_map_summary.xml
deleted file mode 100644
index 14946c9d7..000000000
--- a/lib/feedparser/tests/wellformed/cdf/item_abstract_map_summary.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: CDF item abstract maps to summary
-Expect:      not bozo and entries[0]['summary_detail']['value'] == u'Example description'
--->
-<CHANNEL>
-<ITEM>
-  <ABSTRACT>Example description</ABSTRACT>
-</ITEM>
-</CHANNEL>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/cdf/item_href_map_link.xml b/lib/feedparser/tests/wellformed/cdf/item_href_map_link.xml
deleted file mode 100644
index 973609eba..000000000
--- a/lib/feedparser/tests/wellformed/cdf/item_href_map_link.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<!--
-Description: CDF item href maps to link
-Expect:      not bozo and entries[0]['link'] == u'http://www.example.org/'
--->
-<CHANNEL>
-<ITEM HREF="http://www.example.org/">
-</ITEM>
-</CHANNEL>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/cdf/item_href_map_links.xml b/lib/feedparser/tests/wellformed/cdf/item_href_map_links.xml
deleted file mode 100644
index a55082e91..000000000
--- a/lib/feedparser/tests/wellformed/cdf/item_href_map_links.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<!--
-Description: CDF item href maps to links
-Expect:      not bozo and entries[0]['links'][0]['href'] == u'http://www.example.org/'
--->
-<CHANNEL>
-<ITEM HREF="http://www.example.org/">
-</ITEM>
-</CHANNEL>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/cdf/item_lastmod.xml b/lib/feedparser/tests/wellformed/cdf/item_lastmod.xml
deleted file mode 100644
index 50db8a137..000000000
--- a/lib/feedparser/tests/wellformed/cdf/item_lastmod.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<!--
-Description: CDF item lastmod
-Expect:      not bozo and entries[0]['updated'] == u'2004-04-06T23:05:43-05:00'
--->
-<CHANNEL>
-<ITEM LASTMOD="2004-04-06T23:05:43-05:00">
-</ITEM>
-</CHANNEL>
diff --git a/lib/feedparser/tests/wellformed/cdf/item_lastmod_parsed.xml b/lib/feedparser/tests/wellformed/cdf/item_lastmod_parsed.xml
deleted file mode 100644
index 1767352f1..000000000
--- a/lib/feedparser/tests/wellformed/cdf/item_lastmod_parsed.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<!--
-Description: CDF item lastmod parsed
-Expect:      not bozo and entries[0]['updated_parsed'] == (2004, 4, 7, 4, 5, 43, 2, 98, 0)
--->
-<CHANNEL>
-<ITEM LASTMOD="2004-04-06T23:05:43-05:00">
-</ITEM>
-</CHANNEL>
diff --git a/lib/feedparser/tests/wellformed/cdf/item_title.xml b/lib/feedparser/tests/wellformed/cdf/item_title.xml
deleted file mode 100644
index 50fb359d5..000000000
--- a/lib/feedparser/tests/wellformed/cdf/item_title.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: CDF item title
-Expect:      not bozo and entries[0]['title'] == u'Example item'
--->
-<CHANNEL>
-<ITEM>
-  <TITLE>Example item</TITLE>
-</ITEM>
-</CHANNEL>
diff --git a/lib/feedparser/tests/wellformed/feedburner/feedburner_browserfriendly.xml b/lib/feedparser/tests/wellformed/feedburner/feedburner_browserfriendly.xml
deleted file mode 100644
index 4d341cf01..000000000
--- a/lib/feedparser/tests/wellformed/feedburner/feedburner_browserfriendly.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: FeedBurner browserFriendly maps to info
-Expect:      not bozo and feed['info'] == u'This is an XML content feed. It is intended to be viewed in a newsreader or syndicated to another site.'
--->
-<rss version="2.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">
-<channel>
-  <feedburner:browserFriendly>This is an XML content feed. It is intended to be viewed in a newsreader or syndicated to another site.</feedburner:browserFriendly>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/http/headers_content_location-relative.xml b/lib/feedparser/tests/wellformed/http/headers_content_location-relative.xml
deleted file mode 100644
index 4c0254fe7..000000000
--- a/lib/feedparser/tests/wellformed/http/headers_content_location-relative.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<!--
-Header:      Content-Location: /feed/pg.cgi
-Description: Content-Location header relative URI
-Expect:      not bozo and feed.link == u'http://127.0.0.1:8097/feed/absolute'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-    <link rel="alternate" href="absolute"/>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/http/headers_content_location-unsafe.xml b/lib/feedparser/tests/wellformed/http/headers_content_location-unsafe.xml
deleted file mode 100644
index e22c26257..000000000
--- a/lib/feedparser/tests/wellformed/http/headers_content_location-unsafe.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-SkipUnless:  feedparser.ACCEPTABLE_URI_SCHEMES
-Header:      Content-Location: javascript:alert('unsafe');
-Description: Content-Location header unsafe URI
-Expect:      not bozo and feed.link == u'http://127.0.0.1:8097/abs'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-    <link rel="alternate" href="/abs"/>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/http/headers_etag.xml b/lib/feedparser/tests/wellformed/http/headers_etag.xml
deleted file mode 100644
index af4f905c6..000000000
--- a/lib/feedparser/tests/wellformed/http/headers_etag.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Header:      ETag: foo
-Description: etag should only exist in results if present in HTTP headers
-Expect:      not bozo and etag
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/http/headers_foo.xml b/lib/feedparser/tests/wellformed/http/headers_foo.xml
deleted file mode 100644
index e32833fb0..000000000
--- a/lib/feedparser/tests/wellformed/http/headers_foo.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Header:      X-Foo: bar
-Description: capture arbitrary HTTP header
-Expect:      not bozo and headers.get('x-foo', headers.get('X-Foo')) == 'bar'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-</feed>
diff --git a/lib/feedparser/tests/wellformed/http/headers_no_etag.xml b/lib/feedparser/tests/wellformed/http/headers_no_etag.xml
deleted file mode 100644
index 051c2a154..000000000
--- a/lib/feedparser/tests/wellformed/http/headers_no_etag.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Header:      X-Foo: bar
-Description: etag should not exist in results if not present in HTTP headers
-Expect:      not bozo and not 'etag' in locals()
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-</feed>
diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_channel_block.xml b/lib/feedparser/tests/wellformed/itunes/itunes_channel_block.xml
deleted file mode 100644
index 1d7b87ed0..000000000
--- a/lib/feedparser/tests/wellformed/itunes/itunes_channel_block.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: iTunes block
-Expect:      not bozo and feed['itunes_block'] == 1
--->
-<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd">
-<channel>
-  <itunes:block>yes</itunes:block>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_channel_block_false.xml b/lib/feedparser/tests/wellformed/itunes/itunes_channel_block_false.xml
deleted file mode 100644
index a935e1ce7..000000000
--- a/lib/feedparser/tests/wellformed/itunes/itunes_channel_block_false.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: iTunes block="false"
-Expect:      not bozo and feed['itunes_block'] == 0
--->
-<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd">
-<channel>
-  <itunes:block>false</itunes:block>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_channel_block_no.xml b/lib/feedparser/tests/wellformed/itunes/itunes_channel_block_no.xml
deleted file mode 100644
index 1aa627589..000000000
--- a/lib/feedparser/tests/wellformed/itunes/itunes_channel_block_no.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: iTunes block='no'
-Expect:      not bozo and feed['itunes_block'] == 0
--->
-<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd">
-<channel>
-  <itunes:block>no</itunes:block>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_channel_block_true.xml b/lib/feedparser/tests/wellformed/itunes/itunes_channel_block_true.xml
deleted file mode 100644
index 93655ae57..000000000
--- a/lib/feedparser/tests/wellformed/itunes/itunes_channel_block_true.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: iTunes block="true"
-Expect:      not bozo and feed['itunes_block'] == 0
--->
-<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd">
-<channel>
-  <itunes:block>true</itunes:block>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_channel_block_uppercase.xml b/lib/feedparser/tests/wellformed/itunes/itunes_channel_block_uppercase.xml
deleted file mode 100644
index c031ef2c4..000000000
--- a/lib/feedparser/tests/wellformed/itunes/itunes_channel_block_uppercase.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: iTunes block="YES"
-Expect:      not bozo and feed['itunes_block'] == 0
--->
-<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd">
-<channel>
-  <itunes:block>YES</itunes:block>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_channel_block_whitespace.xml b/lib/feedparser/tests/wellformed/itunes/itunes_channel_block_whitespace.xml
deleted file mode 100644
index 864f5e3d8..000000000
--- a/lib/feedparser/tests/wellformed/itunes/itunes_channel_block_whitespace.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: iTunes block with spurious whitespace, see http://lists.apple.com/faq/pub/syndication-dev/index.php?sid=359&aktion=artikel&rubrik=001&id=3&lang=en
-Expect:      not bozo and feed['itunes_block'] == 0
--->
-<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd">
-<channel>
-  <itunes:block> yes </itunes:block>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_channel_category.xml b/lib/feedparser/tests/wellformed/itunes/itunes_channel_category.xml
deleted file mode 100644
index 7a670a272..000000000
--- a/lib/feedparser/tests/wellformed/itunes/itunes_channel_category.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: iTunes channel category
-Expect:      not bozo and feed['tags'][0]['term'] == u'Technology'
--->
-<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd">
-<channel>
-<itunes:category text="Technology"></itunes:category>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_channel_category_nested.xml b/lib/feedparser/tests/wellformed/itunes/itunes_channel_category_nested.xml
deleted file mode 100644
index 7ec9d5881..000000000
--- a/lib/feedparser/tests/wellformed/itunes/itunes_channel_category_nested.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: iTunes channel nested category
-Expect:      not bozo and feed['tags'][1]['term'] == u'Gadgets'
--->
-<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd">
-<channel>
-<itunes:category text="Technology">
-  <itunes:category text="Gadgets"></itunes:category>
-</itunes:category>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_channel_category_scheme.xml b/lib/feedparser/tests/wellformed/itunes/itunes_channel_category_scheme.xml
deleted file mode 100644
index 00fde6bc8..000000000
--- a/lib/feedparser/tests/wellformed/itunes/itunes_channel_category_scheme.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: iTunes channel category scheme
-Expect:      not bozo and feed['tags'][0]['scheme'] == u'http://www.itunes.com/'
--->
-<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd">
-<channel>
-<itunes:category text="Technology"></itunes:category>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_channel_explicit.xml b/lib/feedparser/tests/wellformed/itunes/itunes_channel_explicit.xml
deleted file mode 100644
index 584f1fd62..000000000
--- a/lib/feedparser/tests/wellformed/itunes/itunes_channel_explicit.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: iTunes channel explicit
-Expect:      not bozo and feed['itunes_explicit'] == 1
--->
-<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd">
-<channel>
-  <itunes:explicit>yes</itunes:explicit>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_channel_explicit_clean.xml b/lib/feedparser/tests/wellformed/itunes/itunes_channel_explicit_clean.xml
deleted file mode 100644
index caec32fd2..000000000
--- a/lib/feedparser/tests/wellformed/itunes/itunes_channel_explicit_clean.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: iTunes explicit='clean'
-Expect:      not bozo and feed['itunes_explicit'] is False
--->
-<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd">
-<channel>
-  <itunes:explicit>clean</itunes:explicit>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_channel_explicit_false.xml b/lib/feedparser/tests/wellformed/itunes/itunes_channel_explicit_false.xml
deleted file mode 100644
index 71b2e0086..000000000
--- a/lib/feedparser/tests/wellformed/itunes/itunes_channel_explicit_false.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: iTunes explicit="false"
-Expect:      not bozo and feed['itunes_explicit'] is None
--->
-<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd">
-<channel>
-  <itunes:explicit>false</itunes:explicit>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_channel_explicit_no.xml b/lib/feedparser/tests/wellformed/itunes/itunes_channel_explicit_no.xml
deleted file mode 100644
index 369021b68..000000000
--- a/lib/feedparser/tests/wellformed/itunes/itunes_channel_explicit_no.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: iTunes explicit='no'
-Expect:      not bozo and feed['itunes_explicit'] is None
--->
-<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd">
-<channel>
-  <itunes:explicit>no</itunes:explicit>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_channel_explicit_true.xml b/lib/feedparser/tests/wellformed/itunes/itunes_channel_explicit_true.xml
deleted file mode 100644
index ddb7a8bd6..000000000
--- a/lib/feedparser/tests/wellformed/itunes/itunes_channel_explicit_true.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: iTunes explicit="true"
-Expect:      not bozo and feed['itunes_explicit'] is None
--->
-<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd">
-<channel>
-  <itunes:explicit>true</itunes:explicit>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_channel_explicit_uppercase.xml b/lib/feedparser/tests/wellformed/itunes/itunes_channel_explicit_uppercase.xml
deleted file mode 100644
index a9fc6fa8c..000000000
--- a/lib/feedparser/tests/wellformed/itunes/itunes_channel_explicit_uppercase.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: iTunes explicit="YES"
-Expect:      not bozo and feed['itunes_explicit'] is None
--->
-<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd">
-<channel>
-  <itunes:explicit>YES</itunes:explicit>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_channel_explicit_whitespace.xml b/lib/feedparser/tests/wellformed/itunes/itunes_channel_explicit_whitespace.xml
deleted file mode 100644
index 381053161..000000000
--- a/lib/feedparser/tests/wellformed/itunes/itunes_channel_explicit_whitespace.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: iTunes explicit with spurious whitespace, see http://lists.apple.com/faq/pub/syndication-dev/index.php?sid=359&aktion=artikel&rubrik=001&id=3&lang=en , I'm assuming the same rules apply for explicit
-Expect:      not bozo and feed['itunes_explicit'] is None
--->
-<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd">
-<channel>
-  <itunes:explicit> yes </itunes:explicit>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_channel_image.xml b/lib/feedparser/tests/wellformed/itunes/itunes_channel_image.xml
deleted file mode 100644
index 883352ef4..000000000
--- a/lib/feedparser/tests/wellformed/itunes/itunes_channel_image.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: iTunes channel image
-Expect:      not bozo and feed['image']['href'] == u'http://example.com/logo.jpg'
--->
-<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd">
-<channel>
-  <itunes:image href="http://example.com/logo.jpg"></itunes:image>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_channel_image_no_href.xml b/lib/feedparser/tests/wellformed/itunes/itunes_channel_image_no_href.xml
deleted file mode 100644
index a0d455a85..000000000
--- a/lib/feedparser/tests/wellformed/itunes/itunes_channel_image_no_href.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<!--
-Description: missing itunes:image@href doesn't overwrite existing image information
-Expect: not bozo and feed['image']['href'] == u'http://i.INVALID/i.gif'
--->
-<rss xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" version="2.0"> 
-<channel> 
-<image>
-  <url>http://i.INVALID/i.gif</url> 
-</image>
-<itunes:image></itunes:image>
-</channel> 
-</rss>
diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_channel_image_url.xml b/lib/feedparser/tests/wellformed/itunes/itunes_channel_image_url.xml
deleted file mode 100644
index 4778c7157..000000000
--- a/lib/feedparser/tests/wellformed/itunes/itunes_channel_image_url.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: iTunes channel image (incorrectly using url attribute)
-Expect:      not bozo and feed['image']['href'] == u'http://a.b/i.png'
--->
-<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd">
-<channel>
-  <itunes:image url="http://a.b/i.png"></itunes:image>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_channel_keywords.xml b/lib/feedparser/tests/wellformed/itunes/itunes_channel_keywords.xml
deleted file mode 100644
index 299fb7b3e..000000000
--- a/lib/feedparser/tests/wellformed/itunes/itunes_channel_keywords.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: iTunes channel keywords
-Expect:      not bozo and feed['tags'][0]['term'] == u'Technology'
--->
-<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd">
-<channel>
-<itunes:keywords>Technology</itunes:keywords>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_channel_keywords_duplicate.xml b/lib/feedparser/tests/wellformed/itunes/itunes_channel_keywords_duplicate.xml
deleted file mode 100644
index 5ca4085dd..000000000
--- a/lib/feedparser/tests/wellformed/itunes/itunes_channel_keywords_duplicate.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: iTunes channel duplicate keywords
-Expect:      not bozo and len(feed['tags']) == 1
--->
-<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd">
-<channel>
-<itunes:keywords>Technology,Technology</itunes:keywords>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_channel_keywords_duplicate_2.xml b/lib/feedparser/tests/wellformed/itunes/itunes_channel_keywords_duplicate_2.xml
deleted file mode 100644
index 4fcfa5b95..000000000
--- a/lib/feedparser/tests/wellformed/itunes/itunes_channel_keywords_duplicate_2.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<!--
-Description: iTunes channel keyword duplicated as category
-Expect:      not bozo and len(feed['tags']) == 1
--->
-<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd">
-<channel>
-<itunes:category text="Technology"></itunes:category>
-<itunes:keywords>Technology</itunes:keywords>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_channel_keywords_multiple.xml b/lib/feedparser/tests/wellformed/itunes/itunes_channel_keywords_multiple.xml
deleted file mode 100644
index 9629e014f..000000000
--- a/lib/feedparser/tests/wellformed/itunes/itunes_channel_keywords_multiple.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: iTunes channel multiple keywords
-Expect:      not bozo and feed['tags'][1]['term'] == u'Gadgets'
--->
-<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd">
-<channel>
-<itunes:keywords>Technology, Gadgets</itunes:keywords>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_channel_link_image.xml b/lib/feedparser/tests/wellformed/itunes/itunes_channel_link_image.xml
deleted file mode 100644
index c89dc9f1e..000000000
--- a/lib/feedparser/tests/wellformed/itunes/itunes_channel_link_image.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: iTunes channel image as old-style link rel=image
-Expect:      not bozo and feed['image']['href'] == u'http://example.com/logo.jpg'
--->
-<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd">
-<channel>
-  <itunes:link rel="image" href="http://example.com/logo.jpg"></itunes:link>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_channel_owner_email.xml b/lib/feedparser/tests/wellformed/itunes/itunes_channel_owner_email.xml
deleted file mode 100644
index 92c433b46..000000000
--- a/lib/feedparser/tests/wellformed/itunes/itunes_channel_owner_email.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<!--
-Description: iTunes channel owner name
-Expect:      not bozo and feed['publisher_detail']['email'] == u'mark@example.com'
--->
-<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd">
-<channel>
-<itunes:owner>
-<itunes:name>Mark Pilgrim</itunes:name>
-<itunes:email>mark@example.com</itunes:email>
-</itunes:owner>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_channel_owner_name.xml b/lib/feedparser/tests/wellformed/itunes/itunes_channel_owner_name.xml
deleted file mode 100644
index 6d3d54fe3..000000000
--- a/lib/feedparser/tests/wellformed/itunes/itunes_channel_owner_name.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<!--
-Description: iTunes channel owner name
-Expect:      not bozo and feed['publisher_detail']['name'] == u'Mark Pilgrim'
--->
-<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd">
-<channel>
-<itunes:owner>
-<itunes:name>Mark Pilgrim</itunes:name>
-<itunes:email>mark@example.com</itunes:email>
-</itunes:owner>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_channel_subtitle.xml b/lib/feedparser/tests/wellformed/itunes/itunes_channel_subtitle.xml
deleted file mode 100644
index c638bf5b4..000000000
--- a/lib/feedparser/tests/wellformed/itunes/itunes_channel_subtitle.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: iTunes channel subtitle
-Expect:      not bozo and feed['subtitle'] == u'Example subtitle'
--->
-<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd">
-<channel>
-  <itunes:subtitle>Example subtitle</itunes:subtitle>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_channel_summary.xml b/lib/feedparser/tests/wellformed/itunes/itunes_channel_summary.xml
deleted file mode 100644
index f23b32844..000000000
--- a/lib/feedparser/tests/wellformed/itunes/itunes_channel_summary.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: iTunes channel summary
-Expect:      not bozo and feed['description'] == u'Example summary'
--->
-<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd">
-<channel>
-  <itunes:summary>Example summary</itunes:summary>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_core_element_uppercase.xml b/lib/feedparser/tests/wellformed/itunes/itunes_core_element_uppercase.xml
deleted file mode 100644
index 9b3e91f28..000000000
--- a/lib/feedparser/tests/wellformed/itunes/itunes_core_element_uppercase.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: iTunes treats non-iTunes element names as case-insensitive
-Expect:      not bozo and feed['title'] == u'Example title'
--->
-<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd">
-<channel>
-<TiTlE>Example title</TiTlE>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_item_author_map_author.xml b/lib/feedparser/tests/wellformed/itunes/itunes_item_author_map_author.xml
deleted file mode 100644
index e67648450..000000000
--- a/lib/feedparser/tests/wellformed/itunes/itunes_item_author_map_author.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: iTunes item author maps to author
-Expect:      not bozo and entries[0]['author'] == u'Mark Pilgrim'
--->
-<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd">
-<channel>
-<item>
-  <itunes:author>Mark Pilgrim</itunes:author>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_item_block.xml b/lib/feedparser/tests/wellformed/itunes/itunes_item_block.xml
deleted file mode 100644
index e7d05ccd0..000000000
--- a/lib/feedparser/tests/wellformed/itunes/itunes_item_block.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: iTunes block
-Expect:      not bozo and entries[0]['itunes_block'] == 1
--->
-<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd">
-<channel>
-<item>
-  <itunes:block>yes</itunes:block>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_item_block_false.xml b/lib/feedparser/tests/wellformed/itunes/itunes_item_block_false.xml
deleted file mode 100644
index 7f9d4da7c..000000000
--- a/lib/feedparser/tests/wellformed/itunes/itunes_item_block_false.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: iTunes block="false"
-Expect:      not bozo and entries[0]['itunes_block'] == 0
--->
-<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd">
-<channel>
-<item>
-  <itunes:block>false</itunes:block>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_item_block_no.xml b/lib/feedparser/tests/wellformed/itunes/itunes_item_block_no.xml
deleted file mode 100644
index f09435bbf..000000000
--- a/lib/feedparser/tests/wellformed/itunes/itunes_item_block_no.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: iTunes block='no'
-Expect:      not bozo and entries[0]['itunes_block'] == 0
--->
-<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd">
-<channel>
-<item>
-  <itunes:block>no</itunes:block>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_item_block_true.xml b/lib/feedparser/tests/wellformed/itunes/itunes_item_block_true.xml
deleted file mode 100644
index e30de679d..000000000
--- a/lib/feedparser/tests/wellformed/itunes/itunes_item_block_true.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: iTunes block="true"
-Expect:      not bozo and entries[0]['itunes_block'] == 0
--->
-<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd">
-<channel>
-<item>
-  <itunes:block>true</itunes:block>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_item_block_uppercase.xml b/lib/feedparser/tests/wellformed/itunes/itunes_item_block_uppercase.xml
deleted file mode 100644
index 8ebabeab5..000000000
--- a/lib/feedparser/tests/wellformed/itunes/itunes_item_block_uppercase.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: iTunes block="YES"
-Expect:      not bozo and entries[0]['itunes_block'] == 0
--->
-<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd">
-<channel>
-<item>
-  <itunes:block>YES</itunes:block>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_item_block_whitespace.xml b/lib/feedparser/tests/wellformed/itunes/itunes_item_block_whitespace.xml
deleted file mode 100644
index ca71b54e1..000000000
--- a/lib/feedparser/tests/wellformed/itunes/itunes_item_block_whitespace.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: iTunes block with spurious whitespace, see http://lists.apple.com/faq/pub/syndication-dev/index.php?sid=359&aktion=artikel&rubrik=001&id=3&lang=en
-Expect:      not bozo and entries[0]['itunes_block'] == 0
--->
-<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd">
-<channel>
-<item>
-  <itunes:block> yes </itunes:block>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_item_category.xml b/lib/feedparser/tests/wellformed/itunes/itunes_item_category.xml
deleted file mode 100644
index 54e312ca2..000000000
--- a/lib/feedparser/tests/wellformed/itunes/itunes_item_category.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: iTunes item category
-Expect:      not bozo and entries[0]['tags'][0]['term'] == u'Technology'
--->
-<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd">
-<channel>
-<item>
-<itunes:category text="Technology"></itunes:category>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_item_category_nested.xml b/lib/feedparser/tests/wellformed/itunes/itunes_item_category_nested.xml
deleted file mode 100644
index 4939da1bf..000000000
--- a/lib/feedparser/tests/wellformed/itunes/itunes_item_category_nested.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<!--
-Description: iTunes item nested category
-Expect:      not bozo and entries[0]['tags'][1]['term'] == u'Gadgets'
--->
-<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd">
-<channel>
-<item>
-<itunes:category text="Technology">
-  <itunes:category text="Gadgets"></itunes:category>
-</itunes:category>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_item_category_scheme.xml b/lib/feedparser/tests/wellformed/itunes/itunes_item_category_scheme.xml
deleted file mode 100644
index ab66dcc47..000000000
--- a/lib/feedparser/tests/wellformed/itunes/itunes_item_category_scheme.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: iTunes channel category scheme
-Expect:      not bozo and entries[0]['tags'][0]['scheme'] == u'http://www.itunes.com/'
--->
-<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd">
-<channel>
-<item>
-<itunes:category text="Technology"></itunes:category>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_item_duration.xml b/lib/feedparser/tests/wellformed/itunes/itunes_item_duration.xml
deleted file mode 100644
index 20a83efbd..000000000
--- a/lib/feedparser/tests/wellformed/itunes/itunes_item_duration.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: iTunes duration
-Expect:      not bozo and entries[0]['itunes_duration'] == u'3:00'
--->
-<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd">
-<channel>
-<item>
-  <itunes:duration>3:00</itunes:duration>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_item_explicit.xml b/lib/feedparser/tests/wellformed/itunes/itunes_item_explicit.xml
deleted file mode 100644
index e5d9d39ce..000000000
--- a/lib/feedparser/tests/wellformed/itunes/itunes_item_explicit.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: iTunes explicit
-Expect:      not bozo and entries[0]['itunes_explicit'] == 1
--->
-<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd">
-<channel>
-<item>
-  <itunes:explicit>yes</itunes:explicit>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_item_explicit_clean.xml b/lib/feedparser/tests/wellformed/itunes/itunes_item_explicit_clean.xml
deleted file mode 100644
index eb4e89e89..000000000
--- a/lib/feedparser/tests/wellformed/itunes/itunes_item_explicit_clean.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: iTunes explicit='clean'
-Expect:      not bozo and entries[0]['itunes_explicit'] is False
--->
-<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd">
-<channel>
-<item>
-  <itunes:explicit>clean</itunes:explicit>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_item_explicit_false.xml b/lib/feedparser/tests/wellformed/itunes/itunes_item_explicit_false.xml
deleted file mode 100644
index f3c0610d0..000000000
--- a/lib/feedparser/tests/wellformed/itunes/itunes_item_explicit_false.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: iTunes explicit="false"
-Expect:      not bozo and entries[0]['itunes_explicit'] is None
--->
-<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd">
-<channel>
-<item>
-  <itunes:explicit>false</itunes:explicit>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_item_explicit_no.xml b/lib/feedparser/tests/wellformed/itunes/itunes_item_explicit_no.xml
deleted file mode 100644
index b2a0b3cd2..000000000
--- a/lib/feedparser/tests/wellformed/itunes/itunes_item_explicit_no.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: iTunes explicit='no'
-Expect:      not bozo and entries[0]['itunes_explicit'] is None
--->
-<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd">
-<channel>
-<item>
-  <itunes:explicit>no</itunes:explicit>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_item_explicit_true.xml b/lib/feedparser/tests/wellformed/itunes/itunes_item_explicit_true.xml
deleted file mode 100644
index c42c3c58c..000000000
--- a/lib/feedparser/tests/wellformed/itunes/itunes_item_explicit_true.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: iTunes explicit="true"
-Expect:      not bozo and entries[0]['itunes_explicit'] is None
--->
-<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd">
-<channel>
-<item>
-  <itunes:explicit>true</itunes:explicit>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_item_explicit_uppercase.xml b/lib/feedparser/tests/wellformed/itunes/itunes_item_explicit_uppercase.xml
deleted file mode 100644
index 017c24d58..000000000
--- a/lib/feedparser/tests/wellformed/itunes/itunes_item_explicit_uppercase.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: iTunes explicit="YES"
-Expect:      not bozo and entries[0]['itunes_explicit'] is None
--->
-<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd">
-<channel>
-<item>
-  <itunes:explicit>YES</itunes:explicit>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_item_explicit_whitespace.xml b/lib/feedparser/tests/wellformed/itunes/itunes_item_explicit_whitespace.xml
deleted file mode 100644
index 8bf2f5392..000000000
--- a/lib/feedparser/tests/wellformed/itunes/itunes_item_explicit_whitespace.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: iTunes explicit with spurious whitespace, see http://lists.apple.com/faq/pub/syndication-dev/index.php?sid=359&aktion=artikel&rubrik=001&id=3&lang=en
-Expect:      not bozo and entries[0]['itunes_explicit'] is None
--->
-<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd">
-<channel>
-<item>
-  <itunes:explicit> yes </itunes:explicit>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_item_image.xml b/lib/feedparser/tests/wellformed/itunes/itunes_item_image.xml
deleted file mode 100644
index 2c0f9c76f..000000000
--- a/lib/feedparser/tests/wellformed/itunes/itunes_item_image.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: iTunes item image
-Expect:      not bozo and entries[0]['image']['href'] == u'http://example.com/logo.jpg'
--->
-<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd">
-<channel>
-<item>
-  <itunes:image href="http://example.com/logo.jpg"></itunes:image>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_item_image_url.xml b/lib/feedparser/tests/wellformed/itunes/itunes_item_image_url.xml
deleted file mode 100644
index 3a23c495e..000000000
--- a/lib/feedparser/tests/wellformed/itunes/itunes_item_image_url.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: iTunes item image (incorrectly using url attribute)
-Expect:      not bozo and entries[0]['image']['href'] == u'http://a.b/i.png'
--->
-<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd">
-<channel>
-<item>
-  <itunes:image url="http://a.b/i.png"></itunes:image>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_item_link_image.xml b/lib/feedparser/tests/wellformed/itunes/itunes_item_link_image.xml
deleted file mode 100644
index befa0ac97..000000000
--- a/lib/feedparser/tests/wellformed/itunes/itunes_item_link_image.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: iTunes item image as old-style link rel=image
-Expect:      not bozo and entries[0]['image']['href'] == u'http://example.com/logo.jpg'
--->
-<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd">
-<channel>
-<item>
-  <itunes:link rel="image" href="http://example.com/logo.jpg"></itunes:link>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_item_subtitle.xml b/lib/feedparser/tests/wellformed/itunes/itunes_item_subtitle.xml
deleted file mode 100644
index 7a485236b..000000000
--- a/lib/feedparser/tests/wellformed/itunes/itunes_item_subtitle.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: iTunes item subtitle
-Expect:      not bozo and entries[0]['subtitle'] == u'Example subtitle'
--->
-<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd">
-<channel>
-<item>
-  <itunes:subtitle>Example subtitle</itunes:subtitle>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_item_summary.xml b/lib/feedparser/tests/wellformed/itunes/itunes_item_summary.xml
deleted file mode 100644
index 159918a1d..000000000
--- a/lib/feedparser/tests/wellformed/itunes/itunes_item_summary.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: iTunes item summary
-Expect:      not bozo and entries[0]['summary'] == u'Example summary'
--->
-<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd">
-<channel>
-<item>
-  <itunes:summary>Example summary</itunes:summary>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_namespace.xml b/lib/feedparser/tests/wellformed/itunes/itunes_namespace.xml
deleted file mode 100644
index 8a1fc43bc..000000000
--- a/lib/feedparser/tests/wellformed/itunes/itunes_namespace.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: iTunes namespace (2005-07-07 spec)
-Expect:      not bozo and feed['itunes_block'] == 1
--->
-<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd">
-<channel>
-  <itunes:block>yes</itunes:block>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_namespace_example.xml b/lib/feedparser/tests/wellformed/itunes/itunes_namespace_example.xml
deleted file mode 100644
index 24221d80d..000000000
--- a/lib/feedparser/tests/wellformed/itunes/itunes_namespace_example.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: iTunes namespace (example in 2005-07-07 spec)
-Expect:      not bozo and feed['itunes_block'] == 1
--->
-<rss xmlns:itunes="http://example.com/DTDs/Podcast-1.0.dtd">
-<channel>
-  <itunes:block>yes</itunes:block>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_namespace_lowercase.xml b/lib/feedparser/tests/wellformed/itunes/itunes_namespace_lowercase.xml
deleted file mode 100644
index fdceb9e22..000000000
--- a/lib/feedparser/tests/wellformed/itunes/itunes_namespace_lowercase.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: iTunes namespace (lowercase)
-Expect:      not bozo and feed['itunes_block'] == 1
--->
-<rss xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd">
-<channel>
-  <itunes:block>yes</itunes:block>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_namespace_uppercase.xml b/lib/feedparser/tests/wellformed/itunes/itunes_namespace_uppercase.xml
deleted file mode 100644
index 9d78ea5e1..000000000
--- a/lib/feedparser/tests/wellformed/itunes/itunes_namespace_uppercase.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: iTunes namespace (uppercase)
-Expect:      not bozo and feed['itunes_block'] == 1
--->
-<rss xmlns:itunes="HTTP://WWW.ITUNES.COM/DTDS/PODCAST-1.0.DTD">
-<channel>
-  <itunes:block>yes</itunes:block>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/lang/channel_dc_language.xml b/lib/feedparser/tests/wellformed/lang/channel_dc_language.xml
deleted file mode 100644
index 8ca66fbea..000000000
--- a/lib/feedparser/tests/wellformed/lang/channel_dc_language.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: channel dc:language
-Expect:      not bozo and feed['language'] == u'en'
--->
-<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
-<channel>
-<dc:language>en</dc:language>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/lang/channel_language.xml b/lib/feedparser/tests/wellformed/lang/channel_language.xml
deleted file mode 100644
index 85009399a..000000000
--- a/lib/feedparser/tests/wellformed/lang/channel_language.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: normal language
-Expect:      not bozo and feed['language'] == u'en-us'
--->
-<rss version="2.0">
-<channel>
-<language>en-us</language>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/lang/entry_content_xml_lang.xml b/lib/feedparser/tests/wellformed/lang/entry_content_xml_lang.xml
deleted file mode 100644
index 96bf686bf..000000000
--- a/lib/feedparser/tests/wellformed/lang/entry_content_xml_lang.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry content language from xml:lang
-Expect:      not bozo and entries[0]['content'][0]['language'] == u'en'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-  <content xml:lang="en">Example Atom</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/lang/entry_content_xml_lang_blank.xml b/lib/feedparser/tests/wellformed/lang/entry_content_xml_lang_blank.xml
deleted file mode 100644
index 25bf9c34c..000000000
--- a/lib/feedparser/tests/wellformed/lang/entry_content_xml_lang_blank.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry content defines blank xml:lang
-Expect:      not bozo and entries[0]['content'][0]['language'] == None
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:lang="en">
-<entry>
-  <content type="application/xhtml+xml" xml:lang=""><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/lang/entry_content_xml_lang_blank_2.xml b/lib/feedparser/tests/wellformed/lang/entry_content_xml_lang_blank_2.xml
deleted file mode 100644
index 6c5084980..000000000
--- a/lib/feedparser/tests/wellformed/lang/entry_content_xml_lang_blank_2.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry defines blank xml:lang which children inherit
-Expect:      not bozo and entries[0]['content'][0]['language'] == None
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:lang="en">
-<entry xml:lang="">
-  <content type="application/xhtml+xml"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/lang/entry_content_xml_lang_blank_3.xml b/lib/feedparser/tests/wellformed/lang/entry_content_xml_lang_blank_3.xml
deleted file mode 100644
index ea34db9da..000000000
--- a/lib/feedparser/tests/wellformed/lang/entry_content_xml_lang_blank_3.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<!--
-Description: entry defines blank xml:lang which siblings do not inherit
-Expect:      not bozo and entries[1]['content'][0]['language'] == u'en'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:lang="en">
-<entry xml:lang="">
-  <content type="application/xhtml+xml"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></content>
-</entry>
-<entry>
-  <content type="application/xhtml+xml"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/lang/entry_content_xml_lang_inherit.xml b/lib/feedparser/tests/wellformed/lang/entry_content_xml_lang_inherit.xml
deleted file mode 100644
index 80445b178..000000000
--- a/lib/feedparser/tests/wellformed/lang/entry_content_xml_lang_inherit.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry content xml:lang inherited from parent element
-Expect:      not bozo and entries[0]['content'][0]['language'] == u'en'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:lang="en">
-<entry>
-  <content type="application/xhtml+xml"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/lang/entry_content_xml_lang_inherit_2.xml b/lib/feedparser/tests/wellformed/lang/entry_content_xml_lang_inherit_2.xml
deleted file mode 100644
index fe1d3b073..000000000
--- a/lib/feedparser/tests/wellformed/lang/entry_content_xml_lang_inherit_2.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry content xml:lang overrides parent element
-Expect:      not bozo and entries[0]['content'][0]['language'] == u'en'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:lang="fr">
-<entry>
-  <content type="application/xhtml+xml" xml:lang="en"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/lang/entry_content_xml_lang_inherit_3.xml b/lib/feedparser/tests/wellformed/lang/entry_content_xml_lang_inherit_3.xml
deleted file mode 100644
index c80c753dd..000000000
--- a/lib/feedparser/tests/wellformed/lang/entry_content_xml_lang_inherit_3.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<!--
-Description: entry content xml:lang resets properly on new element
-Expect:      not bozo and entries[0]['content'][0]['language'] == u'en'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:lang="fr">
-<entry>
-  <summary type="application/xhtml+xml" xml:lang="de"><div xmlns="http://www.w3.org/1999/xhtml">blah blah blah</div></summary>
-  <content type="application/xhtml+xml" xml:lang="en"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/lang/entry_content_xml_lang_inherit_4.xml b/lib/feedparser/tests/wellformed/lang/entry_content_xml_lang_inherit_4.xml
deleted file mode 100644
index 8399d1f17..000000000
--- a/lib/feedparser/tests/wellformed/lang/entry_content_xml_lang_inherit_4.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<!--
-Description: entry content xml:lang inherits properly on new element
-Expect:      not bozo and entries[0]['content'][0]['language'] == u'en'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:lang="en">
-<entry>
-  <summary type="application/xhtml+xml" xml:lang="fr"><div xmlns="http://www.w3.org/1999/xhtml">blah blah blah</div></summary>
-  <content type="application/xhtml+xml"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/lang/entry_content_xml_lang_underscore.xml b/lib/feedparser/tests/wellformed/lang/entry_content_xml_lang_underscore.xml
deleted file mode 100644
index 9de86a43f..000000000
--- a/lib/feedparser/tests/wellformed/lang/entry_content_xml_lang_underscore.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry content language from xml:lang
-Expect:      not bozo and entries[0]['content'][0]['language'] == u'en-US'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-  <content xml:lang="en_US">Example Atom</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/lang/entry_summary_xml_lang.xml b/lib/feedparser/tests/wellformed/lang/entry_summary_xml_lang.xml
deleted file mode 100644
index 63d8966c0..000000000
--- a/lib/feedparser/tests/wellformed/lang/entry_summary_xml_lang.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry summary content language from xml:lang
-Expect:      not bozo and entries[0]['summary_detail']['language'] == u'en'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-  <summary xml:lang="en">Example Atom</summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/lang/entry_summary_xml_lang_blank.xml b/lib/feedparser/tests/wellformed/lang/entry_summary_xml_lang_blank.xml
deleted file mode 100644
index 39383476e..000000000
--- a/lib/feedparser/tests/wellformed/lang/entry_summary_xml_lang_blank.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry summary defines blank xml:lang
-Expect:      not bozo and entries[0]['summary_detail']['language'] == None
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:lang="en">
-<entry>
-  <summary type="application/xhtml+xml" xml:lang=""><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/lang/entry_summary_xml_lang_inherit.xml b/lib/feedparser/tests/wellformed/lang/entry_summary_xml_lang_inherit.xml
deleted file mode 100644
index 4d1b16591..000000000
--- a/lib/feedparser/tests/wellformed/lang/entry_summary_xml_lang_inherit.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry summary xml:lang inherited from parent element
-Expect:      not bozo and entries[0]['summary_detail']['language'] == u'en'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:lang="en">
-<entry>
-  <summary type="application/xhtml+xml"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/lang/entry_summary_xml_lang_inherit_2.xml b/lib/feedparser/tests/wellformed/lang/entry_summary_xml_lang_inherit_2.xml
deleted file mode 100644
index 3d8940612..000000000
--- a/lib/feedparser/tests/wellformed/lang/entry_summary_xml_lang_inherit_2.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry summary xml:lang overrides parent element
-Expect:      not bozo and entries[0]['summary_detail']['language'] == u'en'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:lang="fr">
-<entry>
-  <summary type="application/xhtml+xml" xml:lang="en"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/lang/entry_summary_xml_lang_inherit_3.xml b/lib/feedparser/tests/wellformed/lang/entry_summary_xml_lang_inherit_3.xml
deleted file mode 100644
index 37ada76ce..000000000
--- a/lib/feedparser/tests/wellformed/lang/entry_summary_xml_lang_inherit_3.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<!--
-Description: entry summary xml:lang resets properly on new element
-Expect:      not bozo and entries[0]['summary_detail']['language'] == u'en'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:lang="de">
-<entry>
-  <title type="application/xhtml+xml" xml:lang="fr"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></title>
-  <summary type="application/xhtml+xml" xml:lang="en"><div xmlns="http://www.w3.org/1999/xhtml">blah blah blah</div></summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/lang/entry_summary_xml_lang_inherit_4.xml b/lib/feedparser/tests/wellformed/lang/entry_summary_xml_lang_inherit_4.xml
deleted file mode 100644
index 4a5909e2b..000000000
--- a/lib/feedparser/tests/wellformed/lang/entry_summary_xml_lang_inherit_4.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<!--
-Description: entry summary xml:lang inherits properly on new element
-Expect:      not bozo and entries[0]['summary_detail']['language'] == u'en'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:lang="en">
-<entry>
-  <title type="application/xhtml+xml" xml:lang="fr"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></title>
-  <summary type="application/xhtml+xml"><div xmlns="http://www.w3.org/1999/xhtml">blah blah blah</div></summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/lang/entry_title_xml_lang.xml b/lib/feedparser/tests/wellformed/lang/entry_title_xml_lang.xml
deleted file mode 100644
index e10a4fd69..000000000
--- a/lib/feedparser/tests/wellformed/lang/entry_title_xml_lang.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry title language from xml:lang
-Expect:      not bozo and entries[0]['title_detail']['language'] == u'en'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-  <title xml:lang="en">Example Atom</title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/lang/entry_title_xml_lang_blank.xml b/lib/feedparser/tests/wellformed/lang/entry_title_xml_lang_blank.xml
deleted file mode 100644
index 0152a4aa6..000000000
--- a/lib/feedparser/tests/wellformed/lang/entry_title_xml_lang_blank.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry title defines blank xml:lang
-Expect:      not bozo and entries[0]['title_detail']['language'] == None
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:lang="en">
-<entry>
-  <title type="application/xhtml+xml" xml:lang=""><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/lang/entry_title_xml_lang_inherit.xml b/lib/feedparser/tests/wellformed/lang/entry_title_xml_lang_inherit.xml
deleted file mode 100644
index 752bf686b..000000000
--- a/lib/feedparser/tests/wellformed/lang/entry_title_xml_lang_inherit.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry title xml:lang inherited from parent element
-Expect:      not bozo and entries[0]['title_detail']['language'] == u'en'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:lang="en">
-<entry>
-  <title type="application/xhtml+xml"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/lang/entry_title_xml_lang_inherit_2.xml b/lib/feedparser/tests/wellformed/lang/entry_title_xml_lang_inherit_2.xml
deleted file mode 100644
index 2fa32a825..000000000
--- a/lib/feedparser/tests/wellformed/lang/entry_title_xml_lang_inherit_2.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry title xml:lang overrides parent element
-Expect:      not bozo and entries[0]['title_detail']['language'] == u'en'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:lang="fr">
-<entry>
-  <title type="application/xhtml+xml" xml:lang="en"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/lang/entry_title_xml_lang_inherit_3.xml b/lib/feedparser/tests/wellformed/lang/entry_title_xml_lang_inherit_3.xml
deleted file mode 100644
index 93efc4d21..000000000
--- a/lib/feedparser/tests/wellformed/lang/entry_title_xml_lang_inherit_3.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<!--
-Description: entry title xml:lang resets properly on new element
-Expect:      not bozo and entries[0]['title_detail']['language'] == u'en'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:lang="fr">
-<entry>
-  <summary type="application/xhtml+xml" xml:lang="de"><div xmlns="http://www.w3.org/1999/xhtml">blah blah blah</div></summary>
-  <title type="application/xhtml+xml" xml:lang="en"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/lang/entry_title_xml_lang_inherit_4.xml b/lib/feedparser/tests/wellformed/lang/entry_title_xml_lang_inherit_4.xml
deleted file mode 100644
index 28c8a0df2..000000000
--- a/lib/feedparser/tests/wellformed/lang/entry_title_xml_lang_inherit_4.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<!--
-Description: entry title xml:lang inherits properly on new element
-Expect:      not bozo and entries[0]['title_detail']['language'] == u'en'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:lang="en">
-<entry>
-  <summary type="application/xhtml+xml" xml:lang="fr"><div xmlns="http://www.w3.org/1999/xhtml">blah blah blah</div></summary>
-  <title type="application/xhtml+xml"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/lang/feed_copyright_xml_lang.xml b/lib/feedparser/tests/wellformed/lang/feed_copyright_xml_lang.xml
deleted file mode 100644
index 2ec0dffc5..000000000
--- a/lib/feedparser/tests/wellformed/lang/feed_copyright_xml_lang.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed copyright content language from xml:lang
-Expect:      not bozo and feed['copyright_detail']['language'] == u'en'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <copyright xml:lang="en">Example Atom</copyright>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/lang/feed_copyright_xml_lang_blank.xml b/lib/feedparser/tests/wellformed/lang/feed_copyright_xml_lang_blank.xml
deleted file mode 100644
index 1dc0b95d1..000000000
--- a/lib/feedparser/tests/wellformed/lang/feed_copyright_xml_lang_blank.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed copyright defines blank xml:lang
-Expect:      not bozo and feed['copyright_detail']['language'] == None
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:lang="en">
-  <copyright type="application/xhtml+xml" xml:lang=""><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></copyright>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/lang/feed_copyright_xml_lang_inherit.xml b/lib/feedparser/tests/wellformed/lang/feed_copyright_xml_lang_inherit.xml
deleted file mode 100644
index 0edff944e..000000000
--- a/lib/feedparser/tests/wellformed/lang/feed_copyright_xml_lang_inherit.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed copyright xml:lang inherited from parent element
-Expect:      not bozo and feed['copyright_detail']['language'] == u'en'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:lang="en">
-  <copyright type="application/xhtml+xml"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></copyright>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/lang/feed_copyright_xml_lang_inherit_2.xml b/lib/feedparser/tests/wellformed/lang/feed_copyright_xml_lang_inherit_2.xml
deleted file mode 100644
index 900a3242b..000000000
--- a/lib/feedparser/tests/wellformed/lang/feed_copyright_xml_lang_inherit_2.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed copyright xml:lang overrides parent element
-Expect:      not bozo and feed['copyright_detail']['language'] == u'en'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:lang="fr">
-  <copyright type="application/xhtml+xml" xml:lang="en"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></copyright>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/lang/feed_copyright_xml_lang_inherit_3.xml b/lib/feedparser/tests/wellformed/lang/feed_copyright_xml_lang_inherit_3.xml
deleted file mode 100644
index 3957f4547..000000000
--- a/lib/feedparser/tests/wellformed/lang/feed_copyright_xml_lang_inherit_3.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<!--
-Description: feed copyright xml:lang resets properly on new element
-Expect:      not bozo and feed['copyright_detail']['language'] == u'en'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:lang="de">
-  <info type="application/xhtml+xml" xml:lang="fr"><div xmlns="http://www.w3.org/1999/xhtml">blah blah blah</div></info>
-  <copyright type="application/xhtml+xml" xml:lang="en"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></copyright>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/lang/feed_copyright_xml_lang_inherit_4.xml b/lib/feedparser/tests/wellformed/lang/feed_copyright_xml_lang_inherit_4.xml
deleted file mode 100644
index 0752e9662..000000000
--- a/lib/feedparser/tests/wellformed/lang/feed_copyright_xml_lang_inherit_4.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<!--
-Description: feed copyright xml:lang inherits properly on new element
-Expect:      not bozo and feed['copyright_detail']['language'] == u'en'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:lang="en">
-  <info type="application/xhtml+xml" xml:lang="fr"><div xmlns="http://www.w3.org/1999/xhtml">blah blah blah</div></info>
-  <copyright type="application/xhtml+xml"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></copyright>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/lang/feed_info_xml_lang.xml b/lib/feedparser/tests/wellformed/lang/feed_info_xml_lang.xml
deleted file mode 100644
index e863e8de9..000000000
--- a/lib/feedparser/tests/wellformed/lang/feed_info_xml_lang.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed info content language from xml:lang
-Expect:      not bozo and feed['info_detail']['language'] == u'en'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <info xml:lang="en">Example Atom</info>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/lang/feed_info_xml_lang_blank.xml b/lib/feedparser/tests/wellformed/lang/feed_info_xml_lang_blank.xml
deleted file mode 100644
index cb8f7f5aa..000000000
--- a/lib/feedparser/tests/wellformed/lang/feed_info_xml_lang_blank.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed info defines blank xml:lang
-Expect:      not bozo and feed['info_detail']['language'] == None
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:lang="en">
-  <info type="application/xhtml+xml" xml:lang=""><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></info>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/lang/feed_info_xml_lang_inherit.xml b/lib/feedparser/tests/wellformed/lang/feed_info_xml_lang_inherit.xml
deleted file mode 100644
index b36cfa8d5..000000000
--- a/lib/feedparser/tests/wellformed/lang/feed_info_xml_lang_inherit.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed info xml:lang inherited from parent element
-Expect:      not bozo and feed['info_detail']['language'] == u'en'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:lang="en">
-  <info type="application/xhtml+xml"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></info>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/lang/feed_info_xml_lang_inherit_2.xml b/lib/feedparser/tests/wellformed/lang/feed_info_xml_lang_inherit_2.xml
deleted file mode 100644
index 8e6654060..000000000
--- a/lib/feedparser/tests/wellformed/lang/feed_info_xml_lang_inherit_2.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed info xml:lang overrides parent element
-Expect:      not bozo and feed['info_detail']['language'] == u'en'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:lang="fr">
-  <info type="application/xhtml+xml" xml:lang="en"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></info>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/lang/feed_info_xml_lang_inherit_3.xml b/lib/feedparser/tests/wellformed/lang/feed_info_xml_lang_inherit_3.xml
deleted file mode 100644
index 5aaf56a25..000000000
--- a/lib/feedparser/tests/wellformed/lang/feed_info_xml_lang_inherit_3.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<!--
-Description: feed info xml:lang resets properly on new element
-Expect:      not bozo and feed['info_detail']['language'] == u'en'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:lang="fr">
-  <title type="application/xhtml+xml" xml:lang="de"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></title>
-  <info type="application/xhtml+xml" xml:lang="en"><div xmlns="http://www.w3.org/1999/xhtml">blah blah blah</div></info>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/lang/feed_info_xml_lang_inherit_4.xml b/lib/feedparser/tests/wellformed/lang/feed_info_xml_lang_inherit_4.xml
deleted file mode 100644
index 4764fb03b..000000000
--- a/lib/feedparser/tests/wellformed/lang/feed_info_xml_lang_inherit_4.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<!--
-Description: feed info xml:lang inherits properly on new element
-Expect:      not bozo and feed['info_detail']['language'] == u'en'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:lang="en">
-  <title type="application/xhtml+xml" xml:lang="fr"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></title>
-  <info type="application/xhtml+xml"><div xmlns="http://www.w3.org/1999/xhtml">blah blah blah</div></info>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/lang/feed_language.xml b/lib/feedparser/tests/wellformed/lang/feed_language.xml
deleted file mode 100644
index 4301594c8..000000000
--- a/lib/feedparser/tests/wellformed/lang/feed_language.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: feed language from language
-Expect:      not bozo and feed['language'] == u'en'
--->
-<rss>
-<channel>
-<language>en</language>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/lang/feed_language_override.xml b/lib/feedparser/tests/wellformed/lang/feed_language_override.xml
deleted file mode 100644
index 4301594c8..000000000
--- a/lib/feedparser/tests/wellformed/lang/feed_language_override.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: feed language from language
-Expect:      not bozo and feed['language'] == u'en'
--->
-<rss>
-<channel>
-<language>en</language>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/lang/feed_not_xml_lang.xml b/lib/feedparser/tests/wellformed/lang/feed_not_xml_lang.xml
deleted file mode 100644
index 6e89e9c93..000000000
--- a/lib/feedparser/tests/wellformed/lang/feed_not_xml_lang.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed language from xml:lang
-Expect:      not bozo and feed['language'] == u'en'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:lang="en">
-<title xml:lang="fr">foo</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/lang/feed_not_xml_lang_2.xml b/lib/feedparser/tests/wellformed/lang/feed_not_xml_lang_2.xml
deleted file mode 100644
index 5ea58f5e7..000000000
--- a/lib/feedparser/tests/wellformed/lang/feed_not_xml_lang_2.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed language from language
-Expect:      not bozo and not feed.has_key('language')
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title xml:lang="en">foo</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/lang/feed_tagline_xml_lang.xml b/lib/feedparser/tests/wellformed/lang/feed_tagline_xml_lang.xml
deleted file mode 100644
index c7a3088e4..000000000
--- a/lib/feedparser/tests/wellformed/lang/feed_tagline_xml_lang.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed tagline content language from xml:lang
-Expect:      not bozo and feed['tagline_detail']['language'] == u'en'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <tagline xml:lang="en">Example Atom</tagline>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/lang/feed_tagline_xml_lang_blank.xml b/lib/feedparser/tests/wellformed/lang/feed_tagline_xml_lang_blank.xml
deleted file mode 100644
index ece120842..000000000
--- a/lib/feedparser/tests/wellformed/lang/feed_tagline_xml_lang_blank.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed tagline defines blank xml:lang
-Expect:      not bozo and feed['tagline_detail']['language'] == None
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:lang="en">
-  <tagline type="application/xhtml+xml" xml:lang=""><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></tagline>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/lang/feed_tagline_xml_lang_inherit.xml b/lib/feedparser/tests/wellformed/lang/feed_tagline_xml_lang_inherit.xml
deleted file mode 100644
index 97d788963..000000000
--- a/lib/feedparser/tests/wellformed/lang/feed_tagline_xml_lang_inherit.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed tagline xml:lang inherited from parent element
-Expect:      not bozo and feed['tagline_detail']['language'] == u'en'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:lang="en">
-  <tagline type="application/xhtml+xml"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></tagline>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/lang/feed_tagline_xml_lang_inherit_2.xml b/lib/feedparser/tests/wellformed/lang/feed_tagline_xml_lang_inherit_2.xml
deleted file mode 100644
index 72fea3c62..000000000
--- a/lib/feedparser/tests/wellformed/lang/feed_tagline_xml_lang_inherit_2.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed tagline xml:lang overrides parent element
-Expect:      not bozo and feed['tagline_detail']['language'] == u'fr'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:lang="en">
-  <tagline type="application/xhtml+xml" xml:lang="fr"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></tagline>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/lang/feed_tagline_xml_lang_inherit_3.xml b/lib/feedparser/tests/wellformed/lang/feed_tagline_xml_lang_inherit_3.xml
deleted file mode 100644
index bda6b065f..000000000
--- a/lib/feedparser/tests/wellformed/lang/feed_tagline_xml_lang_inherit_3.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<!--
-Description: feed tagline xml:lang resets properly on new element
-Expect:      not bozo and feed['tagline_detail']['language'] == u'de'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:lang="en">
-  <info type="application/xhtml+xml" xml:lang="fr"><div xmlns="http://www.w3.org/1999/xhtml">blah blah blah</div></info>
-  <tagline type="application/xhtml+xml" xml:lang="de"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></tagline>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/lang/feed_tagline_xml_lang_inherit_4.xml b/lib/feedparser/tests/wellformed/lang/feed_tagline_xml_lang_inherit_4.xml
deleted file mode 100644
index 8d9b83dd8..000000000
--- a/lib/feedparser/tests/wellformed/lang/feed_tagline_xml_lang_inherit_4.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<!--
-Description: feed tagline xml:lang inherits properly on new element
-Expect:      not bozo and feed['tagline_detail']['language'] == u'en'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:lang="en">
-  <info type="application/xhtml+xml" xml:lang="fr"><div xmlns="http://www.w3.org/1999/xhtml">blah blah blah</div></info>
-  <tagline type="application/xhtml+xml"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></tagline>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/lang/feed_title_xml_lang.xml b/lib/feedparser/tests/wellformed/lang/feed_title_xml_lang.xml
deleted file mode 100644
index 3ce6b48d3..000000000
--- a/lib/feedparser/tests/wellformed/lang/feed_title_xml_lang.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed title content language from xml:lang
-Expect:      not bozo and feed['title_detail']['language'] == u'en'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <title xml:lang="en">Example Atom</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/lang/feed_title_xml_lang_blank.xml b/lib/feedparser/tests/wellformed/lang/feed_title_xml_lang_blank.xml
deleted file mode 100644
index 12a5d4656..000000000
--- a/lib/feedparser/tests/wellformed/lang/feed_title_xml_lang_blank.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed title defines blank xml:lang
-Expect:      not bozo and feed['title_detail']['language'] == None
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:lang="en">
-  <title type="application/xhtml+xml" xml:lang=""><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/lang/feed_title_xml_lang_inherit.xml b/lib/feedparser/tests/wellformed/lang/feed_title_xml_lang_inherit.xml
deleted file mode 100644
index 0a2e6b205..000000000
--- a/lib/feedparser/tests/wellformed/lang/feed_title_xml_lang_inherit.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed title xml:lang inherited from parent element
-Expect:      not bozo and feed['title_detail']['language'] == u'de'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:lang="de">
-  <title type="application/xhtml+xml"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/lang/feed_title_xml_lang_inherit_2.xml b/lib/feedparser/tests/wellformed/lang/feed_title_xml_lang_inherit_2.xml
deleted file mode 100644
index 1d9a636d5..000000000
--- a/lib/feedparser/tests/wellformed/lang/feed_title_xml_lang_inherit_2.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed title xml:lang overrides parent element
-Expect:      not bozo and feed['title_detail']['language'] == u'de'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:lang="en">
-  <title type="application/xhtml+xml" xml:lang="de"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/lang/feed_title_xml_lang_inherit_3.xml b/lib/feedparser/tests/wellformed/lang/feed_title_xml_lang_inherit_3.xml
deleted file mode 100644
index 535e34e83..000000000
--- a/lib/feedparser/tests/wellformed/lang/feed_title_xml_lang_inherit_3.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<!--
-Description: feed title xml:lang resets properly on new element
-Expect:      not bozo and feed['title_detail']['language'] == u'de'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:lang="en">
-  <info type="application/xhtml+xml" xml:lang="fr"><div xmlns="http://www.w3.org/1999/xhtml">blah blah blah</div></info>
-  <title type="application/xhtml+xml" xml:lang="de"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/lang/feed_title_xml_lang_inherit_4.xml b/lib/feedparser/tests/wellformed/lang/feed_title_xml_lang_inherit_4.xml
deleted file mode 100644
index de9bff9ef..000000000
--- a/lib/feedparser/tests/wellformed/lang/feed_title_xml_lang_inherit_4.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<!--
-Description: feed title xml:lang inherits properly on new element
-Expect:      not bozo and feed['title_detail']['language'] == u'en'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:lang="en">
-  <info type="application/xhtml+xml" xml:lang="fr"><div xmlns="http://www.w3.org/1999/xhtml">blah blah blah</div></info>
-  <title type="application/xhtml+xml"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/lang/feed_xml_lang.xml b/lib/feedparser/tests/wellformed/lang/feed_xml_lang.xml
deleted file mode 100644
index e60bc5593..000000000
--- a/lib/feedparser/tests/wellformed/lang/feed_xml_lang.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-<!--
-Description: feed language from xml:lang
-Expect:      not bozo and feed['language'] == u'en'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:lang="en">
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/lang/feed_xml_lang_underscore.xml b/lib/feedparser/tests/wellformed/lang/feed_xml_lang_underscore.xml
deleted file mode 100644
index d29a49e78..000000000
--- a/lib/feedparser/tests/wellformed/lang/feed_xml_lang_underscore.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-<!--
-Description: feed language from xml:lang
-Expect:      not bozo and feed['language'] == u'en-US'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:lang="en_US">
-</feed>
diff --git a/lib/feedparser/tests/wellformed/lang/http_content_language.xml b/lib/feedparser/tests/wellformed/lang/http_content_language.xml
deleted file mode 100644
index cc245abb8..000000000
--- a/lib/feedparser/tests/wellformed/lang/http_content_language.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Header:      Content-Language: en
-Description: feed language from content-language
-Expect:      not bozo and feed['language'] == u'en'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/lang/http_content_language_entry_title_inherit.xml b/lib/feedparser/tests/wellformed/lang/http_content_language_entry_title_inherit.xml
deleted file mode 100644
index 97c4b199b..000000000
--- a/lib/feedparser/tests/wellformed/lang/http_content_language_entry_title_inherit.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<!--
-Header:      Content-Language: en
-Description: entry title language from content-language
-Expect:      not bozo and entries[0]['title_detail']['language'] == u'en'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<title>foo</title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/lang/http_content_language_entry_title_inherit_2.xml b/lib/feedparser/tests/wellformed/lang/http_content_language_entry_title_inherit_2.xml
deleted file mode 100644
index cc573e9a4..000000000
--- a/lib/feedparser/tests/wellformed/lang/http_content_language_entry_title_inherit_2.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Header:      Content-Language: en
-Description: entry title language from content-language (this one is harder than the others)
-Expect:      not bozo and entries[0]['title_detail']['language'] == u'en'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<id xml:lang="fr">1</id>
-<title>foo</title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/lang/http_content_language_feed_language.xml b/lib/feedparser/tests/wellformed/lang/http_content_language_feed_language.xml
deleted file mode 100644
index 4421746b9..000000000
--- a/lib/feedparser/tests/wellformed/lang/http_content_language_feed_language.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<!--
-Header:      Content-Language: en
-Description: feed language overrides content-language
-Expect:      not bozo and feed['language'] == u'fr'
--->
-<rss>
-<channel>
-<language>fr</language>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/lang/http_content_language_feed_xml_lang.xml b/lib/feedparser/tests/wellformed/lang/http_content_language_feed_xml_lang.xml
deleted file mode 100644
index 0ab11869e..000000000
--- a/lib/feedparser/tests/wellformed/lang/http_content_language_feed_xml_lang.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Header:      Content-Language: en
-Description: feed xml:lang overrides content-language
-Expect:      not bozo and feed['language'] == u'fr'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:lang="fr">
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/lang/item_content_encoded_xml_lang.xml b/lib/feedparser/tests/wellformed/lang/item_content_encoded_xml_lang.xml
deleted file mode 100644
index 0a61f55b2..000000000
--- a/lib/feedparser/tests/wellformed/lang/item_content_encoded_xml_lang.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: content:encoded
-Expect:      not bozo and entries[0]['content'][0]['language'] == u'en'
--->
-<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
-<channel>
-<item>
-<content:encoded xml:lang="en">&lt;p&gt;Example content&lt;/p&gt;</content:encoded>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/lang/item_content_encoded_xml_lang_inherit.xml b/lib/feedparser/tests/wellformed/lang/item_content_encoded_xml_lang_inherit.xml
deleted file mode 100644
index 69397d46c..000000000
--- a/lib/feedparser/tests/wellformed/lang/item_content_encoded_xml_lang_inherit.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: content:encoded
-Expect:      not bozo and entries[0]['content'][0]['language'] == u'en'
--->
-<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xml:lang="en">
-<channel>
-<item>
-<content:encoded>&lt;p&gt;Example content&lt;/p&gt;</content:encoded>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/lang/item_dc_language.xml b/lib/feedparser/tests/wellformed/lang/item_dc_language.xml
deleted file mode 100644
index 045a4715a..000000000
--- a/lib/feedparser/tests/wellformed/lang/item_dc_language.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item dc:language
-Expect:      not bozo and entries[0]['language'] == u'en'
--->
-<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
-<channel>
-<item>
-<dc:language>en</dc:language>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/lang/item_fullitem_xml_lang.xml b/lib/feedparser/tests/wellformed/lang/item_fullitem_xml_lang.xml
deleted file mode 100644
index 0a4da4ad0..000000000
--- a/lib/feedparser/tests/wellformed/lang/item_fullitem_xml_lang.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: fullitem language
-Expect:      not bozo and entries[0]['content'][0]['language'] == u'en'
--->
-<rss version="2.0">
-<channel>
-<item>
-<fullitem xml:lang="en">&lt;p&gt;Example content&lt;/p&gt;</fullitem>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/lang/item_fullitem_xml_lang_inherit.xml b/lib/feedparser/tests/wellformed/lang/item_fullitem_xml_lang_inherit.xml
deleted file mode 100644
index 7fe98d1ce..000000000
--- a/lib/feedparser/tests/wellformed/lang/item_fullitem_xml_lang_inherit.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: fullitem xml:lang inherited from parent element
-Expect:      not bozo and entries[0]['content'][0]['language'] == u'en'
--->
-<rss version="2.0" xml:lang="en">
-<channel>
-<item>
-<fullitem>&lt;p&gt;Example content&lt;/p&gt;</fullitem>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/lang/item_xhtml_body_xml_lang.xml b/lib/feedparser/tests/wellformed/lang/item_xhtml_body_xml_lang.xml
deleted file mode 100644
index 4f4838776..000000000
--- a/lib/feedparser/tests/wellformed/lang/item_xhtml_body_xml_lang.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<!--
-Description: xhtml:body xml:lang
-Expect:      not bozo and entries[0]['content'][0]['language'] == 'en'
--->
-<rss version="2.0">
-<channel>
-<item>
-<body xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
-<p>Example content</p>
-</body>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/lang/item_xhtml_body_xml_lang_inherit.xml b/lib/feedparser/tests/wellformed/lang/item_xhtml_body_xml_lang_inherit.xml
deleted file mode 100644
index a9eb6347a..000000000
--- a/lib/feedparser/tests/wellformed/lang/item_xhtml_body_xml_lang_inherit.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<!--
-Description: xhtml:body xml:lang
-Expect:      not bozo and entries[0]['content'][0]['language'] == 'en'
--->
-<rss version="2.0" xml:lang="en">
-<channel>
-<item>
-<body xmlns="http://www.w3.org/1999/xhtml">
-<p>Example content</p>
-</body>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/mf_hcard/3-5-5-org-unicode.xml b/lib/feedparser/tests/wellformed/mf_hcard/3-5-5-org-unicode.xml
deleted file mode 100644
index 3cb6c96f8..000000000
--- a/lib/feedparser/tests/wellformed/mf_hcard/3-5-5-org-unicode.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless: feedparser.BeautifulSoup
-Description: hcard contains non-ascii character
-Expect: not bozo and entries[0]['vcard'] == u"BEGIN:vCard\nVERSION:3.0\nORG:\u00b4\nEND:vCard"
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <entry>
-    <content type="html">
-&lt;div class=&quot;vcard&quot;&gt;
-&lt;span class='org'&gt;&#180;&lt;/span&gt;
-&lt;/div&gt;
-    </content>
-  </entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/mf_rel_tag/rel_tag_term_no_term.xml b/lib/feedparser/tests/wellformed/mf_rel_tag/rel_tag_term_no_term.xml
deleted file mode 100644
index 75db178e8..000000000
--- a/lib/feedparser/tests/wellformed/mf_rel_tag/rel_tag_term_no_term.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: rel='tag' link contains no actual term
-Expect:      not bozo and 'tags' not in entries[0]
--->
-<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" version="2.0">
-<channel>
-<item>
-<content:encoded>&lt;a href='http://empty-path.test' rel='tag'&gt;anything&lt;/a&gt;</content:encoded>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/namespace/atommathml.xml b/lib/feedparser/tests/wellformed/namespace/atommathml.xml
deleted file mode 100644
index 1795a2e03..000000000
--- a/lib/feedparser/tests/wellformed/namespace/atommathml.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  MathML w/XLink
-Expect:       not bozo and entries[0]['description'] == '<math xmlns="http://www.w3.org/1998/Math/MathML"><mrow xlink:href="http://golem.ph.utexas.edu" xlink:show="replace" xlink:type="simple" xmlns:xlink="http://www.w3.org/1999/xlink"><mrow><mi>a</mi><mo>+</mo><mi>b</mi></mrow></mrow></math>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry xmlns:xlink="http://www.w3.org/1999/xlink">
-<content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><math xmlns="http://www.w3.org/1998/Math/MathML"><mrow xlink:type="simple" xlink:show="replace" xlink:href="http://golem.ph.utexas.edu"><mrow><mi>a</mi><mo>+</mo><mi>b</mi></mrow></mrow></math></div></content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/namespace/atomsvg.xml b/lib/feedparser/tests/wellformed/namespace/atomsvg.xml
deleted file mode 100644
index ecee5ed7f..000000000
--- a/lib/feedparser/tests/wellformed/namespace/atomsvg.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  SVG
-Expect:       not bozo and entries[0]['description'] == '<svg baseProfile="full" height="200px" version="1.1" width="300px" xmlns="http://www.w3.org/2000/svg"><circle cx="150px" cy="100px" fill="#ff0000" r="50px" stroke="#000000" stroke-width="5px"></circle></svg>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:svg="http://www.w3.org/2000/svg">
-<content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><svg:svg version="1.1" baseProfile="full" width="300px" height="200px"><svg:circle cx="150px" cy="100px" r="50px" fill="#ff0000" stroke="#000000" stroke-width="5px"/></svg:svg></div></content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/namespace/atomsvgdctitle.xml b/lib/feedparser/tests/wellformed/namespace/atomsvgdctitle.xml
deleted file mode 100644
index d28c9e336..000000000
--- a/lib/feedparser/tests/wellformed/namespace/atomsvgdctitle.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<!--
-Description:  SVG
-Expect:       1
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <entry>
-    <content type="xhtml">
-      <div xmlns="http://www.w3.org/1999/xhtml">
-        <p>Before</p>
-        <svg xmlns="http://www.w3.org/2000/svg">
-          <metadata>
-            <rdf:RDF xmlns:cc="http://web.resource.org/cc/"
-              xmlns:dc="http://purl.org/dc/elements/1.1/"
-              xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
-              <cc:Work rdf:about="">
-                <dc:title>Christmas Tree</dc:title>
-                <dc:description></dc:description>
-                <dc:creator>
-                  <cc:Agent>
-                    <dc:title>Aaron Spike</dc:title>
-                  </cc:Agent>
-                </dc:creator>
-              </cc:Work>
-              <cc:License rdf:about="http://web.resource.org/cc/PublicDomain">
-                <cc:permits rdf:resource="http://web.resource.org/cc/Reproduction"/>
-                <cc:permits rdf:resource="http://web.resource.org/cc/Distribution"/>
-                <cc:permits rdf:resource="http://web.resource.org/cc/DerivativeWorks"/>
-              </cc:License>
-            </rdf:RDF>
-          </metadata>
-        </svg>
-        <p>After</p>
-      </div>
-    </content>
-  </entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/namespace/atomsvgdesc.xml b/lib/feedparser/tests/wellformed/namespace/atomsvgdesc.xml
deleted file mode 100644
index 5f9311cd9..000000000
--- a/lib/feedparser/tests/wellformed/namespace/atomsvgdesc.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  SVG
-Expect:       not bozo and entries[0]['description'] == '<svg baseProfile="full" height="200px" version="1.1" width="300px" xmlns="http://www.w3.org/2000/svg"><desc><abbr>foo</abbr></desc><circle cx="150px" cy="100px" fill="#ff0000" r="50px" stroke="#000000" stroke-width="5px"></circle></svg>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><svg version="1.1" baseProfile="full" width="300px" height="200px" xmlns="http://www.w3.org/2000/svg"><desc><abbr>foo</abbr></desc><circle cx="150px" cy="100px" r="50px" fill="#ff0000" stroke="#000000" stroke-width="5px"/></svg></div></content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/namespace/atomsvgtitle.xml b/lib/feedparser/tests/wellformed/namespace/atomsvgtitle.xml
deleted file mode 100644
index 7848e992f..000000000
--- a/lib/feedparser/tests/wellformed/namespace/atomsvgtitle.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  SVG
-Expect:       not bozo and entries[0]['description'] == '<svg baseProfile="full" height="200px" version="1.1" width="300px" xmlns="http://www.w3.org/2000/svg"><title>foo</title><circle cx="150px" cy="100px" fill="#ff0000" r="50px" stroke="#000000" stroke-width="5px"></circle></svg>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><svg version="1.1" baseProfile="full" width="300px" height="200px" xmlns="http://www.w3.org/2000/svg"><title>foo</title><circle cx="150px" cy="100px" r="50px" fill="#ff0000" stroke="#000000" stroke-width="5px"/></svg></div></content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/namespace/atomthreading.xml b/lib/feedparser/tests/wellformed/namespace/atomthreading.xml
deleted file mode 100644
index b5d6ea66d..000000000
--- a/lib/feedparser/tests/wellformed/namespace/atomthreading.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-<!--
-Description:  Atom threading extension
-Expect:       not bozo and feed['thr_in-reply-to']['href'] == u'http://salmon-test.blogspot.com/2009/10/test-post.html' and feed['thr_in-reply-to']['ref'] == u'tag:blogger.com,1999:blog-893591374313312737.post-3861663258538857954' and feed['thr_in-reply-to']['source'] == u'http://www.blogger.com/feeds/893591374313312737/posts/default/3861663258538857954' and feed['thr_in-reply-to']['type'] == u'text/html'
--->
-<feed xmlns="http://www.w3.org/2005/Atom"><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://salmon-test.blogspot.com/2009/10/test-post.html' ref='tag:blogger.com,1999:blog-893591374313312737.post-3861663258538857954' source='http://www.blogger.com/feeds/893591374313312737/posts/default/3861663258538857954' type='text/html'/></feed>
diff --git a/lib/feedparser/tests/wellformed/namespace/atomthreadingwithentry.xml b/lib/feedparser/tests/wellformed/namespace/atomthreadingwithentry.xml
deleted file mode 100644
index 79c7e4d0b..000000000
--- a/lib/feedparser/tests/wellformed/namespace/atomthreadingwithentry.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!--
-Description:  Atom threading extension
-Expect:       not bozo and entries[0]['thr_in-reply-to']['href'] == u'http://salmon-test.blogspot.com/2009/10/test-post.html' and entries[0]['thr_in-reply-to']['ref'] == u'tag:blogger.com,1999:blog-893591374313312737.post-3861663258538857954' and entries[0]['thr_in-reply-to']['source'] == u'http://www.blogger.com/feeds/893591374313312737/posts/default/3861663258538857954' and entries[0]['thr_in-reply-to']['type'] == u'text/html'
--->
-<?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/'><id>tag:blogger.com,1999:blog-893591374313312737.post3861663258538857954..comments</id><updated>2009-12-08T16:59:02.563-08:00</updated><title type='text'>Comments on salmon-test: Test post</title><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://salmon-test.blogspot.com/feeds/3861663258538857954/comments/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/893591374313312737/3861663258538857954/comments/default'/><link rel='alternate' type='text/html' href='http://salmon-test.blogspot.com/2009/10/test-post.html'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/893591374313312737/3861663258538857954/comments/default?start-index=26&amp;max-results=25'/><author><name>John</name><email>noreply@blogger.com</email></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>30</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-893591374313312737.post-4788628857625737701</id><published>2009-12-08T16:59:02.544-08:00</published><updated>2009-12-08T16:59:02.544-08:00</updated><title type='text'>bloffo bliff by te...</title><content type='html'>bloffo bliff by &lt;a href="http://example.org/profile/te..." rel="nofollow"&gt;te...&lt;/a&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/893591374313312737/3861663258538857954/comments/default/4788628857625737701'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/893591374313312737/3861663258538857954/comments/default/4788628857625737701'/><link rel='alternate' type='text/html' href='http://salmon-test.blogspot.com/2009/10/test-post.html?showComment=1260320342544#c4788628857625737701' title=''/><author><name>John</name><uri>http://www.blogger.com/profile/12344017489797258795</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='07886630143387711930'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://salmon-test.blogspot.com/2009/10/test-post.html' ref='tag:blogger.com,1999:blog-893591374313312737.post-3861663258538857954' source='http://www.blogger.com/feeds/893591374313312737/posts/default/3861663258538857954' type='text/html'/></entry></feed>
diff --git a/lib/feedparser/tests/wellformed/namespace/atomxlink.xml b/lib/feedparser/tests/wellformed/namespace/atomxlink.xml
deleted file mode 100644
index ed7105ece..000000000
--- a/lib/feedparser/tests/wellformed/namespace/atomxlink.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  SVG
-Expect:       not bozo and entries[0]['description'] == '<svg baseProfile="full" height="200px" version="1.1" width="300px" xmlns="http://www.w3.org/2000/svg"><a xlink:href="http://example.com/" xmlns:xlink="http://www.w3.org/1999/xlink"><circle cx="150px" cy="100px" fill="#ff0000" r="50px" stroke="#000000" stroke-width="5px"></circle></a></svg>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:svg="http://www.w3.org/2000/svg">
-<content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><svg:svg version="1.1" baseProfile="full" width="300px" height="200px"><svg:a xlink:href="http://example.com/"><svg:circle cx="150px" cy="100px" r="50px" fill="#ff0000" stroke="#000000" stroke-width="5px"/></svg:a></svg:svg></div></content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/namespace/rss1.0withModules.xml b/lib/feedparser/tests/wellformed/namespace/rss1.0withModules.xml
deleted file mode 100644
index 469b7630e..000000000
--- a/lib/feedparser/tests/wellformed/namespace/rss1.0withModules.xml
+++ /dev/null
@@ -1,47 +0,0 @@
-<!--
-Credits:     Simon Fell - http://www.pocketsoap.com/rssTests/rss1.0withModules.xml - included here with permission
-Description: RSS 1.0 with modules
-Expect:      not bozo and entries[0]['title'] == u'Test Item - RSS 1.0'
--->
-<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 
-		 xmlns="http://purl.org/rss/1.0/"
-		 xmlns:admin="http://webns.net/mvcb/"
-		 xmlns:ag="http://purl.org/rss/modules/aggregation/"
-		 xmlns:dc="http://purl.org/dc/elements/1.1/"
-		 xmlns:dcterms="http://purl.org/dc/terms/"
-		 xmlns:l="http://purl.org/rss/1.0/modules/link/"
-		 xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/">
-	<channel rdf:about="http://www.pocketsoap.com/rssTests/">
-		<title>RSS Tests - RSS 1.0</title>
-		<link>http://www.pocketsoap.com/rssTests/rss1.0withModules.xml</link>
-		<description>A set of test RSS files for examining the state of extension support in RSS aggregators</description>
-		<dc:language>en-gb</dc:language>
-		<dc:rights>Copyright 2002 Simon Fell</dc:rights>
-
-		<dc:date>2002-09-28T20:01:19Z</dc:date>
-		<dc:creator>sf@zaks.demon.co.uk</dc:creator>
-		<dc:publisher>sf@zaks.demon.co.uk</dc:publisher>
-		<admin:errorReportsTo rdf:resource="mailto:sf@zaks.demon.co.uk" />
-		<dcterms:issued>2002-09-28T20:01:19Z</dcterms:issued>
-		<dcterms:created>2002-01-12T02:15:32Z</dcterms:created>
-
-		<dcterms:modified>2002-09-28T20:01:19Z</dcterms:modified>
-		<dcterms:dateCopyrighted>2002</dcterms:dateCopyrighted>
-		<image rdf:resource="http://www.w3.org/RDF/icons/rdf_powered_button.32" />
-		<items>
-			<rdf:Seq>
-			<rdf:li rdf:resource="http://www.pocketsoap.com/weblog/rssTests/rss1.0withModules.xml#1" />
-			</rdf:Seq>
-		</items>
-
-	</channel>
-	<item rdf:about="http://www.pocketsoap.com/weblog/rssTests/rss1.0withModules.xml#1">
-		<title>Test Item - RSS 1.0</title>
-		<link>http://www.pocketsoap.com/weblog/rssTests/rss1.0withModules.xml#1</link>
-		<l:link l:rel="http://purl.org/rss/1.0/modules/proposed/link/#permalink"  l:type="text/html" rdf:resource="http://www.pocketsoap.com/weblog/rssTests/rss1.0withModules.xml#1" />
-		<description>This is a fairly standard RSS 1.0 feed with a few modules, with no localname clashes, any aggregator that supports RSS 1.0 should handle this fine (RSS 1.0)</description>
-		<dcterms:modified>2002-09-28T20:01:19Z</dcterms:modified>
-
-		<dcterms:created>2002-09-28T20:01:19Z</dcterms:created>
-	</item>
-</rdf:RDF>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/namespace/rss1.0withModulesNoDefNS.xml b/lib/feedparser/tests/wellformed/namespace/rss1.0withModulesNoDefNS.xml
deleted file mode 100644
index d0442be1f..000000000
--- a/lib/feedparser/tests/wellformed/namespace/rss1.0withModulesNoDefNS.xml
+++ /dev/null
@@ -1,48 +0,0 @@
-<!--
-Credits:     Simon Fell - http://www.pocketsoap.com/rssTests/rss1.0withModulesNoDefNS.xml - included here with permission
-Description: RSS 1.0, no default namespace
-Expect:      not bozo and entries[0]['title'] == u'Test Item - RSS 1.0 no Default NS'
--->
-<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 
-		 xmlns:rss="http://purl.org/rss/1.0/"
-		 xmlns:admin="http://webns.net/mvcb/"
-		 xmlns:ag="http://purl.org/rss/modules/aggregation/"
-		 xmlns:dc="http://purl.org/dc/elements/1.1/"
-		 xmlns:dcterms="http://purl.org/dc/terms/"
-		 xmlns:l="http://purl.org/rss/1.0/modules/link/"
-		 xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/">
-	<rss:channel rdf:about="http://www.pocketsoap.com/rssTests/">
-		<rss:title>RSS Tests - RSS 1.0 no Default NS</rss:title>
-		<rss:link>http://www.pocketsoap.com/rssTests/rss1.0withModulesNoDefNS.xml</rss:link>
-		<rss:description>A set of test RSS files for examining the state of extension support in RSS aggregators</rss:description>
-		<dc:language>en-gb</dc:language>
-		<dc:rights>Copyright 2002 Simon Fell</dc:rights>
-
-		<dc:date>2002-09-28T20:01:19Z</dc:date>
-		<dc:creator>sf@zaks.demon.co.uk</dc:creator>
-		<dc:publisher>sf@zaks.demon.co.uk</dc:publisher>
-		<admin:errorReportsTo rdf:resource="mailto:sf@zaks.demon.co.uk" />
-		<dcterms:issued>2002-09-28T20:01:19Z</dcterms:issued>
-		<dcterms:created>2002-01-12T02:15:32Z</dcterms:created>
-
-		<dcterms:modified>2002-09-28T20:01:19Z</dcterms:modified>
-		<dcterms:dateCopyrighted>2002</dcterms:dateCopyrighted>
-		<rss:image rdf:resource="http://www.w3.org/RDF/icons/rdf_powered_button.32" />
-		<rss:items>
-			<rdf:Seq>
-			<rdf:li rdf:resource="http://www.pocketsoap.com/weblog/rssTests/rss1.0withModulesNoDefNS.xml#1" />
-			</rdf:Seq>
-		</rss:items>
-
-	</rss:channel>
-	<rss:item rdf:about="http://www.pocketsoap.com/weblog/rssTests/rss1.0withModulesNoDefNS.xml#1">
-		<rss:title>Test Item - RSS 1.0 no Default NS</rss:title>
-		<rss:link>http://www.pocketsoap.com/weblog/rssTests/rss1.0withModulesNoDefNS.xml#1</rss:link>
-		<l:link l:rel="http://purl.org/rss/1.0/modules/proposed/link/#permalink"  l:type="text/html" rdf:resource="http://www.pocketsoap.com/weblog/rssTests/rss1.0withModulesNoDefNS.xml#1" />
-		<rss:description>This is a fairly standard RSS 1.0 feed with a few modules, with no localname clashes, any aggregator that supports RSS 1.0 should handle this fine. This doesn't use
-		any default namespace declarations, all namespaces are mapped to prefixes. As far the namespace spec is concerned this is identical to the rss1.0withModules.xml version (RSS 1.0 no Default NS)</rss:description>
-		<dcterms:modified>2002-09-28T20:01:19Z</dcterms:modified>
-
-		<dcterms:created>2002-09-28T20:01:19Z</dcterms:created>
-	</rss:item>
-</rdf:RDF>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/namespace/rss1.0withModulesNoDefNSLocalNameClash.xml b/lib/feedparser/tests/wellformed/namespace/rss1.0withModulesNoDefNSLocalNameClash.xml
deleted file mode 100644
index f09c9f5fd..000000000
--- a/lib/feedparser/tests/wellformed/namespace/rss1.0withModulesNoDefNSLocalNameClash.xml
+++ /dev/null
@@ -1,53 +0,0 @@
-<!--
-Credits:     Simon Fell - adapted from http://www.pocketsoap.com/rssTests/rss1.0withModulesNoDefNSLocalNameClash.xml - included here with permission
-Description: RSS 1.0, no default namespace, local namespace clash
-Expect:      not bozo and entries[0]['description'] == u'correct description'
--->
-<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 
-		 xmlns:rss="http://purl.org/rss/1.0/"
-		 xmlns:admin="http://webns.net/mvcb/"
-		 xmlns:ag="http://purl.org/rss/modules/aggregation/"
-		 xmlns:dc="http://purl.org/dc/elements/1.1/"
-		 xmlns:dcterms="http://purl.org/dc/terms/"
-		 xmlns:l="http://purl.org/rss/1.0/modules/link/"
-		 xmlns:szf="http://schemas.pocketsoap.com/rss/myDescModule/"
-		 xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/">
-	<rss:channel rdf:about="http://www.pocketsoap.com/rssTests/">
-		<rss:title>RSS Tests - RSS 1.0 no Default NS, localName clashes</rss:title>
-		<rss:link>http://www.pocketsoap.com/rssTests/rss1.0withModulesNoDefNSLocalNameClash.xml</rss:link>
-		<rss:description>A set of test RSS files for examining the state of extension support in RSS aggregators</rss:description>
-		<dc:language>en-gb</dc:language>
-		<dc:rights>Copyright 2002 Simon Fell</dc:rights>
-
-		<dc:date>2002-09-28T20:01:19Z</dc:date>
-		<dc:creator>sf@zaks.demon.co.uk</dc:creator>
-		<dc:publisher>sf@zaks.demon.co.uk</dc:publisher>
-		<admin:errorReportsTo rdf:resource="mailto:sf@zaks.demon.co.uk" />
-		<dcterms:issued>2002-09-28T20:01:19Z</dcterms:issued>
-		<dcterms:created>2002-01-12T02:15:32Z</dcterms:created>
-
-		<dcterms:modified>2002-09-28T20:01:19Z</dcterms:modified>
-		<dcterms:dateCopyrighted>2002</dcterms:dateCopyrighted>
-		<rss:image rdf:resource="http://www.w3.org/RDF/icons/rdf_powered_button.32" />
-		<rss:items>
-			<rdf:Seq>
-			<rdf:li rdf:resource="http://www.pocketsoap.com/weblog/rssTests/rss1.0withModulesNoDefNSLocalNameClash.xml#1" />
-			</rdf:Seq>
-		</rss:items>
-
-	</rss:channel>
-	<rss:item rdf:about="http://www.pocketsoap.com/weblog/rssTests/rss1.0withModulesNoDefNSLocalNameClash.xml#1">
-		<rss:title>Test Item - RSS 1.0 no Default NS, localName clashes</rss:title>
-		<rss:link>http://www.pocketsoap.com/weblog/rssTests/rss1.0withModulesNoDefNSLocalNameClash.xml#1</rss:link>
-		<l:link l:rel="http://purl.org/rss/1.0/modules/proposed/link/#permalink"  l:type="text/html" rdf:resource="http://www.pocketsoap.com/weblog/rssTests/rss1.0withModulesNoDefNSLocalNameClash.xml#1" />
-		<szf:description>This is a extension module that is in a different namespace, but uses a localname from the RSS core spec. 
-		This shouldn't appear in your aggregator, but probably does. (pre rss:description RSS 1.0 no Default NS, localName clashes)
-		</szf:description>
-		<rss:description>correct description</rss:description>
-		<szf:description>This is a extension module that is in a different namespace, but uses a localname from the RSS core spec. 
-		This shouldn't appear in your aggregator, but probably does. (post rss:description RSS 1.0 no Default NS, localName clashes)
-		</szf:description>
-		<dcterms:modified>2002-09-28T20:01:19Z</dcterms:modified>
-		<dcterms:created>2002-09-28T20:01:19Z</dcterms:created>
-	</rss:item>
-</rdf:RDF>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/namespace/rss2.0NSwithModules.xml b/lib/feedparser/tests/wellformed/namespace/rss2.0NSwithModules.xml
deleted file mode 100644
index 99f40d770..000000000
--- a/lib/feedparser/tests/wellformed/namespace/rss2.0NSwithModules.xml
+++ /dev/null
@@ -1,50 +0,0 @@
-<!--
-Credits:     Simon Fell - http://www.pocketsoap.com/rssTests/rss2.0NSwithModules.xml - included here with permission
-Description: RSS 2.0 in Username namespace
-Expect:      not bozo and entries[0]['title'] == u'Test Item - RSS2.0 w/ NS'
--->
-<rss 		 version="2.0"
-		 xmlns="http://backend.userland.com/rss2"
-		 xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 
-		 xmlns:admin="http://webns.net/mvcb/"
-		 xmlns:ag="http://purl.org/rss/modules/aggregation/"
-		 xmlns:dc="http://purl.org/dc/elements/1.1/"
-		 xmlns:dcterms="http://purl.org/dc/terms/"
-		 xmlns:l="http://purl.org/rss/1.0/modules/link/"
-		 xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/">
-	<channel>
-		<title>RSS Tests - RSS2.0 w/ NS</title>
-		<link>http://www.pocketsoap.com/rssTests/rss2.0NSwithModules.xml</link>
-		<description>A set of test RSS files for examining the state of extension support in RSS aggregators</description>
-		<language>en-gb</language>
-		<copyright>Copyright 2002 Simon Fell</copyright>
-
-		<dc:rights>Copyright 2002 Simon Fell</dc:rights>
-		<dc:date>2002-09-28T21:00:02Z</dc:date>
-		<lastBuildDate>Sat, 28 Sep 2002 21:00:02 GMT</lastBuildDate>
-		<pubDate>Sat, 28 Sep 2002 21:00:02 GMT</pubDate>
-		<dc:creator>sf@zaks.demon.co.uk</dc:creator>
-		<managingEditor>sf@zaks.demon.co.uk</managingEditor>
-
-		<dc:publisher>sf@zaks.demon.co.uk</dc:publisher>
-		<generator>ultraedit-32</generator>
-		<admin:errorReportsTo rdf:resource="mailto:sf@zaks.demon.co.uk" />
-		<webMaster>sf@zaks.demon.co.uk (Simon Fell)</webMaster>
-		<dcterms:issued>2002-09-28T20:01:19Z</dcterms:issued>
-		<dcterms:created>2002-01-12T02:15:32Z</dcterms:created>
-
-		<dcterms:modified>2002-09-28T20:01:19Z</dcterms:modified>
-		<dcterms:dateCopyrighted>2002</dcterms:dateCopyrighted>
-		
-		<item>
-			<title>Test Item - RSS2.0 w/ NS</title>
-			<link>http://www.pocketsoap.com/weblog/rssTests/rss2.0NSwithModules.xml#1</link>
-			<description>This is a fairly standard RSS 2.0 feed, it uses a few modules, the RSS 2.0 elements are in the http://backend.userland.com/rss2 namespace, all module elements are in their required namespaces.
-			there are no localname clashes. This is very similar to a RSS1.0 feed. (RSS2.0 w/ NS)
-			</description>
-
-			<dcterms:modified>2002-09-28T20:01:19Z</dcterms:modified>
-			<dcterms:created>2002-09-28T20:01:19Z</dcterms:created>
-		</item>
-	</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/namespace/rss2.0NSwithModulesNoDefNS.xml b/lib/feedparser/tests/wellformed/namespace/rss2.0NSwithModulesNoDefNS.xml
deleted file mode 100644
index 7f374dd20..000000000
--- a/lib/feedparser/tests/wellformed/namespace/rss2.0NSwithModulesNoDefNS.xml
+++ /dev/null
@@ -1,50 +0,0 @@
-<!--
-Credits:     Simon Fell - http://www.pocketsoap.com/rssTests/rss2.0NSwithModulesNoDefNS.xml - included here with permission
-Description: RSS 2.0 in Username namespace, no default namespace
-Expect:      not bozo and entries[0]['title'] == u'Test Item - - RSS2.0 w/ NS no default NS'
--->
-<r:rss 		 version="2.0"
-		 xmlns:r="http://backend.userland.com/rss2"
-		 xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 
-		 xmlns:admin="http://webns.net/mvcb/"
-		 xmlns:ag="http://purl.org/rss/modules/aggregation/"
-		 xmlns:dc="http://purl.org/dc/elements/1.1/"
-		 xmlns:dcterms="http://purl.org/dc/terms/"
-		 xmlns:l="http://purl.org/rss/1.0/modules/link/"
-		 xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/">
-	<r:channel>
-		<r:title>RSS Tests - RSS2.0 w/ NS no default NS</r:title>
-		<r:link>http://www.pocketsoap.com/rssTests/rss2.0NSwithModulesNoDefNS.xml</r:link>
-		<r:description>A set of test RSS files for examining the state of extension support in RSS aggregators</r:description>
-		<r:language>en-gb</r:language>
-		<r:copyright>Copyright 2002 Simon Fell</r:copyright>
-
-		<dc:rights>Copyright 2002 Simon Fell</dc:rights>
-		<dc:date>2002-09-28T21:00:02Z</dc:date>
-		<r:lastBuildDate>Sat, 28 Sep 2002 21:00:02 GMT</r:lastBuildDate>
-		<r:pubDate>Sat, 28 Sep 2002 21:00:02 GMT</r:pubDate>
-		<dc:creator>sf@zaks.demon.co.uk</dc:creator>
-		<r:managingEditor>sf@zaks.demon.co.uk</r:managingEditor>
-
-		<dc:publisher>sf@zaks.demon.co.uk</dc:publisher>
-		<r:generator>ultraedit-32</r:generator>
-		<admin:errorReportsTo rdf:resource="mailto:sf@zaks.demon.co.uk" />
-		<r:webMaster>sf@zaks.demon.co.uk (Simon Fell)</r:webMaster>
-		<dcterms:issued>2002-09-28T20:01:19Z</dcterms:issued>
-		<dcterms:created>2002-01-12T02:15:32Z</dcterms:created>
-
-		<dcterms:modified>2002-09-28T20:01:19Z</dcterms:modified>
-		<dcterms:dateCopyrighted>2002</dcterms:dateCopyrighted>
-		
-		<r:item>
-			<r:title>Test Item - - RSS2.0 w/ NS no default NS</r:title>
-			<r:link>http://www.pocketsoap.com/weblog/rssTests/rss2.0withModulesNoDefNS.xml#1</r:link>
-			<r:description>This is a fairly standard RSS 2.0 feed, it uses a few modules, the RSS 2.0 elements are in the http://backend.userland.com/rss2 namespace, all module elements are in their required namespaces.
-			there are no localname clashes, all elements uses namespace prefixes, there is no default namespace declared. This is very similar to a RSS1.0 feed. (RSS2.0 w/ NS no default NS)
-			</r:description>
-
-			<dcterms:modified>2002-09-28T20:01:19Z</dcterms:modified>
-			<dcterms:created>2002-09-28T20:01:19Z</dcterms:created>
-		</r:item>
-	</r:channel>
-</r:rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/namespace/rss2.0NSwithModulesNoDefNSLocalNameClash.xml b/lib/feedparser/tests/wellformed/namespace/rss2.0NSwithModulesNoDefNSLocalNameClash.xml
deleted file mode 100644
index be99b57c4..000000000
--- a/lib/feedparser/tests/wellformed/namespace/rss2.0NSwithModulesNoDefNSLocalNameClash.xml
+++ /dev/null
@@ -1,58 +0,0 @@
-<!--
-Credits:     Simon Fell - http://www.pocketsoap.com/rssTests/rss2.0NSwithModulesNoDefNSLocalNameClash.xml - included here with permission
-Description: RSS 2.0 in Username namespace, no default namespace, local namespace clash
-Expect:      not bozo and entries[0]['description'] == u'correct description'
--->
-<r:rss 		version="2.0" 
-		xmlns:r="http://backend.userland.com/rss2"
-		xmlns:admin="http://webns.net/mvcb/"
-		xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 
-		xmlns:ag="http://purl.org/rss/modules/aggregation/"
-		xmlns:dc="http://purl.org/dc/elements/1.1/"
-		xmlns:dcterms="http://purl.org/dc/terms/"
-		xmlns:l="http://purl.org/rss/1.0/modules/link/"
-		xmlns:szf="http://schemas.pocketsoap.com/rss/myDescModule/"
-		xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/">
-	<r:channel>
-		<r:title>RSS Tests - RSS2.0 w/ NS, no default NS, localName clash</r:title>
-		<r:link>http://www.pocketsoap.com/rssTests/rss2.0NSwithModulesNoDefNSLocalNameClash.xml</r:link>
-		<r:description>A set of test RSS files for examining the state of extension support in RSS aggregators</r:description>
-		<r:language>en-gb</r:language>
-		<dc:language>en-gb</dc:language>
-
-		<r:copyright>Copyright 2002 Simon Fell</r:copyright>
-		<dc:rights>Copyright 2002 Simon Fell</dc:rights>
-		<dc:date>2002-09-28T21:00:02Z</dc:date>
-		<r:lastBuildDate>Sat, 28 Sep 2002 21:00:02 GMT</r:lastBuildDate>
-		<r:pubDate>Sat, 28 Sep 2002 21:00:02 GMT</r:pubDate>
-		<dc:creator>sf@zaks.demon.co.uk</dc:creator>
-
-		<r:managingEditor>sf@zaks.demon.co.uk</r:managingEditor>
-		<dc:publisher>sf@zaks.demon.co.uk</dc:publisher>
-		<r:generator>ultraedit-32</r:generator>
-		<admin:errorReportsTo rdf:resource="mailto:sf@zaks.demon.co.uk" />
-		<r:webMaster>sf@zaks.demon.co.uk (Simon Fell)</r:webMaster>
-		<dcterms:issued>2002-09-28T20:01:19Z</dcterms:issued>
-
-		<dcterms:created>2002-01-12T02:15:32Z</dcterms:created>
-		<dcterms:modified>2002-09-28T20:01:19Z</dcterms:modified>
-		<dcterms:dateCopyrighted>2002</dcterms:dateCopyrighted>
-		
-		<r:item>
-			<r:title>Test Item - RSS2.0 w/ NS, no default NS, localName clash</r:title>
-			<r:link>http://www.pocketsoap.com/weblog/rssTests/rss2.0NSwithModulesNoDefNSLocalNameClash.xml#1</r:link>
-
-			<l:link l:rel="http://purl.org/rss/1.0/modules/proposed/link/#permalink"  l:type="text/html" rdf:resource="http://www.pocketsoap.com/weblog/rssTests/rss2.0NSwithModulesLocalNameClash.xml#1" />
-			<szf:description>This is a extension module that is in a different namespace, but uses a localname from the RSS core spec. 
-			This shouldn't appear in your aggregator, but probably does. (pre rss:description - RSS2.0 w/ NS, no default NS, localName clash)
-			</szf:description>
-			<r:description>correct description</r:description>
-			<szf:description>This is a extension module that is in a different namespace, but uses a localname from the RSS core spec. 
-			This shouldn't appear in your aggregator, but probably does. (post rss:description - RSS2.0 w/ NS, no default NS, localName clash)
-			</szf:description>
-			<dcterms:modified>2002-09-28T20:01:19Z</dcterms:modified>
-			<dcterms:created>2002-09-28T20:01:19Z</dcterms:created>
-
-		</r:item>
-	</r:channel>
-</r:rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/namespace/rss2.0mathml.xml b/lib/feedparser/tests/wellformed/namespace/rss2.0mathml.xml
deleted file mode 100644
index 0a1bbca74..000000000
--- a/lib/feedparser/tests/wellformed/namespace/rss2.0mathml.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  MathML w/XLink
-Expect:       not bozo and entries[0]['description'] == '<math xmlns="http://www.w3.org/1998/Math/MathML"><mrow xlink:href="http://golem.ph.utexas.edu" xlink:show="replace" xlink:type="simple" xmlns:xlink="http://www.w3.org/1999/xlink"><mrow><mi>a</mi><mo>+</mo><mi>b</mi></mrow></mrow></math>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;math xmlns='http://www.w3.org/1998/Math/MathML'&gt;&lt;mrow xlink:type="simple" xlink:show="replace" xlink:href="http://golem.ph.utexas.edu"&gt;&lt;mrow&gt;&lt;mi&gt;a&lt;/mi&gt;&lt;mo&gt;+&lt;/mo&gt;&lt;mi&gt;b&lt;/mi&gt;&lt;/mrow&gt;&lt;/mrow&gt;&lt;/math&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/namespace/rss2.0noNSwithModules.xml b/lib/feedparser/tests/wellformed/namespace/rss2.0noNSwithModules.xml
deleted file mode 100644
index 3869d9641..000000000
--- a/lib/feedparser/tests/wellformed/namespace/rss2.0noNSwithModules.xml
+++ /dev/null
@@ -1,49 +0,0 @@
-<!--
-Credits:     Simon Fell - http://www.pocketsoap.com/rssTests/rss2.0noNSwithModules.xml - included here with permission
-Description: RSS 2.0 with modules
-Expect:      not bozo and entries[0]['title'] == u'Test Item - RSS 2.0 no NS'
--->
-<rss 		 version="2.0"
-		 xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 
-		 xmlns:admin="http://webns.net/mvcb/"
-		 xmlns:ag="http://purl.org/rss/modules/aggregation/"
-		 xmlns:dc="http://purl.org/dc/elements/1.1/"
-		 xmlns:dcterms="http://purl.org/dc/terms/"
-		 xmlns:l="http://purl.org/rss/1.0/modules/link/"
-		 xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/">
-	<channel>
-		<title>RSS Tests - RSS2.0 no NS</title>
-		<link>http://www.pocketsoap.com/rssTests/rss2.0noNSwithModules.xml</link>
-		<description>A set of test RSS files for examining the state of extension support in RSS aggregators</description>
-		<language>en-gb</language>
-		<copyright>Copyright 2002 Simon Fell</copyright>
-
-		<dc:rights>Copyright 2002 Simon Fell</dc:rights>
-		<dc:date>2002-09-28T21:00:02Z</dc:date>
-		<lastBuildDate>Sat, 28 Sep 2002 21:00:02 GMT</lastBuildDate>
-		<pubDate>Sat, 28 Sep 2002 21:00:02 GMT</pubDate>
-		<dc:creator>sf@zaks.demon.co.uk</dc:creator>
-		<managingEditor>sf@zaks.demon.co.uk</managingEditor>
-
-		<dc:publisher>sf@zaks.demon.co.uk</dc:publisher>
-		<generator>ultraedit-32</generator>
-		<admin:errorReportsTo rdf:resource="mailto:sf@zaks.demon.co.uk" />
-		<webMaster>sf@zaks.demon.co.uk (Simon Fell)</webMaster>
-		<dcterms:issued>2002-09-28T20:01:19Z</dcterms:issued>
-		<dcterms:created>2002-01-12T02:15:32Z</dcterms:created>
-
-		<dcterms:modified>2002-09-28T20:01:19Z</dcterms:modified>
-		<dcterms:dateCopyrighted>2002</dcterms:dateCopyrighted>
-		
-		<item>
-			<title>Test Item - RSS 2.0 no NS</title>
-			<link>http://www.pocketsoap.com/weblog/rssTests/rss2.0noNSwithModules.xml</link>
-			<description>This is a fairly standard RSS 2.0 feed, it uses a few modules, the RSS 2.0 elements aren't in any namespace, all module elements are in their required namespaces.
-			there are no localname clashes. This is largely backwardly compatible with 0.9x. (RSS 2.0 no NS)
-			</description>
-
-			<dcterms:modified>2002-09-28T20:01:19Z</dcterms:modified>
-			<dcterms:created>2002-09-28T20:01:19Z</dcterms:created>
-		</item>
-	</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/namespace/rss2.0noNSwithModulesLocalNameClash.xml b/lib/feedparser/tests/wellformed/namespace/rss2.0noNSwithModulesLocalNameClash.xml
deleted file mode 100644
index 174de089d..000000000
--- a/lib/feedparser/tests/wellformed/namespace/rss2.0noNSwithModulesLocalNameClash.xml
+++ /dev/null
@@ -1,57 +0,0 @@
-<!--
-Credits:     Simon Fell - http://www.pocketsoap.com/rssTests/rss2.0noNSwithModulesLocalNameClash.xml - included here with permission
-Description: RSS 2.0 with modules, local namespace clash
-Expect:      not bozo and entries[0]['description'] == u'correct description'
--->
-<rss 		version="2.0" 
-		xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 
-		xmlns:admin="http://webns.net/mvcb/"
-		xmlns:ag="http://purl.org/rss/modules/aggregation/"
-		xmlns:dc="http://purl.org/dc/elements/1.1/"
-		xmlns:dcterms="http://purl.org/dc/terms/"
-		xmlns:l="http://purl.org/rss/1.0/modules/link/"
-		xmlns:szf="http://schemas.pocketsoap.com/rss/myDescModule/"
-		xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/">
-	<channel>
-		<title>RSS Tests - RSS2.0 no NS localName clash</title>
-		<link>http://www.pocketsoap.com/rssTests/rss2.0noNSwithModulesLocalNameClash.xml</link>
-		<description>A set of test RSS files for examining the state of extension support in RSS aggregators</description>
-		<language>en-gb</language>
-		<dc:language>en-gb</dc:language>
-
-		<copyright>Copyright 2002 Simon Fell</copyright>
-		<dc:rights>Copyright 2002 Simon Fell</dc:rights>
-		<dc:date>2002-09-28T21:00:02Z</dc:date>
-		<lastBuildDate>Sat, 28 Sep 2002 21:00:02 GMT</lastBuildDate>
-		<pubDate>Sat, 28 Sep 2002 21:00:02 GMT</pubDate>
-		<dc:creator>sf@zaks.demon.co.uk</dc:creator>
-
-		<managingEditor>sf@zaks.demon.co.uk</managingEditor>
-		<dc:publisher>sf@zaks.demon.co.uk</dc:publisher>
-		<generator>ultraedit-32</generator>
-		<admin:errorReportsTo rdf:resource="mailto:sf@zaks.demon.co.uk" />
-		<webMaster>sf@zaks.demon.co.uk (Simon Fell)</webMaster>
-		<dcterms:issued>2002-09-28T20:01:19Z</dcterms:issued>
-
-		<dcterms:created>2002-01-12T02:15:32Z</dcterms:created>
-		<dcterms:modified>2002-09-28T20:01:19Z</dcterms:modified>
-		<dcterms:dateCopyrighted>2002</dcterms:dateCopyrighted>
-		
-		<item>
-			<title>Test Item - RSS2.0 no NS localName clash</title>
-			<link>http://www.pocketsoap.com/weblog/rssTests/rss2.0noNSwithModulesLocalNameClash.xml#1</link>
-
-			<l:link l:rel="http://purl.org/rss/1.0/modules/proposed/link/#permalink"  l:type="text/html" rdf:resource="http://www.pocketsoap.com/weblog/rssTests/rss2.0noNSwithModulesLocalNameClash.xml#1" />
-			<szf:description>This is a extension module that is in a different namespace, but uses a localname from the RSS core spec. 
-			This shouldn't appear in your aggregator, but probably does. (pre rss:description - RSS2.0 no NS localName clash)
-			</szf:description>
-			<description>correct description</description>
-			<szf:description>This is a extension module that is in a different namespace, but uses a localname from the RSS core spec. 
-			This shouldn't appear in your aggregator, but probably does. (post rss:description - RSS2.0 no NS localName clash)
-			</szf:description>
-			<dcterms:modified>2002-09-28T20:01:19Z</dcterms:modified>
-			<dcterms:created>2002-09-28T20:01:19Z</dcterms:created>
-
-		</item>
-	</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/namespace/rss2.0svg.xml b/lib/feedparser/tests/wellformed/namespace/rss2.0svg.xml
deleted file mode 100644
index 1a7a55465..000000000
--- a/lib/feedparser/tests/wellformed/namespace/rss2.0svg.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  SVG
-Expect:       not bozo and entries[0]['description'] == '<svg baseProfile="full" height="200px" version="1.1" width="300px" xmlns="http://www.w3.org/2000/svg"><circle cx="150px" cy="100px" fill="#ff0000" r="50px" stroke="#000000" stroke-width="5px"></svg>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;svg version="1.1" baseProfile="full" width="300px" height="200px" xmlns="http://www.w3.org/2000/svg"&gt;&lt;circle cx="150px" cy="100px" r="50px" fill="#ff0000" stroke="#000000" stroke-width="5px" /&gt;&lt;/svg&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/namespace/rss2.0svg5.xml b/lib/feedparser/tests/wellformed/namespace/rss2.0svg5.xml
deleted file mode 100644
index 8119615b2..000000000
--- a/lib/feedparser/tests/wellformed/namespace/rss2.0svg5.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  SVG
-Expect:       not bozo and entries[0]['description'] == '<svg baseProfile="full" height="200px" version="1.1" width="300px" xmlns="http://www.w3.org/2000/svg"><circle cx="150px" cy="100px" fill="#ff0000" r="50px" stroke="#000000" stroke-width="5px"></svg>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;svg version="1.1" baseProfile="full" width="300px" height="200px"&gt;&lt;circle cx="150px" cy="100px" r="50px" fill="#ff0000" stroke="#000000" stroke-width="5px" /&gt;&lt;/svg&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/namespace/rss2.0svgtitle.xml b/lib/feedparser/tests/wellformed/namespace/rss2.0svgtitle.xml
deleted file mode 100644
index e06a69ca4..000000000
--- a/lib/feedparser/tests/wellformed/namespace/rss2.0svgtitle.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  SVG
-Expect:       not bozo and entries[0]['description'] == '<svg baseProfile="full" height="200px" version="1.1" width="300px" xmlns="http://www.w3.org/2000/svg"><title>foo</title><circle cx="150px" cy="100px" fill="#ff0000" r="50px" stroke="#000000" stroke-width="5px"></svg>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;svg version="1.1" baseProfile="full" width="300px" height="200px" xmlns="http://www.w3.org/2000/svg"&gt;&lt;title&gt;foo&lt;/title&gt;&lt;circle cx="150px" cy="100px" r="50px" fill="#ff0000" stroke="#000000" stroke-width="5px"/&gt;&lt;/svg&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/namespace/rss2.0withAtomNS.xml b/lib/feedparser/tests/wellformed/namespace/rss2.0withAtomNS.xml
deleted file mode 100644
index 6f4bbe0b2..000000000
--- a/lib/feedparser/tests/wellformed/namespace/rss2.0withAtomNS.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-<!--
-Description:  rss feed with Atom namespace
-Expect:       not bozo and version == 'rss20'
--->
-<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://web.resource.org/cc/">
-  <channel>
-    <title>Delicious/wearehugh</title>
-    <link>http://delicious.com/wearehugh</link>
-    <description>bookmarks posted by wearehugh</description>
-    <atom:link rel="self" type="application/rss+xml" href="http://feeds.delicious.com/v2/rss/wearehugh"/>
-    <item>
-      <title>rsync and vfat | Geek at Play</title>
-      <pubDate>Fri, 25 Dec 2009 03:30:22 +0000</pubDate>
-      <guid isPermaLink="false">http://delicious.com/url/174603f9d836a1aafac49e28ace1c19e#wearehugh</guid>
-      <link>http://www.kylev.com/2005/03/29/rsync-and-vfat/</link>
-      <dc:creator><![CDATA[wearehugh]]></dc:creator>
-      <comments>http://delicious.com/url/174603f9d836a1aafac49e28ace1c19e</comments>
-      <wfw:commentRss>http://feeds.delicious.com/v2/rss/url/174603f9d836a1aafac49e28ace1c19e</wfw:commentRss>
-      <source url="http://feeds.delicious.com/v2/rss/wearehugh">wearehugh's bookmarks</source>
-      <category domain="http://delicious.com/wearehugh/">rsync</category>
-      <category domain="http://delicious.com/wearehugh/">vfat</category>
-      <category domain="http://delicious.com/wearehugh/">windows</category>
-      <category domain="http://delicious.com/wearehugh/">linux</category>
-      <category domain="http://delicious.com/wearehugh/">mount</category>
-    </item>
-  </channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/namespace/rss2.0xlink.xml b/lib/feedparser/tests/wellformed/namespace/rss2.0xlink.xml
deleted file mode 100644
index 047c0bce3..000000000
--- a/lib/feedparser/tests/wellformed/namespace/rss2.0xlink.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  SVG
-Expect:       not bozo and entries[0]['description'] == '<svg baseProfile="full" height="200px" version="1.1" width="300px" xmlns="http://www.w3.org/2000/svg"><a xlink:href="http://example.com/" xmlns:xlink="http://www.w3.org/1999/xlink"><circle cx="150px" cy="100px" fill="#ff0000" r="50px" stroke="#000000" stroke-width="5px"></a></svg>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;svg version="1.1" baseProfile="full" width="300px" height="200px" xmlns="http://www.w3.org/2000/svg"&gt;&lt;a xlink:href="http://example.com/"&gt;&lt;circle cx="150px" cy="100px" r="50px" fill="#ff0000" stroke="#000000" stroke-width="5px" /&gt;&lt;/a&gt;&lt;/svg&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/node_precedence/atom10_arbitrary_element.xml b/lib/feedparser/tests/wellformed/node_precedence/atom10_arbitrary_element.xml
deleted file mode 100644
index 4421f817d..000000000
--- a/lib/feedparser/tests/wellformed/node_precedence/atom10_arbitrary_element.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<!--
-Description: The arbitrarily named node of the least depth should be preferred to those with the same name of greater depth.
-Expect:      not bozo and entries[0]['abcdefg'] == entries[1]['abcdefg'] == u'Correct Value'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <abcdefg>Correct Value</abcdefg>
-  <image>
-	<abcdefg>Incorrect Value</abcdefg>
-  </image>
-</entry>
-<entry>
-  <image>
-	<abcdefg>Incorrect Value</abcdefg>
-  </image>
-  <abcdefg>Correct Value</abcdefg>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/node_precedence/atom10_id.xml b/lib/feedparser/tests/wellformed/node_precedence/atom10_id.xml
deleted file mode 100644
index e6741531d..000000000
--- a/lib/feedparser/tests/wellformed/node_precedence/atom10_id.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<!--
-Description: The id node which is a child of entry should be used regardless of source order.
-Expect:      not bozo and entries[0]['id'] == entries[1]['id'] == u'Correct Value'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <id>Correct Value</id>
-  <image>
-	<id>Incorrect Value</id>
-  </image>
-</entry>
-<entry>
-  <image>
-	<id>Incorrect Value</id>
-  </image>
-  <id>Correct Value</id>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/node_precedence/atom10_title.xml b/lib/feedparser/tests/wellformed/node_precedence/atom10_title.xml
deleted file mode 100644
index bf3a201ba..000000000
--- a/lib/feedparser/tests/wellformed/node_precedence/atom10_title.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<!--
-Description: The title node which is a child of entry should be used regardless of source order.
-Expect:      not bozo and entries[0]['title'] == entries[1]['title'] == u'Correct Value'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <title>Correct Value</title>
-  <image>
-	<title>Incorrect Value</title>
-  </image>
-</entry>
-<entry>
-  <image>
-	<title>Incorrect Value</title>
-  </image>
-  <title>Correct Value</title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rdf/doctype_contains_entity_decl.xml b/lib/feedparser/tests/wellformed/rdf/doctype_contains_entity_decl.xml
deleted file mode 100644
index e235aa05d..000000000
--- a/lib/feedparser/tests/wellformed/rdf/doctype_contains_entity_decl.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0"?>
-<!--
-Description: not stripping doctype properly if doctype contains entity declaration
-Expect:      not bozo
--->
-<!DOCTYPE rdf:RDF [
-<!ENTITY % HTMLlat1 PUBLIC
- "-//W3C//ENTITIES Latin 1 for XHTML//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml-lat1.ent">
-%HTMLlat1;
-]>
-
-<rdf:RDF 
-  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 
-  xmlns="http://purl.org/rss/1.0/"
-> 
-</rdf:RDF>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rdf/rdf_channel_description.xml b/lib/feedparser/tests/wellformed/rdf/rdf_channel_description.xml
deleted file mode 100644
index 26be54e78..000000000
--- a/lib/feedparser/tests/wellformed/rdf/rdf_channel_description.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: channel description
-Expect:      not bozo and feed['description'] == u'Example description'
--->
-<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://purl.org/rss/1.0/">
-<channel rdf:about="http://example.com/index.rdf">
-  <description>Example description</description>
-</channel>
-</rdf:RDF>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rdf/rdf_channel_link.xml b/lib/feedparser/tests/wellformed/rdf/rdf_channel_link.xml
deleted file mode 100644
index 9c50f64a3..000000000
--- a/lib/feedparser/tests/wellformed/rdf/rdf_channel_link.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: channel link
-Expect:      not bozo and feed['link'] == u'http://example.com/'
--->
-<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://purl.org/rss/1.0/">
-<channel rdf:about="http://example.com/index.rdf">
-  <link>http://example.com/</link>
-</channel>
-</rdf:RDF>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rdf/rdf_channel_title.xml b/lib/feedparser/tests/wellformed/rdf/rdf_channel_title.xml
deleted file mode 100644
index edca2428e..000000000
--- a/lib/feedparser/tests/wellformed/rdf/rdf_channel_title.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: channel title
-Expect:      not bozo and feed['title'] == u'Example feed'
--->
-<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://purl.org/rss/1.0/">
-<channel rdf:about="http://example.com/index.rdf">
-  <title>Example feed</title>
-</channel>
-</rdf:RDF>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rdf/rdf_item_description.xml b/lib/feedparser/tests/wellformed/rdf/rdf_item_description.xml
deleted file mode 100644
index a40ea0807..000000000
--- a/lib/feedparser/tests/wellformed/rdf/rdf_item_description.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-<!--
-Description: item description
-Expect:      not bozo and entries[0]['description'] == u'Example description'
--->
-<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://purl.org/rss/1.0/">
-<channel rdf:about="http://example.com/index.rdf">
-  <items>
-    <rdf:Seq>
-      <rdf:li resource="http://example.com/1"/>
-    </rdf:Seq>
-  </items>
-</channel>
-<item rdf:about="http://example.com/1">
-  <description>Example description</description>
-</item>
-</rdf:RDF>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rdf/rdf_item_link.xml b/lib/feedparser/tests/wellformed/rdf/rdf_item_link.xml
deleted file mode 100644
index 8f0a07c7d..000000000
--- a/lib/feedparser/tests/wellformed/rdf/rdf_item_link.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-<!--
-Description: item link
-Expect:      not bozo and entries[0]['link'] == u'http://example.com/1'
--->
-<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://purl.org/rss/1.0/">
-<channel rdf:about="http://example.com/index.rdf">
-  <items>
-    <rdf:Seq>
-      <rdf:li resource="http://example.com/1"/>
-    </rdf:Seq>
-  </items>
-</channel>
-<item rdf:about="http://example.com/1">
-  <link>http://example.com/1</link>
-</item>
-</rdf:RDF>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rdf/rdf_item_rdf_about.xml b/lib/feedparser/tests/wellformed/rdf/rdf_item_rdf_about.xml
deleted file mode 100644
index 1362e1b10..000000000
--- a/lib/feedparser/tests/wellformed/rdf/rdf_item_rdf_about.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-<!--
-Description: item rdf:about
-Expect:      not bozo and entries[0]['id'] == u'http://example.org/1'
--->
-<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://purl.org/rss/1.0/">
-<channel rdf:about="http://example.com/index.rdf">
-  <items>
-    <rdf:Seq>
-      <rdf:li resource="http://example.org/1"/>
-    </rdf:Seq>
-  </items>
-</channel>
-<item rdf:about="http://example.org/1">
-</item>
-</rdf:RDF>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rdf/rdf_item_title.xml b/lib/feedparser/tests/wellformed/rdf/rdf_item_title.xml
deleted file mode 100644
index 04ec848db..000000000
--- a/lib/feedparser/tests/wellformed/rdf/rdf_item_title.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-<!--
-Description: item title
-Expect:      not bozo and entries[0]['title'] == u'Example title'
--->
-<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://purl.org/rss/1.0/">
-<channel rdf:about="http://example.com/index.rdf">
-  <items>
-    <rdf:Seq>
-      <rdf:li resource="http://example.com/1"/>
-    </rdf:Seq>
-  </items>
-</channel>
-<item rdf:about="http://example.com/1">
-  <title>Example title</title>
-</item>
-</rdf:RDF>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rdf/rss090_channel_title.xml b/lib/feedparser/tests/wellformed/rdf/rss090_channel_title.xml
deleted file mode 100644
index 0169e311e..000000000
--- a/lib/feedparser/tests/wellformed/rdf/rss090_channel_title.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<!--
-Description: RSS version 0.90 channel title
-Expect:      not bozo and feed['title'] == u'Example title'
--->
-<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://my.netscape.com/rdf/simple/0.9/">
-<channel>
-<title>Example title</title>
-</channel>
-<item>
-<title>Item title</title>
-</item>
-</rdf:RDF>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rdf/rss090_item_title.xml b/lib/feedparser/tests/wellformed/rdf/rss090_item_title.xml
deleted file mode 100644
index 41d88e31d..000000000
--- a/lib/feedparser/tests/wellformed/rdf/rss090_item_title.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<!--
-Description: RSS version 0.90 item title
-Expect:      not bozo and entries[0]['title'] == u'Item title'
--->
-<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://my.netscape.com/rdf/simple/0.9/">
-<channel>
-<title>Example title</title>
-</channel>
-<item>
-<title>Item title</title>
-</item>
-</rdf:RDF>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rdf/rss_version_10.xml b/lib/feedparser/tests/wellformed/rdf/rss_version_10.xml
deleted file mode 100644
index b51a1130e..000000000
--- a/lib/feedparser/tests/wellformed/rdf/rss_version_10.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-<!--
-Description: RSS version 1.0
-Expect:      not bozo and version == u'rss10'
--->
-<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://purl.org/rss/1.0/">
-</rdf:RDF>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rdf/rss_version_10_not_default_ns.xml b/lib/feedparser/tests/wellformed/rdf/rss_version_10_not_default_ns.xml
deleted file mode 100644
index e033013ef..000000000
--- a/lib/feedparser/tests/wellformed/rdf/rss_version_10_not_default_ns.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<!--
-Description: RSS version 1.0
-Expect:      not bozo and version == 'rss10'
--->
-<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:rss="http://purl.org/rss/1.0/">
-<rss:channel rdf:about="http://www.osswatch.ac.uk/rss/summary.rss">
-</rss:channel>
-</rdf:RDF>
diff --git a/lib/feedparser/tests/wellformed/rss/aaa_wellformed.xml b/lib/feedparser/tests/wellformed/rss/aaa_wellformed.xml
deleted file mode 100644
index c9c70bede..000000000
--- a/lib/feedparser/tests/wellformed/rss/aaa_wellformed.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-<!--
-Description: wellformed XML
-Expect:      not bozo
--->
-<rss version="2.0">
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/channel_author.xml b/lib/feedparser/tests/wellformed/rss/channel_author.xml
deleted file mode 100644
index 74aecd762..000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_author.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: channel author
-Expect:      not bozo and feed['author'] == u'Example editor (me@example.com)'
--->
-<rss version="2.0">
-<channel>
-<author>Example editor (me@example.com)</author>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/channel_author_map_author_detail_email.xml b/lib/feedparser/tests/wellformed/rss/channel_author_map_author_detail_email.xml
deleted file mode 100644
index c0919c2b3..000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_author_map_author_detail_email.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: channel author maps to author_detail email if both name and email are given
-Expect:      not bozo and feed['author_detail']['email'] == u'me@example.com'
--->
-<rss version="2.0">
-<channel>
-<author>Example editor (me@example.com)</author>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/channel_author_map_author_detail_email_2.xml b/lib/feedparser/tests/wellformed/rss/channel_author_map_author_detail_email_2.xml
deleted file mode 100644
index da0b9c19e..000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_author_map_author_detail_email_2.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: channel author maps to author_detail email if both name and email are given (email contains +)
-Expect:      not bozo and feed['author_detail']['email'] == u'me+spam@example.com'
--->
-<rss version="2.0">
-<channel>
-<author>Example editor (me+spam@example.com)</author>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/channel_author_map_author_detail_email_3.xml b/lib/feedparser/tests/wellformed/rss/channel_author_map_author_detail_email_3.xml
deleted file mode 100644
index 8deba3e75..000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_author_map_author_detail_email_3.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: channel author maps to author_detail email if both name and email are given (name in parens)
-Expect:      not bozo and feed['author_detail']['email'] == u'me@example.com'
--->
-<rss version="2.0">
-<channel>
-<author>me@example.com (Example editor)</author>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/channel_author_map_author_detail_name.xml b/lib/feedparser/tests/wellformed/rss/channel_author_map_author_detail_name.xml
deleted file mode 100644
index 3e5f87056..000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_author_map_author_detail_name.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: channel author maps to author_detail name if both name and email are given
-Expect:      not bozo and feed['author_detail']['name'] == u'Example editor'
--->
-<rss version="2.0">
-<channel>
-<author>Example editor (me@example.com)</author>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/channel_author_map_author_detail_name_2.xml b/lib/feedparser/tests/wellformed/rss/channel_author_map_author_detail_name_2.xml
deleted file mode 100644
index ec1336993..000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_author_map_author_detail_name_2.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: channel author maps to author_detail name if both name and email are given (name in parens)
-Expect:      not bozo and feed['author_detail']['name'] == u'Example editor'
--->
-<rss version="2.0">
-<channel>
-<author>me@example.com (Example editor)</author>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/channel_category.xml b/lib/feedparser/tests/wellformed/rss/channel_category.xml
deleted file mode 100644
index 37ddf22df..000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_category.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: channel single category
-Expect:      not bozo and feed['category'] == u'Example category'
--->
-<rss version="2.0">
-<channel>
-<category>Example category</category>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/channel_category_domain.xml b/lib/feedparser/tests/wellformed/rss/channel_category_domain.xml
deleted file mode 100644
index 6c07ccc59..000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_category_domain.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: channel single category with domain
-Expect:      not bozo and feed['tags'][0]['scheme'] == u'http://www.example.com/'
--->
-<rss version="2.0">
-<channel>
-<category domain="http://www.example.com/">Example category</category>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/rss/channel_category_multiple.xml b/lib/feedparser/tests/wellformed/rss/channel_category_multiple.xml
deleted file mode 100644
index 9effbfddb..000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_category_multiple.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<!--
-Description: channel multiple categories
-Expect:      not bozo and feed['tags'][1]['scheme'] == u'http://www.example.com/2'
--->
-<rss version="2.0">
-<channel>
-<category domain="http://www.example.com/1">Example category 1</category>
-<category domain="http://www.example.com/2">Example category 2</category>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/rss/channel_category_multiple_2.xml b/lib/feedparser/tests/wellformed/rss/channel_category_multiple_2.xml
deleted file mode 100644
index 00daebe24..000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_category_multiple_2.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<!--
-Description: channel multiple categories
-Expect:      not bozo and feed['tags'][1]['term'] == u'Example category 2'
--->
-<rss version="2.0">
-<channel>
-<category>Example category 1</category>
-<category>Example category 2</category>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/rss/channel_cloud_domain.xml b/lib/feedparser/tests/wellformed/rss/channel_cloud_domain.xml
deleted file mode 100644
index ef926b6c1..000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_cloud_domain.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: cloud domain
-Expect:      not bozo and feed['cloud']['domain'] == u'rpc.sys.com'
--->
-<rss version="2.0">
-<channel>
-<cloud domain="rpc.sys.com" port="80" path="/RPC2" registerProcedure="myCloud.rssPleaseNotify" protocol="xml-rpc" />
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/channel_cloud_path.xml b/lib/feedparser/tests/wellformed/rss/channel_cloud_path.xml
deleted file mode 100644
index eccf1b9d9..000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_cloud_path.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: cloud path
-Expect:      not bozo and feed['cloud']['path'] == u'/RPC2'
--->
-<rss version="2.0">
-<channel>
-<cloud domain="rpc.sys.com" port="80" path="/RPC2" registerProcedure="myCloud.rssPleaseNotify" protocol="xml-rpc" />
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/channel_cloud_port.xml b/lib/feedparser/tests/wellformed/rss/channel_cloud_port.xml
deleted file mode 100644
index 0cd2bc655..000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_cloud_port.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: cloud port
-Expect:      not bozo and feed['cloud']['port'] == u'80'
--->
-<rss version="2.0">
-<channel>
-<cloud domain="rpc.sys.com" port="80" path="/RPC2" registerProcedure="myCloud.rssPleaseNotify" protocol="xml-rpc" />
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/channel_cloud_protocol.xml b/lib/feedparser/tests/wellformed/rss/channel_cloud_protocol.xml
deleted file mode 100644
index 73e3392c2..000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_cloud_protocol.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: cloud protocol
-Expect:      not bozo and feed['cloud']['protocol'] == u'xml-rpc'
--->
-<rss version="2.0">
-<channel>
-<cloud domain="rpc.sys.com" port="80" path="/RPC2" registerProcedure="myCloud.rssPleaseNotify" protocol="xml-rpc" />
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/channel_cloud_registerProcedure.xml b/lib/feedparser/tests/wellformed/rss/channel_cloud_registerProcedure.xml
deleted file mode 100644
index 703f53658..000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_cloud_registerProcedure.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: cloud registerProcedure
-Expect:      not bozo and feed['cloud']['registerprocedure'] == u'myCloud.rssPleaseNotify'
--->
-<rss version="2.0">
-<channel>
-<cloud domain="rpc.sys.com" port="80" path="/RPC2" registerProcedure="myCloud.rssPleaseNotify" protocol="xml-rpc" />
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/channel_copyright.xml b/lib/feedparser/tests/wellformed/rss/channel_copyright.xml
deleted file mode 100644
index c1dec40c2..000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_copyright.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: normal copyright
-Expect:      not bozo and feed['copyright'] == u'Example copyright'
--->
-<rss version="2.0">
-<channel>
-<copyright>Example copyright</copyright>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/channel_dc_author.xml b/lib/feedparser/tests/wellformed/rss/channel_dc_author.xml
deleted file mode 100644
index 6bae15e15..000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_dc_author.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: channel dc:author
-Expect:      not bozo and feed['author'] == u'Example editor' and feed['author_detail']['name'] == u'Example editor'
--->
-<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
-<channel>
-<dc:author>Example editor</dc:author>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/rss/channel_dc_author_map_author_detail_email.xml b/lib/feedparser/tests/wellformed/rss/channel_dc_author_map_author_detail_email.xml
deleted file mode 100644
index b5d73d55c..000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_dc_author_map_author_detail_email.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: channel dc:author maps to author_detail email if both name and email are given
-Expect:      not bozo and feed['author_detail']['email'] == u'me@example.com'
--->
-<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
-<channel>
-<dc:author>Example editor (me@example.com)</dc:author>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/channel_dc_author_map_author_detail_name.xml b/lib/feedparser/tests/wellformed/rss/channel_dc_author_map_author_detail_name.xml
deleted file mode 100644
index f68944569..000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_dc_author_map_author_detail_name.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: channel dc:author maps to author_detail name if both name and email are given
-Expect:      not bozo and feed['author_detail']['name'] == u'Example editor'
--->
-<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
-<channel>
-<dc:author>Example editor (me@example.com)</dc:author>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/channel_dc_contributor.xml b/lib/feedparser/tests/wellformed/rss/channel_dc_contributor.xml
deleted file mode 100644
index 76450c2f1..000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_dc_contributor.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: channel dc:contributor
-Expect:      not bozo and feed['contributors'][0]['name'] == u'Example contributor'
--->
-<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
-<channel>
-<dc:contributor>Example contributor</dc:contributor>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/channel_dc_creator.xml b/lib/feedparser/tests/wellformed/rss/channel_dc_creator.xml
deleted file mode 100644
index 111ae8ba4..000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_dc_creator.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: channel dc:creator maps to author
-Expect:      not bozo and feed['author'] == u'Example editor'
--->
-<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
-<channel>
-<dc:creator>Example editor</dc:creator>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/channel_dc_creator_map_author_detail_email.xml b/lib/feedparser/tests/wellformed/rss/channel_dc_creator_map_author_detail_email.xml
deleted file mode 100644
index 05cb34ac5..000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_dc_creator_map_author_detail_email.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: channel dc:creator maps to author_detail email if both name and email are given
-Expect:      not bozo and feed['author_detail']['email'] == u'me@example.com'
--->
-<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
-<channel>
-<dc:creator>Example editor (me@example.com)</dc:creator>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/channel_dc_creator_map_author_detail_name.xml b/lib/feedparser/tests/wellformed/rss/channel_dc_creator_map_author_detail_name.xml
deleted file mode 100644
index 451dd86e2..000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_dc_creator_map_author_detail_name.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: channel dc:creator maps to author_detail name if both name and email are given
-Expect:      not bozo and feed['author_detail']['name'] == u'Example editor'
--->
-<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
-<channel>
-<dc:creator>Example editor (me@example.com)</dc:creator>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/channel_dc_date.xml b/lib/feedparser/tests/wellformed/rss/channel_dc_date.xml
deleted file mode 100644
index cbf3fa79a..000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_dc_date.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: channel dc:date
-Expect:      not bozo and feed['updated'] == u'2003-12-31T10:14:55Z'
--->
-<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
-<channel>
-<dc:date>2003-12-31T10:14:55Z</dc:date>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/rss/channel_dc_date_parsed.xml b/lib/feedparser/tests/wellformed/rss/channel_dc_date_parsed.xml
deleted file mode 100644
index 795114883..000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_dc_date_parsed.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: channel dc:date parsed
-Expect:      not bozo and feed['updated_parsed'] == (2003, 12, 31, 10, 14, 55, 2, 365, 0)
--->
-<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
-<channel>
-<dc:date>2003-12-31T10:14:55Z</dc:date>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/rss/channel_dc_publisher.xml b/lib/feedparser/tests/wellformed/rss/channel_dc_publisher.xml
deleted file mode 100644
index b21d4ad80..000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_dc_publisher.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: channel dc:publisher
-Expect:      not bozo and feed['publisher'] == u'Example editor'
--->
-<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
-<channel>
-<dc:publisher>Example editor</dc:publisher>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/channel_dc_publisher_email.xml b/lib/feedparser/tests/wellformed/rss/channel_dc_publisher_email.xml
deleted file mode 100644
index 1c5d8cd1b..000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_dc_publisher_email.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: channel dc:publisher
-Expect:      not bozo and feed['publisher_detail']['email'] == u'me@example.com'
--->
-<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
-<channel>
-<dc:publisher>Example editor (me@example.com)</dc:publisher>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/channel_dc_publisher_name.xml b/lib/feedparser/tests/wellformed/rss/channel_dc_publisher_name.xml
deleted file mode 100644
index e581af65d..000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_dc_publisher_name.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: channel dc:publisher
-Expect:      not bozo and feed['publisher_detail']['name'] == u'Example editor'
--->
-<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
-<channel>
-<dc:publisher>Example editor (me@example.com)</dc:publisher>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/channel_dc_rights.xml b/lib/feedparser/tests/wellformed/rss/channel_dc_rights.xml
deleted file mode 100644
index 9d33d75ca..000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_dc_rights.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: channel dc:rights
-Expect:      not bozo and feed['copyright'] == u'Example copyright'
--->
-<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
-<channel>
-<dc:rights>Example copyright</dc:rights>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/channel_dc_subject.xml b/lib/feedparser/tests/wellformed/rss/channel_dc_subject.xml
deleted file mode 100644
index c8ab30102..000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_dc_subject.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: channel dc:subject
-Expect:      not bozo and feed['category'] == u'Example category'
--->
-<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
-<channel>
-<dc:subject>Example category</dc:subject>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/channel_dc_subject_2.xml b/lib/feedparser/tests/wellformed/rss/channel_dc_subject_2.xml
deleted file mode 100644
index 953d4d3fc..000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_dc_subject_2.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: channel dc:subject maps to categories
-Expect:      not bozo and feed['tags'][0]['term'] == u'Example category'
--->
-<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
-<channel>
-<dc:subject>Example category</dc:subject>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/rss/channel_dc_subject_multiple.xml b/lib/feedparser/tests/wellformed/rss/channel_dc_subject_multiple.xml
deleted file mode 100644
index 3ff2558c4..000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_dc_subject_multiple.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<!--
-Description: multiple dc:subject
-Expect:      not bozo and feed['tags'][1]['term'] == u'Example category 2'
--->
-<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
-<channel>
-<dc:subject>Example category 1</dc:subject>
-<dc:subject>Example category 2</dc:subject>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/rss/channel_dc_title.xml b/lib/feedparser/tests/wellformed/rss/channel_dc_title.xml
deleted file mode 100644
index 299ae2339..000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_dc_title.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: channel dc:title
-Expect:      not bozo and feed['title'] == u'Example title'
--->
-<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
-<channel>
-<dc:title>Example title</dc:title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/channel_dcterms_created.xml b/lib/feedparser/tests/wellformed/rss/channel_dcterms_created.xml
deleted file mode 100644
index aa36aadb1..000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_dcterms_created.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: channel dcterms:created
-Expect:      not bozo and feed['created'] == u'2003-12-31T10:14:55Z'
--->
-<rss version="2.0" xmlns:dcterms="http://purl.org/dc/terms/">
-<channel>
-<dcterms:created>2003-12-31T10:14:55Z</dcterms:created>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/rss/channel_dcterms_created_parsed.xml b/lib/feedparser/tests/wellformed/rss/channel_dcterms_created_parsed.xml
deleted file mode 100644
index 211178596..000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_dcterms_created_parsed.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: channel dcterms:created parsed
-Expect:      not bozo and feed['created_parsed'] == (2003, 12, 31, 10, 14, 55, 2, 365, 0)
--->
-<rss version="2.0" xmlns:dcterms="http://purl.org/dc/terms/">
-<channel>
-<dcterms:created>2003-12-31T10:14:55Z</dcterms:created>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/rss/channel_dcterms_issued.xml b/lib/feedparser/tests/wellformed/rss/channel_dcterms_issued.xml
deleted file mode 100644
index a17cee672..000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_dcterms_issued.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: channel dcterms:issued
-Expect:      not bozo and feed['published'] == u'2003-12-31T10:14:55Z'
--->
-<rss version="2.0" xmlns:dcterms="http://purl.org/dc/terms/">
-<channel>
-<dcterms:issued>2003-12-31T10:14:55Z</dcterms:issued>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/rss/channel_dcterms_issued_parsed.xml b/lib/feedparser/tests/wellformed/rss/channel_dcterms_issued_parsed.xml
deleted file mode 100644
index dda97dca5..000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_dcterms_issued_parsed.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: channel dcterms:issued parsed
-Expect:      not bozo and feed['published_parsed'] == (2003, 12, 31, 10, 14, 55, 2, 365, 0)
--->
-<rss version="2.0" xmlns:dcterms="http://purl.org/dc/terms/">
-<channel>
-<dcterms:issued>2003-12-31T10:14:55Z</dcterms:issued>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/rss/channel_dcterms_modified.xml b/lib/feedparser/tests/wellformed/rss/channel_dcterms_modified.xml
deleted file mode 100644
index 5a436d2cb..000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_dcterms_modified.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: channel dcterms:modified
-Expect:      not bozo and feed['updated'] == u'2003-12-31T10:14:55Z'
--->
-<rss version="2.0" xmlns:dcterms="http://purl.org/dc/terms/">
-<channel>
-<dcterms:modified>2003-12-31T10:14:55Z</dcterms:modified>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/rss/channel_dcterms_modified_parsed.xml b/lib/feedparser/tests/wellformed/rss/channel_dcterms_modified_parsed.xml
deleted file mode 100644
index 53ed3b264..000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_dcterms_modified_parsed.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: channel dcterms:modified parsed
-Expect:      not bozo and feed['updated_parsed'] == (2003, 12, 31, 10, 14, 55, 2, 365, 0)
--->
-<rss version="2.0" xmlns:dcterms="http://purl.org/dc/terms/">
-<channel>
-<dcterms:modified>2003-12-31T10:14:55Z</dcterms:modified>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/rss/channel_description.xml b/lib/feedparser/tests/wellformed/rss/channel_description.xml
deleted file mode 100644
index d26210113..000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_description.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: normal description
-Expect:      not bozo and feed['description'] == u'Example description'
--->
-<rss version="2.0">
-<channel>
-<description>Example description</description>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/channel_description_escaped_markup.xml b/lib/feedparser/tests/wellformed/rss/channel_description_escaped_markup.xml
deleted file mode 100644
index fa86a59ce..000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_description_escaped_markup.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: escaped markup in description
-Expect:      not bozo and feed['description'] == u'<p>Example description</p>'
--->
-<rss version="2.0">
-<channel>
-<description>&lt;p&gt;Example description&lt;/p&gt;</description>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/channel_description_map_tagline.xml b/lib/feedparser/tests/wellformed/rss/channel_description_map_tagline.xml
deleted file mode 100644
index f83cc50dd..000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_description_map_tagline.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: channel description is mapped to tagline
-Expect:      not bozo and feed['tagline'] == u'Example description'
--->
-<rss version="2.0">
-<channel>
-<description>Example description</description>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/channel_description_naked_markup.xml b/lib/feedparser/tests/wellformed/rss/channel_description_naked_markup.xml
deleted file mode 100644
index 671452fbd..000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_description_naked_markup.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: naked markup in description
-Expect:      not bozo and feed['description'] == u'<p>Example description</p>'
--->
-<rss version="2.0">
-<channel>
-<description><p>Example description</p></description>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/channel_description_shorttag.xml b/lib/feedparser/tests/wellformed/rss/channel_description_shorttag.xml
deleted file mode 100644
index d0d492857..000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_description_shorttag.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<!--
-Description: description shorttag and link following
-Expect:      not bozo and feed['description'] == u'' and feed['link'] == u'http://example.com/'
--->
-<rss version="2.0">
-<channel>
-<description/>
-<link>http://example.com/</link>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/channel_docs.xml b/lib/feedparser/tests/wellformed/rss/channel_docs.xml
deleted file mode 100644
index f2e312a94..000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_docs.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: docs
-Expect:      not bozo and feed['docs'] == u'http://www.example.com/'
--->
-<rss version="2.0">
-<channel>
-<docs>http://www.example.com/</docs>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/channel_generator.xml b/lib/feedparser/tests/wellformed/rss/channel_generator.xml
deleted file mode 100644
index 5c046e353..000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_generator.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: generator
-Expect:      not bozo and feed['generator'] == u'Example generator'
--->
-<rss version="2.0">
-<channel>
-<generator>Example generator</generator>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/channel_image_description.xml b/lib/feedparser/tests/wellformed/rss/channel_image_description.xml
deleted file mode 100644
index e498675e7..000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_image_description.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-<!--
-Description: image description
-Expect:      not bozo and feed['image']['description'] == u'Available in Netscape RSS 0.91'
--->
-<rss version="0.91">
-<channel>
-<image>
-<title>Sample image</title>
-<url>http://example.org/url</url>
-<link>http://example.org/link</link>
-<width>80</width>
-<height>15</height>
-<description>Available in Netscape RSS 0.91</description>
-</image>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/channel_image_height.xml b/lib/feedparser/tests/wellformed/rss/channel_image_height.xml
deleted file mode 100644
index 97c68b340..000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_image_height.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-<!--
-Description: image height
-Expect:      not bozo and feed['image']['height'] == 15
--->
-<rss version="2.0">
-<channel>
-<image>
-<title>Sample image</title>
-<url>http://example.org/url</url>
-<link>http://example.org/link</link>
-<width>80</width>
-<height>15</height>
-<description>Available in Netscape RSS 0.91</description>
-</image>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/channel_image_link.xml b/lib/feedparser/tests/wellformed/rss/channel_image_link.xml
deleted file mode 100644
index 3e1ad8c4d..000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_image_link.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-<!--
-Description: image link
-Expect:      not bozo and feed['image']['link'] == u'http://example.org/link'
--->
-<rss version="2.0">
-<channel>
-<image>
-<title>Sample image</title>
-<url>http://example.org/url</url>
-<link>http://example.org/link</link>
-<width>80</width>
-<height>15</height>
-<description>Available in Netscape RSS 0.91</description>
-</image>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/channel_image_link_bleed.xml b/lib/feedparser/tests/wellformed/rss/channel_image_link_bleed.xml
deleted file mode 100644
index d6b1c026b..000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_image_link_bleed.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<!--
-Description: image link does not bleed into channel link array
-Expect:      not bozo and len(feed['links']) == 1
--->
-<rss version="2.0">
-<channel>
-<link>http://channel.example.com/</link>
-<image>
-<link>http://image.example.com/</link>
-</image>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/channel_image_link_conflict.xml b/lib/feedparser/tests/wellformed/rss/channel_image_link_conflict.xml
deleted file mode 100644
index 6187df743..000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_image_link_conflict.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<!--
-Description: image link does not conflict with channel link
-Expect:      not bozo and feed['link'] == u'http://channel.example.com/'
--->
-<rss version="2.0">
-<channel>
-<link>http://channel.example.com/</link>
-<image>
-<link>http://image.example.com/</link>
-</image>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/channel_image_title.xml b/lib/feedparser/tests/wellformed/rss/channel_image_title.xml
deleted file mode 100644
index 66d8fe830..000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_image_title.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-<!--
-Description: image title
-Expect:      not bozo and feed['image']['title'] == u'Sample image'
--->
-<rss version="2.0">
-<channel>
-<image>
-<title>Sample image</title>
-<url>http://example.org/url</url>
-<link>http://example.org/link</link>
-<width>80</width>
-<height>15</height>
-<description>Available in Netscape RSS 0.91</description>
-</image>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/channel_image_title_conflict.xml b/lib/feedparser/tests/wellformed/rss/channel_image_title_conflict.xml
deleted file mode 100644
index aac174d64..000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_image_title_conflict.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<!--
-Description: image title does not conflict with channel title
-Expect:      not bozo and feed['title'] == u'Real title'
--->
-<rss version="2.0">
-<channel>
-<title>Real title</title>
-<image>
-<title>textInput title</title>
-</image>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/channel_image_url.xml b/lib/feedparser/tests/wellformed/rss/channel_image_url.xml
deleted file mode 100644
index cd3c05290..000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_image_url.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-<!--
-Description: image url
-Expect:      not bozo and feed['image']['url'] == u'http://example.org/url'
--->
-<rss version="2.0">
-<channel>
-<image>
-<title>Sample image</title>
-<url>http://example.org/url</url>
-<link>http://example.org/link</link>
-<width>80</width>
-<height>15</height>
-<description>Available in Netscape RSS 0.91</description>
-</image>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/channel_image_width.xml b/lib/feedparser/tests/wellformed/rss/channel_image_width.xml
deleted file mode 100644
index 96470d64a..000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_image_width.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-<!--
-Description: image width
-Expect:      not bozo and feed['image']['width'] == 80
--->
-<rss version="2.0">
-<channel>
-<image>
-<title>Sample image</title>
-<url>http://example.org/url</url>
-<link>http://example.org/link</link>
-<width>80</width>
-<height>15</height>
-<description>Available in Netscape RSS 0.91</description>
-</image>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/channel_lastBuildDate.xml b/lib/feedparser/tests/wellformed/rss/channel_lastBuildDate.xml
deleted file mode 100644
index 88b1398a6..000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_lastBuildDate.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: channel lastBuildDate
-Expect: not bozo and feed['updated'] == u'Sat, 07 Sep 2002 00:00:01 GMT'
--->
-<rss version="2.0">
-<channel>
-  <lastBuildDate>Sat, 07 Sep 2002 00:00:01 GMT</lastBuildDate>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/rss/channel_lastBuildDate_parsed.xml b/lib/feedparser/tests/wellformed/rss/channel_lastBuildDate_parsed.xml
deleted file mode 100644
index aa0ff822a..000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_lastBuildDate_parsed.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: channel lastBuildDate parsed
-Expect: not bozo and feed['updated_parsed'] == (2002, 9, 7, 0, 0, 1, 5, 250, 0)
--->
-<rss version="2.0">
-<channel>
-  <lastBuildDate>Sat, 07 Sep 2002 00:00:01 GMT</lastBuildDate>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/rss/channel_link.xml b/lib/feedparser/tests/wellformed/rss/channel_link.xml
deleted file mode 100644
index 51b616fa3..000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_link.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: normal link
-Expect:      not bozo and feed['link'] == u'http://example.com/'
--->
-<rss version="2.0">
-<channel>
-<link>http://example.com/</link>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/channel_managingEditor.xml b/lib/feedparser/tests/wellformed/rss/channel_managingEditor.xml
deleted file mode 100644
index 56cfa70fd..000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_managingEditor.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: channel managingEditor maps to author
-Expect:      not bozo and feed['author'] == u'Example editor'
--->
-<rss version="2.0">
-<channel>
-<managingEditor>Example editor</managingEditor>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/channel_managingEditor_map_author_detail_email.xml b/lib/feedparser/tests/wellformed/rss/channel_managingEditor_map_author_detail_email.xml
deleted file mode 100644
index bfe888576..000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_managingEditor_map_author_detail_email.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: managingEditor maps to author_detail email if both name and email are given
-Expect:      not bozo and feed['author_detail']['email'] == u'me@example.com'
--->
-<rss version="2.0">
-<channel>
-<managingEditor>Example editor (me@example.com)</managingEditor>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/channel_managingEditor_map_author_detail_name.xml b/lib/feedparser/tests/wellformed/rss/channel_managingEditor_map_author_detail_name.xml
deleted file mode 100644
index 58294445e..000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_managingEditor_map_author_detail_name.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: managingEditor maps to author_detail name if both name and email are given
-Expect:      not bozo and feed['author_detail']['name'] == u'Example editor'
--->
-<rss version="2.0">
-<channel>
-<managingEditor>Example editor (me@example.com)</managingEditor>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/channel_pubDate.xml b/lib/feedparser/tests/wellformed/rss/channel_pubDate.xml
deleted file mode 100644
index b60f8474b..000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_pubDate.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: channel pubDate
-Expect:      not bozo and feed['published'] == u'Thu, 01 Jan 2004 19:48:21 GMT'
--->
-<rss version="2.0">
-<channel>
-<pubDate>Thu, 01 Jan 2004 19:48:21 GMT</pubDate>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/rss/channel_pubDate_map_updated_parsed.xml b/lib/feedparser/tests/wellformed/rss/channel_pubDate_map_updated_parsed.xml
deleted file mode 100644
index 271338d8d..000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_pubDate_map_updated_parsed.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: channel pubDate parsed and mapped to published_parsed
-Expect:      not bozo and feed['published_parsed'] == (2004, 1, 1, 19, 48, 21, 3, 1, 0)
--->
-<rss version="2.0">
-<channel>
-<pubDate>Thu, 01 Jan 2004 19:48:21 GMT</pubDate>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/rss/channel_textInput_description.xml b/lib/feedparser/tests/wellformed/rss/channel_textInput_description.xml
deleted file mode 100644
index 91ca14baf..000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_textInput_description.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-Description: textInput description
-Expect:      not bozo and feed['textinput']['description'] == u'textInput description'
--->
-<rss version="2.0">
-<channel>
-<title>Real title</title>
-<description>Real description</description>
-<textInput>
-<title>textInput title</title>
-<description>textInput description</description>
-</textInput>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/channel_textInput_description_conflict.xml b/lib/feedparser/tests/wellformed/rss/channel_textInput_description_conflict.xml
deleted file mode 100644
index 3eb6e7bcd..000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_textInput_description_conflict.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<!--
-Description: textInput description does not conflict with channel description
-Expect:      not bozo and feed['description'] == u'Real description'
--->
-<rss version="2.0">
-<channel>
-<description>Real description</description>
-<textInput>
-<description>textInput description</description>
-</textInput>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/channel_textInput_link.xml b/lib/feedparser/tests/wellformed/rss/channel_textInput_link.xml
deleted file mode 100644
index ce5073bdc..000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_textInput_link.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<!--
-Description: textInput link
-Expect:      not bozo and feed['textinput']['link'] == u'http://textinput.example.com/'
--->
-<rss version="2.0">
-<channel>
-<link>http://channel.example.com/</link>
-<textInput>
-<link>http://textinput.example.com/</link>
-</textInput>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/channel_textInput_link_bleed.xml b/lib/feedparser/tests/wellformed/rss/channel_textInput_link_bleed.xml
deleted file mode 100644
index 77d1aca60..000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_textInput_link_bleed.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<!--
-Description: textInput link does not bleed into channel link array
-Expect:      not bozo and len(feed['links']) == 1
--->
-<rss version="2.0">
-<channel>
-<link>http://channel.example.com/</link>
-<textInput>
-<link>http://textinput.example.com/</link>
-</textInput>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/channel_textInput_link_conflict.xml b/lib/feedparser/tests/wellformed/rss/channel_textInput_link_conflict.xml
deleted file mode 100644
index 9d1ffb67d..000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_textInput_link_conflict.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<!--
-Description: textInput link does not conflict with channel link
-Expect:      not bozo and feed['link'] == u'http://channel.example.com/'
--->
-<rss version="2.0">
-<channel>
-<link>http://channel.example.com/</link>
-<textInput>
-<link>http://textinput.example.com/</link>
-</textInput>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/channel_textInput_name.xml b/lib/feedparser/tests/wellformed/rss/channel_textInput_name.xml
deleted file mode 100644
index cf2316ca4..000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_textInput_name.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: textInput name
-Expect:      not bozo and feed['textinput']['name'] == u'textinput name'
--->
-<rss version="2.0">
-<channel>
-<textInput>
-<name>textinput name</name>
-</textInput>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/channel_textInput_title.xml b/lib/feedparser/tests/wellformed/rss/channel_textInput_title.xml
deleted file mode 100644
index 7d2f4b704..000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_textInput_title.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<!--
-Description: textInput title
-Expect:      not bozo and feed['textinput']['title'] == u'textInput title'
--->
-<rss version="2.0">
-<channel>
-<title>Real title</title>
-<textInput>
-<title>textInput title</title>
-</textInput>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/channel_textInput_title_conflict.xml b/lib/feedparser/tests/wellformed/rss/channel_textInput_title_conflict.xml
deleted file mode 100644
index f6a9d3745..000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_textInput_title_conflict.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<!--
-Description: textInput title does not conflict with channel title
-Expect:      not bozo and feed['title'] == u'Real title'
--->
-<rss version="2.0">
-<channel>
-<title>Real title</title>
-<textInput>
-<title>textInput title</title>
-</textInput>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/channel_title.xml b/lib/feedparser/tests/wellformed/rss/channel_title.xml
deleted file mode 100644
index c4ea8c076..000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_title.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: normal title
-Expect:      not bozo and feed['title'] == u'Example feed'
--->
-<rss version="2.0">
-<channel>
-<title>Example feed</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/channel_title_apos.xml b/lib/feedparser/tests/wellformed/rss/channel_title_apos.xml
deleted file mode 100644
index 35b36f3f2..000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_title_apos.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: channel title contains apos entity
-Expect:      not bozo and feed['title'] == u"Mark's title"
--->
-<rss version="0.91">
-<channel>
-<title>Mark&apos;s title</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/channel_title_gt.xml b/lib/feedparser/tests/wellformed/rss/channel_title_gt.xml
deleted file mode 100644
index dec60c1a6..000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_title_gt.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: channel title contains gt entity
-Expect:      not bozo and feed['title'] == u'2 > 1'
--->
-<rss version="0.91">
-<channel>
-<title>2 &gt; 1</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/channel_title_lt.xml b/lib/feedparser/tests/wellformed/rss/channel_title_lt.xml
deleted file mode 100644
index c1cf9ec5a..000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_title_lt.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: channel title contains lt entity
-Expect:      not bozo and feed['title'] == u'1 < 2'
--->
-<rss version="0.91">
-<channel>
-<title>1 &lt; 2</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/channel_ttl.xml b/lib/feedparser/tests/wellformed/rss/channel_ttl.xml
deleted file mode 100644
index 781d05857..000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_ttl.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: ttl
-Expect:      not bozo and feed['ttl'] == u'60'
--->
-<rss version="2.0">
-<channel>
-<ttl>60</ttl>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/channel_webMaster.xml b/lib/feedparser/tests/wellformed/rss/channel_webMaster.xml
deleted file mode 100644
index 2f0ff5f14..000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_webMaster.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: channel webMaster maps to publisher
-Expect:      not bozo and feed['publisher'] == u'Example editor'
--->
-<rss version="2.0">
-<channel>
-<webMaster>Example editor</webMaster>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/channel_webMaster_email.xml b/lib/feedparser/tests/wellformed/rss/channel_webMaster_email.xml
deleted file mode 100644
index ff0410db9..000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_webMaster_email.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: channel webMaster maps to publisher
-Expect:      not bozo and feed['publisher_detail']['email'] == u'me@example.com'
--->
-<rss version="2.0">
-<channel>
-<webMaster>Example editor (me@example.com)</webMaster>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/channel_webMaster_name.xml b/lib/feedparser/tests/wellformed/rss/channel_webMaster_name.xml
deleted file mode 100644
index 1fad57321..000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_webMaster_name.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: channel webMaster maps to publisher
-Expect:      not bozo and feed['publisher_detail']['name'] == u'Example editor'
--->
-<rss version="2.0">
-<channel>
-<webMaster>Example editor (me@example.com)</webMaster>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/entity_in_doctype.xml b/lib/feedparser/tests/wellformed/rss/entity_in_doctype.xml
deleted file mode 100644
index b88907638..000000000
--- a/lib/feedparser/tests/wellformed/rss/entity_in_doctype.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-<!--
-Description: AT&T
-Expect:      not bozo and entries[0]['guid'] == 'tag:example.com,2006-05-04:/blog/'
--->
-
-<!DOCTYPE rss [
-  <!ENTITY id "tag:example.com,">
-]>
-
-<rss version="2.0">
-<channel>
-<item>
-<guid isPermaLink='false'>&id;2006-05-04:/blog/</guid>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/rss/item_author.xml b/lib/feedparser/tests/wellformed/rss/item_author.xml
deleted file mode 100644
index 176ce1c9e..000000000
--- a/lib/feedparser/tests/wellformed/rss/item_author.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item author
-Expect:      not bozo and entries[0]['author'] == u'Example editor'
--->
-<rss version="2.0">
-<channel>
-<item>
-<author>Example editor</author>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/item_author_map_author_detail_email.xml b/lib/feedparser/tests/wellformed/rss/item_author_map_author_detail_email.xml
deleted file mode 100644
index e990c9f5a..000000000
--- a/lib/feedparser/tests/wellformed/rss/item_author_map_author_detail_email.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item author maps to author_detail email if both name and email are given
-Expect:      not bozo and entries[0]['author_detail']['email'] == u'me@example.com'
--->
-<rss version="2.0">
-<channel>
-<item>
-<author>Example editor (me@example.com)</author>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/item_author_map_author_detail_email2.xml b/lib/feedparser/tests/wellformed/rss/item_author_map_author_detail_email2.xml
deleted file mode 100644
index 4cbf2da9b..000000000
--- a/lib/feedparser/tests/wellformed/rss/item_author_map_author_detail_email2.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item author maps to author_detail email if both name and email are given
-Expect:      not bozo and entries[0]['author_detail']['email'] == u'me@example.com'
--->
-<rss version="2.0">
-<channel>
-<item>
-<author>Example editor &lt;me@example.com&gt;</author>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/rss/item_author_map_author_detail_email3.xml b/lib/feedparser/tests/wellformed/rss/item_author_map_author_detail_email3.xml
deleted file mode 100644
index 42aafb03c..000000000
--- a/lib/feedparser/tests/wellformed/rss/item_author_map_author_detail_email3.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item author maps to author_detail email if both name and email are given
-Expect:      not bozo and entries[0]['author_detail']['email'] == u'me@example.com'
--->
-<rss version="2.0">
-<channel>
-<item>
-<author>me@example.com (Example editor)</author>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/rss/item_author_map_author_detail_name.xml b/lib/feedparser/tests/wellformed/rss/item_author_map_author_detail_name.xml
deleted file mode 100644
index 8083ff44d..000000000
--- a/lib/feedparser/tests/wellformed/rss/item_author_map_author_detail_name.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item author maps to author_detail_name if both name and email are given
-Expect:      not bozo and entries[0]['author_detail']['name'] == u'Example editor'
--->
-<rss version="2.0">
-<channel>
-<item>
-<author>Example editor (me@example.com)</author>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/item_author_map_author_detail_name2.xml b/lib/feedparser/tests/wellformed/rss/item_author_map_author_detail_name2.xml
deleted file mode 100644
index bcc451355..000000000
--- a/lib/feedparser/tests/wellformed/rss/item_author_map_author_detail_name2.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item author maps to author_detail_name if both name and email are given
-Expect:      not bozo and entries[0]['author_detail']['name'] == u'Example editor'
--->
-<rss version="2.0">
-<channel>
-<item>
-<author>Example editor &lt;me@example.com&gt;</author>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/rss/item_author_map_author_detail_name3.xml b/lib/feedparser/tests/wellformed/rss/item_author_map_author_detail_name3.xml
deleted file mode 100644
index c0f64169b..000000000
--- a/lib/feedparser/tests/wellformed/rss/item_author_map_author_detail_name3.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item author maps to author_detail_name if both name and email are given
-Expect:      not bozo and entries[0]['author_detail']['name'] == u'Example editor'
--->
-<rss version="2.0">
-<channel>
-<item>
-<author>me@example.com (Example editor)</author>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/rss/item_category.xml b/lib/feedparser/tests/wellformed/rss/item_category.xml
deleted file mode 100644
index 2b50558cd..000000000
--- a/lib/feedparser/tests/wellformed/rss/item_category.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item single category
-Expect:      not bozo and entries[0]['category'] == u'Example category'
--->
-<rss version="2.0">
-<channel>
-<item>
-<category>Example category</category>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/item_category_domain.xml b/lib/feedparser/tests/wellformed/rss/item_category_domain.xml
deleted file mode 100644
index 8cbe25fd9..000000000
--- a/lib/feedparser/tests/wellformed/rss/item_category_domain.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item category with domain
-Expect:      not bozo and entries[0]['tags'][0]['scheme'] == u'http://www.example.com/'
--->
-<rss version="2.0">
-<channel>
-<item>
-<category domain="http://www.example.com/">Example category</category>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/rss/item_category_image.xml b/lib/feedparser/tests/wellformed/rss/item_category_image.xml
deleted file mode 100644
index 6c1c5e851..000000000
--- a/lib/feedparser/tests/wellformed/rss/item_category_image.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-<!--
-Description: item with an image inside a category should not cause error
-Expect:      not bozo and entries[0]['category'] != None
--->
-<rss version="2.0">
-<channel>
-<item>
-<category>Example category
-      <image>        
-	<url>http://www.thestranger.com/imager/b/story/4281993/a0a6/SavageLove-400.jpg</url>
-        <title><![CDATA[Savage Love]]></title>
-        <link><![CDATA[http://www.thestranger.com/seattle/SavageLove?oid=4281993]]></link>
-      </image>
-</category>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/item_category_multiple.xml b/lib/feedparser/tests/wellformed/rss/item_category_multiple.xml
deleted file mode 100644
index c2f121d34..000000000
--- a/lib/feedparser/tests/wellformed/rss/item_category_multiple.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<!--
-Description: item multiple categories
-Expect:      not bozo and entries[0]['tags'][1]['scheme'] == u'http://www.example.com/2'
--->
-<rss version="2.0">
-<channel>
-<item>
-<category domain="http://www.example.com/1">Example category 1</category>
-<category domain="http://www.example.com/2">Example category 2</category>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/rss/item_category_multiple_2.xml b/lib/feedparser/tests/wellformed/rss/item_category_multiple_2.xml
deleted file mode 100644
index 861dd92e5..000000000
--- a/lib/feedparser/tests/wellformed/rss/item_category_multiple_2.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<!--
-Description: item multiple categories
-Expect:      not bozo and entries[0]['tags'][1]['term'] == u'Example category 2'
--->
-<rss version="2.0">
-<channel>
-<item>
-<category>Example category 1</category>
-<category>Example category 2</category>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/rss/item_cc_license.xml b/lib/feedparser/tests/wellformed/rss/item_cc_license.xml
deleted file mode 100644
index 6b023b9a8..000000000
--- a/lib/feedparser/tests/wellformed/rss/item_cc_license.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<!--
-Description: creative commons license
-Expect:      not bozo and entries[0]['license'] == u'http://www.creativecommons.org/licenses/by-nc/1.0'
--->
-<rss version="2.0" xmlns:cc="http://web.resource.org/cc/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
-<channel>
-<item>
-<cc:license rdf:resource="http://www.creativecommons.org/licenses/by-nc/1.0"/>
-<link>http://example.com/</link>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/rss/item_comments.xml b/lib/feedparser/tests/wellformed/rss/item_comments.xml
deleted file mode 100644
index 9751403cd..000000000
--- a/lib/feedparser/tests/wellformed/rss/item_comments.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item comments
-Expect:      not bozo and entries[0]['comments'] == u'http://example.com/'
--->
-<rss version="2.0">
-<channel>
-<item>
-<comments>http://example.com/</comments>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/item_content_encoded.xml b/lib/feedparser/tests/wellformed/rss/item_content_encoded.xml
deleted file mode 100644
index e826c39b0..000000000
--- a/lib/feedparser/tests/wellformed/rss/item_content_encoded.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: content:encoded
-Expect:      not bozo and entries[0]['content'][0]['value'] == u'<p>Example content</p>'
--->
-<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
-<channel>
-<item>
-<content:encoded>&lt;p&gt;Example content&lt;/p&gt;</content:encoded>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/item_content_encoded_mode.xml b/lib/feedparser/tests/wellformed/rss/item_content_encoded_mode.xml
deleted file mode 100644
index 6cbd874b0..000000000
--- a/lib/feedparser/tests/wellformed/rss/item_content_encoded_mode.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: content:encoded mode
-Expect:      1
--->
-<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
-<channel>
-<item>
-<content:encoded>&lt;p&gt;Example content&lt;/p&gt;</content:encoded>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/item_content_encoded_type.xml b/lib/feedparser/tests/wellformed/rss/item_content_encoded_type.xml
deleted file mode 100644
index 3640386bb..000000000
--- a/lib/feedparser/tests/wellformed/rss/item_content_encoded_type.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: content:encoded type
-Expect:      not bozo and entries[0]['content'][0]['type'] == u'text/html'
--->
-<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
-<channel>
-<item>
-<content:encoded>&lt;p&gt;Example content&lt;/p&gt;</content:encoded>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/item_creativeCommons_license.xml b/lib/feedparser/tests/wellformed/rss/item_creativeCommons_license.xml
deleted file mode 100644
index 65353d91d..000000000
--- a/lib/feedparser/tests/wellformed/rss/item_creativeCommons_license.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<!--
-Description: creative commons license
-Expect:      not bozo and entries[0]['license'] == u'http://www.creativecommons.org/licenses/by-nc/1.0'
--->
-<rss version="2.0" xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule">
-<channel>
-<item>
-<creativeCommons:license>http://www.creativecommons.org/licenses/by-nc/1.0</creativeCommons:license>
-<link>http://example.com/</link>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/rss/item_dc_author.xml b/lib/feedparser/tests/wellformed/rss/item_dc_author.xml
deleted file mode 100644
index 22e71c64b..000000000
--- a/lib/feedparser/tests/wellformed/rss/item_dc_author.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item dc:author
-Expect:      not bozo and entries[0]['author'] == u'Example editor'
--->
-<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
-<channel>
-<item>
-<dc:author>Example editor</dc:author>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/item_dc_author_map_author_detail_email.xml b/lib/feedparser/tests/wellformed/rss/item_dc_author_map_author_detail_email.xml
deleted file mode 100644
index eb81dc965..000000000
--- a/lib/feedparser/tests/wellformed/rss/item_dc_author_map_author_detail_email.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item dc:author maps to author_detail email if both name and email are given
-Expect:      not bozo and entries[0]['author_detail']['email'] == u'me@example.com'
--->
-<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
-<channel>
-<item>
-<dc:author>Example editor (me@example.com)</dc:author>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/item_dc_author_map_author_detail_name.xml b/lib/feedparser/tests/wellformed/rss/item_dc_author_map_author_detail_name.xml
deleted file mode 100644
index 5139a2435..000000000
--- a/lib/feedparser/tests/wellformed/rss/item_dc_author_map_author_detail_name.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item dc:author maps to author_detail name if both name and email are given
-Expect:      not bozo and entries[0]['author_detail']['name'] == u'Example editor'
--->
-<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
-<channel>
-<item>
-<dc:author>Example editor (me@example.com)</dc:author>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/item_dc_contributor.xml b/lib/feedparser/tests/wellformed/rss/item_dc_contributor.xml
deleted file mode 100644
index 79d16d030..000000000
--- a/lib/feedparser/tests/wellformed/rss/item_dc_contributor.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item dc:contributor
-Expect:      not bozo and entries[0]['contributors'][0]['name'] == u'Example contributor'
--->
-<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
-<channel>
-<item>
-<dc:contributor>Example contributor</dc:contributor>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/item_dc_creator.xml b/lib/feedparser/tests/wellformed/rss/item_dc_creator.xml
deleted file mode 100644
index c214414b0..000000000
--- a/lib/feedparser/tests/wellformed/rss/item_dc_creator.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item dc:creator maps to author
-Expect:      not bozo and entries[0]['author'] == u'Example editor'
--->
-<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
-<channel>
-<item>
-<dc:creator>Example editor</dc:creator>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/item_dc_creator_map_author_detail_email.xml b/lib/feedparser/tests/wellformed/rss/item_dc_creator_map_author_detail_email.xml
deleted file mode 100644
index 899464eca..000000000
--- a/lib/feedparser/tests/wellformed/rss/item_dc_creator_map_author_detail_email.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item dc:creator maps to author_detail email if both name and email are given
-Expect:      not bozo and entries[0]['author_detail']['email'] == u'me@example.com'
--->
-<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
-<channel>
-<item>
-<dc:creator>Example editor (me@example.com)</dc:creator>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/item_dc_creator_map_author_detail_name.xml b/lib/feedparser/tests/wellformed/rss/item_dc_creator_map_author_detail_name.xml
deleted file mode 100644
index ca20ab083..000000000
--- a/lib/feedparser/tests/wellformed/rss/item_dc_creator_map_author_detail_name.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item dc:creator maps to author_detail name if both name and email are given
-Expect:      not bozo and entries[0]['author_detail']['name'] == u'Example editor'
--->
-<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
-<channel>
-<item>
-<dc:creator>Example editor (me@example.com)</dc:creator>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/item_dc_date.xml b/lib/feedparser/tests/wellformed/rss/item_dc_date.xml
deleted file mode 100644
index 0f0f11797..000000000
--- a/lib/feedparser/tests/wellformed/rss/item_dc_date.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item dc:date
-Expect:      not bozo and entries[0]['updated'] == u'2003-12-31T10:14:55Z'
--->
-<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
-<channel>
-<item>
-<dc:date>2003-12-31T10:14:55Z</dc:date>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/rss/item_dc_date_parsed.xml b/lib/feedparser/tests/wellformed/rss/item_dc_date_parsed.xml
deleted file mode 100644
index 1d39df938..000000000
--- a/lib/feedparser/tests/wellformed/rss/item_dc_date_parsed.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item dc:date parsed
-Expect:      not bozo and entries[0]['updated_parsed'] == (2003, 12, 31, 10, 14, 55, 2, 365, 0)
--->
-<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
-<channel>
-<item>
-<dc:date>2003-12-31T10:14:55Z</dc:date>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/rss/item_dc_description.xml b/lib/feedparser/tests/wellformed/rss/item_dc_description.xml
deleted file mode 100644
index 973d736c0..000000000
--- a/lib/feedparser/tests/wellformed/rss/item_dc_description.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item dc:description
-Expect:      not bozo and entries[0]['description'] == u'Example description'
--->
-<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
-<channel>
-<item>
-<dc:description>Example description</dc:description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/rss/item_dc_publisher.xml b/lib/feedparser/tests/wellformed/rss/item_dc_publisher.xml
deleted file mode 100644
index 7b4e82b53..000000000
--- a/lib/feedparser/tests/wellformed/rss/item_dc_publisher.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item dc:publisher
-Expect:      not bozo and entries[0]['publisher'] == u'Example editor'
--->
-<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
-<channel>
-<item>
-<dc:publisher>Example editor</dc:publisher>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/item_dc_publisher_email.xml b/lib/feedparser/tests/wellformed/rss/item_dc_publisher_email.xml
deleted file mode 100644
index d321bed4d..000000000
--- a/lib/feedparser/tests/wellformed/rss/item_dc_publisher_email.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item dc:publisher
-Expect:      not bozo and entries[0]['publisher_detail']['email'] == u'me@example.com'
--->
-<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
-<channel>
-<item>
-<dc:publisher>Example editor (me@example.com)</dc:publisher>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/item_dc_publisher_name.xml b/lib/feedparser/tests/wellformed/rss/item_dc_publisher_name.xml
deleted file mode 100644
index 636c739e5..000000000
--- a/lib/feedparser/tests/wellformed/rss/item_dc_publisher_name.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item dc:publisher
-Expect:      not bozo and entries[0]['publisher_detail']['name'] == u'Example editor'
--->
-<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
-<channel>
-<item>
-<dc:publisher>Example editor (me@example.com)</dc:publisher>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/item_dc_rights.xml b/lib/feedparser/tests/wellformed/rss/item_dc_rights.xml
deleted file mode 100644
index 2d734a98f..000000000
--- a/lib/feedparser/tests/wellformed/rss/item_dc_rights.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item dc:rights
-Expect:      not bozo and entries[0]['copyright'] == u'Example copyright'
--->
-<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
-<channel>
-<item>
-<dc:rights>Example copyright</dc:rights>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/item_dc_subject.xml b/lib/feedparser/tests/wellformed/rss/item_dc_subject.xml
deleted file mode 100644
index 745a78645..000000000
--- a/lib/feedparser/tests/wellformed/rss/item_dc_subject.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item dc:subject
-Expect:      not bozo and entries[0]['category'] == u'Example category'
--->
-<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
-<channel>
-<item>
-<dc:subject>Example category</dc:subject>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/item_dc_subject_2.xml b/lib/feedparser/tests/wellformed/rss/item_dc_subject_2.xml
deleted file mode 100644
index b7de4cc01..000000000
--- a/lib/feedparser/tests/wellformed/rss/item_dc_subject_2.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item dc:subject maps to categories
-Expect:      not bozo and entries[0]['tags'][0]['term'] == u'Example category'
--->
-<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
-<channel>
-<item>
-<dc:subject>Example category</dc:subject>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/rss/item_dc_subject_multiple.xml b/lib/feedparser/tests/wellformed/rss/item_dc_subject_multiple.xml
deleted file mode 100644
index aa7722d6b..000000000
--- a/lib/feedparser/tests/wellformed/rss/item_dc_subject_multiple.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<!--
-Description: multiple item dc:subject
-Expect:      not bozo and entries[0]['tags'][1]['term'] == u'Example category 2'
--->
-<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
-<channel>
-<item>
-<dc:subject>Example category 1</dc:subject>
-<dc:subject>Example category 2</dc:subject>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/rss/item_dc_title.xml b/lib/feedparser/tests/wellformed/rss/item_dc_title.xml
deleted file mode 100644
index dbe113439..000000000
--- a/lib/feedparser/tests/wellformed/rss/item_dc_title.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item dc:title
-Expect:      not bozo and entries[0]['title'] == u'Example title'
--->
-<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
-<channel>
-<item>
-<dc:title>Example title</dc:title>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/item_dcterms_created.xml b/lib/feedparser/tests/wellformed/rss/item_dcterms_created.xml
deleted file mode 100644
index f70882b12..000000000
--- a/lib/feedparser/tests/wellformed/rss/item_dcterms_created.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item dcterms:created
-Expect:      not bozo and entries[0]['created'] == u'2003-12-31T10:14:55Z'
--->
-<rss version="2.0" xmlns:dcterms="http://purl.org/dc/terms/">
-<channel>
-<item>
-<dcterms:created>2003-12-31T10:14:55Z</dcterms:created>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/rss/item_dcterms_created_parsed.xml b/lib/feedparser/tests/wellformed/rss/item_dcterms_created_parsed.xml
deleted file mode 100644
index 5d235c147..000000000
--- a/lib/feedparser/tests/wellformed/rss/item_dcterms_created_parsed.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item dcterms:created parsed
-Expect:      not bozo and entries[0]['created_parsed'] == (2003, 12, 31, 10, 14, 55, 2, 365, 0)
--->
-<rss version="2.0" xmlns:dcterms="http://purl.org/dc/terms/">
-<channel>
-<item>
-<dcterms:created>2003-12-31T10:14:55Z</dcterms:created>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/rss/item_dcterms_issued.xml b/lib/feedparser/tests/wellformed/rss/item_dcterms_issued.xml
deleted file mode 100644
index 789d514ce..000000000
--- a/lib/feedparser/tests/wellformed/rss/item_dcterms_issued.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item dcterms:issued
-Expect:      not bozo and entries[0]['published'] == u'2003-12-31T10:14:55Z'
--->
-<rss version="2.0" xmlns:dcterms="http://purl.org/dc/terms/">
-<channel>
-<item>
-<dcterms:issued>2003-12-31T10:14:55Z</dcterms:issued>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/rss/item_dcterms_issued_parsed.xml b/lib/feedparser/tests/wellformed/rss/item_dcterms_issued_parsed.xml
deleted file mode 100644
index 4a3db36e1..000000000
--- a/lib/feedparser/tests/wellformed/rss/item_dcterms_issued_parsed.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item dcterms:issued parsed
-Expect:      not bozo and entries[0]['published_parsed'] == (2003, 12, 31, 10, 14, 55, 2, 365, 0)
--->
-<rss version="2.0" xmlns:dcterms="http://purl.org/dc/terms/">
-<channel>
-<item>
-<dcterms:issued>2003-12-31T10:14:55Z</dcterms:issued>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/rss/item_dcterms_modified.xml b/lib/feedparser/tests/wellformed/rss/item_dcterms_modified.xml
deleted file mode 100644
index 00409dd57..000000000
--- a/lib/feedparser/tests/wellformed/rss/item_dcterms_modified.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item dcterms:modified
-Expect:      not bozo and entries[0]['updated'] == u'2003-12-31T10:14:55Z'
--->
-<rss version="2.0" xmlns:dcterms="http://purl.org/dc/terms/">
-<channel>
-<item>
-<dcterms:modified>2003-12-31T10:14:55Z</dcterms:modified>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/rss/item_dcterms_modified_parsed.xml b/lib/feedparser/tests/wellformed/rss/item_dcterms_modified_parsed.xml
deleted file mode 100644
index 388e3e702..000000000
--- a/lib/feedparser/tests/wellformed/rss/item_dcterms_modified_parsed.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item dcterms:modified parsed
-Expect:      not bozo and entries[0]['updated_parsed'] == (2003, 12, 31, 10, 14, 55, 2, 365, 0)
--->
-<rss version="2.0" xmlns:dcterms="http://purl.org/dc/terms/">
-<channel>
-<item>
-<dcterms:modified>2003-12-31T10:14:55Z</dcterms:modified>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/rss/item_description.xml b/lib/feedparser/tests/wellformed/rss/item_description.xml
deleted file mode 100644
index f5a49448e..000000000
--- a/lib/feedparser/tests/wellformed/rss/item_description.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item description
-Expect:      not bozo and entries[0]['description'] == u'Example description'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>Example description</description>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/item_description_and_summary.xml b/lib/feedparser/tests/wellformed/rss/item_description_and_summary.xml
deleted file mode 100644
index 355f1c47a..000000000
--- a/lib/feedparser/tests/wellformed/rss/item_description_and_summary.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<!--
-Description: item contains both description and summary elements
-Expect:      not bozo and entries[0]['description'] == u'Example description' and entries[0]['content'][0]['value'] == u'Example summary'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>Example description</description>
-<summary>Example summary</summary>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/item_description_br.xml b/lib/feedparser/tests/wellformed/rss/item_description_br.xml
deleted file mode 100644
index 19a5a121c..000000000
--- a/lib/feedparser/tests/wellformed/rss/item_description_br.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item description contains both <br/> and <br />
-Expect:      not bozo and entries[0]['description'] == u'article title<br /><br /> article byline<br /><br />text of article'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description><![CDATA[article title<br /><br /> article byline<br/><br/>text of article]]></description>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/item_description_br_shorttag.xml b/lib/feedparser/tests/wellformed/rss/item_description_br_shorttag.xml
deleted file mode 100644
index aa11391fc..000000000
--- a/lib/feedparser/tests/wellformed/rss/item_description_br_shorttag.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<!--
-Description: item description ends with <br />
-Expect:      not bozo and entries[0]['description'] == u'<b>x</b><br />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<link>http://www.example.com/</link>
-<description>&lt;b&gt;x&lt;/b&gt;&lt;br/&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/rss/item_description_code_br.xml b/lib/feedparser/tests/wellformed/rss/item_description_code_br.xml
deleted file mode 100644
index d5b98d625..000000000
--- a/lib/feedparser/tests/wellformed/rss/item_description_code_br.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<!--
-Description: item description contains <code> with <br />
-Expect:      not bozo and entries[0]['description'] == u'<code>&lt;br /></code>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<link>http://www.example.com/</link>
-<description><![CDATA[<code>&lt;br /></code>]]></description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/rss/item_description_escaped_markup.xml b/lib/feedparser/tests/wellformed/rss/item_description_escaped_markup.xml
deleted file mode 100644
index 4f461a30c..000000000
--- a/lib/feedparser/tests/wellformed/rss/item_description_escaped_markup.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: escaped markup in item description
-Expect:      not bozo and entries[0]['description'] == u'<p>Example description</p>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;p&gt;Example description&lt;/p&gt;</description>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/item_description_map_summary.xml b/lib/feedparser/tests/wellformed/rss/item_description_map_summary.xml
deleted file mode 100644
index a43ece73f..000000000
--- a/lib/feedparser/tests/wellformed/rss/item_description_map_summary.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item description is mapped to summary
-Expect:      not bozo and entries[0]['summary'] == u'Example description'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>Example description</description>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/item_description_naked_markup.xml b/lib/feedparser/tests/wellformed/rss/item_description_naked_markup.xml
deleted file mode 100644
index 95d544608..000000000
--- a/lib/feedparser/tests/wellformed/rss/item_description_naked_markup.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: naked markup in item description
-Expect:      not bozo and entries[0]['description'] == u'<p>Example description</p>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description><p>Example description</p></description>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/item_description_not_a_doctype.xml b/lib/feedparser/tests/wellformed/rss/item_description_not_a_doctype.xml
deleted file mode 100644
index 1930555ca..000000000
--- a/lib/feedparser/tests/wellformed/rss/item_description_not_a_doctype.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: item description is not a DOCTYPE (but HTML parser thinks it is)
-Expect:      not bozo and entries[0]['description'] == """&lt;!' <a href="foo">"""
--->
-<rss>
-<item>
-<description>&lt;!' &lt;a href="foo"&gt;</description>
-</item>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/item_description_not_a_doctype2.xml b/lib/feedparser/tests/wellformed/rss/item_description_not_a_doctype2.xml
deleted file mode 100644
index a32d25edc..000000000
--- a/lib/feedparser/tests/wellformed/rss/item_description_not_a_doctype2.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: item description is not a DOCTYPE (but HTML parser thinks it is)
-Expect:      not bozo and entries[0]['description'] == "<!DOCTYPE"
--->
-<rss>
-<item>
-<description><![CDATA[ <!DOCTYPE ]]></description>
-</item>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/rss/item_enclosure_length.xml b/lib/feedparser/tests/wellformed/rss/item_enclosure_length.xml
deleted file mode 100644
index 5f0f72fec..000000000
--- a/lib/feedparser/tests/wellformed/rss/item_enclosure_length.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<!--
-Description: item enclosure length
-Expect:      not bozo and entries[0]['enclosures'][0]['length'] == u'100000'
--->
-<rss version="2.0">
-<channel>
-<item>
-<enclosure url="http://example.com/" length="100000" type="image/jpeg" />
-<link>http://example.com/</link>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/item_enclosure_multiple.xml b/lib/feedparser/tests/wellformed/rss/item_enclosure_multiple.xml
deleted file mode 100644
index 0e40abd03..000000000
--- a/lib/feedparser/tests/wellformed/rss/item_enclosure_multiple.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<!--
-Description: multiple enclosures
-Expect:      not bozo and entries[0]['enclosures'][1] == {'href': u'http://example.com/2', 'length': u'200000', 'type': u'image/gif'}
--->
-<rss version="2.0">
-<channel>
-<item>
-<enclosure url="http://example.com/1" length="100000" type="image/jpeg" />
-<enclosure url="http://example.com/2" length="200000" type="image/gif" />
-<link>http://example.com/</link>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/item_enclosure_type.xml b/lib/feedparser/tests/wellformed/rss/item_enclosure_type.xml
deleted file mode 100644
index 3b191c6db..000000000
--- a/lib/feedparser/tests/wellformed/rss/item_enclosure_type.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<!--
-Description: item enclosure type
-Expect:      not bozo and entries[0]['enclosures'][0]['type'] == u'image/jpeg'
--->
-<rss version="2.0">
-<channel>
-<item>
-<enclosure url="http://example.com/" length="100000" type="image/jpeg" />
-<link>http://example.com/</link>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/item_enclosure_url.xml b/lib/feedparser/tests/wellformed/rss/item_enclosure_url.xml
deleted file mode 100644
index b5da8cd5a..000000000
--- a/lib/feedparser/tests/wellformed/rss/item_enclosure_url.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<!--
-Description: item enclosure url
-Expect:      not bozo and entries[0]['enclosures'][0]['url'] == u'http://example.com/' and entries[0]['links'][0]['rel'] == 'enclosure'
--->
-<rss version="2.0">
-<channel>
-<item>
-<enclosure url="http://example.com/" length="100000" type="image/jpeg" />
-<link>http://example.com/</link>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/rss/item_expirationDate.xml b/lib/feedparser/tests/wellformed/rss/item_expirationDate.xml
deleted file mode 100644
index c4738acdc..000000000
--- a/lib/feedparser/tests/wellformed/rss/item_expirationDate.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item expirationDate
-Expect:      not bozo and entries[0]['expired'] == u'Thu, 01 Jan 2004 19:48:21 GMT'
--->
-<rss version="0.93">
-<channel>
-<item>
-<expirationDate>Thu, 01 Jan 2004 19:48:21 GMT</expirationDate>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/item_expirationDate_multiple_values.xml b/lib/feedparser/tests/wellformed/rss/item_expirationDate_multiple_values.xml
deleted file mode 100644
index 59a099f63..000000000
--- a/lib/feedparser/tests/wellformed/rss/item_expirationDate_multiple_values.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<!--
-Description: item expirationDate with multiple values
-Expect:      not bozo and entries[0]['expired_parsed'] == (2004, 1, 1, 19, 48, 21, 3, 1, 0)
--->
-<rss version="0.93">
-<channel>
-<item>
-<expirationDate>Wed, 01 Dec 2010 19:48:21 GMT</expirationDate>
-<expirationDate>Thu, 01 Jan 2004 19:48:21 GMT</expirationDate>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/rss/item_expirationDate_parsed.xml b/lib/feedparser/tests/wellformed/rss/item_expirationDate_parsed.xml
deleted file mode 100644
index 39ec50d67..000000000
--- a/lib/feedparser/tests/wellformed/rss/item_expirationDate_parsed.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item expirationDate parsed
-Expect:      not bozo and entries[0]['expired_parsed'] == (2004, 1, 1, 19, 48, 21, 3, 1, 0)
--->
-<rss version="0.93">
-<channel>
-<item>
-<expirationDate>Thu, 01 Jan 2004 19:48:21 GMT</expirationDate>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/rss/item_fullitem.xml b/lib/feedparser/tests/wellformed/rss/item_fullitem.xml
deleted file mode 100644
index afe454b9e..000000000
--- a/lib/feedparser/tests/wellformed/rss/item_fullitem.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: fullitem
-Expect:      not bozo and entries[0]['content'][0]['value'] == u'<p>Example content</p>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<fullitem>&lt;p&gt;Example content&lt;/p&gt;</fullitem>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/item_fullitem_mode.xml b/lib/feedparser/tests/wellformed/rss/item_fullitem_mode.xml
deleted file mode 100644
index bc14adaa1..000000000
--- a/lib/feedparser/tests/wellformed/rss/item_fullitem_mode.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: fullitem mode
-Expect:      1
--->
-<rss version="2.0">
-<channel>
-<item>
-<fullitem>&lt;p&gt;Example content&lt;/p&gt;</fullitem>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/item_fullitem_type.xml b/lib/feedparser/tests/wellformed/rss/item_fullitem_type.xml
deleted file mode 100644
index f667d695b..000000000
--- a/lib/feedparser/tests/wellformed/rss/item_fullitem_type.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: fullitem type
-Expect:      not bozo and entries[0]['content'][0]['type'] == u'text/html'
--->
-<rss version="2.0">
-<channel>
-<item>
-<fullitem>&lt;p&gt;Example content&lt;/p&gt;</fullitem>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/item_guid.xml b/lib/feedparser/tests/wellformed/rss/item_guid.xml
deleted file mode 100644
index 52ed08439..000000000
--- a/lib/feedparser/tests/wellformed/rss/item_guid.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item guid
-Expect:      not bozo and entries[0]['guid'] == u'http://guid.example.com/'
--->
-<rss version="2.0">
-<channel>
-<item>
-<guid>http://guid.example.com/</guid>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/item_guid_conflict_link.xml b/lib/feedparser/tests/wellformed/rss/item_guid_conflict_link.xml
deleted file mode 100644
index b579c3cd4..000000000
--- a/lib/feedparser/tests/wellformed/rss/item_guid_conflict_link.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<!--
-Description: item guid does not override link
-Expect:      not bozo and entries[0]['link'] == u'http://link.example.com/'
--->
-<rss version="2.0">
-<channel>
-<item>
-<link>http://link.example.com/</link>
-<guid>http://guid.example.com/</guid>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/item_guid_guidislink.xml b/lib/feedparser/tests/wellformed/rss/item_guid_guidislink.xml
deleted file mode 100644
index 1f9705e87..000000000
--- a/lib/feedparser/tests/wellformed/rss/item_guid_guidislink.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: guidislink
-Expect:      not bozo and entries[0]['guidislink']
--->
-<rss version="2.0">
-<channel>
-<item>
-<guid>http://guid.example.com/</guid>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/item_guid_isPermaLink_conflict_link.xml b/lib/feedparser/tests/wellformed/rss/item_guid_isPermaLink_conflict_link.xml
deleted file mode 100644
index 64bd5753f..000000000
--- a/lib/feedparser/tests/wellformed/rss/item_guid_isPermaLink_conflict_link.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<!--
-Description: item guid does not override link even if isPermaLink="true"
-Expect:      not bozo and entries[0]['link'] == u'http://link.example.com/'
--->
-<rss version="2.0">
-<channel>
-<item>
-<link>http://link.example.com/</link>
-<guid isPermaLink="true">http://guid.example.com/</guid>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/item_guid_isPermaLink_conflict_link_not_guidislink.xml b/lib/feedparser/tests/wellformed/rss/item_guid_isPermaLink_conflict_link_not_guidislink.xml
deleted file mode 100644
index d8505fb1e..000000000
--- a/lib/feedparser/tests/wellformed/rss/item_guid_isPermaLink_conflict_link_not_guidislink.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<!--
-Description: not guidislink when link present (even if isPermaLink="true")
-Expect:      not bozo and not entries[0]['guidislink']
--->
-<rss version="2.0">
-<channel>
-<item>
-<link>http://link.example.com/</link>
-<guid isPermaLink="true">http://guid.example.com/</guid>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/item_guid_isPermaLink_guidislink.xml b/lib/feedparser/tests/wellformed/rss/item_guid_isPermaLink_guidislink.xml
deleted file mode 100644
index bed21fec3..000000000
--- a/lib/feedparser/tests/wellformed/rss/item_guid_isPermaLink_guidislink.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: guidislink when isPermaLink="true"
-Expect:      not bozo and entries[0]['guidislink']
--->
-<rss version="2.0">
-<channel>
-<item>
-<guid isPermaLink="true">http://guid.example.com/</guid>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/item_guid_isPermaLink_map_link.xml b/lib/feedparser/tests/wellformed/rss/item_guid_isPermaLink_map_link.xml
deleted file mode 100644
index ce2e90cb5..000000000
--- a/lib/feedparser/tests/wellformed/rss/item_guid_isPermaLink_map_link.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item guid maps to link when isPermaLink="true"
-Expect:      not bozo and entries[0]['link'] == u'http://guid.example.com/'
--->
-<rss version="2.0">
-<channel>
-<item>
-<guid isPermaLink="true">http://guid.example.com/</guid>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/item_guid_map_link.xml b/lib/feedparser/tests/wellformed/rss/item_guid_map_link.xml
deleted file mode 100644
index bb778e79a..000000000
--- a/lib/feedparser/tests/wellformed/rss/item_guid_map_link.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item guid maps to link
-Expect:      not bozo and entries[0]['link'] == u'http://guid.example.com/'
--->
-<rss version="2.0">
-<channel>
-<item>
-<guid>http://guid.example.com/</guid>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/item_guid_not_permalink.xml b/lib/feedparser/tests/wellformed/rss/item_guid_not_permalink.xml
deleted file mode 100644
index 79f20e247..000000000
--- a/lib/feedparser/tests/wellformed/rss/item_guid_not_permalink.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item guid not permalink is not duplicated into link
-Expect:      not bozo and not entries[0].has_key('link')
--->
-<rss version="2.0">
-<channel>
-<item>
-<guid isPermaLink="false">http://guid.example.com/</guid>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/item_guid_not_permalink_conflict_link.xml b/lib/feedparser/tests/wellformed/rss/item_guid_not_permalink_conflict_link.xml
deleted file mode 100644
index 5f16a2923..000000000
--- a/lib/feedparser/tests/wellformed/rss/item_guid_not_permalink_conflict_link.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<!--
-Description: item guid (not permalink) is not duplicated into link
-Expect:      not bozo and entries[0]['link'] == u'http://link.example.com/'
--->
-<rss version="2.0">
-<channel>
-<item>
-<link>http://link.example.com/</link>
-<guid isPermaLink="false">http://guid.example.com/</guid>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/item_guid_not_permalink_not_guidislink.xml b/lib/feedparser/tests/wellformed/rss/item_guid_not_permalink_not_guidislink.xml
deleted file mode 100644
index c25de446d..000000000
--- a/lib/feedparser/tests/wellformed/rss/item_guid_not_permalink_not_guidislink.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: not guidislink since item guid is not permalink
-Expect:      not bozo and not entries[0]['guidislink']
--->
-<rss version="2.0">
-<channel>
-<item>
-<guid isPermaLink="false">http://guid.example.com/</guid>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/item_guid_not_permalink_not_guidislink_2.xml b/lib/feedparser/tests/wellformed/rss/item_guid_not_permalink_not_guidislink_2.xml
deleted file mode 100644
index 7052b455a..000000000
--- a/lib/feedparser/tests/wellformed/rss/item_guid_not_permalink_not_guidislink_2.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<!--
-Description: not guidislink because guid is not permalink
-Expect:      not bozo and not entries[0]['guidislink']
--->
-<rss version="2.0">
-<channel>
-<item>
-<link>http://link.example.com/</link>
-<guid isPermaLink="false">http://guid.example.com/</guid>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/item_guid_not_permalink_not_url.xml b/lib/feedparser/tests/wellformed/rss/item_guid_not_permalink_not_url.xml
deleted file mode 100644
index cb9e82d35..000000000
--- a/lib/feedparser/tests/wellformed/rss/item_guid_not_permalink_not_url.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item guid not permalink is not resolved as a URL
-Expect:      not bozo and entries[0]['id'] == u'abc'
--->
-<rss version="2.0" xml:base="http://dom.test/">
-<channel>
-<item>
-<guid isPermaLink="false">abc</guid>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/rss/item_image_link_bleed.xml b/lib/feedparser/tests/wellformed/rss/item_image_link_bleed.xml
deleted file mode 100644
index ae5b9864f..000000000
--- a/lib/feedparser/tests/wellformed/rss/item_image_link_bleed.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-Description: image link does not bleed into item link array
-Expect: not bozo and len(entries[0]['links']) == 1
--->
-<rss version="2.0">
-<channel>
-    <item>
-        <link>http://item.TEST/</link>
-        <image>
-            <link>http://item.TEST/imagelink</link>
-        </image>
-    </item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/rss/item_image_link_conflict.xml b/lib/feedparser/tests/wellformed/rss/item_image_link_conflict.xml
deleted file mode 100644
index 3fa86ae7d..000000000
--- a/lib/feedparser/tests/wellformed/rss/item_image_link_conflict.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-Description: image link does not conflict with item link
-Expect: not bozo and entries[0]['link'] == u'http://item.TEST/'
--->
-<rss version="2.0">
-<channel>
-    <item>
-        <link>http://item.TEST/</link>
-        <image>
-            <link>http://item.TEST/imagelink</link>
-        </image>
-    </item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/rss/item_link.xml b/lib/feedparser/tests/wellformed/rss/item_link.xml
deleted file mode 100644
index f56a3d4c7..000000000
--- a/lib/feedparser/tests/wellformed/rss/item_link.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item link
-Expect:      not bozo and entries[0]['link'] == u'http://example.com/'
--->
-<rss version="2.0">
-<channel>
-<item>
-<link>http://example.com/</link>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/item_pubDate.xml b/lib/feedparser/tests/wellformed/rss/item_pubDate.xml
deleted file mode 100644
index 23c3c8966..000000000
--- a/lib/feedparser/tests/wellformed/rss/item_pubDate.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item pubDate
-Expect:      not bozo and entries[0]['published'] == u'Thu, 01 Jan 2004 19:48:21 GMT'
--->
-<rss version="2.0">
-<channel>
-<item>
-<pubDate>Thu, 01 Jan 2004 19:48:21 GMT</pubDate>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/rss/item_pubDate_map_updated_parsed.xml b/lib/feedparser/tests/wellformed/rss/item_pubDate_map_updated_parsed.xml
deleted file mode 100644
index 32db8be4b..000000000
--- a/lib/feedparser/tests/wellformed/rss/item_pubDate_map_updated_parsed.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item pubDate parsed and mapped to published_parsed
-Expect:      not bozo and entries[0]['published_parsed'] == (2004, 1, 1, 19, 48, 21, 3, 1, 0)
--->
-<rss version="2.0">
-<channel>
-<item>
-<pubDate>Thu, 01 Jan 2004 19:48:21 GMT</pubDate>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/rss/item_source.xml b/lib/feedparser/tests/wellformed/rss/item_source.xml
deleted file mode 100644
index 12b7745e1..000000000
--- a/lib/feedparser/tests/wellformed/rss/item_source.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item source
-Expect:      not bozo and entries[0]['source']['title'] == 'Example source'
--->
-<rss version="2.0">
-<channel>
-<item>
-<source url="http://example.com/">Example source</source>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/rss/item_source_url.xml b/lib/feedparser/tests/wellformed/rss/item_source_url.xml
deleted file mode 100644
index c5f235a4f..000000000
--- a/lib/feedparser/tests/wellformed/rss/item_source_url.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item source url
-Expect:      not bozo and entries[0].source.href == u'http://example.com/'
--->
-<rss version="2.0">
-<channel>
-<item>
-<source url="http://example.com/">Example source</source>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/rss/item_summary_and_description.xml b/lib/feedparser/tests/wellformed/rss/item_summary_and_description.xml
deleted file mode 100644
index 9fd152f0b..000000000
--- a/lib/feedparser/tests/wellformed/rss/item_summary_and_description.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<!--
-Description: item contains both summary and description elements
-Expect:      not bozo and entries[0]['summary'] == u'Example summary' and entries[0]['content'][0]['value'] == u'Example description'
--->
-<rss version="2.0">
-<channel>
-<item>
-<summary>Example summary</summary>
-<description>Example description</description>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/item_title.xml b/lib/feedparser/tests/wellformed/rss/item_title.xml
deleted file mode 100644
index b0d62660d..000000000
--- a/lib/feedparser/tests/wellformed/rss/item_title.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item title
-Expect:      not bozo and entries[0]['title'] == u'Item 1 title'
--->
-<rss version="2.0">
-<channel>
-<item>
-<title>Item 1 title</title>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/item_xhtml_body.xml b/lib/feedparser/tests/wellformed/rss/item_xhtml_body.xml
deleted file mode 100644
index cf41c29a6..000000000
--- a/lib/feedparser/tests/wellformed/rss/item_xhtml_body.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<!--
-Description: xhtml:body
-Expect:      not bozo and entries[0]['content'][0]['value'] == u'<p>Example content</p>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<body xmlns="http://www.w3.org/1999/xhtml">
-<p>Example content</p>
-</body>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/item_xhtml_body_mode.xml b/lib/feedparser/tests/wellformed/rss/item_xhtml_body_mode.xml
deleted file mode 100644
index 5d30b0f2e..000000000
--- a/lib/feedparser/tests/wellformed/rss/item_xhtml_body_mode.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<!--
-Description: xhtml:body mode
-Expect:      1
--->
-<rss version="2.0">
-<channel>
-<item>
-<body xmlns="http://www.w3.org/1999/xhtml">
-<p>Example content</p>
-</body>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/item_xhtml_body_type.xml b/lib/feedparser/tests/wellformed/rss/item_xhtml_body_type.xml
deleted file mode 100644
index ded661a08..000000000
--- a/lib/feedparser/tests/wellformed/rss/item_xhtml_body_type.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<!--
-Description: xhtml:body type
-Expect:      not bozo and entries[0]['content'][0]['type'] == u'application/xhtml+xml'
--->
-<rss version="2.0">
-<channel>
-<item>
-<body xmlns="http://www.w3.org/1999/xhtml">
-<p>Example content</p>
-</body>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/newlocation.xml b/lib/feedparser/tests/wellformed/rss/newlocation.xml
deleted file mode 100644
index b6b992394..000000000
--- a/lib/feedparser/tests/wellformed/rss/newlocation.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: rss newLocation
-Expect: not bozo and feed.newlocation == u'http://example/new'
--->
-<rss version="2.0">
-<redirect>
-   <newLocation>http://example/new</newLocation>
-</redirect>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/rss/rss_namespace_1.xml b/lib/feedparser/tests/wellformed/rss/rss_namespace_1.xml
deleted file mode 100644
index 9f583c691..000000000
--- a/lib/feedparser/tests/wellformed/rss/rss_namespace_1.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: RSS Userland namespace #1
-Expect:      not bozo and feed['description'] == u'Example description'
--->
-<rss xmlns="http://backend.userland.com/rss">
-<channel>
-<description>Example description</description>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/rss_namespace_2.xml b/lib/feedparser/tests/wellformed/rss/rss_namespace_2.xml
deleted file mode 100644
index 38af22008..000000000
--- a/lib/feedparser/tests/wellformed/rss/rss_namespace_2.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: RSS Userland namespace #2
-Expect:      not bozo and feed['description'] == u'Example description'
--->
-<rss xmlns="http://backend.userland.com/rss2">
-<channel>
-<description>Example description</description>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/rss_namespace_3.xml b/lib/feedparser/tests/wellformed/rss/rss_namespace_3.xml
deleted file mode 100644
index 8bd75469b..000000000
--- a/lib/feedparser/tests/wellformed/rss/rss_namespace_3.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: RSS Userland namespace #3
-Expect:      not bozo and feed['description'] == u'Example description'
--->
-<rss xmlns="http://backend.userland.com/rss2.1">
-<channel>
-<description>Example description</description>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/rss_namespace_4.xml b/lib/feedparser/tests/wellformed/rss/rss_namespace_4.xml
deleted file mode 100644
index 52dc603eb..000000000
--- a/lib/feedparser/tests/wellformed/rss/rss_namespace_4.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: RSS Userland namespace #4
-Expect:      not bozo and feed['description'] == u'Example description'
--->
-<rss xmlns="http://blogs.law.harvard.edu/tech/rss">
-<channel>
-<description>Example description</description>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/rss_version_090.xml b/lib/feedparser/tests/wellformed/rss/rss_version_090.xml
deleted file mode 100644
index a73e246b2..000000000
--- a/lib/feedparser/tests/wellformed/rss/rss_version_090.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-<!--
-Description: RSS version 0.90
-Expect:      not bozo and version == u'rss090'
--->
-<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://my.netscape.com/rdf/simple/0.9/">
-</rdf:RDF>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/rss_version_091_netscape.xml b/lib/feedparser/tests/wellformed/rss/rss_version_091_netscape.xml
deleted file mode 100644
index fbcc15cec..000000000
--- a/lib/feedparser/tests/wellformed/rss/rss_version_091_netscape.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: RSS version 0.91 (Netscape)
-Expect:      not bozo and version == u'rss091n'
--->
-<!DOCTYPE rss PUBLIC "-//Netscape Communications//DTD RSS 0.91//EN" "http://my.netscape.com/publish/formats/rss-0.91.dtd">
-<rss version="0.91">
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/rss_version_091_userland.xml b/lib/feedparser/tests/wellformed/rss/rss_version_091_userland.xml
deleted file mode 100644
index ee9f1cc35..000000000
--- a/lib/feedparser/tests/wellformed/rss/rss_version_091_userland.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-<!--
-Description: RSS version 0.91 (Userland)
-Expect:      not bozo and version == u'rss091u'
--->
-<rss version="0.91">
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/rss_version_092.xml b/lib/feedparser/tests/wellformed/rss/rss_version_092.xml
deleted file mode 100644
index 3f3b82ad4..000000000
--- a/lib/feedparser/tests/wellformed/rss/rss_version_092.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-<!--
-Description: RSS version 0.92
-Expect:      not bozo and version == u'rss092'
--->
-<rss version="0.92">
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/rss_version_093.xml b/lib/feedparser/tests/wellformed/rss/rss_version_093.xml
deleted file mode 100644
index 5855af68c..000000000
--- a/lib/feedparser/tests/wellformed/rss/rss_version_093.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-<!--
-Description: RSS version 0.93
-Expect:      not bozo and version == u'rss093'
--->
-<rss version="0.93">
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/rss_version_094.xml b/lib/feedparser/tests/wellformed/rss/rss_version_094.xml
deleted file mode 100644
index 8b03e17d9..000000000
--- a/lib/feedparser/tests/wellformed/rss/rss_version_094.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-<!--
-Description: RSS version 0.94
-Expect:      not bozo and version == u'rss094'
--->
-<rss version="0.94">
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/rss_version_20.xml b/lib/feedparser/tests/wellformed/rss/rss_version_20.xml
deleted file mode 100644
index 56ffbdde0..000000000
--- a/lib/feedparser/tests/wellformed/rss/rss_version_20.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-<!--
-Description: RSS version 2.0
-Expect:      not bozo and version == u'rss20'
--->
-<rss version="2.0">
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/rss_version_201.xml b/lib/feedparser/tests/wellformed/rss/rss_version_201.xml
deleted file mode 100644
index 749659793..000000000
--- a/lib/feedparser/tests/wellformed/rss/rss_version_201.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-<!--
-Description: RSS version 2.01
-Expect:      not bozo and version == u'rss20'
--->
-<rss version="2.01">
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/rss_version_21.xml b/lib/feedparser/tests/wellformed/rss/rss_version_21.xml
deleted file mode 100644
index b7d45ef75..000000000
--- a/lib/feedparser/tests/wellformed/rss/rss_version_21.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-<!--
-Description: RSS version 2.1
-Expect:      not bozo and version == u'rss20'
--->
-<rss version="2.1">
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/rss_version_missing.xml b/lib/feedparser/tests/wellformed/rss/rss_version_missing.xml
deleted file mode 100644
index e6440d881..000000000
--- a/lib/feedparser/tests/wellformed/rss/rss_version_missing.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: missing RSS version number
-Expect:      not bozo and version == u'rss'
--->
-<rss>
-<channel>
-<description>Example description</description>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_abbr.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_abbr.xml
deleted file mode 100644
index 71c1aa744..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_abbr.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain abbr attribute
-Expect:       not bozo and entries[0]['description'] == '<span abbr=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span abbr=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_accept-charset.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_accept-charset.xml
deleted file mode 100644
index 28c849776..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_accept-charset.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain accept-charset attribute
-Expect:       not bozo and entries[0]['description'] == '<span accept-charset=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span accept-charset=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_accept.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_accept.xml
deleted file mode 100644
index 9eaee2335..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_accept.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain accept attribute
-Expect:       not bozo and entries[0]['description'] == '<span accept=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span accept=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_accesskey.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_accesskey.xml
deleted file mode 100644
index dd41be868..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_accesskey.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain accesskey attribute
-Expect:       not bozo and entries[0]['description'] == '<span accesskey=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span accesskey=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_action.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_action.xml
deleted file mode 100644
index fa15e1e95..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_action.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain action attribute
-Expect:       not bozo and entries[0]['description'] == '<span action=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span action=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_align.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_align.xml
deleted file mode 100644
index 9d1c53b74..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_align.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain align attribute
-Expect:       not bozo and entries[0]['description'] == '<span align=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span align=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_alt.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_alt.xml
deleted file mode 100644
index 88c0b1943..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_alt.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain alt attribute
-Expect:       not bozo and entries[0]['description'] == '<span alt=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span alt=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_autocomplete.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_autocomplete.xml
deleted file mode 100644
index 71399464b..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_autocomplete.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain autocomplete attribute
-Expect:       not bozo and entries[0]['description'] == '<span autocomplete=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span autocomplete=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_autofocus.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_autofocus.xml
deleted file mode 100644
index 77cd3fa34..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_autofocus.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain autofocus attribute
-Expect:       not bozo and entries[0]['description'] == '<span autofocus=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span autofocus=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_autoplay.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_autoplay.xml
deleted file mode 100644
index 0d8729343..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_autoplay.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain autoplay attribute
-Expect:       not bozo and entries[0]['description'] == '<span></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span autoplay=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_axis.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_axis.xml
deleted file mode 100644
index 2d3232f1f..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_axis.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain axis attribute
-Expect:       not bozo and entries[0]['description'] == '<span axis=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span axis=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_background.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_background.xml
deleted file mode 100644
index bc0fb9b94..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_background.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain background attribute
-Expect:       not bozo and entries[0]['description'] == '<span background=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span background=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_balance.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_balance.xml
deleted file mode 100644
index 9a9dfc741..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_balance.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain balance attribute
-Expect:       not bozo and entries[0]['description'] == '<span balance=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span balance=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_bgcolor.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_bgcolor.xml
deleted file mode 100644
index efc9f5c35..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_bgcolor.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain bgcolor attribute
-Expect:       not bozo and entries[0]['description'] == '<span bgcolor=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span bgcolor=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_bgproperties.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_bgproperties.xml
deleted file mode 100644
index 8f964272e..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_bgproperties.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain bgproperties attribute
-Expect:       not bozo and entries[0]['description'] == '<span bgproperties=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span bgproperties=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_border.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_border.xml
deleted file mode 100644
index 80b118dd9..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_border.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain border attribute
-Expect:       not bozo and entries[0]['description'] == '<span border=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span border=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_bordercolor.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_bordercolor.xml
deleted file mode 100644
index 5b314be88..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_bordercolor.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain bordercolor attribute
-Expect:       not bozo and entries[0]['description'] == '<span bordercolor=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span bordercolor=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_bordercolordark.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_bordercolordark.xml
deleted file mode 100644
index 5913ffabb..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_bordercolordark.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain bordercolordark attribute
-Expect:       not bozo and entries[0]['description'] == '<span bordercolordark=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span bordercolordark=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_bordercolorlight.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_bordercolorlight.xml
deleted file mode 100644
index 4883e64a6..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_bordercolorlight.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain bordercolorlight attribute
-Expect:       not bozo and entries[0]['description'] == '<span bordercolorlight=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span bordercolorlight=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_bottompadding.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_bottompadding.xml
deleted file mode 100644
index beaad75f1..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_bottompadding.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain bottompadding attribute
-Expect:       not bozo and entries[0]['description'] == '<span bottompadding=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span bottompadding=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_cellpadding.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_cellpadding.xml
deleted file mode 100644
index 27c4df18b..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_cellpadding.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain cellpadding attribute
-Expect:       not bozo and entries[0]['description'] == '<span cellpadding=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span cellpadding=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_cellspacing.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_cellspacing.xml
deleted file mode 100644
index 4043ac5cf..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_cellspacing.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain cellspacing attribute
-Expect:       not bozo and entries[0]['description'] == '<span cellspacing=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span cellspacing=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_ch.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_ch.xml
deleted file mode 100644
index e1dcbcec6..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_ch.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain ch attribute
-Expect:       not bozo and entries[0]['description'] == '<span ch=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span ch=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_challenge.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_challenge.xml
deleted file mode 100644
index 2eb2869ca..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_challenge.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain challenge attribute
-Expect:       not bozo and entries[0]['description'] == '<span challenge=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span challenge=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_char.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_char.xml
deleted file mode 100644
index 31d30b4ea..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_char.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain char attribute
-Expect:       not bozo and entries[0]['description'] == '<span char=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span char=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_charoff.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_charoff.xml
deleted file mode 100644
index 4f8663404..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_charoff.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain charoff attribute
-Expect:       not bozo and entries[0]['description'] == '<span charoff=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span charoff=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_charset.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_charset.xml
deleted file mode 100644
index 85d2a1fb1..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_charset.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain charset attribute
-Expect:       not bozo and entries[0]['description'] == '<span charset=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span charset=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_checked.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_checked.xml
deleted file mode 100644
index 259e17c75..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_checked.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain checked attribute
-Expect:       not bozo and entries[0]['description'] == '<span checked=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span checked=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_choff.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_choff.xml
deleted file mode 100644
index 2e3e79bfe..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_choff.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain choff attribute
-Expect:       not bozo and entries[0]['description'] == '<span choff=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span choff=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_cite.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_cite.xml
deleted file mode 100644
index 5eb0011fa..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_cite.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain cite attribute
-Expect:       not bozo and entries[0]['description'] == '<span cite=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span cite=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_class.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_class.xml
deleted file mode 100644
index bd2577dbe..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_class.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain class attribute
-Expect:       not bozo and entries[0]['description'] == '<span class=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span class=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_clear.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_clear.xml
deleted file mode 100644
index a1a572dc5..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_clear.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain clear attribute
-Expect:       not bozo and entries[0]['description'] == '<span clear=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span clear=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_color.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_color.xml
deleted file mode 100644
index 980ccfc14..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_color.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain color attribute
-Expect:       not bozo and entries[0]['description'] == '<span color=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span color=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_cols.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_cols.xml
deleted file mode 100644
index ceeef598c..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_cols.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain cols attribute
-Expect:       not bozo and entries[0]['description'] == '<span cols=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span cols=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_colspan.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_colspan.xml
deleted file mode 100644
index eef6cb6c6..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_colspan.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain colspan attribute
-Expect:       not bozo and entries[0]['description'] == '<span colspan=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span colspan=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_compact.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_compact.xml
deleted file mode 100644
index 61a0bbe68..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_compact.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain compact attribute
-Expect:       not bozo and entries[0]['description'] == '<span compact=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span compact=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_contenteditable.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_contenteditable.xml
deleted file mode 100644
index 328c6249b..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_contenteditable.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain contenteditable attribute
-Expect:       not bozo and entries[0]['description'] == '<span contenteditable=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span contenteditable=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_coords.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_coords.xml
deleted file mode 100644
index 9d389fb68..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_coords.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain coords attribute
-Expect:       not bozo and entries[0]['description'] == '<span coords=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span coords=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_data.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_data.xml
deleted file mode 100644
index 537d331ea..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_data.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain data attribute
-Expect:       not bozo and entries[0]['description'] == '<span data=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span data=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_datafld.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_datafld.xml
deleted file mode 100644
index 44837182d..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_datafld.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain datafld attribute
-Expect:       not bozo and entries[0]['description'] == '<span datafld=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span datafld=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_datapagesize.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_datapagesize.xml
deleted file mode 100644
index 4093280af..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_datapagesize.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain datapagesize attribute
-Expect:       not bozo and entries[0]['description'] == '<span datapagesize=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span datapagesize=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_datasrc.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_datasrc.xml
deleted file mode 100644
index 3d86946b9..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_datasrc.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain datasrc attribute
-Expect:       not bozo and entries[0]['description'] == '<span datasrc=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span datasrc=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_datetime.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_datetime.xml
deleted file mode 100644
index 6554045bd..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_datetime.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain datetime attribute
-Expect:       not bozo and entries[0]['description'] == '<span datetime=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span datetime=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_default.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_default.xml
deleted file mode 100644
index 17829c043..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_default.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain default attribute
-Expect:       not bozo and entries[0]['description'] == '<span default=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span default=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_delay.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_delay.xml
deleted file mode 100644
index ee7777d72..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_delay.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain delay attribute
-Expect:       not bozo and entries[0]['description'] == '<span delay=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span delay=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_dir.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_dir.xml
deleted file mode 100644
index c0618cc1e..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_dir.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain dir attribute
-Expect:       not bozo and entries[0]['description'] == '<span dir=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span dir=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_disabled.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_disabled.xml
deleted file mode 100644
index aa9194a9e..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_disabled.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain disabled attribute
-Expect:       not bozo and entries[0]['description'] == '<span disabled=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span disabled=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_draggable.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_draggable.xml
deleted file mode 100644
index 88720d3d9..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_draggable.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain draggable attribute
-Expect:       not bozo and entries[0]['description'] == '<span draggable=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span draggable=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_dynsrc.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_dynsrc.xml
deleted file mode 100644
index c57ccb764..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_dynsrc.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain dynsrc attribute
-Expect:       not bozo and entries[0]['description'] == '<span dynsrc=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span dynsrc=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_enctype.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_enctype.xml
deleted file mode 100644
index ab50610ae..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_enctype.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain enctype attribute
-Expect:       not bozo and entries[0]['description'] == '<span enctype=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span enctype=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_end.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_end.xml
deleted file mode 100644
index 22cc29e44..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_end.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain end attribute
-Expect:       not bozo and entries[0]['description'] == '<span end=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span end=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_face.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_face.xml
deleted file mode 100644
index 6c595b035..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_face.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain face attribute
-Expect:       not bozo and entries[0]['description'] == '<span face=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span face=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_for.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_for.xml
deleted file mode 100644
index 2b08493f5..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_for.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain for attribute
-Expect:       not bozo and entries[0]['description'] == '<span for=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span for=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_form.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_form.xml
deleted file mode 100644
index 4b37f62c9..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_form.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain form attribute
-Expect:       not bozo and entries[0]['description'] == '<span form=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span form=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_frame.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_frame.xml
deleted file mode 100644
index ed8d85a22..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_frame.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain frame attribute
-Expect:       not bozo and entries[0]['description'] == '<span frame=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span frame=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_galleryimg.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_galleryimg.xml
deleted file mode 100644
index f46682585..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_galleryimg.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain galleryimg attribute
-Expect:       not bozo and entries[0]['description'] == '<span galleryimg=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span galleryimg=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_gutter.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_gutter.xml
deleted file mode 100644
index ed5a8f5a6..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_gutter.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain gutter attribute
-Expect:       not bozo and entries[0]['description'] == '<span gutter=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span gutter=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_headers.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_headers.xml
deleted file mode 100644
index 6e805fcce..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_headers.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain headers attribute
-Expect:       not bozo and entries[0]['description'] == '<span headers=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span headers=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_height.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_height.xml
deleted file mode 100644
index 881636bc4..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_height.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain height attribute
-Expect:       not bozo and entries[0]['description'] == '<span height=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span height=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_hidden.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_hidden.xml
deleted file mode 100644
index 7e45d5b42..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_hidden.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain hidden attribute
-Expect:       not bozo and entries[0]['description'] == '<span hidden=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span hidden=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_hidefocus.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_hidefocus.xml
deleted file mode 100644
index b1ae3e083..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_hidefocus.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain hidefocus attribute
-Expect:       not bozo and entries[0]['description'] == '<span hidefocus=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span hidefocus=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_high.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_high.xml
deleted file mode 100644
index b89160b75..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_high.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain high attribute
-Expect:       not bozo and entries[0]['description'] == '<span high=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span high=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_href.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_href.xml
deleted file mode 100644
index 4382e9fca..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_href.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain href attribute
-Expect:       not bozo and entries[0]['description'] == '<span href=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span href=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_hreflang.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_hreflang.xml
deleted file mode 100644
index a48b42f33..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_hreflang.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain hreflang attribute
-Expect:       not bozo and entries[0]['description'] == '<span hreflang=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span hreflang=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_hspace.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_hspace.xml
deleted file mode 100644
index c08a60273..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_hspace.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain hspace attribute
-Expect:       not bozo and entries[0]['description'] == '<span hspace=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span hspace=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_icon.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_icon.xml
deleted file mode 100644
index 444a6b8f1..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_icon.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain icon attribute
-Expect:       not bozo and entries[0]['description'] == '<span icon=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span icon=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_id.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_id.xml
deleted file mode 100644
index d9f93a842..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_id.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain id attribute
-Expect:       not bozo and entries[0]['description'] == '<span id=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span id=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_inputmode.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_inputmode.xml
deleted file mode 100644
index b09563904..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_inputmode.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain inputmode attribute
-Expect:       not bozo and entries[0]['description'] == '<span inputmode=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span inputmode=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_ismap.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_ismap.xml
deleted file mode 100644
index eda48b6ef..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_ismap.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain ismap attribute
-Expect:       not bozo and entries[0]['description'] == '<span ismap=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span ismap=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_keytype.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_keytype.xml
deleted file mode 100644
index 074727b9d..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_keytype.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain keytype attribute
-Expect:       not bozo and entries[0]['description'] == '<span keytype=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span keytype=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_label.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_label.xml
deleted file mode 100644
index 340a4c389..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_label.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain label attribute
-Expect:       not bozo and entries[0]['description'] == '<span label=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span label=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_lang.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_lang.xml
deleted file mode 100644
index 2d7e5261e..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_lang.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain lang attribute
-Expect:       not bozo and entries[0]['description'] == '<span lang=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span lang=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_leftspacing.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_leftspacing.xml
deleted file mode 100644
index a6432e0cd..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_leftspacing.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain leftspacing attribute
-Expect:       not bozo and entries[0]['description'] == '<span leftspacing=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span leftspacing=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_list.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_list.xml
deleted file mode 100644
index 360b27f81..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_list.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain list attribute
-Expect:       not bozo and entries[0]['description'] == '<span list=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span list=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_longdesc.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_longdesc.xml
deleted file mode 100644
index 97b7d9412..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_longdesc.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain longdesc attribute
-Expect:       not bozo and entries[0]['description'] == '<span longdesc=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span longdesc=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_loop.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_loop.xml
deleted file mode 100644
index 8201f52dc..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_loop.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain loop attribute
-Expect:       not bozo and entries[0]['description'] == '<span loop=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span loop=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_loopcount.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_loopcount.xml
deleted file mode 100644
index 8bde8e888..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_loopcount.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain loopcount attribute
-Expect:       not bozo and entries[0]['description'] == '<span loopcount=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span loopcount=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_loopend.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_loopend.xml
deleted file mode 100644
index fa608d175..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_loopend.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain loopend attribute
-Expect:       not bozo and entries[0]['description'] == '<span loopend=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span loopend=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_loopstart.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_loopstart.xml
deleted file mode 100644
index f11901278..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_loopstart.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain loopstart attribute
-Expect:       not bozo and entries[0]['description'] == '<span loopstart=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span loopstart=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_low.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_low.xml
deleted file mode 100644
index 8ec062fe6..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_low.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain low attribute
-Expect:       not bozo and entries[0]['description'] == '<span low=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span low=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_lowsrc.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_lowsrc.xml
deleted file mode 100644
index a4258e36e..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_lowsrc.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain lowsrc attribute
-Expect:       not bozo and entries[0]['description'] == '<span lowsrc=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span lowsrc=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_max.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_max.xml
deleted file mode 100644
index 80cbaebad..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_max.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain max attribute
-Expect:       not bozo and entries[0]['description'] == '<span max=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span max=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_maxlength.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_maxlength.xml
deleted file mode 100644
index ad16126e3..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_maxlength.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain maxlength attribute
-Expect:       not bozo and entries[0]['description'] == '<span maxlength=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span maxlength=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_media.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_media.xml
deleted file mode 100644
index daeea4417..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_media.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain media attribute
-Expect:       not bozo and entries[0]['description'] == '<span media=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span media=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_method.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_method.xml
deleted file mode 100644
index c3a81ce55..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_method.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain method attribute
-Expect:       not bozo and entries[0]['description'] == '<span method=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span method=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_min.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_min.xml
deleted file mode 100644
index ad28c081f..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_min.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain min attribute
-Expect:       not bozo and entries[0]['description'] == '<span min=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span min=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_multiple.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_multiple.xml
deleted file mode 100644
index ef1e17ac0..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_multiple.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain multiple attribute
-Expect:       not bozo and entries[0]['description'] == '<span multiple=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span multiple=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_name.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_name.xml
deleted file mode 100644
index 0f98d7696..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_name.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain name attribute
-Expect:       not bozo and entries[0]['description'] == '<span name=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span name=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_nohref.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_nohref.xml
deleted file mode 100644
index 1b7fb0d96..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_nohref.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain nohref attribute
-Expect:       not bozo and entries[0]['description'] == '<span nohref=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span nohref=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_noshade.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_noshade.xml
deleted file mode 100644
index b1371da35..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_noshade.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain noshade attribute
-Expect:       not bozo and entries[0]['description'] == '<span noshade=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span noshade=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_nowrap.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_nowrap.xml
deleted file mode 100644
index b312dea07..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_nowrap.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain nowrap attribute
-Expect:       not bozo and entries[0]['description'] == '<span nowrap=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span nowrap=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_open.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_open.xml
deleted file mode 100644
index 2f4fc43ca..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_open.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain open attribute
-Expect:       not bozo and entries[0]['description'] == '<span open=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span open=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_optimum.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_optimum.xml
deleted file mode 100644
index a12207634..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_optimum.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain optimum attribute
-Expect:       not bozo and entries[0]['description'] == '<span optimum=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span optimum=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_pattern.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_pattern.xml
deleted file mode 100644
index c4e10322c..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_pattern.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain pattern attribute
-Expect:       not bozo and entries[0]['description'] == '<span pattern=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span pattern=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_ping.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_ping.xml
deleted file mode 100644
index 03b4f233a..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_ping.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain ping attribute
-Expect:       not bozo and entries[0]['description'] == '<span ping=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span ping=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_point-size.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_point-size.xml
deleted file mode 100644
index f6a6713f2..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_point-size.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain point-size attribute
-Expect:       not bozo and entries[0]['description'] == '<span point-size=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span point-size=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_poster.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_poster.xml
deleted file mode 100644
index 4148f5e70..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_poster.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain poster attribute
-Expect:       not bozo and entries[0]['description'] == '<video poster="http://d.test/p.jpeg"></video>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom" xml:base="http://d.test/">
-<entry>
-<content type="html">&lt;video poster="p.jpeg"&gt;&lt;/video&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_pqg.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_pqg.xml
deleted file mode 100644
index c2afa36a0..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_pqg.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain pqg attribute
-Expect:       not bozo and entries[0]['description'] == '<span pqg=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span pqg=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_preload.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_preload.xml
deleted file mode 100644
index 0e26d0914..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_preload.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain preload attribute
-Expect:       not bozo and entries[0]['description'] == '<video preload="auto"></video>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;video preload="auto"&gt;&lt;/video&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_prompt.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_prompt.xml
deleted file mode 100644
index 86f0d0b6d..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_prompt.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain prompt attribute
-Expect:       not bozo and entries[0]['description'] == '<span prompt=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span prompt=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_radiogroup.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_radiogroup.xml
deleted file mode 100644
index d575eace6..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_radiogroup.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain radiogroup attribute
-Expect:       not bozo and entries[0]['description'] == '<span radiogroup=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span radiogroup=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_readonly.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_readonly.xml
deleted file mode 100644
index f123f839e..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_readonly.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain readonly attribute
-Expect:       not bozo and entries[0]['description'] == '<span readonly=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span readonly=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_rel.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_rel.xml
deleted file mode 100644
index cd09d3085..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_rel.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain rel attribute
-Expect:       not bozo and entries[0]['description'] == '<span rel=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span rel=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_repeat-max.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_repeat-max.xml
deleted file mode 100644
index 15b868742..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_repeat-max.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain repeat-max attribute
-Expect:       not bozo and entries[0]['description'] == '<span repeat-max=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span repeat-max=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_repeat-min.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_repeat-min.xml
deleted file mode 100644
index 9549f0e42..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_repeat-min.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain repeat-min attribute
-Expect:       not bozo and entries[0]['description'] == '<span repeat-min=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span repeat-min=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_replace.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_replace.xml
deleted file mode 100644
index 2fb1e8c45..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_replace.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain replace attribute
-Expect:       not bozo and entries[0]['description'] == '<span replace=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span replace=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_required.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_required.xml
deleted file mode 100644
index 3252c8a49..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_required.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain required attribute
-Expect:       not bozo and entries[0]['description'] == '<span required=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span required=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_rev.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_rev.xml
deleted file mode 100644
index 8f56b0267..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_rev.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain rev attribute
-Expect:       not bozo and entries[0]['description'] == '<span rev=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span rev=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_rightspacing.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_rightspacing.xml
deleted file mode 100644
index 9a90e34ac..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_rightspacing.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain rightspacing attribute
-Expect:       not bozo and entries[0]['description'] == '<span rightspacing=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span rightspacing=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_rows.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_rows.xml
deleted file mode 100644
index 6817c5435..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_rows.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain rows attribute
-Expect:       not bozo and entries[0]['description'] == '<span rows=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span rows=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_rowspan.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_rowspan.xml
deleted file mode 100644
index daca0671c..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_rowspan.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain rowspan attribute
-Expect:       not bozo and entries[0]['description'] == '<span rowspan=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span rowspan=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_rules.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_rules.xml
deleted file mode 100644
index 62a718cc8..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_rules.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain rules attribute
-Expect:       not bozo and entries[0]['description'] == '<span rules=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span rules=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_scope.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_scope.xml
deleted file mode 100644
index 7ae2c075a..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_scope.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain scope attribute
-Expect:       not bozo and entries[0]['description'] == '<span scope=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span scope=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_selected.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_selected.xml
deleted file mode 100644
index e1ff4b1f7..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_selected.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain selected attribute
-Expect:       not bozo and entries[0]['description'] == '<span selected=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span selected=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_shape.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_shape.xml
deleted file mode 100644
index 9bcb69231..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_shape.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain shape attribute
-Expect:       not bozo and entries[0]['description'] == '<span shape=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span shape=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_size.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_size.xml
deleted file mode 100644
index 5a7d7a98a..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_size.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain size attribute
-Expect:       not bozo and entries[0]['description'] == '<span size=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span size=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_span.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_span.xml
deleted file mode 100644
index e6da56c4c..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_span.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain span attribute
-Expect:       not bozo and entries[0]['description'] == '<span span=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span span=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_src.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_src.xml
deleted file mode 100644
index fd6636bac..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_src.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain src attribute
-Expect:       not bozo and entries[0]['description'] == '<span src=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span src=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_start.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_start.xml
deleted file mode 100644
index 813747487..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_start.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain start attribute
-Expect:       not bozo and entries[0]['description'] == '<span start=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span start=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_step.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_step.xml
deleted file mode 100644
index 3935b8105..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_step.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain step attribute
-Expect:       not bozo and entries[0]['description'] == '<span step=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span step=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_summary.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_summary.xml
deleted file mode 100644
index 903ccf68e..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_summary.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain summary attribute
-Expect:       not bozo and entries[0]['description'] == '<span summary=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span summary=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_suppress.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_suppress.xml
deleted file mode 100644
index 9779ee12e..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_suppress.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain suppress attribute
-Expect:       not bozo and entries[0]['description'] == '<span suppress=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span suppress=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_tabindex.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_tabindex.xml
deleted file mode 100644
index a6c0ec6e2..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_tabindex.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain tabindex attribute
-Expect:       not bozo and entries[0]['description'] == '<span tabindex=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span tabindex=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_target.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_target.xml
deleted file mode 100644
index 3716ecd3f..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_target.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain target attribute
-Expect:       not bozo and entries[0]['description'] == '<span target=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span target=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_template.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_template.xml
deleted file mode 100644
index b624ee091..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_template.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain template attribute
-Expect:       not bozo and entries[0]['description'] == '<span template=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span template=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_title.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_title.xml
deleted file mode 100644
index 0e8d52070..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_title.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain title attribute
-Expect:       not bozo and entries[0]['description'] == '<span title=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span title=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_toppadding.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_toppadding.xml
deleted file mode 100644
index 248bfbfb3..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_toppadding.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain toppadding attribute
-Expect:       not bozo and entries[0]['description'] == '<span toppadding=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span toppadding=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_type.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_type.xml
deleted file mode 100644
index 7f9479f40..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_type.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain type attribute
-Expect:       not bozo and entries[0]['description'] == '<span type=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span type=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_unselectable.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_unselectable.xml
deleted file mode 100644
index 4ef7f63ad..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_unselectable.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain unselectable attribute
-Expect:       not bozo and entries[0]['description'] == '<span unselectable=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span unselectable=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_urn.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_urn.xml
deleted file mode 100644
index ebbcfc5b0..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_urn.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain urn attribute
-Expect:       not bozo and entries[0]['description'] == '<span urn=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span urn=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_usemap.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_usemap.xml
deleted file mode 100644
index d0a76387d..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_usemap.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain usemap attribute
-Expect:       not bozo and entries[0]['description'] == '<span usemap=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span usemap=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_valign.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_valign.xml
deleted file mode 100644
index 21efa6bf8..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_valign.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain valign attribute
-Expect:       not bozo and entries[0]['description'] == '<span valign=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span valign=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_value.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_value.xml
deleted file mode 100644
index 56ce060c1..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_value.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain value attribute
-Expect:       not bozo and entries[0]['description'] == '<span value=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span value=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_variable.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_variable.xml
deleted file mode 100644
index ada4076f1..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_variable.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain variable attribute
-Expect:       not bozo and entries[0]['description'] == '<span variable=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span variable=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_volume.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_volume.xml
deleted file mode 100644
index 058520922..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_volume.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain volume attribute
-Expect:       not bozo and entries[0]['description'] == '<span volume=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span volume=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_vrml.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_vrml.xml
deleted file mode 100644
index 50b7a3f4e..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_vrml.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain vrml attribute
-Expect:       not bozo and entries[0]['description'] == '<span vrml=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span vrml=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_vspace.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_vspace.xml
deleted file mode 100644
index 7eca04f8b..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_vspace.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain vspace attribute
-Expect:       not bozo and entries[0]['description'] == '<span vspace=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span vspace=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_width.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_width.xml
deleted file mode 100644
index c2b4cebe0..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_width.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain width attribute
-Expect:       not bozo and entries[0]['description'] == '<span width=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span width=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_wrap.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_wrap.xml
deleted file mode 100644
index 1b23e49fb..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_wrap.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain wrap attribute
-Expect:       not bozo and entries[0]['description'] == '<span wrap=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span wrap=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_a.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_a.xml
deleted file mode 100644
index 3c5028912..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_a.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <a></a>
-Expect:       not bozo and entries[0]['description'] == '<a></a>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;a&gt;&lt;/a&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_abbr.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_abbr.xml
deleted file mode 100644
index 4aafa029e..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_abbr.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <abbr></abbr>
-Expect:       not bozo and entries[0]['description'] == '<abbr></abbr>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;abbr&gt;&lt;/abbr&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_acronym.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_acronym.xml
deleted file mode 100644
index 5762c3980..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_acronym.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <acronym></acronym>
-Expect:       not bozo and entries[0]['description'] == '<acronym></acronym>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;acronym&gt;&lt;/acronym&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_address.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_address.xml
deleted file mode 100644
index e11de2fb2..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_address.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <address></address>
-Expect:       not bozo and entries[0]['description'] == '<address></address>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;address&gt;&lt;/address&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_area.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_area.xml
deleted file mode 100644
index ce4a14fe6..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_area.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <area></area>
-Expect:       not bozo and entries[0]['description'] == '<area />'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;area&gt;&lt;/area&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_article.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_article.xml
deleted file mode 100644
index 3c1c3285e..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_article.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <article></article>
-Expect:       not bozo and entries[0]['description'] == '<article></article>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;article&gt;&lt;/article&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_aside.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_aside.xml
deleted file mode 100644
index 035ab288b..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_aside.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <aside></aside>
-Expect:       not bozo and entries[0]['description'] == '<aside></aside>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;aside&gt;&lt;/aside&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_audio.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_audio.xml
deleted file mode 100644
index 3923dfab1..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_audio.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <audio></audio>
-Expect:       not bozo and entries[0]['description'] == '<audio></audio>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;audio&gt;&lt;/audio&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_b.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_b.xml
deleted file mode 100644
index 76cdf89c6..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_b.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <b></b>
-Expect:       not bozo and entries[0]['description'] == '<b></b>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;b&gt;&lt;/b&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_big.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_big.xml
deleted file mode 100644
index 8671e0962..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_big.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <big></big>
-Expect:       not bozo and entries[0]['description'] == '<big></big>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;big&gt;&lt;/big&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_blockquote.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_blockquote.xml
deleted file mode 100644
index 5eae04510..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_blockquote.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <blockquote></blockquote>
-Expect:       not bozo and entries[0]['description'] == '<blockquote></blockquote>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;blockquote&gt;&lt;/blockquote&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_br.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_br.xml
deleted file mode 100644
index 192a27ced..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_br.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <br></br>
-Expect:       not bozo and entries[0]['description'] == '<br />'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;br&gt;&lt;/br&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_button.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_button.xml
deleted file mode 100644
index 9a07d9f05..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_button.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <button></button>
-Expect:       not bozo and entries[0]['description'] == '<button></button>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;button&gt;&lt;/button&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_canvas.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_canvas.xml
deleted file mode 100644
index 99b97bd09..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_canvas.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <canvas></canvas>
-Expect:       not bozo and entries[0]['description'] == '<canvas></canvas>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;canvas&gt;&lt;/canvas&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_caption.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_caption.xml
deleted file mode 100644
index fc4c55af8..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_caption.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <caption></caption>
-Expect:       not bozo and entries[0]['description'] == '<caption></caption>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;caption&gt;&lt;/caption&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_center.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_center.xml
deleted file mode 100644
index 8aecf8f35..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_center.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <center></center>
-Expect:       not bozo and entries[0]['description'] == '<center></center>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;center&gt;&lt;/center&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_cite.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_cite.xml
deleted file mode 100644
index 0af1302eb..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_cite.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <cite></cite>
-Expect:       not bozo and entries[0]['description'] == '<cite></cite>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;cite&gt;&lt;/cite&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_code.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_code.xml
deleted file mode 100644
index c43bfe026..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_code.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <code></code>
-Expect:       not bozo and entries[0]['description'] == '<code></code>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;code&gt;&lt;/code&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_col.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_col.xml
deleted file mode 100644
index 14b064fe8..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_col.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <col></col>
-Expect:       not bozo and entries[0]['description'] == '<col />'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;col&gt;&lt;/col&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_colgroup.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_colgroup.xml
deleted file mode 100644
index 0b628463f..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_colgroup.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <colgroup></colgroup>
-Expect:       not bozo and entries[0]['description'] == '<colgroup></colgroup>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;colgroup&gt;&lt;/colgroup&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_command.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_command.xml
deleted file mode 100644
index c09276c88..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_command.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <command />
-Expect:       not bozo and entries[0]['description'] == '<command />'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;command&gt;&lt;/command&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_datagrid.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_datagrid.xml
deleted file mode 100644
index a9b1a681c..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_datagrid.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <datagrid></datagrid>
-Expect:       not bozo and entries[0]['description'] == '<datagrid></datagrid>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;datagrid&gt;&lt;/datagrid&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_datalist.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_datalist.xml
deleted file mode 100644
index d4ab94bbc..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_datalist.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <datalist></datalist>
-Expect:       not bozo and entries[0]['description'] == '<datalist></datalist>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;datalist&gt;&lt;/datalist&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_dd.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_dd.xml
deleted file mode 100644
index 99b110ae1..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_dd.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <dd></dd>
-Expect:       not bozo and entries[0]['description'] == '<dd></dd>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;dd&gt;&lt;/dd&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_del.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_del.xml
deleted file mode 100644
index 36444a5ec..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_del.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <del></del>
-Expect:       not bozo and entries[0]['description'] == '<del></del>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;del&gt;&lt;/del&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_details.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_details.xml
deleted file mode 100644
index c66b6b07d..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_details.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <details></details>
-Expect:       not bozo and entries[0]['description'] == '<details></details>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;details&gt;&lt;/details&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_dfn.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_dfn.xml
deleted file mode 100644
index d6d09546d..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_dfn.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <dfn></dfn>
-Expect:       not bozo and entries[0]['description'] == '<dfn></dfn>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;dfn&gt;&lt;/dfn&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_dialog.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_dialog.xml
deleted file mode 100644
index c0f912209..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_dialog.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <dialog></dialog>
-Expect:       not bozo and entries[0]['description'] == '<dialog></dialog>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;dialog&gt;&lt;/dialog&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_dir.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_dir.xml
deleted file mode 100644
index 55e74651c..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_dir.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <dir></dir>
-Expect:       not bozo and entries[0]['description'] == '<dir></dir>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;dir&gt;&lt;/dir&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_div.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_div.xml
deleted file mode 100644
index aecbff335..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_div.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <div></div>
-Expect:       not bozo and entries[0]['description'] == '<div></div>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;div&gt;&lt;/div&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_dl.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_dl.xml
deleted file mode 100644
index bd14c61c8..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_dl.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <dl></dl>
-Expect:       not bozo and entries[0]['description'] == '<dl></dl>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;dl&gt;&lt;/dl&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_dt.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_dt.xml
deleted file mode 100644
index 9cb828c66..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_dt.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <dt></dt>
-Expect:       not bozo and entries[0]['description'] == '<dt></dt>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;dt&gt;&lt;/dt&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_em.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_em.xml
deleted file mode 100644
index 1fad48eda..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_em.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <em></em>
-Expect:       not bozo and entries[0]['description'] == '<em></em>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;em&gt;&lt;/em&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_event-source.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_event-source.xml
deleted file mode 100644
index 693381fc9..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_event-source.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <event-source></event-source>
-Expect:       not bozo and entries[0]['description'] == '<event-source></event-source>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;event-source&gt;&lt;/event-source&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_fieldset.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_fieldset.xml
deleted file mode 100644
index 489fc29db..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_fieldset.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <fieldset></fieldset>
-Expect:       not bozo and entries[0]['description'] == '<fieldset></fieldset>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;fieldset&gt;&lt;/fieldset&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_figure.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_figure.xml
deleted file mode 100644
index 0314699c1..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_figure.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <figure></figure>
-Expect:       not bozo and entries[0]['description'] == '<figure></figure>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;figure&gt;&lt;/figure&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_font.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_font.xml
deleted file mode 100644
index 4356a897c..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_font.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <font></font>
-Expect:       not bozo and entries[0]['description'] == '<font></font>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;font&gt;&lt;/font&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_footer.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_footer.xml
deleted file mode 100644
index 05fddcfaf..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_footer.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <footer></footer>
-Expect:       not bozo and entries[0]['description'] == '<footer></footer>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;footer&gt;&lt;/footer&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_form.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_form.xml
deleted file mode 100644
index b2795de9d..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_form.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <form></form>
-Expect:       not bozo and entries[0]['description'] == '<form></form>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;form&gt;&lt;/form&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_h1.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_h1.xml
deleted file mode 100644
index 792d84384..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_h1.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <h1></h1>
-Expect:       not bozo and entries[0]['description'] == '<h1></h1>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;h1&gt;&lt;/h1&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_h2.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_h2.xml
deleted file mode 100644
index 1e559c17b..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_h2.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <h2></h2>
-Expect:       not bozo and entries[0]['description'] == '<h2></h2>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;h2&gt;&lt;/h2&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_h3.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_h3.xml
deleted file mode 100644
index d778b68ac..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_h3.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <h3></h3>
-Expect:       not bozo and entries[0]['description'] == '<h3></h3>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;h3&gt;&lt;/h3&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_h4.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_h4.xml
deleted file mode 100644
index 736e40d0c..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_h4.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <h4></h4>
-Expect:       not bozo and entries[0]['description'] == '<h4></h4>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;h4&gt;&lt;/h4&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_h5.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_h5.xml
deleted file mode 100644
index 44d0cece3..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_h5.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <h5></h5>
-Expect:       not bozo and entries[0]['description'] == '<h5></h5>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;h5&gt;&lt;/h5&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_h6.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_h6.xml
deleted file mode 100644
index e50a6a17b..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_h6.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <h6></h6>
-Expect:       not bozo and entries[0]['description'] == '<h6></h6>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;h6&gt;&lt;/h6&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_header.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_header.xml
deleted file mode 100644
index c6e124dc6..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_header.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <header></header>
-Expect:       not bozo and entries[0]['description'] == '<header></header>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;header&gt;&lt;/header&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_hr.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_hr.xml
deleted file mode 100644
index 9d960505a..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_hr.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <hr></hr>
-Expect:       not bozo and entries[0]['description'] == '<hr />'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;hr&gt;&lt;/hr&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_i.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_i.xml
deleted file mode 100644
index 6d61b4613..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_i.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <i></i>
-Expect:       not bozo and entries[0]['description'] == '<i></i>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;i&gt;&lt;/i&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_img.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_img.xml
deleted file mode 100644
index 87c3e14e3..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_img.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <img></img>
-Expect:       not bozo and entries[0]['description'] == '<img />'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;img&gt;&lt;/img&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_input.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_input.xml
deleted file mode 100644
index 955bcd852..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_input.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <input></input>
-Expect:       not bozo and entries[0]['description'] == '<input />'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;input&gt;&lt;/input&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_ins.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_ins.xml
deleted file mode 100644
index 75ebb8c75..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_ins.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <ins></ins>
-Expect:       not bozo and entries[0]['description'] == '<ins></ins>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;ins&gt;&lt;/ins&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_kbd.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_kbd.xml
deleted file mode 100644
index a26b8771c..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_kbd.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <kbd></kbd>
-Expect:       not bozo and entries[0]['description'] == '<kbd></kbd>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;kbd&gt;&lt;/kbd&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_keygen.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_keygen.xml
deleted file mode 100644
index e86b15f5e..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_keygen.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <keygen />
-Expect:       not bozo and entries[0]['description'] == '<keygen />'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;keygen&gt;&lt;/keygen&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_label.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_label.xml
deleted file mode 100644
index 64379d86f..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_label.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <label></label>
-Expect:       not bozo and entries[0]['description'] == '<label></label>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;label&gt;&lt;/label&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_legend.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_legend.xml
deleted file mode 100644
index c858b6fd2..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_legend.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <legend></legend>
-Expect:       not bozo and entries[0]['description'] == '<legend></legend>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;legend&gt;&lt;/legend&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_li.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_li.xml
deleted file mode 100644
index 212ed94cd..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_li.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <li></li>
-Expect:       not bozo and entries[0]['description'] == '<li></li>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;li&gt;&lt;/li&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_m.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_m.xml
deleted file mode 100644
index 0b14b58f8..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_m.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <m></m>
-Expect:       not bozo and entries[0]['description'] == '<m></m>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;m&gt;&lt;/m&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_map.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_map.xml
deleted file mode 100644
index 3f8835a0f..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_map.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <map></map>
-Expect:       not bozo and entries[0]['description'] == '<map></map>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;map&gt;&lt;/map&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_menu.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_menu.xml
deleted file mode 100644
index 3ecc3a214..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_menu.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <menu></menu>
-Expect:       not bozo and entries[0]['description'] == '<menu></menu>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;menu&gt;&lt;/menu&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_meter.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_meter.xml
deleted file mode 100644
index d263e8aa0..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_meter.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <meter></meter>
-Expect:       not bozo and entries[0]['description'] == '<meter></meter>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;meter&gt;&lt;/meter&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_multicol.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_multicol.xml
deleted file mode 100644
index 96c65fbc8..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_multicol.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <multicol></multicol>
-Expect:       not bozo and entries[0]['description'] == '<multicol></multicol>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;multicol&gt;&lt;/multicol&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_nav.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_nav.xml
deleted file mode 100644
index 0a4be553b..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_nav.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <nav></nav>
-Expect:       not bozo and entries[0]['description'] == '<nav></nav>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;nav&gt;&lt;/nav&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_nextid.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_nextid.xml
deleted file mode 100644
index 83ac0b543..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_nextid.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <nextid></nextid>
-Expect:       not bozo and entries[0]['description'] == '<nextid></nextid>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;nextid&gt;&lt;/nextid&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_noscript.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_noscript.xml
deleted file mode 100644
index 4d53a0804..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_noscript.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <noscript></noscript>
-Expect:       not bozo and entries[0]['description'] == '<noscript></noscript>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;noscript&gt;&lt;/noscript&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_ol.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_ol.xml
deleted file mode 100644
index d41750ea7..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_ol.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <ol></ol>
-Expect:       not bozo and entries[0]['description'] == '<ol></ol>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;ol&gt;&lt;/ol&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_optgroup.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_optgroup.xml
deleted file mode 100644
index 2ed4a5b34..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_optgroup.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <optgroup></optgroup>
-Expect:       not bozo and entries[0]['description'] == '<optgroup></optgroup>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;optgroup&gt;&lt;/optgroup&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_option.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_option.xml
deleted file mode 100644
index 944a0897c..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_option.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <option></option>
-Expect:       not bozo and entries[0]['description'] == '<option></option>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;option&gt;&lt;/option&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_output.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_output.xml
deleted file mode 100644
index bd6d2399b..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_output.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <output></output>
-Expect:       not bozo and entries[0]['description'] == '<output></output>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;output&gt;&lt;/output&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_p.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_p.xml
deleted file mode 100644
index ad67e0c72..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_p.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <p></p>
-Expect:       not bozo and entries[0]['description'] == '<p></p>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;p&gt;&lt;/p&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_pre.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_pre.xml
deleted file mode 100644
index c6da1b86a..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_pre.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <pre></pre>
-Expect:       not bozo and entries[0]['description'] == '<pre></pre>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;pre&gt;&lt;/pre&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_progress.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_progress.xml
deleted file mode 100644
index 7b335e940..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_progress.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <progress></progress>
-Expect:       not bozo and entries[0]['description'] == '<progress></progress>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;progress&gt;&lt;/progress&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_q.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_q.xml
deleted file mode 100644
index 95958d29d..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_q.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <q></q>
-Expect:       not bozo and entries[0]['description'] == '<q></q>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;q&gt;&lt;/q&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_s.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_s.xml
deleted file mode 100644
index 6a5e91181..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_s.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <s></s>
-Expect:       not bozo and entries[0]['description'] == '<s></s>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;s&gt;&lt;/s&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_samp.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_samp.xml
deleted file mode 100644
index ededff49a..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_samp.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <samp></samp>
-Expect:       not bozo and entries[0]['description'] == '<samp></samp>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;samp&gt;&lt;/samp&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_section.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_section.xml
deleted file mode 100644
index 97044eb32..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_section.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <section></section>
-Expect:       not bozo and entries[0]['description'] == '<section></section>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;section&gt;&lt;/section&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_select.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_select.xml
deleted file mode 100644
index 2f8091cb8..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_select.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <select></select>
-Expect:       not bozo and entries[0]['description'] == '<select></select>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;select&gt;&lt;/select&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_small.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_small.xml
deleted file mode 100644
index 3ec2a3ac2..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_small.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <small></small>
-Expect:       not bozo and entries[0]['description'] == '<small></small>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;small&gt;&lt;/small&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_sound.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_sound.xml
deleted file mode 100644
index d65966fb6..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_sound.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <sound></sound>
-Expect:       not bozo and entries[0]['description'] == '<sound></sound>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;sound&gt;&lt;/sound&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_source.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_source.xml
deleted file mode 100644
index 87e924859..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_source.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <source />
-Expect:       not bozo and entries[0]['description'] == '<source />'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;source&gt;&lt;/source&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_spacer.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_spacer.xml
deleted file mode 100644
index 537b415fb..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_spacer.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <spacer></spacer>
-Expect:       not bozo and entries[0]['description'] == '<spacer></spacer>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;spacer&gt;&lt;/spacer&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_span.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_span.xml
deleted file mode 100644
index d1f19a145..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_span.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <span></span>
-Expect:       not bozo and entries[0]['description'] == '<span></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_strike.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_strike.xml
deleted file mode 100644
index 0185a3d05..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_strike.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <strike></strike>
-Expect:       not bozo and entries[0]['description'] == '<strike></strike>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;strike&gt;&lt;/strike&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_strong.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_strong.xml
deleted file mode 100644
index b931d2702..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_strong.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <strong></strong>
-Expect:       not bozo and entries[0]['description'] == '<strong></strong>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;strong&gt;&lt;/strong&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_sub.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_sub.xml
deleted file mode 100644
index 578c437b4..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_sub.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <sub></sub>
-Expect:       not bozo and entries[0]['description'] == '<sub></sub>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;sub&gt;&lt;/sub&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_sup.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_sup.xml
deleted file mode 100644
index 3e90091cf..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_sup.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <sup></sup>
-Expect:       not bozo and entries[0]['description'] == '<sup></sup>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;sup&gt;&lt;/sup&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_table.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_table.xml
deleted file mode 100644
index d23afb57f..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_table.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <table></table>
-Expect:       not bozo and entries[0]['description'] == '<table></table>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;table&gt;&lt;/table&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_tbody.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_tbody.xml
deleted file mode 100644
index 09d43dae0..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_tbody.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <tbody></tbody>
-Expect:       not bozo and entries[0]['description'] == '<tbody></tbody>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;tbody&gt;&lt;/tbody&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_td.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_td.xml
deleted file mode 100644
index 09d4ccdd4..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_td.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <td></td>
-Expect:       not bozo and entries[0]['description'] == '<td></td>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;td&gt;&lt;/td&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_textarea.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_textarea.xml
deleted file mode 100644
index b2a6758c2..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_textarea.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <textarea></textarea>
-Expect:       not bozo and entries[0]['description'] == '<textarea></textarea>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;textarea&gt;&lt;/textarea&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_tfoot.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_tfoot.xml
deleted file mode 100644
index 3ada9d6fb..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_tfoot.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <tfoot></tfoot>
-Expect:       not bozo and entries[0]['description'] == '<tfoot></tfoot>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;tfoot&gt;&lt;/tfoot&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_th.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_th.xml
deleted file mode 100644
index 5441dac47..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_th.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <th></th>
-Expect:       not bozo and entries[0]['description'] == '<th></th>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;th&gt;&lt;/th&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_thead.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_thead.xml
deleted file mode 100644
index 317100db1..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_thead.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <thead></thead>
-Expect:       not bozo and entries[0]['description'] == '<thead></thead>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;thead&gt;&lt;/thead&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_time.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_time.xml
deleted file mode 100644
index b69259925..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_time.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <time></time>
-Expect:       not bozo and entries[0]['description'] == '<time></time>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;time&gt;&lt;/time&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_tr.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_tr.xml
deleted file mode 100644
index 2b83aace1..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_tr.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <tr></tr>
-Expect:       not bozo and entries[0]['description'] == '<tr></tr>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;tr&gt;&lt;/tr&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_tt.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_tt.xml
deleted file mode 100644
index e23719e4e..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_tt.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <tt></tt>
-Expect:       not bozo and entries[0]['description'] == '<tt></tt>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;tt&gt;&lt;/tt&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_u.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_u.xml
deleted file mode 100644
index dd85877ca..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_u.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <u></u>
-Expect:       not bozo and entries[0]['description'] == '<u></u>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;u&gt;&lt;/u&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_ul.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_ul.xml
deleted file mode 100644
index a6e825e2e..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_ul.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <ul></ul>
-Expect:       not bozo and entries[0]['description'] == '<ul></ul>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;ul&gt;&lt;/ul&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_var.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_var.xml
deleted file mode 100644
index e39e71235..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_var.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <var></var>
-Expect:       not bozo and entries[0]['description'] == '<var></var>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;var&gt;&lt;/var&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_video.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_video.xml
deleted file mode 100644
index c88a91c81..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_video.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <video></video>
-Expect:       not bozo and entries[0]['description'] == '<video></video>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;video&gt;&lt;/video&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/blogger_dollar_sign_in_attribute.xml b/lib/feedparser/tests/wellformed/sanitize/blogger_dollar_sign_in_attribute.xml
deleted file mode 100644
index c66295e4d..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/blogger_dollar_sign_in_attribute.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: Blogger's stupid invalid img attribute (circa August 2011)
-Expect:      not bozo and entries[0]['content'][0]['value'] == u'<img border="0" src="http://site.invalid/img.jpg" />'
--->
-<feed xmlns='http://www.w3.org/2005/Atom'>
-    <entry>
-        <content type='html'>
-            &lt;img border="0" i$="true" src="http://site.invalid/img.jpg" /&gt;
-        </content>
-    </entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_content_applet.xml b/lib/feedparser/tests/wellformed/sanitize/entry_content_applet.xml
deleted file mode 100644
index d2c314373..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_content_applet.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry content contains applet
-Expect:      not bozo and entries[0]['content'][0]['value'] == u'safe <b>description</b>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<content type="text/html" mode="escaped">safe&lt;applet code="foo.class" codebase="http://example.com/">&lt;/applet> &lt;b>description&lt;/b></content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_content_blink.xml b/lib/feedparser/tests/wellformed/sanitize/entry_content_blink.xml
deleted file mode 100644
index 64f9e5749..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_content_blink.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry content contains embed
-Expect:      not bozo and entries[0]['content'][0]['value'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<content type="text/html" mode="escaped">&lt;blink>safe&lt;/blink> description</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_content_crazy.xml b/lib/feedparser/tests/wellformed/sanitize/entry_content_crazy.xml
deleted file mode 100644
index 9260c1ca4..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_content_crazy.xml
+++ /dev/null
@@ -1,75 +0,0 @@
-<!--
-Description: entry content is crazy
-Expect:      not bozo and entries[0]['content'][0]['value'] == u'Crazy HTML -' + u'- Can Your Regex Parse This?\n\n\n\n<!-' + u'- <script> -' + u'->\n\n<!-' + u'- \n\t<script> \n-' + u'->\n\n\n\nfunction executeMe()\n{\n\n\n\n\n/* \n<h1>Did The Javascript Execute?</h1>\n<div>\nI will execute here, too, if you mouse over me\n</div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<content type="text/html" mode="escaped">
-&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-&lt;html xmlns="http://www.w3.org/1999/xhtml">
-&lt;head>
-&lt;title>Crazy HTML -- Can Your Regex Parse This?&lt;/title>
-
-&lt;/head>
-&lt;body    notRealAttribute="value"onload="executeMe();"foo="bar"
-
->
-&lt;!-- &lt;script> -->
-
-&lt;!-- 
-	&lt;script> 
--->
-
-&lt;/script>
-
-
-&lt;script
-
-
->
-
-function executeMe()
-{
-
-
-
-
-/* &lt;script> 
-function am_i_javascript()
-{
-	var str = "Some innocuously commented out stuff";
-}
-&lt; /script>
-*/
-
-	
-	
-	
-	
-	
-	
-	
-	
-	alert("Executed");
-}
-
-                                   &lt;/script
-
-
-
->
-&lt;h1>Did The Javascript Execute?&lt;/h1>
-&lt;div notRealAttribute="value
-"onmouseover="
-executeMe();
-"foo="bar">
-I will execute here, too, if you mouse over me
-&lt;/div>
-
-&lt;/body>
-
-&lt;/html>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_content_embed.xml b/lib/feedparser/tests/wellformed/sanitize/entry_content_embed.xml
deleted file mode 100644
index d8ff3775f..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_content_embed.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry content contains embed
-Expect:      not bozo and entries[0]['content'][0]['value'] == u'safe <b>description</b>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<content type="text/html" mode="escaped">safe&lt;embed src="http://example.com/"> &lt;b>description&lt;/b></content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_content_frame.xml b/lib/feedparser/tests/wellformed/sanitize/entry_content_frame.xml
deleted file mode 100644
index cfc75d170..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_content_frame.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry content contains frameset
-Expect:      not bozo and entries[0]['content'][0]['value'] == u'safe <b>description</b>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<content type="text/html" mode="escaped">safe&lt;frameset rows="*">&lt;frame src="http://example.com/">&lt;/frameset> &lt;b>description&lt;/b></content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_content_iframe.xml b/lib/feedparser/tests/wellformed/sanitize/entry_content_iframe.xml
deleted file mode 100644
index fc2a07be8..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_content_iframe.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry content contains iframe
-Expect:      not bozo and entries[0]['content'][0]['value'] == u'safe <b>description</b>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<content type="text/html" mode="escaped">safe&lt;iframe src="http://example.com/"> &lt;b>description&lt;/b>&lt;/iframe></content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_content_link.xml b/lib/feedparser/tests/wellformed/sanitize/entry_content_link.xml
deleted file mode 100644
index 2672577f2..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_content_link.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry content contains link
-Expect:      not bozo and entries[0]['content'][0]['value'] == u'safe <b>description</b>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<content type="text/html" mode="escaped">safe&lt;link rel="stylesheet" type="text/css" href="http://example.com/evil.css"> &lt;b>description&lt;/b></content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_content_meta.xml b/lib/feedparser/tests/wellformed/sanitize/entry_content_meta.xml
deleted file mode 100644
index d22be265f..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_content_meta.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry content contains meta
-Expect:      not bozo and entries[0]['content'][0]['value'] == u'safe <b>description</b>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<content type="text/html" mode="escaped">safe&lt;meta http-equiv="Refresh" content="0; URL=http://example.com/"> &lt;b>description&lt;/b></content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_content_object.xml b/lib/feedparser/tests/wellformed/sanitize/entry_content_object.xml
deleted file mode 100644
index 24542192b..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_content_object.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry content contains object
-Expect:      not bozo and entries[0]['content'][0]['value'] == u'safe <b>description</b>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<content type="text/html" mode="escaped">safe&lt;object classid="clsid:C932BA85-4374-101B-A56C-00AA003668DC"> &lt;b>description&lt;/b></content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_content_onabort.xml b/lib/feedparser/tests/wellformed/sanitize/entry_content_onabort.xml
deleted file mode 100644
index 55ddeb5f3..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_content_onabort.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry content contains onabort
-Expect:      not bozo and entries[0]['content'][0]['value'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<content type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onabort="location.href='http://www.ragingplatypus.com/';" /></content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_content_onblur.xml b/lib/feedparser/tests/wellformed/sanitize/entry_content_onblur.xml
deleted file mode 100644
index a45a40c8b..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_content_onblur.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry content contains onblur
-Expect:      not bozo and entries[0]['content'][0]['value'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<content type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onblur="location.href='http://www.ragingplatypus.com/';" /></content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_content_onchange.xml b/lib/feedparser/tests/wellformed/sanitize/entry_content_onchange.xml
deleted file mode 100644
index 3d4c3edea..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_content_onchange.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry content contains onchange
-Expect:      not bozo and entries[0]['content'][0]['value'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<content type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onchange="location.href='http://www.ragingplatypus.com/';" /></content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_content_onclick.xml b/lib/feedparser/tests/wellformed/sanitize/entry_content_onclick.xml
deleted file mode 100644
index 10f544c38..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_content_onclick.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry content contains onclick
-Expect:      not bozo and entries[0]['content'][0]['value'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<content type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onclick="location.href='http://www.ragingplatypus.com/';" /></content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_content_ondblclick.xml b/lib/feedparser/tests/wellformed/sanitize/entry_content_ondblclick.xml
deleted file mode 100644
index 4817e3f9f..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_content_ondblclick.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry content contains ondblclick
-Expect:      not bozo and entries[0]['content'][0]['value'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<content type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" ondblclick="location.href='http://www.ragingplatypus.com/';" /></content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_content_onerror.xml b/lib/feedparser/tests/wellformed/sanitize/entry_content_onerror.xml
deleted file mode 100644
index 1d0bd0428..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_content_onerror.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry content contains onerror
-Expect:      not bozo and entries[0]['content'][0]['value'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<content type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onerror="location.href='http://www.ragingplatypus.com/';" /></content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_content_onfocus.xml b/lib/feedparser/tests/wellformed/sanitize/entry_content_onfocus.xml
deleted file mode 100644
index b547ab437..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_content_onfocus.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry content contains onfocus
-Expect:      not bozo and entries[0]['content'][0]['value'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<content type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onfocus="location.href='http://www.ragingplatypus.com/';" /></content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_content_onkeydown.xml b/lib/feedparser/tests/wellformed/sanitize/entry_content_onkeydown.xml
deleted file mode 100644
index e3cc00642..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_content_onkeydown.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry content contains onkeydown
-Expect:      not bozo and entries[0]['content'][0]['value'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<content type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onkeydown="location.href='http://www.ragingplatypus.com/';" /></content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_content_onkeypress.xml b/lib/feedparser/tests/wellformed/sanitize/entry_content_onkeypress.xml
deleted file mode 100644
index 2e622b80b..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_content_onkeypress.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry content contains onkeypress
-Expect:      not bozo and entries[0]['content'][0]['value'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<content type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onkeypress="location.href='http://www.ragingplatypus.com/';" /></content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_content_onkeyup.xml b/lib/feedparser/tests/wellformed/sanitize/entry_content_onkeyup.xml
deleted file mode 100644
index 668b8fb99..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_content_onkeyup.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry content contains onkeyup
-Expect:      not bozo and entries[0]['content'][0]['value'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<content type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onkeyup="location.href='http://www.ragingplatypus.com/';" /></content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_content_onload.xml b/lib/feedparser/tests/wellformed/sanitize/entry_content_onload.xml
deleted file mode 100644
index 11a25672e..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_content_onload.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry content contains onload
-Expect:      not bozo and entries[0]['content'][0]['value'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<content type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onload="location.href='http://www.ragingplatypus.com/';" /></content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_content_onmousedown.xml b/lib/feedparser/tests/wellformed/sanitize/entry_content_onmousedown.xml
deleted file mode 100644
index 546ae7cc9..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_content_onmousedown.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry content contains onmousedown
-Expect:      not bozo and entries[0]['content'][0]['value'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<content type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmousedown="location.href='http://www.ragingplatypus.com/';" /></content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_content_onmouseout.xml b/lib/feedparser/tests/wellformed/sanitize/entry_content_onmouseout.xml
deleted file mode 100644
index 3c34adbb9..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_content_onmouseout.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry content contains onmouseout
-Expect:      not bozo and entries[0]['content'][0]['value'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<content type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmouseout="location.href='http://www.ragingplatypus.com/';" /></content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_content_onmouseover.xml b/lib/feedparser/tests/wellformed/sanitize/entry_content_onmouseover.xml
deleted file mode 100644
index baccde4e9..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_content_onmouseover.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry content contains onmouseover
-Expect:      not bozo and entries[0]['content'][0]['value'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<content type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmouseover="location.href='http://www.ragingplatypus.com/';" /></content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_content_onmouseup.xml b/lib/feedparser/tests/wellformed/sanitize/entry_content_onmouseup.xml
deleted file mode 100644
index 5c11c082a..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_content_onmouseup.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry content contains onmouseup
-Expect:      not bozo and entries[0]['content'][0]['value'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<content type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmouseup="location.href='http://www.ragingplatypus.com/';" /></content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_content_onreset.xml b/lib/feedparser/tests/wellformed/sanitize/entry_content_onreset.xml
deleted file mode 100644
index 5a69ab580..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_content_onreset.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry content contains onreset
-Expect:      not bozo and entries[0]['content'][0]['value'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<content type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onreset="location.href='http://www.ragingplatypus.com/';" /></content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_content_onresize.xml b/lib/feedparser/tests/wellformed/sanitize/entry_content_onresize.xml
deleted file mode 100644
index ffa3bff69..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_content_onresize.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry content contains onresize
-Expect:      not bozo and entries[0]['content'][0]['value'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<content type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onresize="location.href='http://www.ragingplatypus.com/';" /></content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_content_onsubmit.xml b/lib/feedparser/tests/wellformed/sanitize/entry_content_onsubmit.xml
deleted file mode 100644
index c39468496..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_content_onsubmit.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry content contains onsubmit
-Expect:      not bozo and entries[0]['content'][0]['value'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<content type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onsubmit="location.href='http://www.ragingplatypus.com/';" /></content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_content_onunload.xml b/lib/feedparser/tests/wellformed/sanitize/entry_content_onunload.xml
deleted file mode 100644
index 3f42aa36f..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_content_onunload.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry content contains onunload
-Expect:      not bozo and entries[0]['content'][0]['value'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<content type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onunload="location.href='http://www.ragingplatypus.com/';" /></content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_content_script.xml b/lib/feedparser/tests/wellformed/sanitize/entry_content_script.xml
deleted file mode 100644
index e975dad56..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_content_script.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry content contains script
-Expect:      not bozo and entries[0]['content'][0]['value'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<content type="text/html" mode="escaped">safe&lt;script type="text/javascript">location.href='http:/'+'/example.com/';&lt;/script> description</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_content_script_base64.xml b/lib/feedparser/tests/wellformed/sanitize/entry_content_script_base64.xml
deleted file mode 100644
index 210eb6ca9..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_content_script_base64.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<!--
-Description: entry content contains script (base64)
-Expect:      not bozo and entries[0]['content'][0]['value'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<content type="text/html" mode="base64">
-c2FmZTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij5sb2NhdGlvbi5ocmVmPSdodHRwOi8n
-KycvZXhhbXBsZS5jb20vJzs8L3NjcmlwdD4gZGVzY3JpcHRpb24=
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_content_script_cdata.xml b/lib/feedparser/tests/wellformed/sanitize/entry_content_script_cdata.xml
deleted file mode 100644
index 0bb07b9f5..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_content_script_cdata.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry content contains script (cdata)
-Expect:      not bozo and entries[0]['content'][0]['value'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<content type="text/html" mode="escaped"><![CDATA[safe<script type="text/javascript">location.href='http:/'+'/example.com/';</script> description]]></content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_content_script_inline.xml b/lib/feedparser/tests/wellformed/sanitize/entry_content_script_inline.xml
deleted file mode 100644
index 9c5c62394..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_content_script_inline.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry content contains script (inline)
-Expect:      not bozo and entries[0]['content'][0]['value'] == u'<div>safe description</div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<content type="application/xhtml+xml" mode="xml"><div xmlns="http://www.w3.org/1999/xhtml">safe<script type="text/javascript">location.href='http:/'+'/example.com/';</script> description</div></content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_content_style.xml b/lib/feedparser/tests/wellformed/sanitize/entry_content_style.xml
deleted file mode 100644
index b243bf18f..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_content_style.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry content contains style
-Expect:      not bozo and entries[0]['content'][0]['value'] == u'<a href="http://www.ragingplatypus.com/" style="display: block; width: 100%; height: 100%; background-color: black; background-x: center; background-y: center;">never trust your upstream platypus</a>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<content type="text/html" mode="escaped">&lt;a href="http://www.ragingplatypus.com/" style="display:block; position:absolute; left:0; top:0; width:100%; height:100%; z-index:1; background-color:black; background-image:url(http://www.ragingplatypus.com/i/cam-full.jpg); background-x:center; background-y:center; background-repeat:repeat;">never trust your upstream platypus&lt;/a></content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_content_style_tag.xml b/lib/feedparser/tests/wellformed/sanitize/entry_content_style_tag.xml
deleted file mode 100644
index 6b38beb9d..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_content_style_tag.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry content contains applet
-Expect:      not bozo and entries[0]['content'][0]['value'] == u'safe <b>description</b>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<content type="text/html" mode="escaped">safe&lt;style>b {color:red}&lt;/style> &lt;b>description&lt;/b></content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_summary_applet.xml b/lib/feedparser/tests/wellformed/sanitize/entry_summary_applet.xml
deleted file mode 100644
index 4404687f2..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_summary_applet.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry summary contains applet
-Expect:      not bozo and entries[0]['summary'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<summary type="text/html" mode="escaped">safe&lt;applet code="foo.class" codebase="http://example.com/">&lt;/applet> description</summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_summary_blink.xml b/lib/feedparser/tests/wellformed/sanitize/entry_summary_blink.xml
deleted file mode 100644
index 64e95bc68..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_summary_blink.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry summary contains blink
-Expect:      not bozo and entries[0]['summary'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<summary type="text/html" mode="escaped">&lt;blink>safe&lt;/blink> description</summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_summary_crazy.xml b/lib/feedparser/tests/wellformed/sanitize/entry_summary_crazy.xml
deleted file mode 100644
index cdc2ad176..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_summary_crazy.xml
+++ /dev/null
@@ -1,75 +0,0 @@
-<!--
-Description: entry summary is crazy
-Expect:      not bozo and entries[0]['summary'] == u'Crazy HTML -' + u'- Can Your Regex Parse This?\n\n\n\n<!-' + u'- <script> -' + u'->\n\n<!-' + u'- \n\t<script> \n-' + u'->\n\n\n\nfunction executeMe()\n{\n\n\n\n\n/* \n<h1>Did The Javascript Execute?</h1>\n<div>\nI will execute here, too, if you mouse over me\n</div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<summary type="text/html" mode="escaped">
-&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-&lt;html xmlns="http://www.w3.org/1999/xhtml">
-&lt;head>
-&lt;title>Crazy HTML -- Can Your Regex Parse This?&lt;/title>
-
-&lt;/head>
-&lt;body    notRealAttribute="value"onload="executeMe();"foo="bar"
-
->
-&lt;!-- &lt;script> -->
-
-&lt;!-- 
-	&lt;script> 
--->
-
-&lt;/script>
-
-
-&lt;script
-
-
->
-
-function executeMe()
-{
-
-
-
-
-/* &lt;script> 
-function am_i_javascript()
-{
-	var str = "Some innocuously commented out stuff";
-}
-&lt; /script>
-*/
-
-	
-	
-	
-	
-	
-	
-	
-	
-	alert("Executed");
-}
-
-                                   &lt;/script
-
-
-
->
-&lt;h1>Did The Javascript Execute?&lt;/h1>
-&lt;div notRealAttribute="value
-"onmouseover="
-executeMe();
-"foo="bar">
-I will execute here, too, if you mouse over me
-&lt;/div>
-
-&lt;/body>
-
-&lt;/html>
-</summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_summary_embed.xml b/lib/feedparser/tests/wellformed/sanitize/entry_summary_embed.xml
deleted file mode 100644
index f7403ef99..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_summary_embed.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry summary contains embed
-Expect:      not bozo and entries[0]['summary'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<summary type="text/html" mode="escaped">safe&lt;embed src="http://example.com/"> description</summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_summary_frame.xml b/lib/feedparser/tests/wellformed/sanitize/entry_summary_frame.xml
deleted file mode 100644
index a59a2d043..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_summary_frame.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry summary contains frame
-Expect:      not bozo and entries[0]['summary'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<summary type="text/html" mode="escaped">safe&lt;frameset rows="*">&lt;frame src="http://example.com/">&lt;/frameset> description</summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_summary_iframe.xml b/lib/feedparser/tests/wellformed/sanitize/entry_summary_iframe.xml
deleted file mode 100644
index a93899aad..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_summary_iframe.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry summary contains iframe
-Expect:      not bozo and entries[0]['summary'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<summary type="text/html" mode="escaped">safe&lt;iframe src="http://example.com/"> description&lt;/iframe></summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_summary_link.xml b/lib/feedparser/tests/wellformed/sanitize/entry_summary_link.xml
deleted file mode 100644
index 4db83dbe3..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_summary_link.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry summary contains link
-Expect:      not bozo and entries[0]['summary'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<summary type="text/html" mode="escaped">safe&lt;link rel="stylesheet" type="text/css" href="http://example.com/evil.css"> description</summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_summary_meta.xml b/lib/feedparser/tests/wellformed/sanitize/entry_summary_meta.xml
deleted file mode 100644
index 42345e153..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_summary_meta.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry summary contains meta
-Expect:      not bozo and entries[0]['summary'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<summary type="text/html" mode="escaped">safe&lt;meta http-equiv="Refresh" content="0; URL=http://example.com/"> description</summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_summary_object.xml b/lib/feedparser/tests/wellformed/sanitize/entry_summary_object.xml
deleted file mode 100644
index f38dcb5fd..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_summary_object.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry summary contains object
-Expect:      not bozo and entries[0]['summary'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<summary type="text/html" mode="escaped">safe&lt;object classid="clsid:C932BA85-4374-101B-A56C-00AA003668DC"> description</summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_summary_onabort.xml b/lib/feedparser/tests/wellformed/sanitize/entry_summary_onabort.xml
deleted file mode 100644
index 97c867638..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_summary_onabort.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry summary contains onabort
-Expect:      not bozo and entries[0]['summary'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<summary type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onabort="location.href='http://www.ragingplatypus.com/';" /></summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_summary_onblur.xml b/lib/feedparser/tests/wellformed/sanitize/entry_summary_onblur.xml
deleted file mode 100644
index 1bc3f8302..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_summary_onblur.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry summary contains onblur
-Expect:      not bozo and entries[0]['summary'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<summary type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onblur="location.href='http://www.ragingplatypus.com/';" /></summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_summary_onchange.xml b/lib/feedparser/tests/wellformed/sanitize/entry_summary_onchange.xml
deleted file mode 100644
index 553aa3110..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_summary_onchange.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry summary contains onchange
-Expect:      not bozo and entries[0]['summary'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<summary type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onchange="location.href='http://www.ragingplatypus.com/';" /></summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_summary_onclick.xml b/lib/feedparser/tests/wellformed/sanitize/entry_summary_onclick.xml
deleted file mode 100644
index b5d1d4e1b..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_summary_onclick.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry summary contains onclick
-Expect:      not bozo and entries[0]['summary'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<summary type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onclick="location.href='http://www.ragingplatypus.com/';" /></summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_summary_ondblclick.xml b/lib/feedparser/tests/wellformed/sanitize/entry_summary_ondblclick.xml
deleted file mode 100644
index fc3a61a2f..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_summary_ondblclick.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry summary contains ondblclick
-Expect:      not bozo and entries[0]['summary'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<summary type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" ondblclick="location.href='http://www.ragingplatypus.com/';" /></summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_summary_onerror.xml b/lib/feedparser/tests/wellformed/sanitize/entry_summary_onerror.xml
deleted file mode 100644
index 60d46a18a..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_summary_onerror.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry summary contains onerror
-Expect:      not bozo and entries[0]['summary'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<summary type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onerror="location.href='http://www.ragingplatypus.com/';" /></summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_summary_onfocus.xml b/lib/feedparser/tests/wellformed/sanitize/entry_summary_onfocus.xml
deleted file mode 100644
index 6f47ec69b..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_summary_onfocus.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry summary contains onfocus
-Expect:      not bozo and entries[0]['summary'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<summary type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onfocus="location.href='http://www.ragingplatypus.com/';" /></summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_summary_onkeydown.xml b/lib/feedparser/tests/wellformed/sanitize/entry_summary_onkeydown.xml
deleted file mode 100644
index 7eaa42c84..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_summary_onkeydown.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry summary contains onkeydown
-Expect:      not bozo and entries[0]['summary'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<summary type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onkeydown="location.href='http://www.ragingplatypus.com/';" /></summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_summary_onkeypress.xml b/lib/feedparser/tests/wellformed/sanitize/entry_summary_onkeypress.xml
deleted file mode 100644
index 8085f65d4..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_summary_onkeypress.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry summary contains onkeypress
-Expect:      not bozo and entries[0]['summary'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<summary type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onkeypress="location.href='http://www.ragingplatypus.com/';" /></summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_summary_onkeyup.xml b/lib/feedparser/tests/wellformed/sanitize/entry_summary_onkeyup.xml
deleted file mode 100644
index 557422ee0..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_summary_onkeyup.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry summary contains onkeyup
-Expect:      not bozo and entries[0]['summary'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<summary type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onkeyup="location.href='http://www.ragingplatypus.com/';" /></summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_summary_onload.xml b/lib/feedparser/tests/wellformed/sanitize/entry_summary_onload.xml
deleted file mode 100644
index 04323bcef..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_summary_onload.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry summary contains onload
-Expect:      not bozo and entries[0]['summary'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<summary type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onload="location.href='http://www.ragingplatypus.com/';" /></summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_summary_onmousedown.xml b/lib/feedparser/tests/wellformed/sanitize/entry_summary_onmousedown.xml
deleted file mode 100644
index bb74f81c1..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_summary_onmousedown.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry summary contains onmousedown
-Expect:      not bozo and entries[0]['summary'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<summary type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmousedown="location.href='http://www.ragingplatypus.com/';" /></summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_summary_onmouseout.xml b/lib/feedparser/tests/wellformed/sanitize/entry_summary_onmouseout.xml
deleted file mode 100644
index 3c60df977..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_summary_onmouseout.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry summary contains onmouseout
-Expect:      not bozo and entries[0]['summary'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<summary type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmouseout="location.href='http://www.ragingplatypus.com/';" /></summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_summary_onmouseover.xml b/lib/feedparser/tests/wellformed/sanitize/entry_summary_onmouseover.xml
deleted file mode 100644
index f0732d052..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_summary_onmouseover.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry summary contains onmouseover
-Expect:      not bozo and entries[0]['summary'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<summary type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmouseover="location.href='http://www.ragingplatypus.com/';" /></summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_summary_onmouseup.xml b/lib/feedparser/tests/wellformed/sanitize/entry_summary_onmouseup.xml
deleted file mode 100644
index 8b28f6dca..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_summary_onmouseup.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry summary contains onmouseup
-Expect:      not bozo and entries[0]['summary'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<summary type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmouseup="location.href='http://www.ragingplatypus.com/';" /></summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_summary_onreset.xml b/lib/feedparser/tests/wellformed/sanitize/entry_summary_onreset.xml
deleted file mode 100644
index 997cfc4b2..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_summary_onreset.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry summary contains onreset
-Expect:      not bozo and entries[0]['summary'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<summary type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onreset="location.href='http://www.ragingplatypus.com/';" /></summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_summary_onresize.xml b/lib/feedparser/tests/wellformed/sanitize/entry_summary_onresize.xml
deleted file mode 100644
index 9a6a84e80..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_summary_onresize.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry summary contains onresize
-Expect:      not bozo and entries[0]['summary'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<summary type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onresize="location.href='http://www.ragingplatypus.com/';" /></summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_summary_onsubmit.xml b/lib/feedparser/tests/wellformed/sanitize/entry_summary_onsubmit.xml
deleted file mode 100644
index af6682fb1..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_summary_onsubmit.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry summary contains onsubmit
-Expect:      not bozo and entries[0]['summary'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<summary type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onsubmit="location.href='http://www.ragingplatypus.com/';" /></summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_summary_onunload.xml b/lib/feedparser/tests/wellformed/sanitize/entry_summary_onunload.xml
deleted file mode 100644
index 6b1539dcd..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_summary_onunload.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry summary contains onunload
-Expect:      not bozo and entries[0]['summary'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<summary type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onunload="location.href='http://www.ragingplatypus.com/';" /></summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_summary_script.xml b/lib/feedparser/tests/wellformed/sanitize/entry_summary_script.xml
deleted file mode 100644
index 3787017e0..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_summary_script.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry summary contains script
-Expect:      not bozo and entries[0]['summary'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<summary type="text/html" mode="escaped">safe&lt;script type="text/javascript">location.href='http:/'+'/example.com/';&lt;/script> description</summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_summary_script_base64.xml b/lib/feedparser/tests/wellformed/sanitize/entry_summary_script_base64.xml
deleted file mode 100644
index 61c013cc2..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_summary_script_base64.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<!--
-Description: entry summary contains script (base64)
-Expect:      not bozo and entries[0]['summary'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<summary type="text/html" mode="base64">
-c2FmZTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij5sb2NhdGlvbi5ocmVmPSdodHRwOi8n
-KycvZXhhbXBsZS5jb20vJzs8L3NjcmlwdD4gZGVzY3JpcHRpb24=
-</summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_summary_script_cdata.xml b/lib/feedparser/tests/wellformed/sanitize/entry_summary_script_cdata.xml
deleted file mode 100644
index 055e36608..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_summary_script_cdata.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry summary contains script
-Expect:      not bozo and entries[0]['summary'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<summary type="text/html" mode="escaped"><![CDATA[safe<script type="text/javascript">location.href='http:/'+'/example.com/';</script> description]]></summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_summary_script_inline.xml b/lib/feedparser/tests/wellformed/sanitize/entry_summary_script_inline.xml
deleted file mode 100644
index 06d8ff9cf..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_summary_script_inline.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry summary contains script
-Expect:      not bozo and entries[0]['summary'] == u'<div>safe description</div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<summary type="application/xhtml+xml" mode="xml"><div xmlns="http://www.w3.org/1999/xhtml">safe<script type="text/javascript">location.href='http:/'+'/example.com/';</script> description</div></summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_summary_script_map_description.xml b/lib/feedparser/tests/wellformed/sanitize/entry_summary_script_map_description.xml
deleted file mode 100644
index d3ffcc910..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_summary_script_map_description.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry summary contains script (maps to description)
-Expect:      not bozo and entries[0]['description'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<summary type="text/html" mode="escaped">safe&lt;script type="text/javascript">location.href='http:/'+'/example.com/';&lt;/script> description</summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_summary_style.xml b/lib/feedparser/tests/wellformed/sanitize/entry_summary_style.xml
deleted file mode 100644
index 320de4e38..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_summary_style.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry summary contains style
-Expect:      not bozo and entries[0]['summary'] == u'<a href="http://www.ragingplatypus.com/" style="display: block; width: 100%; height: 100%; background-color: black; background-x: center; background-y: center;">never trust your upstream platypus</a>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<summary type="text/html" mode="escaped">&lt;a href="http://www.ragingplatypus.com/" style="display:block; position:absolute; left:0; top:0; width:100%; height:100%; z-index:1; background-color:black; background-image:url(http://www.ragingplatypus.com/i/cam-full.jpg); background-x:center; background-y:center; background-repeat:repeat;">never trust your upstream platypus&lt;/a></summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_title_applet.xml b/lib/feedparser/tests/wellformed/sanitize/entry_title_applet.xml
deleted file mode 100644
index 4a84cf71e..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_title_applet.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry title contains applet
-Expect:      not bozo and entries[0]['title'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<title type="text/html" mode="escaped">safe&lt;applet code="foo.class" codebase="http://www.example.com/">&lt;/applet> description</title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_title_blink.xml b/lib/feedparser/tests/wellformed/sanitize/entry_title_blink.xml
deleted file mode 100644
index d7c7618af..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_title_blink.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry title contains blink
-Expect:      not bozo and entries[0]['title'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<title type="text/html" mode="escaped">&lt;blink>safe&lt;/blink> description</title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_title_crazy.xml b/lib/feedparser/tests/wellformed/sanitize/entry_title_crazy.xml
deleted file mode 100644
index 4d6929a04..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_title_crazy.xml
+++ /dev/null
@@ -1,75 +0,0 @@
-<!--
-Description: entry title is crazy
-Expect:      not bozo and entries[0]['title'] == u'Crazy HTML -' + u'- Can Your Regex Parse This?\n\n\n\n<!-' + u'- <script> -' + u'->\n\n<!-' + u'- \n\t<script> \n-' + u'->\n\n\n\nfunction executeMe()\n{\n\n\n\n\n/* \n<h1>Did The Javascript Execute?</h1>\n<div>\nI will execute here, too, if you mouse over me\n</div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<title type="text/html" mode="escaped">
-&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-&lt;html xmlns="http://www.w3.org/1999/xhtml">
-&lt;head>
-&lt;title>Crazy HTML -- Can Your Regex Parse This?&lt;/title>
-
-&lt;/head>
-&lt;body    notRealAttribute="value"onload="executeMe();"foo="bar"
-
->
-&lt;!-- &lt;script> -->
-
-&lt;!-- 
-	&lt;script> 
--->
-
-&lt;/script>
-
-
-&lt;script
-
-
->
-
-function executeMe()
-{
-
-
-
-
-/* &lt;script> 
-function am_i_javascript()
-{
-	var str = "Some innocuously commented out stuff";
-}
-&lt; /script>
-*/
-
-	
-	
-	
-	
-	
-	
-	
-	
-	alert("Executed");
-}
-
-                                   &lt;/script
-
-
-
->
-&lt;h1>Did The Javascript Execute?&lt;/h1>
-&lt;div notRealAttribute="value
-"onmouseover="
-executeMe();
-"foo="bar">
-I will execute here, too, if you mouse over me
-&lt;/div>
-
-&lt;/body>
-
-&lt;/html>
-</title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_title_embed.xml b/lib/feedparser/tests/wellformed/sanitize/entry_title_embed.xml
deleted file mode 100644
index cc56f982d..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_title_embed.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry title contains embed
-Expect:      not bozo and entries[0]['title'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<title type="text/html" mode="escaped">safe&lt;embed src="http://www.example.com/"> description</title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_title_frame.xml b/lib/feedparser/tests/wellformed/sanitize/entry_title_frame.xml
deleted file mode 100644
index eb5f80f9f..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_title_frame.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry title contains frame
-Expect:      not bozo and entries[0]['title'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<title type="text/html" mode="escaped">safe&lt;frameset rows="*">&lt;frame src="http://example.com/">&lt;/frameset> description</title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_title_iframe.xml b/lib/feedparser/tests/wellformed/sanitize/entry_title_iframe.xml
deleted file mode 100644
index d3dd7b70c..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_title_iframe.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry title contains iframe
-Expect:      not bozo and entries[0]['title'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<title type="text/html" mode="escaped">safe&lt;iframe src="http://www.example.com/">&lt;/iframe> description</title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_title_link.xml b/lib/feedparser/tests/wellformed/sanitize/entry_title_link.xml
deleted file mode 100644
index 28fa2fa95..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_title_link.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry title contains link
-Expect:      not bozo and entries[0]['title'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<title type="text/html" mode="escaped">safe&lt;link rel="stylesheet" type="text/css" href="http://example.com/evil.css"> description</title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_title_meta.xml b/lib/feedparser/tests/wellformed/sanitize/entry_title_meta.xml
deleted file mode 100644
index c707fe2e4..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_title_meta.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry title contains meta
-Expect:      not bozo and entries[0]['title'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<title type="text/html" mode="escaped">safe&lt;meta http-equiv="Refresh" content="0; URL=http://example.com/"> description</title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_title_object.xml b/lib/feedparser/tests/wellformed/sanitize/entry_title_object.xml
deleted file mode 100644
index 06ba3788e..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_title_object.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry title contains object
-Expect:      not bozo and entries[0]['title'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<title type="text/html" mode="escaped">safe&lt;object classid="clsid:C932BA85-4374-101B-A56C-00AA003668DC"> description</title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_title_onabort.xml b/lib/feedparser/tests/wellformed/sanitize/entry_title_onabort.xml
deleted file mode 100644
index 6669690ed..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_title_onabort.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry title contains onabort
-Expect:      not bozo and entries[0]['title'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<title type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onabort="location.href='http://www.ragingplatypus.com/';" /></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_title_onblur.xml b/lib/feedparser/tests/wellformed/sanitize/entry_title_onblur.xml
deleted file mode 100644
index a5a09c9b4..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_title_onblur.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry title contains onblur
-Expect:      not bozo and entries[0]['title'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<title type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onblur="location.href='http://www.ragingplatypus.com/';" /></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_title_onchange.xml b/lib/feedparser/tests/wellformed/sanitize/entry_title_onchange.xml
deleted file mode 100644
index 9b5e22a4f..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_title_onchange.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry title contains onchange
-Expect:      not bozo and entries[0]['title'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<title type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onchange="location.href='http://www.ragingplatypus.com/';" /></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_title_onclick.xml b/lib/feedparser/tests/wellformed/sanitize/entry_title_onclick.xml
deleted file mode 100644
index 1e7c20c21..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_title_onclick.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry title contains onclick
-Expect:      not bozo and entries[0]['title'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<title type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onclick="location.href='http://www.ragingplatypus.com/';" /></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_title_ondblclick.xml b/lib/feedparser/tests/wellformed/sanitize/entry_title_ondblclick.xml
deleted file mode 100644
index 800904bb7..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_title_ondblclick.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry title contains ondblclick
-Expect:      not bozo and entries[0]['title'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<title type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" ondblclick="location.href='http://www.ragingplatypus.com/';" /></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_title_onerror.xml b/lib/feedparser/tests/wellformed/sanitize/entry_title_onerror.xml
deleted file mode 100644
index d60cc44b7..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_title_onerror.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry title contains onerror
-Expect:      not bozo and entries[0]['title'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<title type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onerror="location.href='http://www.ragingplatypus.com/';" /></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_title_onfocus.xml b/lib/feedparser/tests/wellformed/sanitize/entry_title_onfocus.xml
deleted file mode 100644
index b1218955c..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_title_onfocus.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry title contains onfocus
-Expect:      not bozo and entries[0]['title'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<title type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onfocus="location.href='http://www.ragingplatypus.com/';" /></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_title_onkeydown.xml b/lib/feedparser/tests/wellformed/sanitize/entry_title_onkeydown.xml
deleted file mode 100644
index dfd3c2279..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_title_onkeydown.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry title contains onkeydown
-Expect:      not bozo and entries[0]['title'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<title type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onkeydown="location.href='http://www.ragingplatypus.com/';" /></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_title_onkeypress.xml b/lib/feedparser/tests/wellformed/sanitize/entry_title_onkeypress.xml
deleted file mode 100644
index 5343e9480..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_title_onkeypress.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry title contains onkeypress
-Expect:      not bozo and entries[0]['title'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<title type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onkeypress="location.href='http://www.ragingplatypus.com/';" /></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_title_onkeyup.xml b/lib/feedparser/tests/wellformed/sanitize/entry_title_onkeyup.xml
deleted file mode 100644
index 587d616dd..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_title_onkeyup.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry title contains onkeyup
-Expect:      not bozo and entries[0]['title'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<title type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onkeyup="location.href='http://www.ragingplatypus.com/';" /></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_title_onload.xml b/lib/feedparser/tests/wellformed/sanitize/entry_title_onload.xml
deleted file mode 100644
index 7b71552d4..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_title_onload.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry title contains onload
-Expect:      not bozo and entries[0]['title'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<title type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onload="location.href='http://www.ragingplatypus.com/';" /></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_title_onmousedown.xml b/lib/feedparser/tests/wellformed/sanitize/entry_title_onmousedown.xml
deleted file mode 100644
index 69681fd90..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_title_onmousedown.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry title contains onmousedown
-Expect:      not bozo and entries[0]['title'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<title type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmousedown="location.href='http://www.ragingplatypus.com/';" /></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_title_onmouseout.xml b/lib/feedparser/tests/wellformed/sanitize/entry_title_onmouseout.xml
deleted file mode 100644
index fc25b8a88..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_title_onmouseout.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry title contains onmouseout
-Expect:      not bozo and entries[0]['title'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<title type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmouseout="location.href='http://www.ragingplatypus.com/';" /></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_title_onmouseover.xml b/lib/feedparser/tests/wellformed/sanitize/entry_title_onmouseover.xml
deleted file mode 100644
index 4dde5f37c..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_title_onmouseover.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry title contains onmouseover
-Expect:      not bozo and entries[0]['title'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<title type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmouseover="location.href='http://www.ragingplatypus.com/';" /></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_title_onmouseup.xml b/lib/feedparser/tests/wellformed/sanitize/entry_title_onmouseup.xml
deleted file mode 100644
index 81cfdfce4..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_title_onmouseup.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry title contains onmouseup
-Expect:      not bozo and entries[0]['title'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<title type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmouseup="location.href='http://www.ragingplatypus.com/';" /></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_title_onreset.xml b/lib/feedparser/tests/wellformed/sanitize/entry_title_onreset.xml
deleted file mode 100644
index e2bc481b8..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_title_onreset.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry title contains onreset
-Expect:      not bozo and entries[0]['title'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<title type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onreset="location.href='http://www.ragingplatypus.com/';" /></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_title_onresize.xml b/lib/feedparser/tests/wellformed/sanitize/entry_title_onresize.xml
deleted file mode 100644
index f96a76b28..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_title_onresize.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry title contains onresize
-Expect:      not bozo and entries[0]['title'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<title type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onresize="location.href='http://www.ragingplatypus.com/';" /></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_title_onsubmit.xml b/lib/feedparser/tests/wellformed/sanitize/entry_title_onsubmit.xml
deleted file mode 100644
index b07628ac1..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_title_onsubmit.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry title contains onsubmit
-Expect:      not bozo and entries[0]['title'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<title type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onsubmit="location.href='http://www.ragingplatypus.com/';" /></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_title_onunload.xml b/lib/feedparser/tests/wellformed/sanitize/entry_title_onunload.xml
deleted file mode 100644
index 0a6f998b6..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_title_onunload.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry title contains onunload
-Expect:      not bozo and entries[0]['title'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<title type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onunload="location.href='http://www.ragingplatypus.com/';" /></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_title_script.xml b/lib/feedparser/tests/wellformed/sanitize/entry_title_script.xml
deleted file mode 100644
index 868558867..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_title_script.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry title contains script
-Expect:      not bozo and entries[0]['title'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<title type="text/html" mode="escaped">safe&lt;script type="text/javascript">location.href='http:/'+'/example.com/';&lt;/script> description</title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_title_script_cdata.xml b/lib/feedparser/tests/wellformed/sanitize/entry_title_script_cdata.xml
deleted file mode 100644
index e315d623b..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_title_script_cdata.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry title contains script
-Expect:      not bozo and entries[0]['title'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<title type="text/html" mode="escaped"><![CDATA[safe<script type="text/javascript">location.href='http:/'+'/example.com/';</script> description]]></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_title_script_inline.xml b/lib/feedparser/tests/wellformed/sanitize/entry_title_script_inline.xml
deleted file mode 100644
index 790cfd5cb..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_title_script_inline.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry title contains script
-Expect:      not bozo and entries[0]['title'] == u'<div>safe description</div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<title type="application/xhtml+xml" mode="xml"><div xmlns="http://www.w3.org/1999/xhtml">safe<script type="text/javascript">location.href='http:/'+'/example.com/';</script> description</div></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_title_style.xml b/lib/feedparser/tests/wellformed/sanitize/entry_title_style.xml
deleted file mode 100644
index f1fb8d660..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_title_style.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry title contains style
-Expect:      not bozo and entries[0]['title'] == u'<a href="http://www.ragingplatypus.com/" style="display: block; width: 100%; height: 100%; background-color: black; background-x: center; background-y: center;">never trust your upstream platypus</a>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<title type="text/html" mode="escaped">&lt;a href="http://www.ragingplatypus.com/" style="display:block; position:absolute; left:0; top:0; width:100%; height:100%; z-index:1; background-color:black; background-image:url(http://www.ragingplatypus.com/i/cam-full.jpg); background-x:center; background-y:center; background-repeat:repeat;">never trust your upstream platypus&lt;/a></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_applet.xml b/lib/feedparser/tests/wellformed/sanitize/feed_copyright_applet.xml
deleted file mode 100644
index bc1aacb37..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_applet.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed copyright contains applet
-Expect:      not bozo and feed['copyright'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<copyright type="text/html" mode="escaped">safe&lt;applet code="foo.class" codebase="http://www.example.com/">&lt;/applet> description</copyright>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_blink.xml b/lib/feedparser/tests/wellformed/sanitize/feed_copyright_blink.xml
deleted file mode 100644
index 4018115f7..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_blink.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed copyright contains blink
-Expect:      not bozo and feed['copyright'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<copyright type="text/html" mode="escaped">&lt;blink>safe&lt;/blink> description</copyright>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_crazy.xml b/lib/feedparser/tests/wellformed/sanitize/feed_copyright_crazy.xml
deleted file mode 100644
index 70ef93fc4..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_crazy.xml
+++ /dev/null
@@ -1,73 +0,0 @@
-<!--
-Description: feed copyright is crazy
-Expect:      not bozo and feed['copyright'] == u'Crazy HTML -' + u'- Can Your Regex Parse This?\n\n\n\n<!-' + u'- <script> -' + u'->\n\n<!-' + u'- \n\t<script> \n-' + u'->\n\n\n\nfunction executeMe()\n{\n\n\n\n\n/* \n<h1>Did The Javascript Execute?</h1>\n<div>\nI will execute here, too, if you mouse over me\n</div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<copyright type="text/html" mode="escaped">
-&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-&lt;html xmlns="http://www.w3.org/1999/xhtml">
-&lt;head>
-&lt;title>Crazy HTML -- Can Your Regex Parse This?&lt;/title>
-
-&lt;/head>
-&lt;body    notRealAttribute="value"onload="executeMe();"foo="bar"
-
->
-&lt;!-- &lt;script> -->
-
-&lt;!-- 
-	&lt;script> 
--->
-
-&lt;/script>
-
-
-&lt;script
-
-
->
-
-function executeMe()
-{
-
-
-
-
-/* &lt;script> 
-function am_i_javascript()
-{
-	var str = "Some innocuously commented out stuff";
-}
-&lt; /script>
-*/
-
-	
-	
-	
-	
-	
-	
-	
-	
-	alert("Executed");
-}
-
-                                   &lt;/script
-
-
-
->
-&lt;h1>Did The Javascript Execute?&lt;/h1>
-&lt;div notRealAttribute="value
-"onmouseover="
-executeMe();
-"foo="bar">
-I will execute here, too, if you mouse over me
-&lt;/div>
-
-&lt;/body>
-
-&lt;/html>
-</copyright>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_embed.xml b/lib/feedparser/tests/wellformed/sanitize/feed_copyright_embed.xml
deleted file mode 100644
index 1e73ef5fb..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_embed.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed copyright contains embed
-Expect:      not bozo and feed['copyright'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<copyright type="text/html" mode="escaped">safe&lt;embed src="http://www.example.com/"> description</copyright>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_frame.xml b/lib/feedparser/tests/wellformed/sanitize/feed_copyright_frame.xml
deleted file mode 100644
index 4c6f8105e..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_frame.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed copyright contains frame
-Expect:      not bozo and feed['copyright'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<copyright type="text/html" mode="escaped">safe&lt;frameset rows="*">&lt;frame src="http://example.com/">&lt;/frameset> description</copyright>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_iframe.xml b/lib/feedparser/tests/wellformed/sanitize/feed_copyright_iframe.xml
deleted file mode 100644
index 3cefdfc5f..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_iframe.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed copyright contains iframe
-Expect:      not bozo and feed['copyright'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<copyright type="text/html" mode="escaped">safe&lt;iframe src="http://www.example.com/">&lt;/iframe> description</copyright>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_link.xml b/lib/feedparser/tests/wellformed/sanitize/feed_copyright_link.xml
deleted file mode 100644
index 3cdec2e50..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_link.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed copyright contains link
-Expect:      not bozo and feed['copyright'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<copyright type="text/html" mode="escaped">safe&lt;link rel="stylesheet" type="text/css" href="http://example.com/evil.css"> description</copyright>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_meta.xml b/lib/feedparser/tests/wellformed/sanitize/feed_copyright_meta.xml
deleted file mode 100644
index 6974afb3b..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_meta.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed copyright contains meta
-Expect:      not bozo and feed['copyright'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<copyright type="text/html" mode="escaped">safe&lt;meta http-equiv="Refresh" content="0; URL=http://example.com/"> description</copyright>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_object.xml b/lib/feedparser/tests/wellformed/sanitize/feed_copyright_object.xml
deleted file mode 100644
index 9beabb6b5..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_object.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed copyright contains object
-Expect:      not bozo and feed['copyright'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<copyright type="text/html" mode="escaped">safe&lt;object classid="clsid:C932BA85-4374-101B-A56C-00AA003668DC"> description</copyright>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onabort.xml b/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onabort.xml
deleted file mode 100644
index 264e99a5c..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onabort.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed copyright contains onabort
-Expect:      not bozo and feed['copyright'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<copyright type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onabort="location.href='http://www.ragingplatypus.com/';" /></copyright>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onblur.xml b/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onblur.xml
deleted file mode 100644
index 0f39eba04..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onblur.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed copyright contains onblur
-Expect:      not bozo and feed['copyright'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<copyright type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onblur="location.href='http://www.ragingplatypus.com/';" /></copyright>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onchange.xml b/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onchange.xml
deleted file mode 100644
index 8e33cb906..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onchange.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed copyright contains onchange
-Expect:      not bozo and feed['copyright'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<copyright type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onchange="location.href='http://www.ragingplatypus.com/';" /></copyright>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onclick.xml b/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onclick.xml
deleted file mode 100644
index 37eeb8a10..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onclick.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed copyright contains onclick
-Expect:      not bozo and feed['copyright'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<copyright type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onclick="location.href='http://www.ragingplatypus.com/';" /></copyright>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_ondblclick.xml b/lib/feedparser/tests/wellformed/sanitize/feed_copyright_ondblclick.xml
deleted file mode 100644
index c2636fed0..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_ondblclick.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed copyright contains ondblclick
-Expect:      not bozo and feed['copyright'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<copyright type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" ondblclick="location.href='http://www.ragingplatypus.com/';" /></copyright>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onerror.xml b/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onerror.xml
deleted file mode 100644
index 7f79e671a..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onerror.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed copyright contains onerror
-Expect:      not bozo and feed['copyright'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<copyright type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onerror="location.href='http://www.ragingplatypus.com/';" /></copyright>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onfocus.xml b/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onfocus.xml
deleted file mode 100644
index 73c97e0eb..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onfocus.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed copyright contains onfocus
-Expect:      not bozo and feed['copyright'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<copyright type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onfocus="location.href='http://www.ragingplatypus.com/';" /></copyright>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onkeydown.xml b/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onkeydown.xml
deleted file mode 100644
index f0a6fd24f..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onkeydown.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed copyright contains onkeydown
-Expect:      not bozo and feed['copyright'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<copyright type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onkeydown="location.href='http://www.ragingplatypus.com/';" /></copyright>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onkeypress.xml b/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onkeypress.xml
deleted file mode 100644
index 762819cdb..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onkeypress.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed copyright contains onkeypress
-Expect:      not bozo and feed['copyright'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<copyright type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onkeypress="location.href='http://www.ragingplatypus.com/';" /></copyright>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onkeyup.xml b/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onkeyup.xml
deleted file mode 100644
index 3bb08dc0d..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onkeyup.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed copyright contains onkeyup
-Expect:      not bozo and feed['copyright'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<copyright type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onkeyup="location.href='http://www.ragingplatypus.com/';" /></copyright>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onload.xml b/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onload.xml
deleted file mode 100644
index 41078416e..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onload.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed copyright contains onload
-Expect:      not bozo and feed['copyright'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<copyright type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onload="location.href='http://www.ragingplatypus.com/';" /></copyright>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onmousedown.xml b/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onmousedown.xml
deleted file mode 100644
index 9d4f709ad..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onmousedown.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed copyright contains onmousedown
-Expect:      not bozo and feed['copyright'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<copyright type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmousedown="location.href='http://www.ragingplatypus.com/';" /></copyright>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onmouseout.xml b/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onmouseout.xml
deleted file mode 100644
index 008e90746..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onmouseout.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed copyright contains onmouseout
-Expect:      not bozo and feed['copyright'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<copyright type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmouseout="location.href='http://www.ragingplatypus.com/';" /></copyright>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onmouseover.xml b/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onmouseover.xml
deleted file mode 100644
index b77c39124..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onmouseover.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed copyright contains onmouseover
-Expect:      not bozo and feed['copyright'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<copyright type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmouseover="location.href='http://www.ragingplatypus.com/';" /></copyright>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onmouseup.xml b/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onmouseup.xml
deleted file mode 100644
index 5a5d42bf0..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onmouseup.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed copyright contains onmouseup
-Expect:      not bozo and feed['copyright'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<copyright type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmouseup="location.href='http://www.ragingplatypus.com/';" /></copyright>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onreset.xml b/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onreset.xml
deleted file mode 100644
index 99062f477..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onreset.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed copyright contains onreset
-Expect:      not bozo and feed['copyright'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<copyright type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onreset="location.href='http://www.ragingplatypus.com/';" /></copyright>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onresize.xml b/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onresize.xml
deleted file mode 100644
index b7b5e1a8d..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onresize.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed copyright contains onresize
-Expect:      not bozo and feed['copyright'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<copyright type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onresize="location.href='http://www.ragingplatypus.com/';" /></copyright>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onsubmit.xml b/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onsubmit.xml
deleted file mode 100644
index b09b8e8b5..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onsubmit.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed copyright contains onsubmit
-Expect:      not bozo and feed['copyright'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<copyright type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onsubmit="location.href='http://www.ragingplatypus.com/';" /></copyright>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onunload.xml b/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onunload.xml
deleted file mode 100644
index 17aa1f344..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onunload.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed copyright contains onunload
-Expect:      not bozo and feed['copyright'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<copyright type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onunload="location.href='http://www.ragingplatypus.com/';" /></copyright>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_script.xml b/lib/feedparser/tests/wellformed/sanitize/feed_copyright_script.xml
deleted file mode 100644
index 842e93f26..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_script.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed copyright contains script
-Expect:      not bozo and feed['copyright'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<copyright type="text/html" mode="escaped">safe&lt;script type="text/javascript">location.href='http:/'+'/example.com/';&lt;/script> description</copyright>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_script_cdata.xml b/lib/feedparser/tests/wellformed/sanitize/feed_copyright_script_cdata.xml
deleted file mode 100644
index 0113b7efa..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_script_cdata.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed copyright contains script
-Expect:      not bozo and feed['copyright'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<copyright type="text/html" mode="escaped"><![CDATA[safe<script type="text/javascript">location.href='http:/'+'/example.com/';</script> description]]></copyright>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_script_inline.xml b/lib/feedparser/tests/wellformed/sanitize/feed_copyright_script_inline.xml
deleted file mode 100644
index fcae4f060..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_script_inline.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed copyright contains script
-Expect:      not bozo and feed['copyright'] == u'<div>safe description</div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<copyright type="application/xhtml+xml" mode="xml"><div xmlns="http://www.w3.org/1999/xhtml">safe<script type="text/javascript">location.href='http:/'+'/example.com/';</script> description</div></copyright>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_style.xml b/lib/feedparser/tests/wellformed/sanitize/feed_copyright_style.xml
deleted file mode 100644
index a9dc4e5b0..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_style.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed copyright contains style
-Expect:      not bozo and feed['copyright'] == u'<a href="http://www.ragingplatypus.com/" style="display: block; width: 100%; height: 100%; background-color: black; background-x: center; background-y: center;">never trust your upstream platypus</a>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<copyright type="text/html" mode="escaped">&lt;a href="http://www.ragingplatypus.com/" style="display:block; position:absolute; left:0; top:0; width:100%; height:100%; z-index:1; background-color:black; background-image:url(http://www.ragingplatypus.com/i/cam-full.jpg); background-x:center; background-y:center; background-repeat:repeat;">never trust your upstream platypus&lt;/a></copyright>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_info_applet.xml b/lib/feedparser/tests/wellformed/sanitize/feed_info_applet.xml
deleted file mode 100644
index ed783f53e..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_info_applet.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed info contains applet
-Expect:      not bozo and feed['info'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<info type="text/html" mode="escaped">safe&lt;applet code="foo.class" codebase="http://example.com/">&lt;/applet> description</info>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_info_blink.xml b/lib/feedparser/tests/wellformed/sanitize/feed_info_blink.xml
deleted file mode 100644
index 0a94622ba..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_info_blink.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed info contains blink
-Expect:      not bozo and feed['info'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<info type="text/html" mode="escaped">&lt;blink>safe&lt;/blink> description</info>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_info_crazy.xml b/lib/feedparser/tests/wellformed/sanitize/feed_info_crazy.xml
deleted file mode 100644
index b8bc995d0..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_info_crazy.xml
+++ /dev/null
@@ -1,73 +0,0 @@
-<!--
-Description: feed info is crazy
-Expect:      not bozo and feed['info'] == u'Crazy HTML -' + u'- Can Your Regex Parse This?\n\n\n\n<!-' + u'- <script> -' + u'->\n\n<!-' + u'- \n\t<script> \n-' + u'->\n\n\n\nfunction executeMe()\n{\n\n\n\n\n/* \n<h1>Did The Javascript Execute?</h1>\n<div>\nI will execute here, too, if you mouse over me\n</div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<info type="text/html" mode="escaped">
-&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-&lt;html xmlns="http://www.w3.org/1999/xhtml">
-&lt;head>
-&lt;title>Crazy HTML -- Can Your Regex Parse This?&lt;/title>
-
-&lt;/head>
-&lt;body    notRealAttribute="value"onload="executeMe();"foo="bar"
-
->
-&lt;!-- &lt;script> -->
-
-&lt;!-- 
-	&lt;script> 
--->
-
-&lt;/script>
-
-
-&lt;script
-
-
->
-
-function executeMe()
-{
-
-
-
-
-/* &lt;script> 
-function am_i_javascript()
-{
-	var str = "Some innocuously commented out stuff";
-}
-&lt; /script>
-*/
-
-	
-	
-	
-	
-	
-	
-	
-	
-	alert("Executed");
-}
-
-                                   &lt;/script
-
-
-
->
-&lt;h1>Did The Javascript Execute?&lt;/h1>
-&lt;div notRealAttribute="value
-"onmouseover="
-executeMe();
-"foo="bar">
-I will execute here, too, if you mouse over me
-&lt;/div>
-
-&lt;/body>
-
-&lt;/html>
-</info>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_info_embed.xml b/lib/feedparser/tests/wellformed/sanitize/feed_info_embed.xml
deleted file mode 100644
index 82b0e3d44..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_info_embed.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed info contains embed
-Expect:      not bozo and feed['info'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<info type="text/html" mode="escaped">safe&lt;embed src="http://example.com/"> description</info>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_info_frame.xml b/lib/feedparser/tests/wellformed/sanitize/feed_info_frame.xml
deleted file mode 100644
index de61c2fce..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_info_frame.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed info contains frame
-Expect:      not bozo and feed['info'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<info type="text/html" mode="escaped">safe&lt;frameset rows="*">&lt;frame src="http://example.com/">&lt;/frameset> description</info>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_info_iframe.xml b/lib/feedparser/tests/wellformed/sanitize/feed_info_iframe.xml
deleted file mode 100644
index 49f1edc68..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_info_iframe.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed info contains iframe
-Expect:      not bozo and feed['info'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<info type="text/html" mode="escaped">safe&lt;iframe src="http://example.com/"> description&lt;/iframe></info>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_info_link.xml b/lib/feedparser/tests/wellformed/sanitize/feed_info_link.xml
deleted file mode 100644
index 4ef66897d..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_info_link.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed info contains link
-Expect:      not bozo and feed['info'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<info type="text/html" mode="escaped">safe&lt;link rel="stylesheet" type="text/css" href="http://example.com/evil.css"> description</info>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_info_meta.xml b/lib/feedparser/tests/wellformed/sanitize/feed_info_meta.xml
deleted file mode 100644
index 85ca47806..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_info_meta.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed info contains meta
-Expect:      not bozo and feed['info'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<info type="text/html" mode="escaped">safe&lt;meta http-equiv="Refresh" content="0; URL=http://example.com/"> description</info>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_info_object.xml b/lib/feedparser/tests/wellformed/sanitize/feed_info_object.xml
deleted file mode 100644
index a32f5124b..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_info_object.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed info contains object
-Expect:      not bozo and feed['info'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<info type="text/html" mode="escaped">safe&lt;object classid="clsid:C932BA85-4374-101B-A56C-00AA003668DC"> description</info>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_info_onabort.xml b/lib/feedparser/tests/wellformed/sanitize/feed_info_onabort.xml
deleted file mode 100644
index c6f2a96aa..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_info_onabort.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed info contains onabort
-Expect:      not bozo and feed['info'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<info type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onabort="location.href='http://www.ragingplatypus.com/';" /></info>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_info_onblur.xml b/lib/feedparser/tests/wellformed/sanitize/feed_info_onblur.xml
deleted file mode 100644
index b10c4e8f0..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_info_onblur.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed info contains onblur
-Expect:      not bozo and feed['info'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<info type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onblur="location.href='http://www.ragingplatypus.com/';" /></info>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_info_onchange.xml b/lib/feedparser/tests/wellformed/sanitize/feed_info_onchange.xml
deleted file mode 100644
index 653af579d..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_info_onchange.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed info contains onchange
-Expect:      not bozo and feed['info'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<info type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onchange="location.href='http://www.ragingplatypus.com/';" /></info>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_info_onclick.xml b/lib/feedparser/tests/wellformed/sanitize/feed_info_onclick.xml
deleted file mode 100644
index 93644d6d7..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_info_onclick.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed info contains onclick
-Expect:      not bozo and feed['info'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<info type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onclick="location.href='http://www.ragingplatypus.com/';" /></info>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_info_ondblclick.xml b/lib/feedparser/tests/wellformed/sanitize/feed_info_ondblclick.xml
deleted file mode 100644
index 1776c913d..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_info_ondblclick.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed info contains ondblclick
-Expect:      not bozo and feed['info'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<info type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" ondblclick="location.href='http://www.ragingplatypus.com/';" /></info>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_info_onerror.xml b/lib/feedparser/tests/wellformed/sanitize/feed_info_onerror.xml
deleted file mode 100644
index 9b8dd9cf0..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_info_onerror.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed info contains onerror
-Expect:      not bozo and feed['info'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<info type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onerror="location.href='http://www.ragingplatypus.com/';" /></info>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_info_onfocus.xml b/lib/feedparser/tests/wellformed/sanitize/feed_info_onfocus.xml
deleted file mode 100644
index 51a390bb5..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_info_onfocus.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed info contains onfocus
-Expect:      not bozo and feed['info'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<info type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onfocus="location.href='http://www.ragingplatypus.com/';" /></info>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_info_onkeydown.xml b/lib/feedparser/tests/wellformed/sanitize/feed_info_onkeydown.xml
deleted file mode 100644
index 4674d0e3c..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_info_onkeydown.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed info contains onkeydown
-Expect:      not bozo and feed['info'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<info type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onkeydown="location.href='http://www.ragingplatypus.com/';" /></info>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_info_onkeypress.xml b/lib/feedparser/tests/wellformed/sanitize/feed_info_onkeypress.xml
deleted file mode 100644
index cc2af96a4..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_info_onkeypress.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed info contains onkeypress
-Expect:      not bozo and feed['info'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<info type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onkeypress="location.href='http://www.ragingplatypus.com/';" /></info>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_info_onkeyup.xml b/lib/feedparser/tests/wellformed/sanitize/feed_info_onkeyup.xml
deleted file mode 100644
index cde7c4232..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_info_onkeyup.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed info contains onkeyup
-Expect:      not bozo and feed['info'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<info type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onkeyup="location.href='http://www.ragingplatypus.com/';" /></info>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_info_onload.xml b/lib/feedparser/tests/wellformed/sanitize/feed_info_onload.xml
deleted file mode 100644
index 7763fbf3b..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_info_onload.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed info contains onload
-Expect:      not bozo and feed['info'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<info type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onload="location.href='http://www.ragingplatypus.com/';" /></info>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_info_onmousedown.xml b/lib/feedparser/tests/wellformed/sanitize/feed_info_onmousedown.xml
deleted file mode 100644
index 45651554d..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_info_onmousedown.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed info contains onmousedown
-Expect:      not bozo and feed['info'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<info type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmousedown="location.href='http://www.ragingplatypus.com/';" /></info>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_info_onmouseout.xml b/lib/feedparser/tests/wellformed/sanitize/feed_info_onmouseout.xml
deleted file mode 100644
index e2de0c6c5..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_info_onmouseout.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed info contains onmouseout
-Expect:      not bozo and feed['info'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<info type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmouseout="location.href='http://www.ragingplatypus.com/';" /></info>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_info_onmouseover.xml b/lib/feedparser/tests/wellformed/sanitize/feed_info_onmouseover.xml
deleted file mode 100644
index 9e5200795..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_info_onmouseover.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed info contains onmouseover
-Expect:      not bozo and feed['info'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<info type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmouseover="location.href='http://www.ragingplatypus.com/';" /></info>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_info_onmouseup.xml b/lib/feedparser/tests/wellformed/sanitize/feed_info_onmouseup.xml
deleted file mode 100644
index 15b0aac6d..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_info_onmouseup.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed info contains onmouseup
-Expect:      not bozo and feed['info'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<info type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmouseup="location.href='http://www.ragingplatypus.com/';" /></info>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_info_onreset.xml b/lib/feedparser/tests/wellformed/sanitize/feed_info_onreset.xml
deleted file mode 100644
index be8bdc4cb..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_info_onreset.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed info contains onreset
-Expect:      not bozo and feed['info'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<info type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onreset="location.href='http://www.ragingplatypus.com/';" /></info>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_info_onresize.xml b/lib/feedparser/tests/wellformed/sanitize/feed_info_onresize.xml
deleted file mode 100644
index f2429be6f..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_info_onresize.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed info contains onresize
-Expect:      not bozo and feed['info'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<info type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onresize="location.href='http://www.ragingplatypus.com/';" /></info>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_info_onsubmit.xml b/lib/feedparser/tests/wellformed/sanitize/feed_info_onsubmit.xml
deleted file mode 100644
index c230a4009..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_info_onsubmit.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed info contains onsubmit
-Expect:      not bozo and feed['info'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<info type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onsubmit="location.href='http://www.ragingplatypus.com/';" /></info>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_info_onunload.xml b/lib/feedparser/tests/wellformed/sanitize/feed_info_onunload.xml
deleted file mode 100644
index 9c66418c5..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_info_onunload.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed info contains onunload
-Expect:      not bozo and feed['info'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<info type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onunload="location.href='http://www.ragingplatypus.com/';" /></info>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_info_script.xml b/lib/feedparser/tests/wellformed/sanitize/feed_info_script.xml
deleted file mode 100644
index 34d20bd59..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_info_script.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed info contains script
-Expect:      not bozo and feed['info'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<info type="text/html" mode="escaped">safe&lt;script type="text/javascript">location.href='http:/'+'/example.com/';&lt;/script> description</info>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_info_script_cdata.xml b/lib/feedparser/tests/wellformed/sanitize/feed_info_script_cdata.xml
deleted file mode 100644
index ae3fb8e59..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_info_script_cdata.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed info contains script
-Expect:      not bozo and feed['info'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<info type="text/html" mode="escaped"><![CDATA[safe<script type="text/javascript">location.href='http:/'+'/example.com/';</script> description]]></info>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_info_script_inline.xml b/lib/feedparser/tests/wellformed/sanitize/feed_info_script_inline.xml
deleted file mode 100644
index dafc46a7e..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_info_script_inline.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed info contains script
-Expect:      not bozo and feed['info'] == u'<div>safe description</div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<info type="application/xhtml+xml" mode="xml"><div xmlns="http://www.w3.org/1999/xhtml">safe<script type="text/javascript">location.href='http:/'+'/example.com/';</script> description</div></info>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_info_style.xml b/lib/feedparser/tests/wellformed/sanitize/feed_info_style.xml
deleted file mode 100644
index d1aac49ab..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_info_style.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed info contains style
-Expect:      not bozo and feed['info'] == u'<a href="http://www.ragingplatypus.com/" style="display: block; width: 100%; height: 100%; background-color: black; background-x: center; background-y: center;">never trust your upstream platypus</a>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<info type="text/html" mode="escaped">&lt;a href="http://www.ragingplatypus.com/" style="display:block; position:absolute; left:0; top:0; width:100%; height:100%; z-index:1; background-color:black; background-image:url(http://www.ragingplatypus.com/i/cam-full.jpg); background-x:center; background-y:center; background-repeat:repeat;">never trust your upstream platypus&lt;/a></info>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_applet.xml b/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_applet.xml
deleted file mode 100644
index 30d75af16..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_applet.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed subtitle contains applet
-Expect:      not bozo and feed['tagline'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<subtitle type="text/html" mode="escaped">safe&lt;applet code="foo.class" codebase="http://example.com/">&lt;/applet> description</subtitle>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_blink.xml b/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_blink.xml
deleted file mode 100644
index 89e14e364..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_blink.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed subtitle contains blink
-Expect:      not bozo and feed['tagline'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<subtitle type="text/html" mode="escaped">&lt;blink>safe&lt;/blink> description</subtitle>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_crazy.xml b/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_crazy.xml
deleted file mode 100644
index 2c286dd8d..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_crazy.xml
+++ /dev/null
@@ -1,73 +0,0 @@
-<!--
-Description: feed subtitle is crazy
-Expect:      not bozo and feed['tagline'] == u'Crazy HTML -' + u'- Can Your Regex Parse This?\n\n\n\n<!-' + u'- <script> -' + u'->\n\n<!-' + u'- \n\t<script> \n-' + u'->\n\n\n\nfunction executeMe()\n{\n\n\n\n\n/* \n<h1>Did The Javascript Execute?</h1>\n<div>\nI will execute here, too, if you mouse over me\n</div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<subtitle type="text/html" mode="escaped">
-&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-&lt;html xmlns="http://www.w3.org/1999/xhtml">
-&lt;head>
-&lt;title>Crazy HTML -- Can Your Regex Parse This?&lt;/title>
-
-&lt;/head>
-&lt;body    notRealAttribute="value"onload="executeMe();"foo="bar"
-
->
-&lt;!-- &lt;script> -->
-
-&lt;!-- 
-	&lt;script> 
--->
-
-&lt;/script>
-
-
-&lt;script
-
-
->
-
-function executeMe()
-{
-
-
-
-
-/* &lt;script> 
-function am_i_javascript()
-{
-	var str = "Some innocuously commented out stuff";
-}
-&lt; /script>
-*/
-
-	
-	
-	
-	
-	
-	
-	
-	
-	alert("Executed");
-}
-
-                                   &lt;/script
-
-
-
->
-&lt;h1>Did The Javascript Execute?&lt;/h1>
-&lt;div notRealAttribute="value
-"onmouseover="
-executeMe();
-"foo="bar">
-I will execute here, too, if you mouse over me
-&lt;/div>
-
-&lt;/body>
-
-&lt;/html>
-</subtitle>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_embed.xml b/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_embed.xml
deleted file mode 100644
index c83d6dabd..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_embed.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed subtitle contains embed
-Expect:      not bozo and feed['tagline'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<subtitle type="text/html" mode="escaped">safe&lt;embed src="http://example.com/"> description</subtitle>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_frame.xml b/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_frame.xml
deleted file mode 100644
index 0f165f0ec..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_frame.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed subtitle contains frame
-Expect:      not bozo and feed['tagline'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<subtitle type="text/html" mode="escaped">safe&lt;frameset rows="*">&lt;frame src="http://example.com/">&lt;/frameset> description</subtitle>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_iframe.xml b/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_iframe.xml
deleted file mode 100644
index f3c14bfc3..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_iframe.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed subtitle contains iframe
-Expect:      not bozo and feed['tagline'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<subtitle type="text/html" mode="escaped">safe&lt;iframe src="http://example.com/"> description&lt;/iframe></subtitle>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_link.xml b/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_link.xml
deleted file mode 100644
index 2daccf307..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_link.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed subtitle contains link
-Expect:      not bozo and feed['tagline'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<subtitle type="text/html" mode="escaped">safe&lt;link rel="stylesheet" type="text/css" href="http://example.com/evil.css"> description</subtitle>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_meta.xml b/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_meta.xml
deleted file mode 100644
index bb530e35a..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_meta.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed subtitle contains meta
-Expect:      not bozo and feed['tagline'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<subtitle type="text/html" mode="escaped">safe&lt;meta http-equiv="Refresh" content="0; URL=http://example.com/"> description</subtitle>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_object.xml b/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_object.xml
deleted file mode 100644
index 4116bff8e..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_object.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed subtitle contains object
-Expect:      not bozo and feed['tagline'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<subtitle type="text/html" mode="escaped">safe&lt;object classid="clsid:C932BA85-4374-101B-A56C-00AA003668DC"> description</subtitle>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onabort.xml b/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onabort.xml
deleted file mode 100644
index 597c482e0..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onabort.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed subtitle contains onabort
-Expect:      not bozo and feed['tagline'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<subtitle type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onabort="location.href='http://www.ragingplatypus.com/';" /></subtitle>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onblur.xml b/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onblur.xml
deleted file mode 100644
index 5a1301f8e..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onblur.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed subtitle contains onblur
-Expect:      not bozo and feed['tagline'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<subtitle type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onblur="location.href='http://www.ragingplatypus.com/';" /></subtitle>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onchange.xml b/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onchange.xml
deleted file mode 100644
index cec13dc74..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onchange.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed subtitle contains onchange
-Expect:      not bozo and feed['tagline'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<subtitle type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onchange="location.href='http://www.ragingplatypus.com/';" /></subtitle>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onclick.xml b/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onclick.xml
deleted file mode 100644
index 18bd7a76e..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onclick.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed subtitle contains onclick
-Expect:      not bozo and feed['tagline'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<subtitle type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onclick="location.href='http://www.ragingplatypus.com/';" /></subtitle>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_ondblclick.xml b/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_ondblclick.xml
deleted file mode 100644
index b3e0fea55..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_ondblclick.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed subtitle contains ondblclick
-Expect:      not bozo and feed['tagline'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<subtitle type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" ondblclick="location.href='http://www.ragingplatypus.com/';" /></subtitle>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onerror.xml b/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onerror.xml
deleted file mode 100644
index 9693ee51a..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onerror.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed subtitle contains onerror
-Expect:      not bozo and feed['tagline'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<subtitle type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onerror="location.href='http://www.ragingplatypus.com/';" /></subtitle>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onfocus.xml b/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onfocus.xml
deleted file mode 100644
index 315c86498..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onfocus.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed subtitle contains onfocus
-Expect:      not bozo and feed['tagline'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<subtitle type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onfocus="location.href='http://www.ragingplatypus.com/';" /></subtitle>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onkeydown.xml b/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onkeydown.xml
deleted file mode 100644
index 8290367fa..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onkeydown.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed subtitle contains onkeydown
-Expect:      not bozo and feed['tagline'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<subtitle type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onkeydown="location.href='http://www.ragingplatypus.com/';" /></subtitle>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onkeypress.xml b/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onkeypress.xml
deleted file mode 100644
index 6def555e5..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onkeypress.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed subtitle contains onkeypress
-Expect:      not bozo and feed['tagline'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<subtitle type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onkeypress="location.href='http://www.ragingplatypus.com/';" /></subtitle>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onkeyup.xml b/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onkeyup.xml
deleted file mode 100644
index 618a0c2ff..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onkeyup.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed subtitle contains onkeyup
-Expect:      not bozo and feed['tagline'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<subtitle type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onkeyup="location.href='http://www.ragingplatypus.com/';" /></subtitle>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onload.xml b/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onload.xml
deleted file mode 100644
index 78a45b9e8..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onload.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed subtitle contains onload
-Expect:      not bozo and feed['tagline'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<subtitle type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onload="location.href='http://www.ragingplatypus.com/';" /></subtitle>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onmousedown.xml b/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onmousedown.xml
deleted file mode 100644
index 77010aaea..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onmousedown.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed subtitle contains onmousedown
-Expect:      not bozo and feed['tagline'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<subtitle type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmousedown="location.href='http://www.ragingplatypus.com/';" /></subtitle>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onmouseout.xml b/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onmouseout.xml
deleted file mode 100644
index 5e353ee07..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onmouseout.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed subtitle contains onmouseout
-Expect:      not bozo and feed['tagline'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<subtitle type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmouseout="location.href='http://www.ragingplatypus.com/';" /></subtitle>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onmouseover.xml b/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onmouseover.xml
deleted file mode 100644
index 8d20666c8..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onmouseover.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed subtitle contains onmouseover
-Expect:      not bozo and feed['tagline'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<subtitle type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmouseover="location.href='http://www.ragingplatypus.com/';" /></subtitle>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onmouseup.xml b/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onmouseup.xml
deleted file mode 100644
index 4c6893155..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onmouseup.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed subtitle contains onmouseup
-Expect:      not bozo and feed['tagline'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<subtitle type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmouseup="location.href='http://www.ragingplatypus.com/';" /></subtitle>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onreset.xml b/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onreset.xml
deleted file mode 100644
index f7f2abaec..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onreset.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed subtitle contains onreset
-Expect:      not bozo and feed['tagline'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<subtitle type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onreset="location.href='http://www.ragingplatypus.com/';" /></subtitle>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onresize.xml b/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onresize.xml
deleted file mode 100644
index eb7ebda05..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onresize.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed subtitle contains onresize
-Expect:      not bozo and feed['tagline'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<subtitle type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onresize="location.href='http://www.ragingplatypus.com/';" /></subtitle>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onsubmit.xml b/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onsubmit.xml
deleted file mode 100644
index 5bb7dd6bf..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onsubmit.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed subtitle contains onsubmit
-Expect:      not bozo and feed['tagline'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<subtitle type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onsubmit="location.href='http://www.ragingplatypus.com/';" /></subtitle>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onunload.xml b/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onunload.xml
deleted file mode 100644
index 57824a3a8..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onunload.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed subtitle contains onunload
-Expect:      not bozo and feed['tagline'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<subtitle type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onunload="location.href='http://www.ragingplatypus.com/';" /></subtitle>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_script.xml b/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_script.xml
deleted file mode 100644
index 59e76db18..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_script.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed subtitle contains script
-Expect:      not bozo and feed['tagline'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<subtitle type="text/html" mode="escaped">safe&lt;script type="text/javascript">location.href='http:/'+'/example.com/';&lt;/script> description</subtitle>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_script_cdata.xml b/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_script_cdata.xml
deleted file mode 100644
index b7ee3f4f5..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_script_cdata.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed subtitle contains script
-Expect:      not bozo and feed['tagline'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<subtitle type="text/html" mode="escaped"><![CDATA[safe<script type="text/javascript">location.href='http:/'+'/example.com/';</script> description]]></subtitle>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_script_inline.xml b/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_script_inline.xml
deleted file mode 100644
index 61c7c7b1a..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_script_inline.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed subtitle contains script
-Expect:      not bozo and feed['tagline'] == u'<div>safe description</div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<subtitle type="application/xhtml+xml" mode="xml"><div xmlns="http://www.w3.org/1999/xhtml">safe<script type="text/javascript">location.href='http:/'+'/example.com/';</script> description</div></subtitle>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_style.xml b/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_style.xml
deleted file mode 100644
index 332a65b90..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_style.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed subtitle contains style
-Expect:      not bozo and feed['tagline'] == u'<a href="http://www.ragingplatypus.com/" style="display: block; width: 100%; height: 100%; background-color: black; background-x: center; background-y: center;">never trust your upstream platypus</a>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<subtitle type="text/html" mode="escaped">&lt;a href="http://www.ragingplatypus.com/" style="display:block; position:absolute; left:0; top:0; width:100%; height:100%; z-index:1; background-color:black; background-image:url(http://www.ragingplatypus.com/i/cam-full.jpg); background-x:center; background-y:center; background-repeat:repeat;">never trust your upstream platypus&lt;/a></subtitle>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_applet.xml b/lib/feedparser/tests/wellformed/sanitize/feed_tagline_applet.xml
deleted file mode 100644
index 6bcca5d92..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_applet.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed tagline contains applet
-Expect:      not bozo and feed['tagline'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<tagline type="text/html" mode="escaped">safe&lt;applet code="foo.class" codebase="http://example.com/">&lt;/applet> description</tagline>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_blink.xml b/lib/feedparser/tests/wellformed/sanitize/feed_tagline_blink.xml
deleted file mode 100644
index cd758dd61..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_blink.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed tagline contains blink
-Expect:      not bozo and feed['tagline'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<tagline type="text/html" mode="escaped">&lt;blink>safe&lt;/blink> description</tagline>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_crazy.xml b/lib/feedparser/tests/wellformed/sanitize/feed_tagline_crazy.xml
deleted file mode 100644
index 63617d335..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_crazy.xml
+++ /dev/null
@@ -1,73 +0,0 @@
-<!--
-Description: feed tagline is crazy
-Expect:      not bozo and feed['tagline'] == u'Crazy HTML -' + u'- Can Your Regex Parse This?\n\n\n\n<!-' + u'- <script> -' + u'->\n\n<!-' + u'- \n\t<script> \n-' + u'->\n\n\n\nfunction executeMe()\n{\n\n\n\n\n/* \n<h1>Did The Javascript Execute?</h1>\n<div>\nI will execute here, too, if you mouse over me\n</div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<tagline type="text/html" mode="escaped">
-&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-&lt;html xmlns="http://www.w3.org/1999/xhtml">
-&lt;head>
-&lt;title>Crazy HTML -- Can Your Regex Parse This?&lt;/title>
-
-&lt;/head>
-&lt;body    notRealAttribute="value"onload="executeMe();"foo="bar"
-
->
-&lt;!-- &lt;script> -->
-
-&lt;!-- 
-	&lt;script> 
--->
-
-&lt;/script>
-
-
-&lt;script
-
-
->
-
-function executeMe()
-{
-
-
-
-
-/* &lt;script> 
-function am_i_javascript()
-{
-	var str = "Some innocuously commented out stuff";
-}
-&lt; /script>
-*/
-
-	
-	
-	
-	
-	
-	
-	
-	
-	alert("Executed");
-}
-
-                                   &lt;/script
-
-
-
->
-&lt;h1>Did The Javascript Execute?&lt;/h1>
-&lt;div notRealAttribute="value
-"onmouseover="
-executeMe();
-"foo="bar">
-I will execute here, too, if you mouse over me
-&lt;/div>
-
-&lt;/body>
-
-&lt;/html>
-</tagline>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_embed.xml b/lib/feedparser/tests/wellformed/sanitize/feed_tagline_embed.xml
deleted file mode 100644
index 68fca0f01..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_embed.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed tagline contains embed
-Expect:      not bozo and feed['tagline'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<tagline type="text/html" mode="escaped">safe&lt;embed src="http://example.com/"> description</tagline>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_frame.xml b/lib/feedparser/tests/wellformed/sanitize/feed_tagline_frame.xml
deleted file mode 100644
index 9a3a14fb0..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_frame.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed tagline contains frame
-Expect:      not bozo and feed['tagline'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<tagline type="text/html" mode="escaped">safe&lt;frameset rows="*">&lt;frame src="http://example.com/">&lt;/frameset> description</tagline>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_iframe.xml b/lib/feedparser/tests/wellformed/sanitize/feed_tagline_iframe.xml
deleted file mode 100644
index 6863469c6..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_iframe.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed tagline contains iframe
-Expect:      not bozo and feed['tagline'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<tagline type="text/html" mode="escaped">safe&lt;iframe src="http://example.com/">&lt;/iframe> description</tagline>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_link.xml b/lib/feedparser/tests/wellformed/sanitize/feed_tagline_link.xml
deleted file mode 100644
index f46ac8e7f..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_link.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed tagline contains link
-Expect:      not bozo and feed['tagline'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<tagline type="text/html" mode="escaped">safe&lt;link rel="stylesheet" type="text/css" href="http://example.com/evil.css"> description</tagline>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_meta.xml b/lib/feedparser/tests/wellformed/sanitize/feed_tagline_meta.xml
deleted file mode 100644
index 21efed777..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_meta.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed tagline contains meta
-Expect:      not bozo and feed['tagline'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<tagline type="text/html" mode="escaped">safe&lt;meta http-equiv="Refresh" content="0; URL=http://example.com/"> description</tagline>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_object.xml b/lib/feedparser/tests/wellformed/sanitize/feed_tagline_object.xml
deleted file mode 100644
index 114c62560..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_object.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed tagline contains object
-Expect:      not bozo and feed['tagline'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<tagline type="text/html" mode="escaped">safe&lt;object classid="clsid:C932BA85-4374-101B-A56C-00AA003668DC"> description</tagline>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onabort.xml b/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onabort.xml
deleted file mode 100644
index a4ce80010..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onabort.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed tagline contains onabort
-Expect:      not bozo and feed['tagline'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<tagline type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onabort="location.href='http://www.ragingplatypus.com/';" /></tagline>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onblur.xml b/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onblur.xml
deleted file mode 100644
index 2f2958e90..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onblur.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed tagline contains onblur
-Expect:      not bozo and feed['tagline'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<tagline type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onblur="location.href='http://www.ragingplatypus.com/';" /></tagline>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onchange.xml b/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onchange.xml
deleted file mode 100644
index 2afe2267e..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onchange.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed tagline contains onchange
-Expect:      not bozo and feed['tagline'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<tagline type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onchange="location.href='http://www.ragingplatypus.com/';" /></tagline>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onclick.xml b/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onclick.xml
deleted file mode 100644
index fa104ca6c..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onclick.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed tagline contains onclick
-Expect:      not bozo and feed['tagline'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<tagline type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onclick="location.href='http://www.ragingplatypus.com/';" /></tagline>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_ondblclick.xml b/lib/feedparser/tests/wellformed/sanitize/feed_tagline_ondblclick.xml
deleted file mode 100644
index 6b72d9fa2..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_ondblclick.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed tagline contains ondblclick
-Expect:      not bozo and feed['tagline'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<tagline type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" ondblclick="location.href='http://www.ragingplatypus.com/';" /></tagline>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onerror.xml b/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onerror.xml
deleted file mode 100644
index 3744e11d6..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onerror.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed tagline contains onerror
-Expect:      not bozo and feed['tagline'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<tagline type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onerror="location.href='http://www.ragingplatypus.com/';" /></tagline>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onfocus.xml b/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onfocus.xml
deleted file mode 100644
index a11a3030e..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onfocus.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed tagline contains onfocus
-Expect:      not bozo and feed['tagline'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<tagline type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onfocus="location.href='http://www.ragingplatypus.com/';" /></tagline>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onkeydown.xml b/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onkeydown.xml
deleted file mode 100644
index 46ddf0cac..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onkeydown.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed tagline contains onkeydown
-Expect:      not bozo and feed['tagline'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<tagline type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onkeydown="location.href='http://www.ragingplatypus.com/';" /></tagline>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onkeypress.xml b/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onkeypress.xml
deleted file mode 100644
index 5703a1fc1..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onkeypress.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed tagline contains onkeypress
-Expect:      not bozo and feed['tagline'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<tagline type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onkeypress="location.href='http://www.ragingplatypus.com/';" /></tagline>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onkeyup.xml b/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onkeyup.xml
deleted file mode 100644
index dc78e6725..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onkeyup.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed tagline contains onkeyup
-Expect:      not bozo and feed['tagline'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<tagline type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onkeyup="location.href='http://www.ragingplatypus.com/';" /></tagline>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onload.xml b/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onload.xml
deleted file mode 100644
index 972655376..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onload.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed tagline contains onload
-Expect:      not bozo and feed['tagline'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<tagline type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onload="location.href='http://www.ragingplatypus.com/';" /></tagline>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onmousedown.xml b/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onmousedown.xml
deleted file mode 100644
index a25f3f214..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onmousedown.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed tagline contains onmousedown
-Expect:      not bozo and feed['tagline'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<tagline type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmousedown="location.href='http://www.ragingplatypus.com/';" /></tagline>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onmouseout.xml b/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onmouseout.xml
deleted file mode 100644
index ef7c5063a..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onmouseout.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed tagline contains onmouseout
-Expect:      not bozo and feed['tagline'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<tagline type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmouseout="location.href='http://www.ragingplatypus.com/';" /></tagline>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onmouseover.xml b/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onmouseover.xml
deleted file mode 100644
index aac3d54e8..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onmouseover.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed tagline contains onmouseover
-Expect:      not bozo and feed['tagline'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<tagline type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmouseover="location.href='http://www.ragingplatypus.com/';" /></tagline>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onmouseup.xml b/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onmouseup.xml
deleted file mode 100644
index 41ab39e72..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onmouseup.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed tagline contains onmouseup
-Expect:      not bozo and feed['tagline'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<tagline type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmouseup="location.href='http://www.ragingplatypus.com/';" /></tagline>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onreset.xml b/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onreset.xml
deleted file mode 100644
index 17932f368..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onreset.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed tagline contains onreset
-Expect:      not bozo and feed['tagline'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<tagline type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onreset="location.href='http://www.ragingplatypus.com/';" /></tagline>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onresize.xml b/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onresize.xml
deleted file mode 100644
index bf712f872..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onresize.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed tagline contains onresize
-Expect:      not bozo and feed['tagline'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<tagline type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onresize="location.href='http://www.ragingplatypus.com/';" /></tagline>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onsubmit.xml b/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onsubmit.xml
deleted file mode 100644
index a33ebf451..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onsubmit.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed tagline contains onsubmit
-Expect:      not bozo and feed['tagline'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<tagline type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onsubmit="location.href='http://www.ragingplatypus.com/';" /></tagline>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onunload.xml b/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onunload.xml
deleted file mode 100644
index 2d1550557..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onunload.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed tagline contains onunload
-Expect:      not bozo and feed['tagline'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<tagline type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onunload="location.href='http://www.ragingplatypus.com/';" /></tagline>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_script.xml b/lib/feedparser/tests/wellformed/sanitize/feed_tagline_script.xml
deleted file mode 100644
index b818be55f..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_script.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed tagline contains script
-Expect:      not bozo and feed['tagline'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<tagline type="text/html" mode="escaped">safe&lt;script type="text/javascript">location.href='http:/'+'/example.com/';&lt;/script> description</tagline>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_script_cdata.xml b/lib/feedparser/tests/wellformed/sanitize/feed_tagline_script_cdata.xml
deleted file mode 100644
index 943c8d616..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_script_cdata.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed tagline contains script
-Expect:      not bozo and feed['tagline'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<tagline type="text/html" mode="escaped"><![CDATA[safe<script type="text/javascript">location.href='http:/'+'/example.com/';</script> description]]></tagline>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_script_inline.xml b/lib/feedparser/tests/wellformed/sanitize/feed_tagline_script_inline.xml
deleted file mode 100644
index 902946517..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_script_inline.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed tagline contains script
-Expect:      not bozo and feed['tagline'] == u'<div>safe description</div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<tagline type="application/xhtml+xml" mode="xml"><div xmlns="http://www.w3.org/1999/xhtml">safe<script type="text/javascript">location.href='http:/'+'/example.com/';</script> description</div></tagline>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_script_map_description.xml b/lib/feedparser/tests/wellformed/sanitize/feed_tagline_script_map_description.xml
deleted file mode 100644
index fb9d0ef64..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_script_map_description.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed tagline contains script (maps to description)
-Expect:      not bozo and feed['description'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<tagline type="text/html" mode="escaped">safe&lt;script type="text/javascript">location.href='http:/'+'/example.com/';&lt;/script> description</tagline>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_style.xml b/lib/feedparser/tests/wellformed/sanitize/feed_tagline_style.xml
deleted file mode 100644
index abc68f35a..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_style.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed tagline contains style
-Expect:      not bozo and feed['tagline'] == u'<a href="http://www.ragingplatypus.com/" style="display: block; width: 100%; height: 100%; background-color: black; background-x: center; background-y: center;">never trust your upstream platypus</a>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<tagline type="text/html" mode="escaped">&lt;a href="http://www.ragingplatypus.com/" style="display:block; position:absolute; left:0; top:0; width:100%; height:100%; z-index:1; background-color:black; background-image:url(http://www.ragingplatypus.com/i/cam-full.jpg); background-x:center; background-y:center; background-repeat:repeat;">never trust your upstream platypus&lt;/a></tagline>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_title_applet.xml b/lib/feedparser/tests/wellformed/sanitize/feed_title_applet.xml
deleted file mode 100644
index 7d6156bc1..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_title_applet.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed title contains applet
-Expect:      not bozo and feed['title'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title type="text/html" mode="escaped">safe&lt;applet code="foo.class" codebase="http://example.com/">&lt;/applet> description</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_title_blink.xml b/lib/feedparser/tests/wellformed/sanitize/feed_title_blink.xml
deleted file mode 100644
index e9fb536c9..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_title_blink.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed title contains blink
-Expect:      not bozo and feed['title'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title type="text/html" mode="escaped">&lt;blink>safe&lt;/blink> description</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_title_crazy.xml b/lib/feedparser/tests/wellformed/sanitize/feed_title_crazy.xml
deleted file mode 100644
index dfca8a2cf..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_title_crazy.xml
+++ /dev/null
@@ -1,73 +0,0 @@
-<!--
-Description: feed title is crazy
-Expect:      not bozo and feed['title'] == u'Crazy HTML -' + u'- Can Your Regex Parse This?\n\n\n\n<!-' + u'- <script> -' + u'->\n\n<!-' + u'- \n\t<script> \n-' + u'->\n\n\n\nfunction executeMe()\n{\n\n\n\n\n/* \n<h1>Did The Javascript Execute?</h1>\n<div>\nI will execute here, too, if you mouse over me\n</div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title type="text/html" mode="escaped">
-&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-&lt;html xmlns="http://www.w3.org/1999/xhtml">
-&lt;head>
-&lt;title>Crazy HTML -- Can Your Regex Parse This?&lt;/title>
-
-&lt;/head>
-&lt;body    notRealAttribute="value"onload="executeMe();"foo="bar"
-
->
-&lt;!-- &lt;script> -->
-
-&lt;!-- 
-	&lt;script> 
--->
-
-&lt;/script>
-
-
-&lt;script
-
-
->
-
-function executeMe()
-{
-
-
-
-
-/* &lt;script> 
-function am_i_javascript()
-{
-	var str = "Some innocuously commented out stuff";
-}
-&lt; /script>
-*/
-
-	
-	
-	
-	
-	
-	
-	
-	
-	alert("Executed");
-}
-
-                                   &lt;/script
-
-
-
->
-&lt;h1>Did The Javascript Execute?&lt;/h1>
-&lt;div notRealAttribute="value
-"onmouseover="
-executeMe();
-"foo="bar">
-I will execute here, too, if you mouse over me
-&lt;/div>
-
-&lt;/body>
-
-&lt;/html>
-</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_title_embed.xml b/lib/feedparser/tests/wellformed/sanitize/feed_title_embed.xml
deleted file mode 100644
index 0ae3167d8..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_title_embed.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed title contains embed
-Expect:      not bozo and feed['title'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title type="text/html" mode="escaped">safe&lt;embed src="http://example.com/"> description</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_title_frame.xml b/lib/feedparser/tests/wellformed/sanitize/feed_title_frame.xml
deleted file mode 100644
index c6df6c008..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_title_frame.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed title contains frame
-Expect:      not bozo and feed['title'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title type="text/html" mode="escaped">safe&lt;frameset rows="*">&lt;frame src="http://example.com/">&lt;/frameset> description</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_title_iframe.xml b/lib/feedparser/tests/wellformed/sanitize/feed_title_iframe.xml
deleted file mode 100644
index 9422d3684..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_title_iframe.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed title contains iframe
-Expect:      not bozo and feed['title'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title type="text/html" mode="escaped">safe&lt;iframe src="http://example.com/">&lt;/iframe> description</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_title_link.xml b/lib/feedparser/tests/wellformed/sanitize/feed_title_link.xml
deleted file mode 100644
index d540cc411..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_title_link.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed title contains link
-Expect:      not bozo and feed['title'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title type="text/html" mode="escaped">safe&lt;link rel="stylesheet" type="text/css" href="http://example.com/evil.css"> description</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_title_meta.xml b/lib/feedparser/tests/wellformed/sanitize/feed_title_meta.xml
deleted file mode 100644
index 801c4df35..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_title_meta.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed title contains meta
-Expect:      not bozo and feed['title'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title type="text/html" mode="escaped">safe&lt;meta http-equiv="Refresh" content="0; URL=http://example.com/"> description</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_title_object.xml b/lib/feedparser/tests/wellformed/sanitize/feed_title_object.xml
deleted file mode 100644
index 312cc841b..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_title_object.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed title contains object
-Expect:      not bozo and feed['title'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title type="text/html" mode="escaped">safe&lt;object classid="clsid:C932BA85-4374-101B-A56C-00AA003668DC"> description</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_title_onabort.xml b/lib/feedparser/tests/wellformed/sanitize/feed_title_onabort.xml
deleted file mode 100644
index 36f5e9134..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_title_onabort.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed title contains onabort
-Expect:      not bozo and feed['title'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onabort="location.href='http://www.ragingplatypus.com/';" /></title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_title_onblur.xml b/lib/feedparser/tests/wellformed/sanitize/feed_title_onblur.xml
deleted file mode 100644
index dbf5f3af8..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_title_onblur.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed title contains onblur
-Expect:      not bozo and feed['title'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onblur="location.href='http://www.ragingplatypus.com/';" /></title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_title_onchange.xml b/lib/feedparser/tests/wellformed/sanitize/feed_title_onchange.xml
deleted file mode 100644
index 26ba2385c..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_title_onchange.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed title contains onchange
-Expect:      not bozo and feed['title'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onchange="location.href='http://www.ragingplatypus.com/';" /></title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_title_onclick.xml b/lib/feedparser/tests/wellformed/sanitize/feed_title_onclick.xml
deleted file mode 100644
index 76be05c88..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_title_onclick.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed title contains onclick
-Expect:      not bozo and feed['title'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onclick="location.href='http://www.ragingplatypus.com/';" /></title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_title_ondblclick.xml b/lib/feedparser/tests/wellformed/sanitize/feed_title_ondblclick.xml
deleted file mode 100644
index 69df1cd24..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_title_ondblclick.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed title contains ondblclick
-Expect:      not bozo and feed['title'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" ondblclick="location.href='http://www.ragingplatypus.com/';" /></title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_title_onerror.xml b/lib/feedparser/tests/wellformed/sanitize/feed_title_onerror.xml
deleted file mode 100644
index 254a630a3..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_title_onerror.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed title contains onerror
-Expect:      not bozo and feed['title'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onerror="location.href='http://www.ragingplatypus.com/';" /></title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_title_onfocus.xml b/lib/feedparser/tests/wellformed/sanitize/feed_title_onfocus.xml
deleted file mode 100644
index 0f2cfa7e1..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_title_onfocus.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed title contains onfocus
-Expect:      not bozo and feed['title'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onfocus="location.href='http://www.ragingplatypus.com/';" /></title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_title_onkeydown.xml b/lib/feedparser/tests/wellformed/sanitize/feed_title_onkeydown.xml
deleted file mode 100644
index 665771306..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_title_onkeydown.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed title contains onkeydown
-Expect:      not bozo and feed['title'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onkeydown="location.href='http://www.ragingplatypus.com/';" /></title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_title_onkeypress.xml b/lib/feedparser/tests/wellformed/sanitize/feed_title_onkeypress.xml
deleted file mode 100644
index dc3e3bd44..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_title_onkeypress.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed title contains onkeypress
-Expect:      not bozo and feed['title'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onkeypress="location.href='http://www.ragingplatypus.com/';" /></title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_title_onkeyup.xml b/lib/feedparser/tests/wellformed/sanitize/feed_title_onkeyup.xml
deleted file mode 100644
index 5f2e98a48..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_title_onkeyup.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed title contains onkeyup
-Expect:      not bozo and feed['title'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onkeyup="location.href='http://www.ragingplatypus.com/';" /></title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_title_onload.xml b/lib/feedparser/tests/wellformed/sanitize/feed_title_onload.xml
deleted file mode 100644
index 066a375ec..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_title_onload.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed title contains onload
-Expect:      not bozo and feed['title'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onload="location.href='http://www.ragingplatypus.com/';" /></title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_title_onmousedown.xml b/lib/feedparser/tests/wellformed/sanitize/feed_title_onmousedown.xml
deleted file mode 100644
index a4a9281d7..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_title_onmousedown.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed title contains onmousedown
-Expect:      not bozo and feed['title'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmousedown="location.href='http://www.ragingplatypus.com/';" /></title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_title_onmouseout.xml b/lib/feedparser/tests/wellformed/sanitize/feed_title_onmouseout.xml
deleted file mode 100644
index 6edc7e3ea..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_title_onmouseout.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed title contains onmouseout
-Expect:      not bozo and feed['title'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmouseout="location.href='http://www.ragingplatypus.com/';" /></title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_title_onmouseover.xml b/lib/feedparser/tests/wellformed/sanitize/feed_title_onmouseover.xml
deleted file mode 100644
index 6da205b8c..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_title_onmouseover.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed title contains onmouseover
-Expect:      not bozo and feed['title'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmouseover="location.href='http://www.ragingplatypus.com/';" /></title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_title_onmouseup.xml b/lib/feedparser/tests/wellformed/sanitize/feed_title_onmouseup.xml
deleted file mode 100644
index b76931025..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_title_onmouseup.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed title contains onmouseup
-Expect:      not bozo and feed['title'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmouseup="location.href='http://www.ragingplatypus.com/';" /></title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_title_onreset.xml b/lib/feedparser/tests/wellformed/sanitize/feed_title_onreset.xml
deleted file mode 100644
index cd3422e27..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_title_onreset.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed title contains onreset
-Expect:      not bozo and feed['title'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onreset="location.href='http://www.ragingplatypus.com/';" /></title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_title_onresize.xml b/lib/feedparser/tests/wellformed/sanitize/feed_title_onresize.xml
deleted file mode 100644
index 9d6bcee72..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_title_onresize.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed title contains onresize
-Expect:      not bozo and feed['title'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onresize="location.href='http://www.ragingplatypus.com/';" /></title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_title_onsubmit.xml b/lib/feedparser/tests/wellformed/sanitize/feed_title_onsubmit.xml
deleted file mode 100644
index 153d6f2f3..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_title_onsubmit.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed title contains onsubmit
-Expect:      not bozo and feed['title'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onsubmit="location.href='http://www.ragingplatypus.com/';" /></title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_title_onunload.xml b/lib/feedparser/tests/wellformed/sanitize/feed_title_onunload.xml
deleted file mode 100644
index 77866f89a..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_title_onunload.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed title contains onunload
-Expect:      not bozo and feed['title'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onunload="location.href='http://www.ragingplatypus.com/';" /></title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_title_script.xml b/lib/feedparser/tests/wellformed/sanitize/feed_title_script.xml
deleted file mode 100644
index 632841633..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_title_script.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed title contains script
-Expect:      not bozo and feed['title'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title type="text/html" mode="escaped">safe&lt;script type="text/javascript">location.href='http:/'+'/example.com/';&lt;/script> description</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_title_script_cdata.xml b/lib/feedparser/tests/wellformed/sanitize/feed_title_script_cdata.xml
deleted file mode 100644
index a37085f3b..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_title_script_cdata.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed title contains script
-Expect:      not bozo and feed['title'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title type="text/html" mode="escaped"><![CDATA[safe<script type="text/javascript">location.href='http:/'+'/example.com/';</script> description]]></title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_title_script_inline.xml b/lib/feedparser/tests/wellformed/sanitize/feed_title_script_inline.xml
deleted file mode 100644
index 889667e63..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_title_script_inline.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed title contains script
-Expect:      not bozo and feed['title'] == u'<div>safe description</div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title type="application/xhtml+xml" mode="xml"><div xmlns="http://www.w3.org/1999/xhtml">safe<script type="text/javascript">location.href='http:/'+'/example.com/';</script> description</div></title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_title_style.xml b/lib/feedparser/tests/wellformed/sanitize/feed_title_style.xml
deleted file mode 100644
index c1aeaec82..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_title_style.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed title contains style
-Expect:      not bozo and feed['title'] == u'<a href="http://www.ragingplatypus.com/" style="display: block; width: 100%; height: 100%; background-color: black; background-x: center; background-y: center;">never trust your upstream platypus</a>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title type="text/html" mode="escaped">&lt;a href="http://www.ragingplatypus.com/" style="display:block; position:absolute; left:0; top:0; width:100%; height:100%; z-index:1; background-color:black; background-image:url(http://www.ragingplatypus.com/i/cam-full.jpg); background-x:center; background-y:center; background-repeat:repeat;">never trust your upstream platypus&lt;/a></title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_title_unacceptable_uri.xml b/lib/feedparser/tests/wellformed/sanitize/feed_title_unacceptable_uri.xml
deleted file mode 100644
index 7d66c5a85..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_title_unacceptable_uri.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: anchor href contains unacceptable uri scheme
-Expect:      not bozo and feed['title'] == u'<a href="">safe</a>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <title type="html">&lt;a href="javascript:alert(1)"&gt;safe&lt;/a&gt;</title>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_body_applet.xml b/lib/feedparser/tests/wellformed/sanitize/item_body_applet.xml
deleted file mode 100644
index 10dea8b0d..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_body_applet.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item xhtml:body contains applet
-Expect:      not bozo and entries[0]['description'] == u'safe description'
--->
-<rss version="2.0">
-<channel>
-<item>
-<body>safe<applet code="foo.class" codebase="http://example.com/"></applet> description</body>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_body_blink.xml b/lib/feedparser/tests/wellformed/sanitize/item_body_blink.xml
deleted file mode 100644
index b570ff208..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_body_blink.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item xhtml:body contains blink
-Expect:      not bozo and entries[0]['description'] == u'safe description'
--->
-<rss version="2.0">
-<channel>
-<item>
-<body><blink>safe</blink> description</body>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_body_embed.xml b/lib/feedparser/tests/wellformed/sanitize/item_body_embed.xml
deleted file mode 100644
index 2f2a2db17..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_body_embed.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item xhtml:body contains embed
-Expect:      not bozo and entries[0]['description'] == u'safe description'
--->
-<rss version="2.0">
-<channel>
-<item>
-<body>safe<embed src="http://example.com/" /> description</body>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_body_frame.xml b/lib/feedparser/tests/wellformed/sanitize/item_body_frame.xml
deleted file mode 100644
index 7228ecfb9..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_body_frame.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item xhtml:body contains frame
-Expect:      not bozo and entries[0]['description'] == u'safe description'
--->
-<rss version="2.0">
-<channel>
-<item>
-<body>safe<frameset rows="*"><frame src="http://example.com/" /></frameset> description</body>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_body_iframe.xml b/lib/feedparser/tests/wellformed/sanitize/item_body_iframe.xml
deleted file mode 100644
index 561fe3129..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_body_iframe.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item xhtml:body contains iframe
-Expect:      not bozo and entries[0]['description'] == u'safe description'
--->
-<rss version="2.0">
-<channel>
-<item>
-<body>safe<iframe src="http://example.com/" /> description</body>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_body_link.xml b/lib/feedparser/tests/wellformed/sanitize/item_body_link.xml
deleted file mode 100644
index aa8881470..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_body_link.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item xhtml:body contains link
-Expect:      not bozo and entries[0]['description'] == u'safe description'
--->
-<rss version="2.0">
-<channel>
-<item>
-<body>safe<link rel="stylesheet" type="text/css" href="http://example.com/evil.css" /> description</body>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_body_meta.xml b/lib/feedparser/tests/wellformed/sanitize/item_body_meta.xml
deleted file mode 100644
index 7bfbddf1c..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_body_meta.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item xhtml:body contains meta
-Expect:      not bozo and entries[0]['description'] == u'safe description'
--->
-<rss version="2.0">
-<channel>
-<item>
-<body>safe<meta http-equiv="Refresh" content="0; URL=http://example.com/" /> description</body>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_body_object.xml b/lib/feedparser/tests/wellformed/sanitize/item_body_object.xml
deleted file mode 100644
index 11b8bbfb0..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_body_object.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item xhtml:body contains object
-Expect:      not bozo and entries[0]['description'] == u'safe description'
--->
-<rss version="2.0">
-<channel>
-<item>
-<body>safe<object classid="clsid:C932BA85-4374-101B-A56C-00AA003668DC" /> description</body>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_body_onabort.xml b/lib/feedparser/tests/wellformed/sanitize/item_body_onabort.xml
deleted file mode 100644
index 4570265a2..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_body_onabort.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item xhtml:body contains onabort
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<body><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onabort="location.href='http://www.ragingplatypus.com/';" /></body>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_body_onblur.xml b/lib/feedparser/tests/wellformed/sanitize/item_body_onblur.xml
deleted file mode 100644
index db9fdd63f..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_body_onblur.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item xhtml:body contains onblur
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<body><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onblur="location.href='http://www.ragingplatypus.com/';" /></body>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_body_onchange.xml b/lib/feedparser/tests/wellformed/sanitize/item_body_onchange.xml
deleted file mode 100644
index 34283c222..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_body_onchange.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item xhtml:body contains onchange
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<body><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onchange="location.href='http://www.ragingplatypus.com/';" /></body>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_body_onclick.xml b/lib/feedparser/tests/wellformed/sanitize/item_body_onclick.xml
deleted file mode 100644
index 0d5aa97cf..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_body_onclick.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item xhtml:body contains onclick
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<body><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onclick="location.href='http://www.ragingplatypus.com/';" /></body>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_body_ondblclick.xml b/lib/feedparser/tests/wellformed/sanitize/item_body_ondblclick.xml
deleted file mode 100644
index da15eb7e6..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_body_ondblclick.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item xhtml:body contains ondblclick
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<body><img src="http://www.ragingplatypus.com/i/cam-full.jpg" ondblclick="location.href='http://www.ragingplatypus.com/';" /></body>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_body_onerror.xml b/lib/feedparser/tests/wellformed/sanitize/item_body_onerror.xml
deleted file mode 100644
index fa03c8804..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_body_onerror.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item xhtml:body contains onerror
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<body><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onerror="location.href='http://www.ragingplatypus.com/';" /></body>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_body_onfocus.xml b/lib/feedparser/tests/wellformed/sanitize/item_body_onfocus.xml
deleted file mode 100644
index 527daffa7..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_body_onfocus.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item xhtml:body contains onfocus
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<body><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onfocus="location.href='http://www.ragingplatypus.com/';" /></body>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_body_onkeydown.xml b/lib/feedparser/tests/wellformed/sanitize/item_body_onkeydown.xml
deleted file mode 100644
index 3dd446f6f..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_body_onkeydown.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item xhtml:body contains onkeydown
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<body><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onkeydown="location.href='http://www.ragingplatypus.com/';" /></body>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_body_onkeypress.xml b/lib/feedparser/tests/wellformed/sanitize/item_body_onkeypress.xml
deleted file mode 100644
index b11ca5298..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_body_onkeypress.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item xhtml:body contains onkeypress
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<body><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onkeypress="location.href='http://www.ragingplatypus.com/';" /></body>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_body_onkeyup.xml b/lib/feedparser/tests/wellformed/sanitize/item_body_onkeyup.xml
deleted file mode 100644
index 2a023e8f5..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_body_onkeyup.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item xhtml:body contains onkeyup
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<body><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onkeyup="location.href='http://www.ragingplatypus.com/';" /></body>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_body_onload.xml b/lib/feedparser/tests/wellformed/sanitize/item_body_onload.xml
deleted file mode 100644
index b50f61b6b..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_body_onload.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item xhtml:body contains onload
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<body><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onload="location.href='http://www.ragingplatypus.com/';" /></body>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_body_onmousedown.xml b/lib/feedparser/tests/wellformed/sanitize/item_body_onmousedown.xml
deleted file mode 100644
index 29ed18866..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_body_onmousedown.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item xhtml:body contains onmousedown
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<body><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmousedown="location.href='http://www.ragingplatypus.com/';" /></body>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_body_onmouseout.xml b/lib/feedparser/tests/wellformed/sanitize/item_body_onmouseout.xml
deleted file mode 100644
index 17c1e9da7..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_body_onmouseout.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item xhtml:body contains onmouseout
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<body><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmouseout="location.href='http://www.ragingplatypus.com/';" /></body>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_body_onmouseover.xml b/lib/feedparser/tests/wellformed/sanitize/item_body_onmouseover.xml
deleted file mode 100644
index 6d0c28d51..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_body_onmouseover.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item xhtml:body contains onmouseover
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<body><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmouseover="location.href='http://www.ragingplatypus.com/';" /></body>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_body_onmouseup.xml b/lib/feedparser/tests/wellformed/sanitize/item_body_onmouseup.xml
deleted file mode 100644
index b0c71b570..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_body_onmouseup.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item xhtml:body contains onmouseup
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<body><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmouseup="location.href='http://www.ragingplatypus.com/';" /></body>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_body_onreset.xml b/lib/feedparser/tests/wellformed/sanitize/item_body_onreset.xml
deleted file mode 100644
index e38ed3a66..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_body_onreset.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item xhtml:body contains onreset
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<body><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onreset="location.href='http://www.ragingplatypus.com/';" /></body>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_body_onresize.xml b/lib/feedparser/tests/wellformed/sanitize/item_body_onresize.xml
deleted file mode 100644
index f567550e0..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_body_onresize.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item xhtml:body contains onresize
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<body><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onresize="location.href='http://www.ragingplatypus.com/';" /></body>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_body_onsubmit.xml b/lib/feedparser/tests/wellformed/sanitize/item_body_onsubmit.xml
deleted file mode 100644
index d51966e5d..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_body_onsubmit.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item xhtml:body contains onsubmit
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<body><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onsubmit="location.href='http://www.ragingplatypus.com/';" /></body>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_body_onunload.xml b/lib/feedparser/tests/wellformed/sanitize/item_body_onunload.xml
deleted file mode 100644
index 3f6ed3bf2..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_body_onunload.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item xhtml:body contains onunload
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<body><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onunload="location.href='http://www.ragingplatypus.com/';" /></body>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_body_script.xml b/lib/feedparser/tests/wellformed/sanitize/item_body_script.xml
deleted file mode 100644
index c51e8882f..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_body_script.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item xhtml:body contains script
-Expect:      not bozo and entries[0]['description'] == u'safe description'
--->
-<rss version="2.0">
-<channel>
-<item>
-<body>safe<script type="text/javascript">location.href='http:/'+'/example.com/';</script> description</body>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_body_script_map_content.xml b/lib/feedparser/tests/wellformed/sanitize/item_body_script_map_content.xml
deleted file mode 100644
index 699e24de2..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_body_script_map_content.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item xhtml:body contains script (maps to content)
-Expect:      not bozo and entries[0]['content'][0]['value'] == u'safe description'
--->
-<rss version="2.0">
-<channel>
-<item>
-<body>safe<script type="text/javascript">location.href='http:/'+'/example.com/';</script> description</body>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_body_style.xml b/lib/feedparser/tests/wellformed/sanitize/item_body_style.xml
deleted file mode 100644
index cf4a9bdf4..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_body_style.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item xhtml:body contains style
-Expect:      not bozo and entries[0]['description'] == u'<a href="http://www.ragingplatypus.com/" style="display: block; width: 100%; height: 100%; background-color: black; background-x: center; background-y: center;">never trust your upstream platypus</a>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<body><a href="http://www.ragingplatypus.com/" style="display:block; position:absolute; left:0; top:0; width:100%; height:100%; z-index:1; background-color:black; background-image:url(http://www.ragingplatypus.com/i/cam-full.jpg); background-x:center; background-y:center; background-repeat:repeat;">never trust your upstream platypus</a></body>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_applet.xml b/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_applet.xml
deleted file mode 100644
index 415e98757..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_applet.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item content:encoded contains applet
-Expect:      not bozo and entries[0]['description'] == u'safe description'
--->
-<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
-<channel>
-<item>
-<content:encoded>safe&lt;applet code="foo.class" codebase="http://example.com">&lt;/applet> description</content:encoded>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_blink.xml b/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_blink.xml
deleted file mode 100644
index e9d6d4c50..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_blink.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item content:encoded contains blink
-Expect:      not bozo and entries[0]['description'] == u'safe description'
--->
-<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
-<channel>
-<item>
-<content:encoded>&lt;blink>safe&lt;/blink> description</content:encoded>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_crazy.xml b/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_crazy.xml
deleted file mode 100644
index 1f05f8a43..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_crazy.xml
+++ /dev/null
@@ -1,77 +0,0 @@
-<!--
-Description: item content:encoded is crazy
-Expect:      not bozo and entries[0]['description'] == u'Crazy HTML -' + u'- Can Your Regex Parse This?\n\n\n\n<!-' + u'- <script> -' + u'->\n\n<!-' + u'- \n\t<script> \n-' + u'->\n\n\n\nfunction executeMe()\n{\n\n\n\n\n/* \n<h1>Did The Javascript Execute?</h1>\n<div>\nI will execute here, too, if you mouse over me\n</div>'
--->
-<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
-<channel>
-<item>
-<content:encoded>
-&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-&lt;html xmlns="http://www.w3.org/1999/xhtml">
-&lt;head>
-&lt;title>Crazy HTML -- Can Your Regex Parse This?&lt;/title>
-
-&lt;/head>
-&lt;body    notRealAttribute="value"onload="executeMe();"foo="bar"
-
->
-&lt;!-- &lt;script> -->
-
-&lt;!-- 
-	&lt;script> 
--->
-
-&lt;/script>
-
-
-&lt;script
-
-
->
-
-function executeMe()
-{
-
-
-
-
-/* &lt;script> 
-function am_i_javascript()
-{
-	var str = "Some innocuously commented out stuff";
-}
-&lt; /script>
-*/
-
-	
-	
-	
-	
-	
-	
-	
-	
-	alert("Executed");
-}
-
-                                   &lt;/script
-
-
-
->
-&lt;h1>Did The Javascript Execute?&lt;/h1>
-&lt;div notRealAttribute="value
-"onmouseover="
-executeMe();
-"foo="bar">
-I will execute here, too, if you mouse over me
-&lt;/div>
-
-&lt;/body>
-
-&lt;/html>
-</content:encoded>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_embed.xml b/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_embed.xml
deleted file mode 100644
index 1f93f0597..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_embed.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item content:encoded contains embed
-Expect:      not bozo and entries[0]['description'] == u'safe description'
--->
-<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
-<channel>
-<item>
-<content:encoded>safe&lt;embed src="http://example.com"> description</content:encoded>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_frame.xml b/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_frame.xml
deleted file mode 100644
index a4afb4045..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_frame.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item content:encoded contains frame
-Expect:      not bozo and entries[0]['description'] == u'safe description'
--->
-<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
-<channel>
-<item>
-<content:encoded>safe&lt;frameset rows="*">&lt;frame src="http://example.com/">&lt;/frameset> description</content:encoded>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_iframe.xml b/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_iframe.xml
deleted file mode 100644
index 38ce41e80..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_iframe.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item content:encoded contains iframe
-Expect:      not bozo and entries[0]['description'] == u'safe description'
--->
-<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
-<channel>
-<item>
-<content:encoded>safe&lt;iframe src="http://example.com" /> description</content:encoded>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_link.xml b/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_link.xml
deleted file mode 100644
index d1b71f898..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_link.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item content:encoded contains link
-Expect:      not bozo and entries[0]['description'] == u'safe description'
--->
-<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
-<channel>
-<item>
-<content:encoded>safe&lt;link rel="stylesheet" type="text/css" href="http://example.com/evil.css"> description</content:encoded>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_map_content.xml b/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_map_content.xml
deleted file mode 100644
index eeedc6b62..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_map_content.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item content:encoded contains script
-Expect:      not bozo and entries[0]['content'][0]['value'] == u'safe description'
--->
-<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
-<channel>
-<item>
-<content:encoded>safe&lt;script type="text/javascript">location.href='http:/'+'/example.com/';&lt;/script> description</content:encoded>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_meta.xml b/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_meta.xml
deleted file mode 100644
index c10b683f0..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_meta.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item content:encoded contains meta
-Expect:      not bozo and entries[0]['description'] == u'safe description'
--->
-<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
-<channel>
-<item>
-<content:encoded>safe&lt;meta http-equiv="Refresh" content="0; URL=http://example.com/"> description</content:encoded>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_object.xml b/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_object.xml
deleted file mode 100644
index f78f9470d..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_object.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item content:encoded contains object
-Expect:      not bozo and entries[0]['description'] == u'safe description'
--->
-<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
-<channel>
-<item>
-<content:encoded>safe&lt;object classid="clsid:C932BA85-4374-101B-A56C-00AA003668DC"> description</content:encoded>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onabort.xml b/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onabort.xml
deleted file mode 100644
index ef3aa24e4..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onabort.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item content:encoded contains onabort
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
-<channel>
-<item>
-<content:encoded>&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onabort="location.href='http://www.ragingplatypus.com/';" /></content:encoded>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onblur.xml b/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onblur.xml
deleted file mode 100644
index 2ce078728..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onblur.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item content:encoded contains onblur
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
-<channel>
-<item>
-<content:encoded>&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onblur="location.href='http://www.ragingplatypus.com/';" /></content:encoded>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onchange.xml b/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onchange.xml
deleted file mode 100644
index b486c17db..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onchange.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item content:encoded contains onchange
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
-<channel>
-<item>
-<content:encoded>&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onchange="location.href='http://www.ragingplatypus.com/';" /></content:encoded>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onclick.xml b/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onclick.xml
deleted file mode 100644
index d09e92c81..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onclick.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item content:encoded contains onclick
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
-<channel>
-<item>
-<content:encoded>&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onclick="location.href='http://www.ragingplatypus.com/';" /></content:encoded>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_ondblclick.xml b/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_ondblclick.xml
deleted file mode 100644
index 6471081a6..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_ondblclick.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item content:encoded contains ondblclick
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
-<channel>
-<item>
-<content:encoded>&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" ondblclick="location.href='http://www.ragingplatypus.com/';" /></content:encoded>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onerror.xml b/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onerror.xml
deleted file mode 100644
index 8d4b4ff3e..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onerror.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item content:encoded contains onerror
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
-<channel>
-<item>
-<content:encoded>&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onerror="location.href='http://www.ragingplatypus.com/';" /></content:encoded>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onfocus.xml b/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onfocus.xml
deleted file mode 100644
index f8265b650..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onfocus.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item content:encoded contains onfocus
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
-<channel>
-<item>
-<content:encoded>&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onfocus="location.href='http://www.ragingplatypus.com/';" /></content:encoded>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onkeydown.xml b/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onkeydown.xml
deleted file mode 100644
index f7b12784e..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onkeydown.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item content:encoded contains onkeydown
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
-<channel>
-<item>
-<content:encoded>&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onkeydown="location.href='http://www.ragingplatypus.com/';" /></content:encoded>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onkeypress.xml b/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onkeypress.xml
deleted file mode 100644
index ee3fa7fe9..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onkeypress.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item content:encoded contains onkeypress
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
-<channel>
-<item>
-<content:encoded>&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onkeypress="location.href='http://www.ragingplatypus.com/';" /></content:encoded>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onkeyup.xml b/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onkeyup.xml
deleted file mode 100644
index 1acea49f4..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onkeyup.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item content:encoded contains onkeyup
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
-<channel>
-<item>
-<content:encoded>&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onkeyup="location.href='http://www.ragingplatypus.com/';" /></content:encoded>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onload.xml b/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onload.xml
deleted file mode 100644
index 49fed6def..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onload.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item content:encoded contains onload
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
-<channel>
-<item>
-<content:encoded>&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onload="location.href='http://www.ragingplatypus.com/';" /></content:encoded>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onmousedown.xml b/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onmousedown.xml
deleted file mode 100644
index 9628e7c7f..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onmousedown.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item content:encoded contains onmousedown
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
-<channel>
-<item>
-<content:encoded>&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmousedown="location.href='http://www.ragingplatypus.com/';" /></content:encoded>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onmouseout.xml b/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onmouseout.xml
deleted file mode 100644
index 4e5b3c1ad..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onmouseout.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item content:encoded contains onmouseout
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
-<channel>
-<item>
-<content:encoded>&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmouseout="location.href='http://www.ragingplatypus.com/';" /></content:encoded>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onmouseover.xml b/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onmouseover.xml
deleted file mode 100644
index 3c1e02165..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onmouseover.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item content:encoded contains onmouseover
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
-<channel>
-<item>
-<content:encoded>&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmouseover="location.href='http://www.ragingplatypus.com/';" /></content:encoded>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onmouseup.xml b/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onmouseup.xml
deleted file mode 100644
index d1df98f53..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onmouseup.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item content:encoded contains onmouseup
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
-<channel>
-<item>
-<content:encoded>&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmouseup="location.href='http://www.ragingplatypus.com/';" /></content:encoded>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onreset.xml b/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onreset.xml
deleted file mode 100644
index 469b429fe..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onreset.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item content:encoded contains onreset
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
-<channel>
-<item>
-<content:encoded>&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onreset="location.href='http://www.ragingplatypus.com/';" /></content:encoded>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onresize.xml b/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onresize.xml
deleted file mode 100644
index 67bd116ec..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onresize.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item content:encoded contains onresize
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
-<channel>
-<item>
-<content:encoded>&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onresize="location.href='http://www.ragingplatypus.com/';" /></content:encoded>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onsubmit.xml b/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onsubmit.xml
deleted file mode 100644
index 5acd05e84..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onsubmit.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item content:encoded contains onsubmit
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
-<channel>
-<item>
-<content:encoded>&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onsubmit="location.href='http://www.ragingplatypus.com/';" /></content:encoded>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onunload.xml b/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onunload.xml
deleted file mode 100644
index 458a05677..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onunload.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item content:encoded contains onunload
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
-<channel>
-<item>
-<content:encoded>&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onunload="location.href='http://www.ragingplatypus.com/';" /></content:encoded>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_script.xml b/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_script.xml
deleted file mode 100644
index f7ed178dc..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_script.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item content:encoded contains script
-Expect:      not bozo and entries[0]['description'] == u'safe description'
--->
-<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
-<channel>
-<item>
-<content:encoded>safe&lt;script type="text/javascript">location.href='http:/'+'/example.com/';&lt;/script> description</content:encoded>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_script_cdata.xml b/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_script_cdata.xml
deleted file mode 100644
index 89adffb80..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_script_cdata.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item content:encoded contains script
-Expect:      not bozo and entries[0]['description'] == u'safe description'
--->
-<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
-<channel>
-<item>
-<content:encoded><![CDATA[safe<script type="text/javascript">location.href='http:/'+'/example.com/';</script> description]]></content:encoded>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_script_map_content.xml b/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_script_map_content.xml
deleted file mode 100644
index ee8d3afa6..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_script_map_content.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item content:encoded contains script (maps to content)
-Expect:      not bozo and entries[0]['content'][0]['value'] == u'safe description'
--->
-<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
-<channel>
-<item>
-<content:encoded>safe&lt;script type="text/javascript">location.href='http:/'+'/example.com/';&lt;/script> description</content:encoded>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_script_nested_cdata.xml b/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_script_nested_cdata.xml
deleted file mode 100644
index 5663c57f9..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_script_nested_cdata.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: ensure nested CDATA sections are sanitized properly
-Expect: not bozo and entries[0]['content'][0]['value'] == u'&lt;![CDATA[]]&gt;'
--->
-<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" version="2.0">
-<channel>
-  <item>
-    <content:encoded><![CDATA[<![CDATA[<script></script>]]&gt;]]></content:encoded>
-  </item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_style.xml b/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_style.xml
deleted file mode 100644
index 1b9f957cb..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_style.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item content:encoded contains style
-Expect:      not bozo and entries[0]['description'] == u'<a href="http://www.ragingplatypus.com/" style="display: block; width: 100%; height: 100%; background-color: black; background-x: center; background-y: center;">never trust your upstream platypus</a>'
--->
-<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
-<channel>
-<item>
-<content:encoded>&lt;a href="http://www.ragingplatypus.com/" style="display:block; position:absolute; left:0; top:0; width:100%; height:100%; z-index:1; background-color:black; background-image:url(http://www.ragingplatypus.com/i/cam-full.jpg); background-x:center; background-y:center; background-repeat:repeat;">never trust your upstream platypus&lt;/a></content:encoded>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_description_applet.xml b/lib/feedparser/tests/wellformed/sanitize/item_description_applet.xml
deleted file mode 100644
index 8e694c934..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_description_applet.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item description contains applet
-Expect:      not bozo and entries[0]['description'] == u'safe description'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>safe&lt;applet code="foo.class" codebase="http://example.com/">&lt;/applet> description</description>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_description_blink.xml b/lib/feedparser/tests/wellformed/sanitize/item_description_blink.xml
deleted file mode 100644
index c84dedefb..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_description_blink.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item description contains blink
-Expect:      not bozo and entries[0]['description'] == u'safe description'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;blink>safe&lt;/blink> description</description>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_description_crazy.xml b/lib/feedparser/tests/wellformed/sanitize/item_description_crazy.xml
deleted file mode 100644
index 13e161abb..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_description_crazy.xml
+++ /dev/null
@@ -1,81 +0,0 @@
-<!--
-Description: item description is crazy
-Expect:      not bozo and entries[0]['description'] == u'Crazy HTML -' + u'- Can Your Regex Parse This?\n\n\n\n<!-' + u'- <script> -' + u'->\n\n<!-' + u'- \n\t<script> \n-' + u'->\n\n\n\nfunction executeMe()\n{\n\n\n\n\n/* \n<h1>Did The Javascript Execute?</h1>\n<div>\nI will execute here, too, if you mouse over me\n</div>'
--->
-<rss version="2.0">
-<channel>
-<title>Crazy RSS</title>
-<description>Contains unsafe script</description>
-<link>http://crazy.example.com/</link>
-<language>en</language>
-<item>
-<description>
-&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-&lt;html xmlns="http://www.w3.org/1999/xhtml">
-&lt;head>
-&lt;title>Crazy HTML -- Can Your Regex Parse This?&lt;/title>
-
-&lt;/head>
-&lt;body    notRealAttribute="value"onload="executeMe();"foo="bar"
-
->
-&lt;!-- &lt;script> -->
-
-&lt;!-- 
-	&lt;script> 
--->
-
-&lt;/script>
-
-
-&lt;script
-
-
->
-
-function executeMe()
-{
-
-
-
-
-/* &lt;script> 
-function am_i_javascript()
-{
-	var str = "Some innocuously commented out stuff";
-}
-&lt; /script>
-*/
-
-	
-	
-	
-	
-	
-	
-	
-	
-	alert("Executed");
-}
-
-                                   &lt;/script
-
-
-
->
-&lt;h1>Did The Javascript Execute?&lt;/h1>
-&lt;div notRealAttribute="value
-"onmouseover="
-executeMe();
-"foo="bar">
-I will execute here, too, if you mouse over me
-&lt;/div>
-
-&lt;/body>
-
-&lt;/html>
-</description>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_description_embed.xml b/lib/feedparser/tests/wellformed/sanitize/item_description_embed.xml
deleted file mode 100644
index 82524aad5..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_description_embed.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item description contains embed
-Expect:      not bozo and entries[0]['description'] == u'safe description'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>safe&lt;embed src="http://example.com/"> description</description>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_description_frame.xml b/lib/feedparser/tests/wellformed/sanitize/item_description_frame.xml
deleted file mode 100644
index 3ca0fa55e..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_description_frame.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item description contains frame
-Expect:      not bozo and entries[0]['description'] == u'safe description'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>safe&lt;frameset rows="*">&lt;frame src="http://example.com/">&lt;/frameset> description</description>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_description_iframe.xml b/lib/feedparser/tests/wellformed/sanitize/item_description_iframe.xml
deleted file mode 100644
index 93866748f..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_description_iframe.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item description contains iframe
-Expect:      not bozo and entries[0]['description'] == u'safe description'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>safe&lt;iframe src="http://example.com/"/> description</description>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_description_link.xml b/lib/feedparser/tests/wellformed/sanitize/item_description_link.xml
deleted file mode 100644
index 0d8956db4..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_description_link.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item description contains link
-Expect:      not bozo and entries[0]['description'] == u'safe description'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>safe&lt;link rel="stylesheet" type="text/css" href="http://example.com/evil.css"> description</description>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_description_meta.xml b/lib/feedparser/tests/wellformed/sanitize/item_description_meta.xml
deleted file mode 100644
index d9bfb014d..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_description_meta.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item description contains meta
-Expect:      not bozo and entries[0]['description'] == u'safe description'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>safe&lt;meta http-equiv="Refresh" content="0; URL=http://example.com/"> description</description>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_description_object.xml b/lib/feedparser/tests/wellformed/sanitize/item_description_object.xml
deleted file mode 100644
index 9b197da1c..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_description_object.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item description contains object
-Expect:      not bozo and entries[0]['description'] == u'safe description'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>safe&lt;object classid="clsid:C932BA85-4374-101B-A56C-00AA003668DC"> description</description>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_description_onabort.xml b/lib/feedparser/tests/wellformed/sanitize/item_description_onabort.xml
deleted file mode 100644
index 418885b19..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_description_onabort.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item description contains onabort
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onabort="location.href='http://www.ragingplatypus.com/';" /></description>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_description_onblur.xml b/lib/feedparser/tests/wellformed/sanitize/item_description_onblur.xml
deleted file mode 100644
index 121c72346..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_description_onblur.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item description contains onblur
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onblur="location.href='http://www.ragingplatypus.com/';" /></description>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_description_onchange.xml b/lib/feedparser/tests/wellformed/sanitize/item_description_onchange.xml
deleted file mode 100644
index e37c8c8a8..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_description_onchange.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item description contains onchange
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onchange="location.href='http://www.ragingplatypus.com/';" /></description>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_description_onclick.xml b/lib/feedparser/tests/wellformed/sanitize/item_description_onclick.xml
deleted file mode 100644
index 58c2d5656..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_description_onclick.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item description contains onclick
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onclick="location.href='http://www.ragingplatypus.com/';" /></description>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_description_ondblclick.xml b/lib/feedparser/tests/wellformed/sanitize/item_description_ondblclick.xml
deleted file mode 100644
index 9acaa1137..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_description_ondblclick.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item description contains ondblclick
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" ondblclick="location.href='http://www.ragingplatypus.com/';" /></description>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_description_onerror.xml b/lib/feedparser/tests/wellformed/sanitize/item_description_onerror.xml
deleted file mode 100644
index 32c0cfb2b..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_description_onerror.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item description contains onerror
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onerror="location.href='http://www.ragingplatypus.com/';" /></description>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_description_onfocus.xml b/lib/feedparser/tests/wellformed/sanitize/item_description_onfocus.xml
deleted file mode 100644
index 7c07c7e69..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_description_onfocus.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item description contains onfocus
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onfocus="location.href='http://www.ragingplatypus.com/';" /></description>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_description_onkeydown.xml b/lib/feedparser/tests/wellformed/sanitize/item_description_onkeydown.xml
deleted file mode 100644
index 39f67db35..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_description_onkeydown.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item description contains onkeydown
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onkeydown="location.href='http://www.ragingplatypus.com/';" /></description>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_description_onkeypress.xml b/lib/feedparser/tests/wellformed/sanitize/item_description_onkeypress.xml
deleted file mode 100644
index d1e4943ba..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_description_onkeypress.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item description contains onkeypress
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onkeypress="location.href='http://www.ragingplatypus.com/';" /></description>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_description_onkeyup.xml b/lib/feedparser/tests/wellformed/sanitize/item_description_onkeyup.xml
deleted file mode 100644
index 31b5117ce..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_description_onkeyup.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item description contains onkeyup
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onkeyup="location.href='http://www.ragingplatypus.com/';" /></description>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_description_onload.xml b/lib/feedparser/tests/wellformed/sanitize/item_description_onload.xml
deleted file mode 100644
index ebd8bd371..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_description_onload.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item description contains onload
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onload="location.href='http://www.ragingplatypus.com/';" /></description>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_description_onmousedown.xml b/lib/feedparser/tests/wellformed/sanitize/item_description_onmousedown.xml
deleted file mode 100644
index 7433d4e51..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_description_onmousedown.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item description contains onmousedown
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmousedown="location.href='http://www.ragingplatypus.com/';" /></description>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_description_onmouseout.xml b/lib/feedparser/tests/wellformed/sanitize/item_description_onmouseout.xml
deleted file mode 100644
index 6090a130d..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_description_onmouseout.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item description contains onmouseout
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmouseout="location.href='http://www.ragingplatypus.com/';" /></description>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_description_onmouseover.xml b/lib/feedparser/tests/wellformed/sanitize/item_description_onmouseover.xml
deleted file mode 100644
index 479c311bf..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_description_onmouseover.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item description contains onmouseover
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmouseover="location.href='http://www.ragingplatypus.com/';" /></description>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_description_onmouseup.xml b/lib/feedparser/tests/wellformed/sanitize/item_description_onmouseup.xml
deleted file mode 100644
index d8daa0199..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_description_onmouseup.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item description contains onmouseup
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmouseup="location.href='http://www.ragingplatypus.com/';" /></description>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_description_onreset.xml b/lib/feedparser/tests/wellformed/sanitize/item_description_onreset.xml
deleted file mode 100644
index b2f3f1831..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_description_onreset.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item description contains onreset
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onreset="location.href='http://www.ragingplatypus.com/';" /></description>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_description_onresize.xml b/lib/feedparser/tests/wellformed/sanitize/item_description_onresize.xml
deleted file mode 100644
index 4295a4ba0..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_description_onresize.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item description contains onresize
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onresize="location.href='http://www.ragingplatypus.com/';" /></description>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_description_onsubmit.xml b/lib/feedparser/tests/wellformed/sanitize/item_description_onsubmit.xml
deleted file mode 100644
index 125fe5c14..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_description_onsubmit.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item description contains onsubmit
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onsubmit="location.href='http://www.ragingplatypus.com/';" /></description>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_description_onunload.xml b/lib/feedparser/tests/wellformed/sanitize/item_description_onunload.xml
deleted file mode 100644
index b4dc59191..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_description_onunload.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item description contains onunload
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onunload="location.href='http://www.ragingplatypus.com/';" /></description>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_description_script.xml b/lib/feedparser/tests/wellformed/sanitize/item_description_script.xml
deleted file mode 100644
index b158ce7fa..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_description_script.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item description contains script
-Expect:      not bozo and entries[0]['description'] == u'safe description'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>safe&lt;script type="text/javascript">location.href='http:/'+'/example.com/';&lt;/script> description</description>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_description_script_cdata.xml b/lib/feedparser/tests/wellformed/sanitize/item_description_script_cdata.xml
deleted file mode 100644
index 1a40c2fc4..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_description_script_cdata.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item description contains script
-Expect:      not bozo and entries[0]['description'] == u'safe description'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description><![CDATA[safe<script type="text/javascript">location.href='http:/'+'/example.com/';</script> description]]></description>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_description_script_map_summary.xml b/lib/feedparser/tests/wellformed/sanitize/item_description_script_map_summary.xml
deleted file mode 100644
index d90a7aede..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_description_script_map_summary.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item description contains script (maps to content)
-Expect:      not bozo and entries[0]['summary'] == u'safe description'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>safe&lt;script type="text/javascript">location.href='http:/'+'/example.com/';&lt;/script> description</description>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_description_style.xml b/lib/feedparser/tests/wellformed/sanitize/item_description_style.xml
deleted file mode 100644
index 68a05eb49..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_description_style.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item description contains style
-Expect:      not bozo and entries[0]['description'] == u'<a href="http://www.ragingplatypus.com/" style="display: block; width: 100%; height: 100%; background-color: black; background-x: center; background-y: center;">never trust your upstream platypus</a>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;a href="http://www.ragingplatypus.com/" style="display:block; position:absolute; left:0; top:0; width:100%; height:100%; z-index:1; background-color:black; background-image:url(http://www.ragingplatypus.com/i/cam-full.jpg); background-x:center; background-y:center; background-repeat:repeat;">never trust your upstream platypus&lt;/a></description>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_applet.xml b/lib/feedparser/tests/wellformed/sanitize/item_fullitem_applet.xml
deleted file mode 100644
index 25a1c1ba1..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_applet.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item fullitem contains applet
-Expect:      not bozo and entries[0]['description'] == u'safe description'
--->
-<rss version="2.0">
-<channel>
-<item>
-<fullitem>safe&lt;applet code="foo.class" codebase="http://example.com/">&lt;/applet> description</fullitem>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_blink.xml b/lib/feedparser/tests/wellformed/sanitize/item_fullitem_blink.xml
deleted file mode 100644
index edda4f489..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_blink.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item fullitem contains blink
-Expect:      not bozo and entries[0]['description'] == u'safe description'
--->
-<rss version="2.0">
-<channel>
-<item>
-<fullitem>&lt;blink>safe&lt;/blink> description</fullitem>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_crazy.xml b/lib/feedparser/tests/wellformed/sanitize/item_fullitem_crazy.xml
deleted file mode 100644
index d92918385..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_crazy.xml
+++ /dev/null
@@ -1,77 +0,0 @@
-<!--
-Description: item fullitem is crazy
-Expect:      not bozo and entries[0]['description'] == u'Crazy HTML -' + u'- Can Your Regex Parse This?\n\n\n\n<!-' + u'- <script> -' + u'->\n\n<!-' + u'- \n\t<script> \n-' + u'->\n\n\n\nfunction executeMe()\n{\n\n\n\n\n/* \n<h1>Did The Javascript Execute?</h1>\n<div>\nI will execute here, too, if you mouse over me\n</div>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<fullitem>
-&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-&lt;html xmlns="http://www.w3.org/1999/xhtml">
-&lt;head>
-&lt;title>Crazy HTML -- Can Your Regex Parse This?&lt;/title>
-
-&lt;/head>
-&lt;body    notRealAttribute="value"onload="executeMe();"foo="bar"
-
->
-&lt;!-- &lt;script> -->
-
-&lt;!-- 
-	&lt;script> 
--->
-
-&lt;/script>
-
-
-&lt;script
-
-
->
-
-function executeMe()
-{
-
-
-
-
-/* &lt;script> 
-function am_i_javascript()
-{
-	var str = "Some innocuously commented out stuff";
-}
-&lt; /script>
-*/
-
-	
-	
-	
-	
-	
-	
-	
-	
-	alert("Executed");
-}
-
-                                   &lt;/script
-
-
-
->
-&lt;h1>Did The Javascript Execute?&lt;/h1>
-&lt;div notRealAttribute="value
-"onmouseover="
-executeMe();
-"foo="bar">
-I will execute here, too, if you mouse over me
-&lt;/div>
-
-&lt;/body>
-
-&lt;/html>
-</fullitem>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_embed.xml b/lib/feedparser/tests/wellformed/sanitize/item_fullitem_embed.xml
deleted file mode 100644
index dfa85cb78..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_embed.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item fullitem contains embed
-Expect:      not bozo and entries[0]['description'] == u'safe description'
--->
-<rss version="2.0">
-<channel>
-<item>
-<fullitem>safe&lt;embed src="http://example.com/"> description</fullitem>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_frame.xml b/lib/feedparser/tests/wellformed/sanitize/item_fullitem_frame.xml
deleted file mode 100644
index aa10c3aa3..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_frame.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item fullitem contains frame
-Expect:      not bozo and entries[0]['description'] == u'safe description'
--->
-<rss version="2.0">
-<channel>
-<item>
-<fullitem>safe&lt;frameset rows="*">&lt;frame src="http://example.com/">&lt;/frameset> description</fullitem>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_iframe.xml b/lib/feedparser/tests/wellformed/sanitize/item_fullitem_iframe.xml
deleted file mode 100644
index 7b23d2693..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_iframe.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item fullitem contains iframe
-Expect:      not bozo and entries[0]['description'] == u'safe description'
--->
-<rss version="2.0">
-<channel>
-<item>
-<fullitem>safe&lt;iframe src="http://example.com/"/> description</fullitem>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_link.xml b/lib/feedparser/tests/wellformed/sanitize/item_fullitem_link.xml
deleted file mode 100644
index 9cd909bd3..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_link.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item fullitem contains link
-Expect:      not bozo and entries[0]['description'] == u'safe description'
--->
-<rss version="2.0">
-<channel>
-<item>
-<fullitem>safe&lt;link rel="stylesheet" type="text/css" href="http://example.com/evil.css"> description</fullitem>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_meta.xml b/lib/feedparser/tests/wellformed/sanitize/item_fullitem_meta.xml
deleted file mode 100644
index 520185628..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_meta.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item fullitem contains meta
-Expect:      not bozo and entries[0]['description'] == u'safe description'
--->
-<rss version="2.0">
-<channel>
-<item>
-<fullitem>safe&lt;meta http-equiv="Refresh" content="0; URL=http://example.com/"> description</fullitem>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_object.xml b/lib/feedparser/tests/wellformed/sanitize/item_fullitem_object.xml
deleted file mode 100644
index f5df5c1bc..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_object.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item fullitem contains object
-Expect:      not bozo and entries[0]['description'] == u'safe description'
--->
-<rss version="2.0">
-<channel>
-<item>
-<fullitem>safe&lt;object classid="clsid:C932BA85-4374-101B-A56C-00AA003668DC"> description</fullitem>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onabort.xml b/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onabort.xml
deleted file mode 100644
index 528aa42c5..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onabort.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item fullitem contains onabort
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<fullitem>&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onabort="location.href='http://www.ragingplatypus.com/';" /></fullitem>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onblur.xml b/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onblur.xml
deleted file mode 100644
index c302e997c..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onblur.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item fullitem contains onblur
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<fullitem>&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onblur="location.href='http://www.ragingplatypus.com/';" /></fullitem>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onchange.xml b/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onchange.xml
deleted file mode 100644
index 28282e2e2..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onchange.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item fullitem contains onchange
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<fullitem>&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onchange="location.href='http://www.ragingplatypus.com/';" /></fullitem>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onclick.xml b/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onclick.xml
deleted file mode 100644
index 59a379b11..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onclick.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item fullitem contains onclick
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<fullitem>&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onclick="location.href='http://www.ragingplatypus.com/';" /></fullitem>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_ondblclick.xml b/lib/feedparser/tests/wellformed/sanitize/item_fullitem_ondblclick.xml
deleted file mode 100644
index f493d93af..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_ondblclick.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item fullitem contains ondblclick
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<fullitem>&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" ondblclick="location.href='http://www.ragingplatypus.com/';" /></fullitem>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onerror.xml b/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onerror.xml
deleted file mode 100644
index 5b5bcecbf..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onerror.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item fullitem contains onerror
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<fullitem>&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onerror="location.href='http://www.ragingplatypus.com/';" /></fullitem>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onfocus.xml b/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onfocus.xml
deleted file mode 100644
index bb221a5c5..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onfocus.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item fullitem contains onfocus
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<fullitem>&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onfocus="location.href='http://www.ragingplatypus.com/';" /></fullitem>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onkeydown.xml b/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onkeydown.xml
deleted file mode 100644
index fae1baa94..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onkeydown.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item fullitem contains onkeydown
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<fullitem>&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onkeydown="location.href='http://www.ragingplatypus.com/';" /></fullitem>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onkeypress.xml b/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onkeypress.xml
deleted file mode 100644
index 5165a6bc5..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onkeypress.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item fullitem contains onkeypress
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<fullitem>&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onkeypress="location.href='http://www.ragingplatypus.com/';" /></fullitem>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onkeyup.xml b/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onkeyup.xml
deleted file mode 100644
index 253849f6b..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onkeyup.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item fullitem contains onkeyup
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<fullitem>&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onkeyup="location.href='http://www.ragingplatypus.com/';" /></fullitem>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onload.xml b/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onload.xml
deleted file mode 100644
index 8d12e39f0..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onload.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item fullitem contains onload
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<fullitem>&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onload="location.href='http://www.ragingplatypus.com/';" /></fullitem>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onmousedown.xml b/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onmousedown.xml
deleted file mode 100644
index 458060b59..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onmousedown.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item fullitem contains onmousedown
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<fullitem>&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmousedown="location.href='http://www.ragingplatypus.com/';" /></fullitem>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onmouseout.xml b/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onmouseout.xml
deleted file mode 100644
index 6c29bbd9b..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onmouseout.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item fullitem contains onmouseout
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<fullitem>&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmouseout="location.href='http://www.ragingplatypus.com/';" /></fullitem>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onmouseover.xml b/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onmouseover.xml
deleted file mode 100644
index f6fb17b88..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onmouseover.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item fullitem contains onmouseover
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<fullitem>&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmouseover="location.href='http://www.ragingplatypus.com/';" /></fullitem>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onmouseup.xml b/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onmouseup.xml
deleted file mode 100644
index aa259b0a1..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onmouseup.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item fullitem contains onmouseup
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<fullitem>&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmouseup="location.href='http://www.ragingplatypus.com/';" /></fullitem>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onreset.xml b/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onreset.xml
deleted file mode 100644
index 8fb27e17b..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onreset.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item fullitem contains onreset
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<fullitem>&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onreset="location.href='http://www.ragingplatypus.com/';" /></fullitem>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onresize.xml b/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onresize.xml
deleted file mode 100644
index b50a30208..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onresize.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item fullitem contains onresize
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<fullitem>&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onresize="location.href='http://www.ragingplatypus.com/';" /></fullitem>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onsubmit.xml b/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onsubmit.xml
deleted file mode 100644
index d9e93efa0..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onsubmit.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item fullitem contains onsubmit
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<fullitem>&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onsubmit="location.href='http://www.ragingplatypus.com/';" /></fullitem>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onunload.xml b/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onunload.xml
deleted file mode 100644
index 8fc6faeca..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onunload.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item fullitem contains onunload
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<fullitem>&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onunload="location.href='http://www.ragingplatypus.com/';" /></fullitem>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_script.xml b/lib/feedparser/tests/wellformed/sanitize/item_fullitem_script.xml
deleted file mode 100644
index 79f834832..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_script.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item fullitem contains script
-Expect:      not bozo and entries[0]['description'] == u'safe description'
--->
-<rss version="2.0">
-<channel>
-<item>
-<fullitem>safe&lt;script type="text/javascript">location.href='http:/'+'/example.com/';&lt;/script> description</fullitem>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_script_cdata.xml b/lib/feedparser/tests/wellformed/sanitize/item_fullitem_script_cdata.xml
deleted file mode 100644
index 288abc29a..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_script_cdata.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item fullitem contains script
-Expect:      not bozo and entries[0]['description'] == u'safe description'
--->
-<rss version="2.0">
-<channel>
-<item>
-<fullitem><![CDATA[safe<script type="text/javascript">location.href='http:/'+'/example.com/';</script> description]]></fullitem>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_script_map_summary.xml b/lib/feedparser/tests/wellformed/sanitize/item_fullitem_script_map_summary.xml
deleted file mode 100644
index 8009588a8..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_script_map_summary.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item fullitem contains script (maps to content)
-Expect:      not bozo and entries[0]['content'][0]['value'] == u'safe description'
--->
-<rss version="2.0">
-<channel>
-<item>
-<fullitem>safe&lt;script type="text/javascript">location.href='http:/'+'/example.com/';&lt;/script> description</fullitem>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_style.xml b/lib/feedparser/tests/wellformed/sanitize/item_fullitem_style.xml
deleted file mode 100644
index 7a1a9dcce..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_style.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item fullitem contains style
-Expect:      not bozo and entries[0]['description'] == u'<a href="http://www.ragingplatypus.com/" style="display: block; width: 100%; height: 100%; background-color: black; background-x: center; background-y: center;">never trust your upstream platypus</a>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<fullitem>&lt;a href="http://www.ragingplatypus.com/" style="display:block; position:absolute; left:0; top:0; width:100%; height:100%; z-index:1; background-color:black; background-image:url(http://www.ragingplatypus.com/i/cam-full.jpg); background-x:center; background-y:center; background-repeat:repeat;">never trust your upstream platypus&lt;/a></fullitem>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_applet.xml b/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_applet.xml
deleted file mode 100644
index 851e8e794..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_applet.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item xhtml:body contains applet
-Expect:      not bozo and entries[0]['description'] == u'safe description'
--->
-<rss version="2.0">
-<channel>
-<item>
-<body xmlns="http://www.w3.org/1999/xhtml">safe<applet code="foo.class" codebase="http://example.com/" ></applet> description</body>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_blink.xml b/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_blink.xml
deleted file mode 100644
index c83b046c9..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_blink.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item xhtml:body contains blink
-Expect:      not bozo and entries[0]['description'] == u'safe description'
--->
-<rss version="2.0">
-<channel>
-<item>
-<body xmlns="http://www.w3.org/1999/xhtml"><blink>safe</blink> description</body>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_embed.xml b/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_embed.xml
deleted file mode 100644
index a87d908e4..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_embed.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item xhtml:body contains embed
-Expect:      not bozo and entries[0]['description'] == u'safe description'
--->
-<rss version="2.0">
-<channel>
-<item>
-<body xmlns="http://www.w3.org/1999/xhtml">safe<embed src="http://example.com/" /> description</body>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_frame.xml b/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_frame.xml
deleted file mode 100644
index 2535b58e7..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_frame.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item xhtml:body contains frame
-Expect:      not bozo and entries[0]['description'] == u'safe description'
--->
-<rss version="2.0">
-<channel>
-<item>
-<body xmlns="http://www.w3.org/1999/xhtml">safe<frameset rows="*"><frame src="http://example.com/" /></frameset> description</body>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_iframe.xml b/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_iframe.xml
deleted file mode 100644
index 5929e8742..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_iframe.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item xhtml:body contains iframe
-Expect:      not bozo and entries[0]['description'] == u'safe description'
--->
-<rss version="2.0">
-<channel>
-<item>
-<body xmlns="http://www.w3.org/1999/xhtml">safe<iframe src="http://example.com/"/> description</body>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_link.xml b/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_link.xml
deleted file mode 100644
index a9f10e6d4..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_link.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item xhtml:body contains link
-Expect:      not bozo and entries[0]['description'] == u'safe description'
--->
-<rss version="2.0">
-<channel>
-<item>
-<body xmlns="http://www.w3.org/1999/xhtml">safe<link rel="stylesheet" type="text/css" href="http://example.com/evil.css" /> description</body>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_meta.xml b/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_meta.xml
deleted file mode 100644
index 60f379d3d..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_meta.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item xhtml:body contains meta
-Expect:      not bozo and entries[0]['description'] == u'safe description'
--->
-<rss version="2.0">
-<channel>
-<item>
-<body xmlns="http://www.w3.org/1999/xhtml">safe<meta http-equiv="Refresh" content="0; URL=http://example.com/" /> description</body>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_object.xml b/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_object.xml
deleted file mode 100644
index d82649046..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_object.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item xhtml:body contains object
-Expect:      not bozo and entries[0]['description'] == u'safe description'
--->
-<rss version="2.0">
-<channel>
-<item>
-<body xmlns="http://www.w3.org/1999/xhtml">safe<object classid="clsid:C932BA85-4374-101B-A56C-00AA003668DC" /> description</body>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onabort.xml b/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onabort.xml
deleted file mode 100644
index bc20e5184..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onabort.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item xhtml:body contains onabort
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<body xmlns="http://www.w3.org/1999/xhtml"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onabort="location.href='http://www.ragingplatypus.com/';" /></body>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onblur.xml b/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onblur.xml
deleted file mode 100644
index c09939e8c..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onblur.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item xhtml:body contains onblur
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<body xmlns="http://www.w3.org/1999/xhtml"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onblur="location.href='http://www.ragingplatypus.com/';" /></body>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onchange.xml b/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onchange.xml
deleted file mode 100644
index 26538b7f2..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onchange.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item xhtml:body contains onchange
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<body xmlns="http://www.w3.org/1999/xhtml"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onchange="location.href='http://www.ragingplatypus.com/';" /></body>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onclick.xml b/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onclick.xml
deleted file mode 100644
index 3110dfe05..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onclick.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item xhtml:body contains onclick
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<body xmlns="http://www.w3.org/1999/xhtml"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onclick="location.href='http://www.ragingplatypus.com/';" /></body>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_ondblclick.xml b/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_ondblclick.xml
deleted file mode 100644
index 73e93831e..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_ondblclick.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item xhtml:body contains ondblclick
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<body xmlns="http://www.w3.org/1999/xhtml"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" ondblclick="location.href='http://www.ragingplatypus.com/';" /></body>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onerror.xml b/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onerror.xml
deleted file mode 100644
index 3d2f27fa0..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onerror.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item xhtml:body contains onerror
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<body xmlns="http://www.w3.org/1999/xhtml"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onerror="location.href='http://www.ragingplatypus.com/';" /></body>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onfocus.xml b/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onfocus.xml
deleted file mode 100644
index 712c2fef9..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onfocus.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item xhtml:body contains onfocus
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<body xmlns="http://www.w3.org/1999/xhtml"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onfocus="location.href='http://www.ragingplatypus.com/';" /></body>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onkeydown.xml b/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onkeydown.xml
deleted file mode 100644
index 51beae7f9..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onkeydown.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item xhtml:body contains onkeydown
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<body xmlns="http://www.w3.org/1999/xhtml"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onkeydown="location.href='http://www.ragingplatypus.com/';" /></body>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onkeypress.xml b/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onkeypress.xml
deleted file mode 100644
index 4e0e4c765..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onkeypress.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item xhtml:body contains onkeypress
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<body xmlns="http://www.w3.org/1999/xhtml"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onkeypress="location.href='http://www.ragingplatypus.com/';" /></body>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onkeyup.xml b/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onkeyup.xml
deleted file mode 100644
index 1fd9da2e6..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onkeyup.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item xhtml:body contains onkeyup
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<body xmlns="http://www.w3.org/1999/xhtml"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onkeyup="location.href='http://www.ragingplatypus.com/';" /></body>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onload.xml b/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onload.xml
deleted file mode 100644
index 72d2b5b28..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onload.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item xhtml:body contains onload
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<body xmlns="http://www.w3.org/1999/xhtml"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onload="location.href='http://www.ragingplatypus.com/';" /></body>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onmousedown.xml b/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onmousedown.xml
deleted file mode 100644
index e07c10acf..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onmousedown.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item xhtml:body contains onmousedown
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<body xmlns="http://www.w3.org/1999/xhtml"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmousedown="location.href='http://www.ragingplatypus.com/';" /></body>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onmouseout.xml b/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onmouseout.xml
deleted file mode 100644
index 00ba1c505..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onmouseout.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item xhtml:body contains onmouseout
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<body xmlns="http://www.w3.org/1999/xhtml"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmouseout="location.href='http://www.ragingplatypus.com/';" /></body>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onmouseover.xml b/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onmouseover.xml
deleted file mode 100644
index a71016754..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onmouseover.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item xhtml:body contains onmouseover
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<body xmlns="http://www.w3.org/1999/xhtml"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmouseover="location.href='http://www.ragingplatypus.com/';" /></body>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onmouseup.xml b/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onmouseup.xml
deleted file mode 100644
index 40a26c7ee..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onmouseup.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item xhtml:body contains onmouseup
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<body xmlns="http://www.w3.org/1999/xhtml"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmouseup="location.href='http://www.ragingplatypus.com/';" /></body>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onreset.xml b/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onreset.xml
deleted file mode 100644
index edd1b8d0b..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onreset.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item xhtml:body contains onreset
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<body xmlns="http://www.w3.org/1999/xhtml"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onreset="location.href='http://www.ragingplatypus.com/';" /></body>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onresize.xml b/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onresize.xml
deleted file mode 100644
index b6d2bb34b..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onresize.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item xhtml:body contains onresize
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<body xmlns="http://www.w3.org/1999/xhtml"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onresize="location.href='http://www.ragingplatypus.com/';" /></body>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onsubmit.xml b/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onsubmit.xml
deleted file mode 100644
index 540c3e87e..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onsubmit.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item xhtml:body contains onsubmit
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<body xmlns="http://www.w3.org/1999/xhtml"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onsubmit="location.href='http://www.ragingplatypus.com/';" /></body>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onunload.xml b/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onunload.xml
deleted file mode 100644
index f3c7753f0..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onunload.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item xhtml:body contains onunload
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<body xmlns="http://www.w3.org/1999/xhtml"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onunload="location.href='http://www.ragingplatypus.com/';" /></body>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_script.xml b/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_script.xml
deleted file mode 100644
index 407c910e2..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_script.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item xhtml:body contains script
-Expect:      not bozo and entries[0]['description'] == u'safe description'
--->
-<rss version="2.0">
-<channel>
-<item>
-<body xmlns="http://www.w3.org/1999/xhtml">safe<script type="text/javascript">location.href='http:/'+'/example.com/';</script> description</body>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_script_map_content.xml b/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_script_map_content.xml
deleted file mode 100644
index 870d0374c..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_script_map_content.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item xhtml:body contains script (maps to content)
-Expect:      not bozo and entries[0]['content'][0]['value'] == u'safe description'
--->
-<rss version="2.0">
-<channel>
-<item>
-<body xmlns="http://www.w3.org/1999/xhtml">safe<script type="text/javascript">location.href='http:/'+'/example.com/';</script> description</body>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_style.xml b/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_style.xml
deleted file mode 100644
index bcfc3038e..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_style.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item xhtml:body contains style
-Expect:      not bozo and entries[0]['description'] == u'<a href="http://www.ragingplatypus.com/" style="display: block; width: 100%; height: 100%; background-color: black; background-x: center; background-y: center;">never trust your upstream platypus</a>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<body xmlns="http://www.w3.org/1999/xhtml"><a href="http://www.ragingplatypus.com/" style="display:block; position:absolute; left:0; top:0; width:100%; height:100%; z-index:1; background-color:black; background-image:url(http://www.ragingplatypus.com/i/cam-full.jpg); background-x:center; background-y:center; background-repeat:repeat;">never trust your upstream platypus</a></body>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/large_atom_feed_that_needs_css_sanitisation.xml b/lib/feedparser/tests/wellformed/sanitize/large_atom_feed_that_needs_css_sanitisation.xml
deleted file mode 100644
index 1692e5d1a..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/large_atom_feed_that_needs_css_sanitisation.xml
+++ /dev/null
@@ -1,528 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-Description:  content can be sanitized without going into an infinite loop due to pathological regexp backtracking
-Expect:       not bozo
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-    <title>Все для Nokia 5800 XM  Nokia N97 Samsung i8910 Omnia HD : Программы, игры, темы, свежие новости и советы</title>
-    <link rel="alternate" type="text/html" href="http://touchnokia.ru/" />
-    <link rel="self" type="application/atom+xml" href="http://touchnokia.ru/atom.xml" />
-    <id>tag:touchnokia.ru,2008-12-14://1</id>
-    <updated>2009-04-08T14:25:12Z</updated>
-    <subtitle>Все для Nokia 5800 XM  Nokia N97 Samsung i8910 Omnia HD : Программы, игры, темы, свежие новости и советы</subtitle>
-    <generator uri="http://www.sixapart.com/movabletype/">Movable Type 4.25-ru</generator>
-
-<entry>
-    <title>Невидимая броня для Вашего Nokia 5800</title>
-    <link rel="alternate" type="text/html" href="http://touchnokia.ru/2009/09/nevidimaja-bronja-dlja-vashego-nokia-5800.html" />
-    <id>tag:touchnokia.ru,2009://1.666</id>
-
-    <published>2009-09-09T14:19:45Z</published>
-    <updated>2009-04-08T14:25:12Z</updated>
-
-    <summary></summary>
-    <author>
-        <name>iPod</name>
-        <uri>http://TouchNokia.ru</uri>
-    </author>
-    
-        <category term="Новости" scheme="http://www.sixapart.com/ns/types#category" />
-    
-    <category term="5800" label="5800" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="nokia" label="Nokia" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="броня" label="броня" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="Вашего" label="Вашего" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="для" label="для" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="Невидимая" label="Невидимая" scheme="http://www.sixapart.com/ns/types#tag" />
-    
-    <content type="html" xml:lang="ru" xml:base="http://touchnokia.ru/">
-        <![CDATA[<div style="text-align: center;"><a href="http://savecase.ru/TN" target="_blank"><img alt="SaveCase - невидимая броня для вашего девайса." src="http://savecase.ru/downloads/468-60.gif" width="468" height="60" /></a><br /><br /></div>]]>
-        <![CDATA[					<h2>Невидимая броня для Вашего девайса.</h2>
-<p><img alt="SaveCase" src="http://savecase.ru/downloads/news/savecase-logo.gif" width="139" height="150" /></p>
-<p>Вы из тех, кто хотел бы защитить корпус и дисплей своего девайса от царапин и грязи, но при этом не хотели бы нарушать эстетику дизайна девайса, например, чехлом? Великолепная новость для вас - в России появился способ надежной защиты девайсов от царапин и грязи - защитный комплект SaveCase. Пленка, вошедшая в основу данного защитного комплекта, совместно с лабораторией SavePatterns, изначально нашла свое применение в автомобильной промышленности для защиты дорогостоящего лакокрасочного покрытия автомобилей. Теперь это технологическое новшество применяют и для защиты девайсов.</p>
-<p><img alt="SaveCase" src="http://savecase.ru/downloads/news/protected.gif" width="450" height="188" /> </p>
-<p>Описание с официального сайта <a href="http://savecase.ru/TN">www.savecase.ru</a>:</p>
-<p><em>Установив защитный комплект SaveCase на свой телефон, плеер, ноутбук или игровую консоль, Вы получаете 100% невидимую защиту от износа, царапин и трещин на протяжении всего срока использования. SaveCase защищает ваше устройство со всех сторон, делая его практически неуязвимым. Не удивляйтесь, если ваше устройство с SaveCase, даже спустя месяцы использования остается таким же как и в первый день, ведь для этого применяется необычайно прочный материал, в народе получивший название - "легкая броня"! Мы настолько уверены в качестве защитного комплекта SaveCase, что даем на него пожизненную гарантию.</em></p>
-<p><object width="470" height="353"><param name="movie" value="http://video.rutube.ru/00b4ba3668ba366844180570ae87fc7a" /><param name="wmode" value="window" /><param name="allowFullScreen" value="true" /><embed src="http://video.rutube.ru/00b4ba3668ba366844180570ae87fc7a" type="application/x-shockwave-flash" wmode="window" allowfullscreen="true" width="470" height="353"></object></p>
-
-
-					]]>
-    </content>
-</entry>
-
-<entry>
-    <title>Программы для Nokia 5800 и Nokia N97: ZXLightControl v.1.0.0</title>
-    <link rel="alternate" type="text/html" href="http://touchnokia.ru/2009/05/programmi-dlja-nokia-5800-i-nokia-n97-zxlightcontrol-v100.html" />
-    <id>tag:touchnokia.ru,2009://1.814</id>
-
-    <published>2009-05-31T10:22:58Z</published>
-    <updated>2009-05-31T10:23:41Z</updated>
-
-    <summary><![CDATA[ZXLightControl v.1.0.0&nbsp;Уменьшено до 50%360 x 640 (38,06 килобайт)&nbsp;&nbsp;Уменьшено до 50%360 x 640 (37,13 килобайт)&nbsp;Разработчик:&nbsp;ZXStylesЯзык:&nbsp;EnglishСостояние:&nbsp;FreeОписание:&nbsp;Программа для управления подсветкой экрана и клавиш на смартфонах Symbian 9.2, 9.3, 9.4Программа является выделенным в отдельное приложение блоком управления расширенной подсветкой из программы ZXReader.Возможности:* настройка яркости...]]></summary>
-    <author>
-        <name>iPod</name>
-        <uri>http://TouchNokia.ru</uri>
-    </author>
-    
-        <category term="Программы для Nokia 5800" scheme="http://www.sixapart.com/ns/types#category" />
-    
-        <category term="Утилиты" scheme="http://www.sixapart.com/ns/types#category" />
-    
-    <category term="5800" label="5800" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="n97" label="N97:" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="nokia" label="Nokia" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="nokia" label="Nokia" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="zxlightcontrol" label="ZXLightControl" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="v100" label="v.1.0.0" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="Программы" label="Программы" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="для" label="для" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="и" label="и" scheme="http://www.sixapart.com/ns/types#tag" />
-    
-    <content type="html" xml:lang="ru" xml:base="http://touchnokia.ru/">
-        <![CDATA[<span class="Apple-style-span" style="color: rgb(38, 57, 77); font-family: Verdana; font-size: 12px; line-height: 19px; -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px; "><span style="font-size: 14pt; line-height: 19px; "><b>ZXLightControl v.1.0.0</b></span><br /><br /><table id="ipb-attach-table-1634-0-00930600-1243765331" cellspacing="0" cellpadding="0" style="width: auto; display: inline-block; "><tbody><tr><td style="padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; "><div id="ipb-attach-div-1634-0-00930600-1243765331" class="resized-linked-image" title="Нажмите для просмотра полного изображения" style="margin-top: 1px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 8px; padding-bottom: 5px; padding-left: 8px; background-color: rgb(134, 161, 184); border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; color: rgb(0, 0, 0); font-size: 10px; width: 180px; height: 358px; text-align: center; "><div id="ipb-attach-ct-1634-0-00930600-1243765331" style="font-size: 9px; "><img src="http://touchnokia.ru/forums/style_images/hi-tech/img-resized.png" border="0" alt="" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " />&nbsp;Уменьшено до 50%</div><a id="ipb-attach-url-1634-0-00930600-1243765331" href="http://touchnokia.ru/forums/index.php?act=attach&amp;type=post&amp;id=1634" title="Scr000404.jpg - Размер: 38,06 килобайт, Скачано: 0" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><img src="http://touchnokia.ru/forums/uploads/monthly_05_2009/post-1-1243765219_thumb.jpg" id="ipb-attach-img-1634-0-00930600-1243765331" class="ipb" width="180" height="320" alt="Прикрепленное изображение" title="Нажмите для просмотра полного изображения" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; cursor: pointer; " /></a><div id="ipb-attach-cb-1634-0-00930600-1243765331" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-size: 9px; text-align: center; ">360 x 640 (38,06 килобайт)</div></div></td></tr></tbody></table>&nbsp;<table id="ipb-attach-table-1633-0-00946000-1243765331" cellspacing="0" cellpadding="0" style="width: auto; display: inline-block; "><tbody><tr><td style="padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; "><div id="ipb-attach-div-1633-0-00946000-1243765331" class="resized-linked-image" title="Нажмите для просмотра полного изображения" style="margin-top: 1px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 8px; padding-bottom: 5px; padding-left: 8px; background-color: rgb(134, 161, 184); border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; color: rgb(0, 0, 0); font-size: 10px; width: 180px; height: 358px; text-align: center; "><div id="ipb-attach-ct-1633-0-00946000-1243765331" style="font-size: 9px; "><img src="http://touchnokia.ru/forums/style_images/hi-tech/img-resized.png" border="0" alt="" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " />&nbsp;Уменьшено до 50%</div><a id="ipb-attach-url-1633-0-00946000-1243765331" href="http://touchnokia.ru/forums/index.php?act=attach&amp;type=post&amp;id=1633" title="Scr000403.jpg - Размер: 37,13 килобайт, Скачано: 0" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><img src="http://touchnokia.ru/forums/uploads/monthly_05_2009/post-1-1243765213_thumb.jpg" id="ipb-attach-img-1633-0-00946000-1243765331" class="ipb" width="180" height="320" alt="Прикрепленное изображение" title="Нажмите для просмотра полного изображения" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " /></a><div id="ipb-attach-cb-1633-0-00946000-1243765331" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-size: 9px; text-align: center; ">360 x 640 (37,13 килобайт)</div></div></td></tr></tbody></table>&nbsp;<br /><b>Разработчик:</b>&nbsp;ZXStyles<br /><b>Язык:</b>&nbsp;English<br /><b>Состояние:</b>&nbsp;Free<br /><b>Описание:</b>&nbsp;Программа для управления подсветкой экрана и клавиш на смартфонах Symbian 9.2, 9.3, 9.4<br />Программа является выделенным в отдельное приложение блоком управления расширенной подсветкой из программы ZXReader.<br /><b>Возможности:</b><br />* настройка яркости подсветки экрана<br />* Отключение подсветки клавиш<br />* Удерживание подсветки экрана включенной бесконечно&nbsp;<br /><a href="http://touchnokia.ru/forums/index.php?act=attach&amp;type=post&amp;id=1635" title="Скачать файл" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><img src="http://touchnokia.ru/forums/style_images/hi-tech/folder_mime_types/zip.gif" alt="Прикрепленный файл" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " /></a>&nbsp;&nbsp;<a href="http://touchnokia.ru/forums/index.php?act=attach&amp;type=post&amp;id=1635" title="Скачать файл" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; ">ZXLightControl_v1.0.0_S60_5th_signed.zip</a>&nbsp;( 12,71 килобайт )</span> <div><font class="Apple-style-span" color="#26394D" face="Verdana" size="3"><span class="Apple-style-span" style="font-size: 12px; line-height: 19px; -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px;">Обсуждение&nbsp;ведем&nbsp;<a href="http://touchnokia.ru/forums/index.php?showtopic=958">здесь</a></span></font></div>]]>
-        
-    </content>
-</entry>
-
-<entry>
-    <title>Программы для Nokia 5800 и Nokia N97: Voice Inbox v.1.09.112</title>
-    <link rel="alternate" type="text/html" href="http://touchnokia.ru/2009/05/programmi-dlja-nokia-5800-i-nokia-n97-voice-inbox-v109112.html" />
-    <id>tag:touchnokia.ru,2009://1.813</id>
-
-    <published>2009-05-31T09:57:06Z</published>
-    <updated>2009-05-31T09:59:46Z</updated>
-
-    <summary><![CDATA[Voice Inbox v.1.09.112&nbsp;Уменьшено до 50%360 x 640 (53,6 килобайт)&nbsp;&nbsp;Уменьшено до 50%360 x 640 (50,23 килобайт)&nbsp;Разработчик:&nbsp;WebGateЯзык:&nbsp;Русский ( В архиве лежит русификатор)&nbsp;Состояние:&nbsp;FreeОписание:&nbsp;Программа автоответчик[*]&nbsp;Если у вас&nbsp;разблокирован смартфон&nbsp;то качаем и ставим, если нет то файл необходимо&nbsp;подписать&nbsp;&nbsp;Voice_Inbox_v.1.09.112.zip&nbsp;( 152,48 килобайт )Обсуждение&nbsp;ведем здесь...]]></summary>
-    <author>
-        <name>iPod</name>
-        <uri>http://TouchNokia.ru</uri>
-    </author>
-    
-        <category term="Программы для Nokia 5800" scheme="http://www.sixapart.com/ns/types#category" />
-    
-        <category term="Разное" scheme="http://www.sixapart.com/ns/types#category" />
-    
-    <category term="5800" label="5800" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="inbox" label="Inbox" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="n97" label="N97:" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="nokia" label="Nokia" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="v109112" label="v.1.09.112" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="voice" label="Voice" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="для" label="для" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="и" label="и" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="Программы" label="Программы" scheme="http://www.sixapart.com/ns/types#tag" />
-    
-    <content type="html" xml:lang="ru" xml:base="http://touchnokia.ru/">
-        <![CDATA[<font class="Apple-style-span" color="#26394D" face="Verdana" size="6"><span class="Apple-style-span" style="font-size: 19px; line-height: 19px; -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px;"><b><span class="Apple-style-span" style="font-size: 12px; font-weight: normal; "><span style="font-size: 14pt; line-height: 19px; "><b>Voice Inbox v.1.09.112</b></span><br /><br /><table id="ipb-attach-table-1339-0-82301900-1243763904" cellspacing="0" cellpadding="0" style="width: auto; display: inline-block; "><tbody><tr><td style="padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; "><div id="ipb-attach-div-1339-0-82301900-1243763904" class="resized-linked-image" title="Нажмите для просмотра полного изображения" style="margin-top: 1px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 8px; padding-bottom: 5px; padding-left: 8px; background-color: rgb(134, 161, 184); border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; color: rgb(0, 0, 0); font-size: 10px; width: 180px; height: 358px; text-align: center; "><div id="ipb-attach-ct-1339-0-82301900-1243763904" style="font-size: 9px; "><img src="http://touchnokia.ru/forums/style_images/hi-tech/img-resized.png" border="0" alt="" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " />&nbsp;Уменьшено до 50%</div><a id="ipb-attach-url-1339-0-82301900-1243763904" href="http://touchnokia.ru/forums/index.php?act=attach&amp;type=post&amp;id=1339" title="Scr000276.jpg - Размер: 53,6 килобайт, Скачано: 9" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><img src="http://touchnokia.ru/forums/uploads/monthly_05_2009/post-1-1242031946_thumb.jpg" id="ipb-attach-img-1339-0-82301900-1243763904" class="ipb" width="180" height="320" alt="Прикрепленное изображение" title="Нажмите для просмотра полного изображения" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; cursor: pointer; " /></a><div id="ipb-attach-cb-1339-0-82301900-1243763904" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-size: 9px; text-align: center; ">360 x 640 (53,6 килобайт)</div></div></td></tr></tbody></table>&nbsp;<table id="ipb-attach-table-1340-0-82335200-1243763904" cellspacing="0" cellpadding="0" style="width: auto; display: inline-block; "><tbody><tr><td style="padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; "><div id="ipb-attach-div-1340-0-82335200-1243763904" class="resized-linked-image" title="Нажмите для просмотра полного изображения" style="margin-top: 1px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 8px; padding-bottom: 5px; padding-left: 8px; background-color: rgb(134, 161, 184); border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; color: rgb(0, 0, 0); font-size: 10px; width: 180px; height: 358px; text-align: center; "><div id="ipb-attach-ct-1340-0-82335200-1243763904" style="font-size: 9px; "><img src="http://touchnokia.ru/forums/style_images/hi-tech/img-resized.png" border="0" alt="" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " />&nbsp;Уменьшено до 50%</div><a id="ipb-attach-url-1340-0-82335200-1243763904" href="http://touchnokia.ru/forums/index.php?act=attach&amp;type=post&amp;id=1340" title="Scr000277.jpg - Размер: 50,23 килобайт, Скачано: 10" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><img src="http://touchnokia.ru/forums/uploads/monthly_05_2009/post-1-1242031954_thumb.jpg" id="ipb-attach-img-1340-0-82335200-1243763904" class="ipb" width="180" height="320" alt="Прикрепленное изображение" title="Нажмите для просмотра полного изображения" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; cursor: pointer; " /></a><div id="ipb-attach-cb-1340-0-82335200-1243763904" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-size: 9px; text-align: center; ">360 x 640 (50,23 килобайт)</div></div></td></tr></tbody></table>&nbsp;<br /><b>Разработчик:</b>&nbsp;WebGate<br /><b>Язык:</b>&nbsp;Русский ( В архиве лежит русификатор)&nbsp;<br /><b>Состояние:</b>&nbsp;Free<br /><b>Описание:</b>&nbsp;Программа автоответчик<br /><b><span style="color: rgb(255, 0, 0); ">[*]</span>&nbsp;</b>Если у вас&nbsp;<a href="http://touchnokia.ru/forums/index.php?showtopic=252" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><span style="color: rgb(255, 0, 0); ">разблокирован смартфон</span></a>&nbsp;то качаем и ставим, если нет то файл необходимо&nbsp;<a href="http://touchnokia.ru/forums/index.php?showtopic=8" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><span style="color: rgb(0, 128, 0); ">подписать</span></a><br /><a href="http://touchnokia.ru/forums/index.php?act=attach&amp;type=post&amp;id=1632" title="Скачать файл" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><img src="http://touchnokia.ru/forums/style_images/hi-tech/folder_mime_types/zip.gif" alt="Прикрепленный файл" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " /></a>&nbsp;&nbsp;<a href="http://touchnokia.ru/forums/index.php?act=attach&amp;type=post&amp;id=1632" title="Скачать файл" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; ">Voice_Inbox_v.1.09.112.zip</a>&nbsp;( 152,48 килобайт )<br /></span></b></span></font><div><font class="Apple-style-span" color="#26394D" face="Verdana" size="3"><span class="Apple-style-span" style="font-size: 12px; line-height: 19px; -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px; ">Обсуждение&nbsp;ведем <a href="http://touchnokia.ru/forums/index.php?showtopic=770">здесь</a></span></font></div>]]>
-        
-    </content>
-</entry>
-
-<entry>
-    <title>Программы для Nokia 5800 и Nokia N97: Smart Movie v.4.15</title>
-    <link rel="alternate" type="text/html" href="http://touchnokia.ru/2009/05/programmi-dlja-nokia-5800-i-nokia-n97-smart-movie-v415.html" />
-    <id>tag:touchnokia.ru,2009://1.812</id>
-
-    <published>2009-05-31T09:24:12Z</published>
-    <updated>2009-05-31T09:26:29Z</updated>
-
-    <summary><![CDATA[Smart Movie v.4.15&nbsp;Уменьшено до 50%360 x 640 (61,1 килобайт)&nbsp;&nbsp;Уменьшено до 50%360 x 640 (63,72 килобайт)&nbsp;Разработчик:&nbsp;Lonely Cat GamesЯзык:&nbsp;EnglishСостояние:&nbsp;TrialОписание:&nbsp;Наонецто взломаная версияВозможности SmartMovie:- Стандартный формат AVI- Использует подгружаемые кодеки- Портретный и пейзажный режимы просмотра видео- Первый мобильный плеер с поддержкой субтитров, можно смотреть...]]></summary>
-    <author>
-        <name>iPod</name>
-        <uri>http://TouchNokia.ru</uri>
-    </author>
-    
-        <category term="Мультимедиа" scheme="http://www.sixapart.com/ns/types#category" />
-    
-        <category term="Программы для Nokia 5800" scheme="http://www.sixapart.com/ns/types#category" />
-    
-    <category term="5800" label="5800" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="movie" label="Movie" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="n97" label="N97:" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="nokia" label="Nokia" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="smart" label="Smart" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="v415" label="v.4.15" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="для" label="для" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="и" label="и" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="Программы" label="Программы" scheme="http://www.sixapart.com/ns/types#tag" />
-    
-    <content type="html" xml:lang="ru" xml:base="http://touchnokia.ru/">
-        <![CDATA[<span class="Apple-style-span" style="color: rgb(38, 57, 77); font-family: Verdana; font-size: 12px; line-height: 19px; -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px; "><span style="font-size: 14pt; line-height: 19px; "><b>Smart Movie v.4.15</b></span><br /><br /><table id="ipb-attach-table-1090-0-82600900-1243761824" cellspacing="0" cellpadding="0" style="width: auto; display: inline-block; "><tbody><tr><td style="padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; "><div id="ipb-attach-div-1090-0-82600900-1243761824" class="resized-linked-image" title="Нажмите для просмотра полного изображения" style="margin-top: 1px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 8px; padding-bottom: 5px; padding-left: 8px; background-color: rgb(134, 161, 184); border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; color: rgb(0, 0, 0); font-size: 10px; width: 180px; height: 358px; text-align: center; "><div id="ipb-attach-ct-1090-0-82600900-1243761824" style="font-size: 9px; "><img src="http://touchnokia.ru/forums/style_images/hi-tech/img-resized.png" border="0" alt="" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " />&nbsp;Уменьшено до 50%</div><a id="ipb-attach-url-1090-0-82600900-1243761824" href="http://touchnokia.ru/forums/index.php?act=attach&amp;type=post&amp;id=1090" title="Scr000194.jpg - Размер: 61,1 килобайт, Скачано: 37" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><img src="http://touchnokia.ru/forums/uploads/monthly_04_2009/post-1-1240072182_thumb.jpg" id="ipb-attach-img-1090-0-82600900-1243761824" class="ipb" width="180" height="320" alt="Прикрепленное изображение" title="Нажмите для просмотра полного изображения" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; cursor: pointer; " /></a><div id="ipb-attach-cb-1090-0-82600900-1243761824" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-size: 9px; text-align: center; ">360 x 640 (61,1 килобайт)</div></div></td></tr></tbody></table>&nbsp;<table id="ipb-attach-table-1091-0-82636200-1243761824" cellspacing="0" cellpadding="0" style="width: auto; display: inline-block; "><tbody><tr><td style="padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; "><div id="ipb-attach-div-1091-0-82636200-1243761824" class="resized-linked-image" title="Нажмите для просмотра полного изображения" style="margin-top: 1px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 8px; padding-bottom: 5px; padding-left: 8px; background-color: rgb(134, 161, 184); border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; color: rgb(0, 0, 0); font-size: 10px; width: 180px; height: 358px; text-align: center; "><div id="ipb-attach-ct-1091-0-82636200-1243761824" style="font-size: 9px; "><img src="http://touchnokia.ru/forums/style_images/hi-tech/img-resized.png" border="0" alt="" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " />&nbsp;Уменьшено до 50%</div><a id="ipb-attach-url-1091-0-82636200-1243761824" href="http://touchnokia.ru/forums/index.php?act=attach&amp;type=post&amp;id=1091" title="Scr000195.jpg - Размер: 63,72 килобайт, Скачано: 46" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><img src="http://touchnokia.ru/forums/uploads/monthly_04_2009/post-1-1240072186_thumb.jpg" id="ipb-attach-img-1091-0-82636200-1243761824" class="ipb" width="180" height="320" alt="Прикрепленное изображение" title="Нажмите для просмотра полного изображения" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; cursor: pointer; " /></a><div id="ipb-attach-cb-1091-0-82636200-1243761824" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-size: 9px; text-align: center; ">360 x 640 (63,72 килобайт)</div></div></td></tr></tbody></table>&nbsp;<br /><br /><b>Разработчик:</b>&nbsp;Lonely Cat Games<br /><b>Язык:</b>&nbsp;English<br /><b>Состояние:</b>&nbsp;Trial<br /><b>Описание:</b>&nbsp;Наонецто взломаная версия<br />Возможности SmartMovie:<br />- Стандартный формат AVI<br />- Использует подгружаемые кодеки<br />- Портретный и пейзажный режимы просмотра видео<br />- Первый мобильный плеер с поддержкой субтитров, можно смотреть видео на многих языках<br />- Поддержка кодеков DirectShow<br />- Очень быстрое конвертирование<br />- Бикубическая интерполяция - максимальное качество ужатого видео<br />- Настраиваемые параметры качества/объема в Smart Movie<br />- Богатые настройки плеера&nbsp;<br /><br /><b>Новое в SmartMovie v.4.15:</b><br />- Возможность выбора папки воспроизведения<br />- Японская и китайская кодировки для субтитров</span><div><span class="Apple-style-span" style="color: rgb(38, 57, 77); font-family: Verdana; font-size: 12px; line-height: 19px; -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px; ">&nbsp;&nbsp;<a href="http://touchnokia.ru/forums/index.php?act=attach&amp;type=post&amp;id=1631" title="Скачать файл" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; ">SmartMovie_4.15_not_cracked.zip</a>&nbsp;( 605,24 килобайт )</span> </div><div><font class="Apple-style-span" color="#26394D" face="Verdana" size="3"><span class="Apple-style-span" style="font-size: 12px; line-height: 19px; -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px;">Обсуждение ведем <a href="http://touchnokia.ru/forums/index.php?showtopic=626">здесь</a></span></font></div>]]>
-        
-    </content>
-</entry>
-
-<entry>
-    <title>Программы для Nokia 5800 и Nokia N97: PowerMP3 v.1.15 Beta</title>
-    <link rel="alternate" type="text/html" href="http://touchnokia.ru/2009/05/programmi-dlja-nokia-5800-i-nokia-n97-powermp3-v115-beta.html" />
-    <id>tag:touchnokia.ru,2009://1.811</id>
-
-    <published>2009-05-31T09:13:04Z</published>
-    <updated>2009-05-31T09:21:41Z</updated>
-
-    <summary><![CDATA[PowerMP3 v.1.15 Beta&nbsp;Уменьшено до 50%360 x 640 (52,76 килобайт)&nbsp;&nbsp;Уменьшено до 50%360 x 640 (48,81 килобайт)&nbsp;Разработчик:&nbsp;MobiFactorЯзык:&nbsp;РусскийСостояние:&nbsp;FreeОписание:&nbsp;Музыкальный плеер. Теперь со специальными скинами полноценно работает и на 5800.Особенности:- поддержка большинства популярных аудио форматов (MP3/OGG/AAC/MP4)- отображение обложки альбома с поиском в интернете- эффекты визуализации-...]]></summary>
-    <author>
-        <name>iPod</name>
-        <uri>http://TouchNokia.ru</uri>
-    </author>
-    
-        <category term="Мультимедиа" scheme="http://www.sixapart.com/ns/types#category" />
-    
-        <category term="Программы для Nokia 5800" scheme="http://www.sixapart.com/ns/types#category" />
-    
-    <category term="5800" label="5800" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="beta" label="Beta" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="n97" label="N97:" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="nokia" label="Nokia" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="powermp3" label="PowerMP3" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="v115" label="v.1.15" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="для" label="для" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="и" label="и" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="Программы" label="Программы" scheme="http://www.sixapart.com/ns/types#tag" />
-    
-    <content type="html" xml:lang="ru" xml:base="http://touchnokia.ru/">
-        <![CDATA[<span class="Apple-style-span" style="color: rgb(38, 57, 77); font-family: Verdana; font-size: 12px; line-height: 19px; -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px; "><span style="font-size: 14pt; line-height: 19px; "><b>PowerMP3 v.1.15 Beta</b></span></span><div><span class="Apple-style-span" style="color: rgb(38, 57, 77); font-family: Verdana; font-size: 12px; line-height: 19px; -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px; "><span style="line-height: 19px; "></span><font class="Apple-style-span" size="6"><span class="Apple-style-span" style="font-size: 19px;"><b><br /></b></span></font><table id="ipb-attach-table-1479-0-50851300-1243761298" cellspacing="0" cellpadding="0" style="width: auto; display: inline-block; "><tbody><tr><td style="padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; "><div id="ipb-attach-div-1479-0-50851300-1243761298" class="resized-linked-image" title="Нажмите для просмотра полного изображения" style="margin-top: 1px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 8px; padding-bottom: 5px; padding-left: 8px; background-color: rgb(134, 161, 184); border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; color: rgb(0, 0, 0); font-size: 10px; width: 180px; height: 358px; text-align: center; "><div id="ipb-attach-ct-1479-0-50851300-1243761298" style="font-size: 9px; ">&nbsp;Уменьшено до 50%</div><a id="ipb-attach-url-1479-0-50851300-1243761298" href="http://touchnokia.ru/forums/index.php?act=attach&amp;type=post&amp;id=1479" title="Scr000326.jpg - Размер: 52,76 килобайт, Скачано: 34" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><img src="http://touchnokia.ru/forums/uploads/monthly_05_2009/post-1-1242843276_thumb.jpg" id="ipb-attach-img-1479-0-50851300-1243761298" class="ipb" width="180" height="320" alt="Прикрепленное изображение" title="Нажмите для просмотра полного изображения" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; cursor: pointer; " /></a><div id="ipb-attach-cb-1479-0-50851300-1243761298" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-size: 9px; text-align: center; ">360 x 640 (52,76 килобайт)</div></div></td></tr></tbody></table>&nbsp;<table id="ipb-attach-table-1480-0-50890900-1243761298" cellspacing="0" cellpadding="0" style="width: auto; display: inline-block; "><tbody><tr><td style="padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; "><div id="ipb-attach-div-1480-0-50890900-1243761298" class="resized-linked-image" title="Нажмите для просмотра полного изображения" style="margin-top: 1px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 8px; padding-bottom: 5px; padding-left: 8px; background-color: rgb(134, 161, 184); border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; color: rgb(0, 0, 0); font-size: 10px; width: 180px; height: 358px; text-align: center; "><div id="ipb-attach-ct-1480-0-50890900-1243761298" style="font-size: 9px; "><img src="http://touchnokia.ru/forums/style_images/hi-tech/img-resized.png" border="0" alt="" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " />&nbsp;Уменьшено до 50%</div><a id="ipb-attach-url-1480-0-50890900-1243761298" href="http://touchnokia.ru/forums/index.php?act=attach&amp;type=post&amp;id=1480" title="Scr000327.jpg - Размер: 48,81 килобайт, Скачано: 22" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><img src="http://touchnokia.ru/forums/uploads/monthly_05_2009/post-1-1242843286_thumb.jpg" id="ipb-attach-img-1480-0-50890900-1243761298" class="ipb" width="180" height="320" alt="Прикрепленное изображение" title="Нажмите для просмотра полного изображения" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; cursor: pointer; " /></a><div id="ipb-attach-cb-1480-0-50890900-1243761298" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-size: 9px; text-align: center; ">360 x 640 (48,81 килобайт)</div></div></td></tr></tbody></table>&nbsp;<br /><b>Разработчик:</b>&nbsp;MobiFactor<br /><b>Язык:</b>&nbsp;Русский<br /><b>Состояние:</b>&nbsp;Free<br /><b>Описание:</b>&nbsp;Музыкальный плеер. Теперь со специальными скинами полноценно работает и на 5800.<br /><b>Особенности:</b><br />- поддержка большинства популярных аудио форматов (MP3/OGG/AAC/MP4)<br />- отображение обложки альбома с поиском в интернете<br />- эффекты визуализации<br />- поддержка скинов<br />- поддержка пультов AD-4х<br />- слип-таймер<br />- воспроизведение по выбранным папкам<br />- создание плей-листов<br />- эквалайзер<br />- расширенное стерео<br /><b>Новое в PowerMP3 v1.15:</b><br />-Исправлена ошибка с переключением дорожек минигарнитурой<br />-Исправлена куча небольших ошибок<br />-Сделали собственный эквалайзер для всех телефонов<br />-Добавлена поддержка папок. Теперь, когда вы удаляете композиции из списка воспроизведения, появится диалоговое окно, где вы можете выбрать для удаления песни с диска<br /><a href="http://touchnokia.ru/forums/index.php?act=attach&amp;type=post&amp;id=1630" title="Скачать файл" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><img src="http://touchnokia.ru/forums/style_images/hi-tech/folder_mime_types/zip.gif" alt="Прикрепленный файл" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " /></a>&nbsp;&nbsp;<a href="http://touchnokia.ru/forums/index.php?act=attach&amp;type=post&amp;id=1630" title="Скачать файл" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; ">PowerMP3_v.1.15b.zip</a>&nbsp;( 1,04 мегабайт )</span> <div><font class="Apple-style-span" color="#26394D" face="Verdana" size="3"><span class="Apple-style-span" style="font-size: 12px; line-height: 19px; -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px;">Обсуждение ведем <a href="http://touchnokia.ru/forums/index.php?showtopic=862">здесь</a></span></font></div></div>]]>
-        
-    </content>
-</entry>
-
-<entry>
-    <title>Программы для Nokia 5800 и Nokia N97: XpressCut v.0.1</title>
-    <link rel="alternate" type="text/html" href="http://touchnokia.ru/2009/05/programmi-dlja-nokia-5800-i-nokia-n97-xpresscut-v01.html" />
-    <id>tag:touchnokia.ru,2009://1.810</id>
-
-    <published>2009-05-31T08:57:55Z</published>
-    <updated>2009-05-31T09:00:27Z</updated>
-
-    <summary><![CDATA[XpressCut v.0.1Разработчик:&nbsp;kAISTЯзык: РусскийСостояние: FreeОписание: программа для Nokia 5800 и N97, предназначенная для простой и быстрой нарезки mp3 файлов на звонок.&nbsp;Теперь нарезать любимую мелодию себе или друзьям можно "на ходу" без помощи компьютера, всего за несколько секунд.&nbsp;Достаточно открыть mp3 файл, установить...]]></summary>
-    <author>
-        <name>iPod</name>
-        <uri>http://TouchNokia.ru</uri>
-    </author>
-    
-        <category term="Мультимедиа" scheme="http://www.sixapart.com/ns/types#category" />
-    
-        <category term="Программы для Nokia 5800" scheme="http://www.sixapart.com/ns/types#category" />
-    
-    <category term="5800" label="5800" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="n97" label="N97:" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="nokia" label="Nokia" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="v01" label="v.0.1" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="xpresscut" label="XpressCut" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="для" label="для" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="и" label="и" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="Программы" label="Программы" scheme="http://www.sixapart.com/ns/types#tag" />
-    
-    <content type="html" xml:lang="ru" xml:base="http://touchnokia.ru/">
-        <![CDATA[<span class="Apple-style-span" style="color: rgb(38, 57, 77); font-family: Verdana; font-size: 12px; line-height: 19px; -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px; "><font class="Apple-style-span" size="6"><span class="Apple-style-span" style="font-size: 24px; line-height: 24px;"><b><span class="Apple-style-span" style="font-size: 12px; font-weight: normal; line-height: 19px; "><span style="font-size: 18pt; line-height: 24px; "><b>XpressCut v.0.1</b></span><br /><br /><b>Разработчик</b>:&nbsp;<a href="http://soft.mobile-master.org/" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; ">kAIST</a><br /><b>Язык</b>: Русский<br /><b>Состояние</b>: Free<br /><b>Описание</b>: программа для Nokia 5800 и N97, предназначенная для простой и быстрой нарезки mp3 файлов на звонок.&nbsp;<br />Теперь нарезать любимую мелодию себе или друзьям можно "на ходу" без помощи компьютера, всего за несколько секунд.&nbsp;<br />Достаточно открыть mp3 файл, установить точку начала, точку окончания, нажать "save" и рингтон готов!&nbsp;<br /><b>Инструкция по применению</b>: сверху "трека" распологается полоса покрутки, переместив которую, выбирите нужную позицию. Установите курсор в нужную позицию, ткнув стилусом на "треке". С места, где установлен курсор, трек можно проиграть, нажав на "play" (остановить можно, нажав на ту же кнопку). Установите метки начала и конца нарезки, воспользовавшись соответствующими кнопками. После этого, можно нажать на "save". После сохранения трека, его можно прослушать.&nbsp;<br />ВНИМАНИЕ!! Программа работает только с mp3 файлами,созданными с постоянным битрейтом!&nbsp;<br /><b>Для работоспособности нужен python не ниже версии 1.9.4. Python и программу ставить на один и тот же диск!&nbsp;</b><br /><table id="ipb-attach-table-1627-0-99970000-1243760335" cellspacing="0" cellpadding="0" style="width: auto; display: inline-block; "><tbody><tr><td style="padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; "><div id="ipb-attach-div-1627-0-99970000-1243760335" class="resized-linked-image" title="Нажмите для просмотра полного изображения" style="margin-top: 1px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 8px; padding-bottom: 5px; padding-left: 8px; background-color: rgb(134, 161, 184); border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; color: rgb(0, 0, 0); font-size: 10px; width: 240px; height: 173px; text-align: center; "><div id="ipb-attach-ct-1627-0-99970000-1243760335" style="font-size: 9px; "><img src="http://touchnokia.ru/forums/style_images/hi-tech/img-resized.png" border="0" alt="" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " />&nbsp;Уменьшено до 63%</div><a id="ipb-attach-url-1627-0-99970000-1243760335" href="http://touchnokia.ru/forums/index.php?act=attach&amp;type=post&amp;id=1627" title="Scr000400.jpg - Размер: 38,46 килобайт, Скачано: 0" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><img src="http://touchnokia.ru/forums/uploads/monthly_05_2009/post-1-1243760017_thumb.jpg" id="ipb-attach-img-1627-0-99970000-1243760335" class="ipb" width="240" height="135" alt="Прикрепленное изображение" title="Нажмите для просмотра полного изображения" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; cursor: pointer; " /></a><div id="ipb-attach-cb-1627-0-99970000-1243760335" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-size: 9px; text-align: center; ">640 x 360 (38,46 килобайт)</div></div></td></tr></tbody></table>&nbsp;<table id="ipb-attach-table-1626-0-99981600-1243760335" cellspacing="0" cellpadding="0" style="width: auto; display: inline-block; "><tbody><tr><td style="padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; "><div id="ipb-attach-div-1626-0-99981600-1243760335" class="resized-linked-image" title="Нажмите для просмотра полного изображения" style="margin-top: 1px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 8px; padding-bottom: 5px; padding-left: 8px; background-color: rgb(134, 161, 184); border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; color: rgb(0, 0, 0); font-size: 10px; width: 240px; height: 173px; text-align: center; "><div id="ipb-attach-ct-1626-0-99981600-1243760335" style="font-size: 9px; "><img src="http://touchnokia.ru/forums/style_images/hi-tech/img-resized.png" border="0" alt="" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " />&nbsp;Уменьшено до 63%</div><a id="ipb-attach-url-1626-0-99981600-1243760335" href="http://touchnokia.ru/forums/index.php?act=attach&amp;type=post&amp;id=1626" title="Scr000399.jpg - Размер: 59,26 килобайт, Скачано: 0" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><img src="http://touchnokia.ru/forums/uploads/monthly_05_2009/post-1-1243760011_thumb.jpg" id="ipb-attach-img-1626-0-99981600-1243760335" class="ipb" width="240" height="135" alt="Прикрепленное изображение" title="Нажмите для просмотра полного изображения" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " /></a><div id="ipb-attach-cb-1626-0-99981600-1243760335" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-size: 9px; text-align: center; ">640 x 360 (59,26 килобайт)</div></div></td></tr></tbody></table>&nbsp;</span><br /></b></span></font><a href="http://touchnokia.ru/forums/index.php?act=attach&amp;type=post&amp;id=1628" title="Скачать файл" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><img src="http://touchnokia.ru/forums/style_images/hi-tech/folder_mime_types/zip.gif" alt="Прикрепленный файл" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " /></a>&nbsp;&nbsp;<a href="http://touchnokia.ru/forums/index.php?act=attach&amp;type=post&amp;id=1628" title="Скачать файл" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; ">Python_1.9.5.zip</a>&nbsp;( 2,75 мегабайт )<br /><a href="http://touchnokia.ru/forums/index.php?act=attach&amp;type=post&amp;id=1629" title="Скачать файл" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><img src="http://touchnokia.ru/forums/style_images/hi-tech/folder_mime_types/zip.gif" alt="Прикрепленный файл" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " /></a>&nbsp;&nbsp;<a href="http://touchnokia.ru/forums/index.php?act=attach&amp;type=post&amp;id=1629" title="Скачать файл" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; ">XpressCut_0.1_ru.zip</a>&nbsp;( 142,57 килобайт )</span> <div><font class="Apple-style-span" color="#26394D" face="Verdana" size="3"><span class="Apple-style-span" style="font-size: 12px; line-height: 19px; -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px;">Обсуждение ведем <a href="http://touchnokia.ru/forums/index.php?showtopic=951">здесь</a></span></font></div>]]>
-        
-    </content>
-</entry>
-
-<entry>
-    <title>Игры для Nokia 5800 и Nokia N97: Asphalt 4 Elite Racing 3D v.1.0.1</title>
-    <link rel="alternate" type="text/html" href="http://touchnokia.ru/2009/05/igri-dlja-nokia-5800-i-nokia-n97-asphalt-4-elite-racing-3d-v101.html" />
-    <id>tag:touchnokia.ru,2009://1.808</id>
-
-    <published>2009-05-31T08:37:27Z</published>
-    <updated>2009-05-31T08:44:42Z</updated>
-
-    <summary><![CDATA[Asphalt 4 Elite Racing 3D v1.0.1Разработчик:&nbsp;GameloftЯзык:&nbsp;Английский (В sis версии Русский)Состояние:&nbsp;FreeОписание:&nbsp;Долгожданная, великолепная, бриллиантовая 3D версия самых лучших гонок для мобильного Asphalt 4: Elite Racing 3D! Ты до сих пор это читаешь? Быстро качать, ты не должен пропустить эту игру!-10 удивительных автомобилей...]]></summary>
-    <author>
-        <name>iPod</name>
-        <uri>http://TouchNokia.ru</uri>
-    </author>
-    
-        <category term="Игры для Nokia 5800" scheme="http://www.sixapart.com/ns/types#category" />
-    
-    <category term="3d" label="3D" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="4" label="4" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="5800" label="5800" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="asphalt" label="Asphalt" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="elite" label="Elite" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="n97" label="N97:" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="nokia" label="Nokia" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="racing" label="Racing" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="v101" label="v.1.0.1" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="для" label="для" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="и" label="и" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="Игры" label="Игры" scheme="http://www.sixapart.com/ns/types#tag" />
-    
-    <content type="html" xml:lang="ru" xml:base="http://touchnokia.ru/">
-        <![CDATA[<font class="Apple-style-span" color="#26394D" face="Verdana" size="6"><span class="Apple-style-span" style="font-size: 19px; line-height: 19px; -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px;"><b><span class="Apple-style-span" style="font-size: 12px; font-weight: normal; "><span style="font-size: 14pt; line-height: 19px; "><b>Asphalt 4 Elite Racing 3D v1.0.1</b></span><br /><br /><b>Разработчик:</b>&nbsp;Gameloft<br /><b>Язык:</b>&nbsp;Английский (В sis версии Русский)<br /><b>Состояние:</b>&nbsp;Free<br /><b>Описание:</b>&nbsp;Долгожданная, великолепная, бриллиантовая 3D версия самых лучших гонок для мобильного Asphalt 4: Elite Racing 3D! Ты до сих пор это читаешь? Быстро качать, ты не должен пропустить эту игру!<br />-10 удивительных автомобилей и мотоциклов, включая такие, как Bugatti Veyron, Ferrari F430 Spider, Nissan GT-R, Ducati 1098.<br />-Гоняй по шести самых горячих городам мира: Монте Карло, Беверли Хиллз, Шангай, Нью-Йорк, Дюбай, Париж.<br />-Удивительная 3D графика просто захватывает дыхание!<br />-Тюнингуй свой автомобиль в собственном гараже!<br />-Наслаждайся пятью различными режимами игры, такими как преследование, дрифт, и сбей всех.<br />-Адаптируйся в различных погодных условиях: сможешь ли управлять своим автомобилем в ливень?<br /><table id="ipb-attach-table-1607-0-92318400-1243759431" cellspacing="0" cellpadding="0" style="width: auto; display: inline-block; "><tbody><tr><td style="padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; "><div id="ipb-attach-div-1607-0-92318400-1243759431" class="resized-linked-image" title="Нажмите для просмотра полного изображения" style="margin-top: 1px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 8px; padding-bottom: 5px; padding-left: 8px; background-color: rgb(134, 161, 184); border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; color: rgb(0, 0, 0); font-size: 10px; width: 240px; height: 173px; text-align: center; "><div id="ipb-attach-ct-1607-0-92318400-1243759431" style="font-size: 9px; "><img src="http://touchnokia.ru/forums/style_images/hi-tech/img-resized.png" border="0" alt="" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " />&nbsp;Уменьшено до 63%</div><a id="ipb-attach-url-1607-0-92318400-1243759431" href="http://touchnokia.ru/forums/index.php?act=attach&amp;type=post&amp;id=1607" title="Scr000391.jpg - Размер: 61,07 килобайт, Скачано: 17" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><img src="http://touchnokia.ru/forums/uploads/monthly_05_2009/post-1-1243712008_thumb.jpg" id="ipb-attach-img-1607-0-92318400-1243759431" class="ipb" width="240" height="135" alt="Прикрепленное изображение" title="Нажмите для просмотра полного изображения" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; cursor: pointer; " /></a><div id="ipb-attach-cb-1607-0-92318400-1243759431" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-size: 9px; text-align: center; ">640 x 360 (61,07 килобайт)</div></div></td></tr></tbody></table>&nbsp;<table id="ipb-attach-table-1608-0-92356700-1243759431" cellspacing="0" cellpadding="0" style="width: auto; display: inline-block; "><tbody><tr><td style="padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; "><div id="ipb-attach-div-1608-0-92356700-1243759431" class="resized-linked-image" title="Нажмите для просмотра полного изображения" style="margin-top: 1px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 8px; padding-bottom: 5px; padding-left: 8px; background-color: rgb(134, 161, 184); border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; color: rgb(0, 0, 0); font-size: 10px; width: 240px; height: 173px; text-align: center; "><div id="ipb-attach-ct-1608-0-92356700-1243759431" style="font-size: 9px; "><img src="http://touchnokia.ru/forums/style_images/hi-tech/img-resized.png" border="0" alt="" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " />&nbsp;Уменьшено до 63%</div><a id="ipb-attach-url-1608-0-92356700-1243759431" href="http://touchnokia.ru/forums/index.php?act=attach&amp;type=post&amp;id=1608" title="Scr000393.jpg - Размер: 63,54 килобайт, Скачано: 62" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><img src="http://touchnokia.ru/forums/uploads/monthly_05_2009/post-1-1243712016_thumb.jpg" id="ipb-attach-img-1608-0-92356700-1243759431" class="ipb" width="240" height="135" alt="Прикрепленное изображение" title="Нажмите для просмотра полного изображения" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " /></a><div id="ipb-attach-cb-1608-0-92356700-1243759431" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-size: 9px; text-align: center; ">640 x 360 (63,54 килобайт)</div></div></td></tr></tbody></table>&nbsp;<br /><a href="http://touchnokia.ru/forums/index.php?act=attach&amp;type=post&amp;id=1609" title="Скачать файл" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><img src="http://touchnokia.ru/forums/style_images/hi-tech/folder_mime_types/zip.gif" alt="Прикрепленный файл" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " /></a>&nbsp;&nbsp;<a href="http://touchnokia.ru/forums/index.php?act=attach&amp;type=post&amp;id=1609" title="Скачать файл" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; ">Asphalt4.zip</a>&nbsp;( 684,82 килобайт )<br /><br /><b>И версия Asphalt 4 HD в sis</b><br /><table id="ipb-attach-table-1622-0-92421200-1243759431" cellspacing="0" cellpadding="0" style="width: auto; display: inline-block; "><tbody><tr><td style="padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; "><div id="ipb-attach-div-1622-0-92421200-1243759431" class="resized-linked-image" title="Нажмите для просмотра полного изображения" style="margin-top: 1px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 8px; padding-bottom: 5px; padding-left: 8px; background-color: rgb(134, 161, 184); border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; color: rgb(0, 0, 0); font-size: 10px; width: 240px; height: 173px; text-align: center; "><div id="ipb-attach-ct-1622-0-92421200-1243759431" style="font-size: 9px; "><img src="http://touchnokia.ru/forums/style_images/hi-tech/img-resized.png" border="0" alt="" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " />&nbsp;Уменьшено до 63%</div><a id="ipb-attach-url-1622-0-92421200-1243759431" href="http://touchnokia.ru/forums/index.php?act=attach&amp;type=post&amp;id=1622" title="screen1.jpg - Размер: 72,42 килобайт, Скачано: 0" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><img src="http://touchnokia.ru/forums/uploads/monthly_05_2009/post-1-1243758764_thumb.jpg" id="ipb-attach-img-1622-0-92421200-1243759431" class="ipb" width="240" height="135" alt="Прикрепленное изображение" title="Нажмите для просмотра полного изображения" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; cursor: pointer; " /></a><div id="ipb-attach-cb-1622-0-92421200-1243759431" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-size: 9px; text-align: center; ">639 x 359 (72,42 килобайт)</div></div></td></tr></tbody></table>&nbsp;<br /><table id="ipb-attach-table-1623-0-92441100-1243759431" cellspacing="0" cellpadding="0" style="width: auto; display: inline-block; "><tbody><tr><td style="padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; "><div id="ipb-attach-div-1623-0-92441100-1243759431" class="resized-linked-image" title="Нажмите для просмотра полного изображения" style="margin-top: 1px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 8px; padding-bottom: 5px; padding-left: 8px; background-color: rgb(134, 161, 184); border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; color: rgb(0, 0, 0); font-size: 10px; width: 240px; height: 173px; text-align: center; "><div id="ipb-attach-ct-1623-0-92441100-1243759431" style="font-size: 9px; "><img src="http://touchnokia.ru/forums/style_images/hi-tech/img-resized.png" border="0" alt="" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " />&nbsp;Уменьшено до 63%</div><a id="ipb-attach-url-1623-0-92441100-1243759431" href="http://touchnokia.ru/forums/index.php?act=attach&amp;type=post&amp;id=1623" title="screen2.jpg - Размер: 60,41 килобайт, Скачано: 0" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><img src="http://touchnokia.ru/forums/uploads/monthly_05_2009/post-1-1243758819_thumb.jpg" id="ipb-attach-img-1623-0-92441100-1243759431" class="ipb" width="240" height="135" alt="Прикрепленное изображение" title="Нажмите для просмотра полного изображения" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; cursor: pointer; " /></a><div id="ipb-attach-cb-1623-0-92441100-1243759431" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-size: 9px; text-align: center; ">639 x 359 (60,41 килобайт)</div></div></td></tr></tbody></table>&nbsp;<br /><a href="http://touchnokia.ru/forums/index.php?act=attach&amp;type=post&amp;id=1624" title="Скачать файл" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><img src="http://touchnokia.ru/forums/style_images/hi-tech/folder_mime_types/zip.gif" alt="Прикрепленный файл" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " /></a>&nbsp;&nbsp;<a href="http://touchnokia.ru/forums/index.php?act=attach&amp;type=post&amp;id=1624" title="Скачать файл" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; ">Asphalt4.N5800.Unsigned.zip</a>&nbsp;( 5,35 мегабайт )</span><br /></b></span></font><div><font class="Apple-style-span" color="#26394D" face="Verdana" size="3"><span class="Apple-style-span" style="font-size: 12px; line-height: 19px; -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px;">Обсуждение ведем <a href="http://touchnokia.ru/forums/index.php?showtopic=949">здесь</a></span></font></div>]]>
-        
-    </content>
-</entry>
-
-<entry>
-    <title>Игры для Nokia 5800 и Nokia N97: 3D Fast and Furious</title>
-    <link rel="alternate" type="text/html" href="http://touchnokia.ru/2009/05/igri-dlja-nokia-5800-i-nokia-n97-3d-fast-and-furious.html" />
-    <id>tag:touchnokia.ru,2009://1.809</id>
-
-    <published>2009-05-30T19:47:24Z</published>
-    <updated>2009-05-31T08:24:20Z</updated>
-
-    <summary><![CDATA[3D Fast and FuriousРазработчик:&nbsp;i-playЯзык:&nbsp;АнглийскийСостояние:Описание:&nbsp;Хорошая игра с 3D графикой&nbsp;Уменьшено до 50%360 x 640 (34,56 килобайт)&nbsp;&nbsp;Уменьшено до 50%360 x 640 (44,54 килобайт)&nbsp;&nbsp;&nbsp;3D_Fast_and_Furious_n5800.zip&nbsp;( 675,77 килобайт ) Обсуждение ведем здесь...]]></summary>
-    <author>
-        <name>iPod</name>
-        <uri>http://TouchNokia.ru</uri>
-    </author>
-    
-        <category term="Игры для Nokia 5800" scheme="http://www.sixapart.com/ns/types#category" />
-    
-    <category term="3d" label="3D" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="5800" label="5800" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="and" label="and" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="fast" label="Fast" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="furious" label="Furious" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="n97" label="N97:" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="nokia" label="Nokia" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="для" label="для" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="и" label="и" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="Игры" label="Игры" scheme="http://www.sixapart.com/ns/types#tag" />
-    
-    <content type="html" xml:lang="ru" xml:base="http://touchnokia.ru/">
-        <![CDATA[<span class="Apple-style-span" style="color: rgb(38, 57, 77); font-family: Verdana; font-size: 12px; line-height: 19px; -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px; "><span style="font-size: 14pt; line-height: 19px; "><b>3D Fast and Furious</b></span><br /><br /><b>Разработчик:</b>&nbsp;i-play<br /><b>Язык:</b>&nbsp;Английский<br /><b>Состояние:</b><br /><b>Описание:</b>&nbsp;Хорошая игра с 3D графикой<br /><table id="ipb-attach-table-1616-0-66426500-1243758190" cellspacing="0" cellpadding="0" style="width: auto; display: inline-block; "><tbody><tr><td style="padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; "><div id="ipb-attach-div-1616-0-66426500-1243758190" class="resized-linked-image" title="Нажмите для просмотра полного изображения" style="margin-top: 1px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 8px; padding-bottom: 5px; padding-left: 8px; background-color: rgb(134, 161, 184); border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; color: rgb(0, 0, 0); font-size: 10px; width: 180px; height: 358px; text-align: center; "><div id="ipb-attach-ct-1616-0-66426500-1243758190" style="font-size: 9px; "><img src="http://touchnokia.ru/forums/style_images/hi-tech/img-resized.png" border="0" alt="" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " />&nbsp;Уменьшено до 50%</div><a id="ipb-attach-url-1616-0-66426500-1243758190" href="http://touchnokia.ru/forums/index.php?act=attach&amp;type=post&amp;id=1616" title="Scr000396.jpg - Размер: 34,56 килобайт, Скачано: 0" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><img src="http://touchnokia.ru/forums/uploads/monthly_05_2009/post-1-1243757911_thumb.jpg" id="ipb-attach-img-1616-0-66426500-1243758190" class="ipb" width="180" height="320" alt="Прикрепленное изображение" title="Нажмите для просмотра полного изображения" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; cursor: pointer; " /></a><div id="ipb-attach-cb-1616-0-66426500-1243758190" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-size: 9px; text-align: center; ">360 x 640 (34,56 килобайт)</div></div></td></tr></tbody></table>&nbsp;<table id="ipb-attach-table-1617-0-66441400-1243758190" cellspacing="0" cellpadding="0" style="width: auto; display: inline-block; "><tbody><tr><td style="padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; "><div id="ipb-attach-div-1617-0-66441400-1243758190" class="resized-linked-image" title="Нажмите для просмотра полного изображения" style="margin-top: 1px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 8px; padding-bottom: 5px; padding-left: 8px; background-color: rgb(134, 161, 184); border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; color: rgb(0, 0, 0); font-size: 10px; width: 180px; height: 358px; text-align: center; "><div id="ipb-attach-ct-1617-0-66441400-1243758190" style="font-size: 9px; "><img src="http://touchnokia.ru/forums/style_images/hi-tech/img-resized.png" border="0" alt="" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " />&nbsp;Уменьшено до 50%</div><a id="ipb-attach-url-1617-0-66441400-1243758190" href="http://touchnokia.ru/forums/index.php?act=attach&amp;type=post&amp;id=1617" title="Scr000397.jpg - Размер: 44,54 килобайт, Скачано: 0" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><img src="http://touchnokia.ru/forums/uploads/monthly_05_2009/post-1-1243757917_thumb.jpg" id="ipb-attach-img-1617-0-66441400-1243758190" class="ipb" width="180" height="320" alt="Прикрепленное изображение" title="Нажмите для просмотра полного изображения" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " /></a><div id="ipb-attach-cb-1617-0-66441400-1243758190" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-size: 9px; text-align: center; ">360 x 640 (44,54 килобайт)</div></div></td></tr></tbody></table>&nbsp;<br /><a href="http://touchnokia.ru/forums/index.php?act=attach&amp;type=post&amp;id=1621" title="Скачать файл" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><img src="http://touchnokia.ru/forums/style_images/hi-tech/folder_mime_types/zip.gif" alt="Прикрепленный файл" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " /></a>&nbsp;&nbsp;<a href="http://touchnokia.ru/forums/index.php?act=attach&amp;type=post&amp;id=1621" title="Скачать файл" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; ">3D_Fast_and_Furious_n5800.zip</a>&nbsp;( 675,77 килобайт )</span> <div><font class="Apple-style-span" color="#26394D" face="Verdana" size="3"><span class="Apple-style-span" style="font-size: 12px; line-height: 19px; -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px;">Обсуждение ведем <a href="http://touchnokia.ru/forums/index.php?showtopic=956">здесь</a></span></font></div>]]>
-        
-    </content>
-</entry>
-
-<entry>
-    <title>Программы для Nokia 5800 и Nokia N97: Kaspersky Mobile Security 8.0 release v.8.0.51 - Обновление</title>
-    <link rel="alternate" type="text/html" href="http://touchnokia.ru/2009/05/programmi-dlja-nokia-5800-i-nokia-n97-kaspersky-mobile-security-80-release-v8051---obnovlenie.html" />
-    <id>tag:touchnokia.ru,2009://1.807</id>
-
-    <published>2009-05-30T19:16:24Z</published>
-    <updated>2009-05-30T19:46:19Z</updated>
-
-    <summary><![CDATA[Kaspersky Mobile Security 8.0 release v.8.0.51Разработчик:&nbsp;ЗАО "Лаборатория Касперского"Язык:&nbsp;РусскийСостояние:&nbsp;Free&nbsp;(действительна до 1.02.2048 года)Описание:&nbsp;Антивирус Касперского® Mobile это удобное и надежное решение для защиты смартфонов под управлением Symbian OS и Windows Mobile от вредоносных программ для мобильных платформ.ПреимуществаЗащита от мобильных вирусов в режиме реального...]]></summary>
-    <author>
-        <name>iPod</name>
-        <uri>http://TouchNokia.ru</uri>
-    </author>
-    
-        <category term="Безопасность" scheme="http://www.sixapart.com/ns/types#category" />
-    
-        <category term="Программы для Nokia 5800" scheme="http://www.sixapart.com/ns/types#category" />
-    
-    <category term="5800" label="5800" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="80" label="8.0" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="kaspersky" label="Kaspersky" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="mobile" label="Mobile" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="n97" label="N97:" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="nokia" label="Nokia" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="release" label="release" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="security" label="Security" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="v8051" label="v.8.0.51" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="для" label="для" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="и" label="и" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="Программы" label="Программы" scheme="http://www.sixapart.com/ns/types#tag" />
-    
-    <content type="html" xml:lang="ru" xml:base="http://touchnokia.ru/">
-        <![CDATA[<font class="Apple-style-span" color="#26394D" face="Verdana" size="6"><span class="Apple-style-span" style="font-size: 19px; line-height: 19px; -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px;"><b><span class="Apple-style-span" style="font-size: 12px; font-weight: normal; "><span style="font-size: 14pt; line-height: 19px; "><b>Kaspersky Mobile Security 8.0 release v.8.0.51</b></span><br /><br /><b>Разработчик:</b>&nbsp;ЗАО "Лаборатория Касперского"<br /><b>Язык:</b>&nbsp;Русский<br /><b>Состояние:</b>&nbsp;Free&nbsp;<u><i>(действительна до 1.02.2048 года)</i></u><br /><b>Описание:</b>&nbsp;Антивирус Касперского® Mobile это удобное и надежное решение для защиты смартфонов под управлением Symbian OS и Windows Mobile от вредоносных программ для мобильных платформ.<br />Преимущества<br />Защита от мобильных вирусов в режиме реального времени<br />Защита от спама в SMS/EMS/MMS с помощью черных и белых списков<br />Незаметная работа в фоновом режиме<br />Автоматическое обновление антивирусных баз<br />Основные функции<br />Антивирусная проверка встроенной памяти телефона, а также карт памяти по требованию<br />Проверка всех входящих или модифицируемых объектов без участия пользователя<br />Полная антивирусная проверка по расписанию в удобное для пользователя время<br />Бесплатная техническая поддержка по вопросам установки, активации, настройки и эксплуатации продукта<br /><br /><table id="ipb-attach-table-1605-0-65086900-1243712699" cellspacing="0" cellpadding="0" style="width: auto; display: inline-block; "><tbody><tr><td style="padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; "><div id="ipb-attach-div-1605-0-65086900-1243712699" class="resized-linked-image" title="Нажмите для просмотра полного изображения" style="margin-top: 1px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 8px; padding-bottom: 5px; padding-left: 8px; background-color: rgb(134, 161, 184); border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; color: rgb(0, 0, 0); font-size: 10px; width: 180px; height: 358px; text-align: center; "><div id="ipb-attach-ct-1605-0-65086900-1243712699" style="font-size: 9px; "><img src="http://touchnokia.ru/forums/style_images/hi-tech/img-resized.png" border="0" alt="" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " />&nbsp;Уменьшено до 50%</div><a id="ipb-attach-url-1605-0-65086900-1243712699" href="http://touchnokia.ru/forums/index.php?act=attach&amp;type=post&amp;id=1605" title="Scr000390.jpg - Размер: 42,68 килобайт, Скачано: 0" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><img src="http://touchnokia.ru/forums/uploads/monthly_05_2009/post-1-1243710731_thumb.jpg" id="ipb-attach-img-1605-0-65086900-1243712699" class="ipb" width="180" height="320" alt="Прикрепленное изображение" title="Нажмите для просмотра полного изображения" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; cursor: pointer; " /></a><div id="ipb-attach-cb-1605-0-65086900-1243712699" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-size: 9px; text-align: center; ">360 x 640 (42,68 килобайт)</div></div></td></tr></tbody></table>&nbsp;<table id="ipb-attach-table-1604-0-65116400-1243712699" cellspacing="0" cellpadding="0" style="width: auto; display: inline-block; "><tbody><tr><td style="padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; "><div id="ipb-attach-div-1604-0-65116400-1243712699" class="resized-linked-image" title="Нажмите для просмотра полного изображения" style="margin-top: 1px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 8px; padding-bottom: 5px; padding-left: 8px; background-color: rgb(134, 161, 184); border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; color: rgb(0, 0, 0); font-size: 10px; width: 180px; height: 358px; text-align: center; "><div id="ipb-attach-ct-1604-0-65116400-1243712699" style="font-size: 9px; "><img src="http://touchnokia.ru/forums/style_images/hi-tech/img-resized.png" border="0" alt="" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " />&nbsp;Уменьшено до 50%</div><a id="ipb-attach-url-1604-0-65116400-1243712699" href="http://touchnokia.ru/forums/index.php?act=attach&amp;type=post&amp;id=1604" title="Scr000389.jpg - Размер: 69,83 килобайт, Скачано: 0" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><img src="http://touchnokia.ru/forums/uploads/monthly_05_2009/post-1-1243710725_thumb.jpg" id="ipb-attach-img-1604-0-65116400-1243712699" class="ipb" width="180" height="320" alt="Прикрепленное изображение" title="Нажмите для просмотра полного изображения" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " /></a><div id="ipb-attach-cb-1604-0-65116400-1243712699" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-size: 9px; text-align: center; ">360 x 640 (69,83 килобайт)</div></div></td></tr></tbody></table>&nbsp;<br /><a href="http://touchnokia.ru/forums/index.php?act=attach&amp;type=post&amp;id=1610" title="Скачать файл" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><img src="http://touchnokia.ru/forums/style_images/hi-tech/folder_mime_types/zip.gif" alt="Прикрепленный файл" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " /></a>&nbsp;&nbsp;<a href="http://touchnokia.ru/forums/index.php?act=attach&amp;type=post&amp;id=1610" title="Скачать файл" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; ">kaspersky_mobil.zip</a>&nbsp;( 885,88 килобайт )&nbsp;<font class="Apple-style-span" style="font-size: 0.8em; ">- <i>в архиве находится инструкция на английском по регистрации программы</i></font></span><br /></b></span></font><div><font class="Apple-style-span" color="#26394D" face="Verdana" size="3"><span class="Apple-style-span" style="font-size: 12px; line-height: 19px; -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px;">Обсуждение ведем <a href="http://touchnokia.ru/forums/index.php?showtopic=478">здесь</a></span></font></div>]]>
-        
-    </content>
-</entry>
-
-<entry>
-    <title>Программы для Nokia 5800 и Nokia N97: Dudu Recorder v.3.20</title>
-    <link rel="alternate" type="text/html" href="http://touchnokia.ru/2009/05/programmi-dlja-nokia-5800-i-nokia-n97-dudu-recorder-v320.html" />
-    <id>tag:touchnokia.ru,2009://1.806</id>
-
-    <published>2009-05-30T18:37:40Z</published>
-    <updated>2009-05-30T18:39:45Z</updated>
-
-    <summary><![CDATA[Dudu Recorder v.3.20Разработчик:&nbsp;HongDi TechnologyЯзык:&nbsp;English&nbsp;Состояние:&nbsp;Free (для регистрации вводим&nbsp;12090704Описание:&nbsp;Маленький диктофон, имеющий функции: записывает в формате АМR, умеет сортировать записи, есть авто-старт, неограниченная длительность записи (зависит от количества свободного места на диске), скрывает записи, выбор памяти для записи. Если при установке выдает ошибка...]]></summary>
-    <author>
-        <name>iPod</name>
-        <uri>http://TouchNokia.ru</uri>
-    </author>
-    
-        <category term="Мультимедиа" scheme="http://www.sixapart.com/ns/types#category" />
-    
-        <category term="Программы для Nokia 5800" scheme="http://www.sixapart.com/ns/types#category" />
-    
-    <category term="5800" label="5800" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="dudu" label="Dudu" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="n97" label="N97:" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="nokia" label="Nokia" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="recorder" label="Recorder" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="v320" label="v.3.20" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="для" label="для" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="и" label="и" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="Программы" label="Программы" scheme="http://www.sixapart.com/ns/types#tag" />
-    
-    <content type="html" xml:lang="ru" xml:base="http://touchnokia.ru/">
-        <![CDATA[<span class="Apple-style-span" style="color: rgb(38, 57, 77); font-family: Verdana; font-size: 12px; line-height: 19px; -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px; "><span style="font-size: 14pt; line-height: 19px; "><b>Dudu Recorder v.3.20</b></span><br /><br /><b>Разработчик:</b>&nbsp;HongDi Technology<br /><b>Язык:</b>&nbsp;English&nbsp;<br /><b>Состояние:</b>&nbsp;Free (для регистрации вводим&nbsp;<span style="color: rgb(0, 255, 0); ">12090704</span><br /><b>Описание:</b>&nbsp;Маленький диктофон, имеющий функции: записывает в формате АМR, умеет сортировать записи, есть авто-старт, неограниченная длительность записи (зависит от количества свободного места на диске), скрывает записи, выбор памяти для записи. Если при установке выдает ошибка обновления удалите предыдущие версии!<br /><b>Изменения в v.3.20:</b><br />-Добавлена защита паролем<br />-горячии клавиши<br />-скрытый режим (приложения не видно в списке запущенных)&nbsp;<br /><table id="ipb-attach-table-1233-0-61670800-1243708652" cellspacing="0" cellpadding="0" style="width: auto; display: inline-block; "><tbody><tr><td style="padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; "><div id="ipb-attach-div-1233-0-61670800-1243708652" class="resized-linked-image" title="Нажмите для просмотра полного изображения" style="margin-top: 1px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 8px; padding-bottom: 5px; padding-left: 8px; background-color: rgb(134, 161, 184); border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; color: rgb(0, 0, 0); font-size: 10px; width: 180px; height: 358px; text-align: center; "><div id="ipb-attach-ct-1233-0-61670800-1243708652" style="font-size: 9px; "><img src="http://touchnokia.ru/forums/style_images/hi-tech/img-resized.png" border="0" alt="" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " />&nbsp;Уменьшено до 50%</div><a id="ipb-attach-url-1233-0-61670800-1243708652" href="http://touchnokia.ru/forums/index.php?act=attach&amp;type=post&amp;id=1233" title="Scr000232.jpg - Размер: 49,76 килобайт, Скачано: 4" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><img src="http://touchnokia.ru/forums/uploads/monthly_05_2009/post-1-1241347699_thumb.jpg" id="ipb-attach-img-1233-0-61670800-1243708652" class="ipb" width="180" height="320" alt="Прикрепленное изображение" title="Нажмите для просмотра полного изображения" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; cursor: pointer; " /></a><div id="ipb-attach-cb-1233-0-61670800-1243708652" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-size: 9px; text-align: center; ">360 x 640 (49,76 килобайт)</div></div></td></tr></tbody></table>&nbsp;<table id="ipb-attach-table-1234-0-61699800-1243708652" cellspacing="0" cellpadding="0" style="width: auto; display: inline-block; "><tbody><tr><td style="padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; "><div id="ipb-attach-div-1234-0-61699800-1243708652" class="resized-linked-image" title="Нажмите для просмотра полного изображения" style="margin-top: 1px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 8px; padding-bottom: 5px; padding-left: 8px; background-color: rgb(134, 161, 184); border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; color: rgb(0, 0, 0); font-size: 10px; width: 180px; height: 358px; text-align: center; "><div id="ipb-attach-ct-1234-0-61699800-1243708652" style="font-size: 9px; "><img src="http://touchnokia.ru/forums/style_images/hi-tech/img-resized.png" border="0" alt="" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " />&nbsp;Уменьшено до 50%</div><a id="ipb-attach-url-1234-0-61699800-1243708652" href="http://touchnokia.ru/forums/index.php?act=attach&amp;type=post&amp;id=1234" title="Scr000233.jpg - Размер: 50,93 килобайт, Скачано: 2" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><img src="http://touchnokia.ru/forums/uploads/monthly_05_2009/post-1-1241347705_thumb.jpg" id="ipb-attach-img-1234-0-61699800-1243708652" class="ipb" width="180" height="320" alt="Прикрепленное изображение" title="Нажмите для просмотра полного изображения" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " /></a><div id="ipb-attach-cb-1234-0-61699800-1243708652" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-size: 9px; text-align: center; ">360 x 640 (50,93 килобайт)</div></div></td></tr></tbody></table>&nbsp;<br /><a href="http://touchnokia.ru/forums/index.php?act=attach&amp;type=post&amp;id=1602" title="Скачать файл" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><img src="http://touchnokia.ru/forums/style_images/hi-tech/folder_mime_types/zip.gif" alt="Прикрепленный файл" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " /></a>&nbsp;&nbsp;<a href="http://touchnokia.ru/forums/index.php?act=attach&amp;type=post&amp;id=1602" title="Скачать файл" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; ">dudu320.zip</a>&nbsp;( 114,99 килобайт )</span> <div><font class="Apple-style-span" color="#26394D" face="Verdana" size="3"><span class="Apple-style-span" style="font-size: 12px; line-height: 19px; -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px;">Обсуждение ведем <a href="http://touchnokia.ru/forums/index.php?showtopic=710">здесь</a></span></font></div>]]>
-        
-    </content>
-</entry>
-
-<entry>
-    <title>Программы для Nokia 5800 и Nokia N97: MyPhone v.2.11 - Обновление</title>
-    <link rel="alternate" type="text/html" href="http://touchnokia.ru/2009/05/programmi-dlja-nokia-5800-i-nokia-n97-myphone-v211---obnovlenie.html" />
-    <id>tag:touchnokia.ru,2009://1.805</id>
-
-    <published>2009-05-30T17:58:41Z</published>
-    <updated>2009-05-30T17:59:38Z</updated>
-
-    <summary><![CDATA[MyPhone v.2.11Разработчик:&nbsp;immmoooЯзык:&nbsp;АнглийскийСостояние:&nbsp;TrialОписание:&nbsp;Эмулятор интерфейса iPhone на 5800&nbsp;Уменьшено до 50%360 x 640 (32,26 килобайт)&nbsp;&nbsp;Уменьшено до 50%360 x 640 (63,16 килобайт)&nbsp;&nbsp;&nbsp;myphone.zip&nbsp;( 410,09 килобайт )Обсуждение ведем здесь...]]></summary>
-    <author>
-        <name>iPod</name>
-        <uri>http://TouchNokia.ru</uri>
-    </author>
-    
-        <category term="Программы для Nokia 5800" scheme="http://www.sixapart.com/ns/types#category" />
-    
-        <category term="Разное" scheme="http://www.sixapart.com/ns/types#category" />
-    
-    <category term="5800" label="5800" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="myphone" label="MyPhone" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="n97" label="N97:" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="nokia" label="Nokia" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="v211" label="v.2.11" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="для" label="для" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="и" label="и" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="Программы" label="Программы" scheme="http://www.sixapart.com/ns/types#tag" />
-    
-    <content type="html" xml:lang="ru" xml:base="http://touchnokia.ru/">
-        <![CDATA[<span class="Apple-style-span" style="color: rgb(38, 57, 77); font-family: Verdana; font-size: 12px; line-height: 19px; -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px; "><span style="font-size: 14pt; line-height: 19px; "><b>MyPhone v.2.11</b></span><br /><br /><b>Разработчик:</b>&nbsp;immmooo<br /><b>Язык:</b>&nbsp;Английский<br /><b>Состояние:</b>&nbsp;Trial<br /><b>Описание:</b>&nbsp;Эмулятор интерфейса iPhone на 5800<br /><table id="ipb-attach-table-1313-0-50472400-1243706274" cellspacing="0" cellpadding="0" style="width: auto; display: inline-block; "><tbody><tr><td style="padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; "><div id="ipb-attach-div-1313-0-50472400-1243706274" class="resized-linked-image" title="Нажмите для просмотра полного изображения" style="margin-top: 1px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 8px; padding-bottom: 5px; padding-left: 8px; background-color: rgb(134, 161, 184); border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; color: rgb(0, 0, 0); font-size: 10px; width: 180px; height: 358px; text-align: center; "><div id="ipb-attach-ct-1313-0-50472400-1243706274" style="font-size: 9px; ">&nbsp;Уменьшено до 50%</div><a id="ipb-attach-url-1313-0-50472400-1243706274" href="http://touchnokia.ru/forums/index.php?act=attach&amp;type=post&amp;id=1313" title="Scr000270.jpg - Размер: 32,26 килобайт, Скачано: 36" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><img src="http://touchnokia.ru/forums/uploads/monthly_05_2009/post-1-1241950940_thumb.jpg" id="ipb-attach-img-1313-0-50472400-1243706274" class="ipb" width="180" height="320" alt="Прикрепленное изображение" title="Нажмите для просмотра полного изображения" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; cursor: pointer; " /></a><div id="ipb-attach-cb-1313-0-50472400-1243706274" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-size: 9px; text-align: center; ">360 x 640 (32,26 килобайт)</div></div></td></tr></tbody></table>&nbsp;<table id="ipb-attach-table-1314-0-50507200-1243706274" cellspacing="0" cellpadding="0" style="width: auto; display: inline-block; "><tbody><tr><td style="padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; "><div id="ipb-attach-div-1314-0-50507200-1243706274" class="resized-linked-image" title="Нажмите для просмотра полного изображения" style="margin-top: 1px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 8px; padding-bottom: 5px; padding-left: 8px; background-color: rgb(134, 161, 184); border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; color: rgb(0, 0, 0); font-size: 10px; width: 180px; height: 358px; text-align: center; "><div id="ipb-attach-ct-1314-0-50507200-1243706274" style="font-size: 9px; "><img src="http://touchnokia.ru/forums/style_images/hi-tech/img-resized.png" border="0" alt="" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " />&nbsp;Уменьшено до 50%</div><a id="ipb-attach-url-1314-0-50507200-1243706274" href="http://touchnokia.ru/forums/index.php?act=attach&amp;type=post&amp;id=1314" title="Scr000272.jpg - Размер: 63,16 килобайт, Скачано: 28" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><img src="http://touchnokia.ru/forums/uploads/monthly_05_2009/post-1-1241950944_thumb.jpg" id="ipb-attach-img-1314-0-50507200-1243706274" class="ipb" width="180" height="320" alt="Прикрепленное изображение" title="Нажмите для просмотра полного изображения" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " /></a><div id="ipb-attach-cb-1314-0-50507200-1243706274" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-size: 9px; text-align: center; ">360 x 640 (63,16 килобайт)</div></div></td></tr></tbody></table>&nbsp;<br /><a href="http://touchnokia.ru/forums/index.php?act=attach&amp;type=post&amp;id=1601" title="Скачать файл" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><img src="http://touchnokia.ru/forums/style_images/hi-tech/folder_mime_types/zip.gif" alt="Прикрепленный файл" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " /></a>&nbsp;&nbsp;<a href="http://touchnokia.ru/forums/index.php?act=attach&amp;type=post&amp;id=1601" title="Скачать файл" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; ">myphone.zip</a>&nbsp;( 410,09 килобайт )<br />Обсуждение ведем <a href="http://touchnokia.ru/forums/index.php?showtopic=762">здесь</a></span>]]>
-        
-    </content>
-</entry>
-
-<entry>
-    <title>Программы для Nokia 5800 и Nokia N97: Eye Call v.1.04</title>
-    <link rel="alternate" type="text/html" href="http://touchnokia.ru/2009/05/programmi-dlja-nokia-5800-i-nokia-n97-eye-call-v104.html" />
-    <id>tag:touchnokia.ru,2009://1.804</id>
-
-    <published>2009-05-30T17:47:01Z</published>
-    <updated>2009-05-30T17:58:12Z</updated>
-
-    <summary><![CDATA[Eye Call v.1.04Разработчик:&nbsp;EyeSight.Язык:&nbsp;АнглийскийСостояние:&nbsp;FreeОписание:&nbsp;Бывает так что кто-то звонит, а звук так неуместен, а с помощью вот этой программы достаточно махнуть рукой и телефон заглушит его. Также можно настроить что-бы на 2-ой взмах отсылалось SMS звонящему.[*]&nbsp;Если у вас&nbsp;разблокирован смартфон&nbsp;то качаем и ставим,...]]></summary>
-    <author>
-        <name>iPod</name>
-        <uri>http://TouchNokia.ru</uri>
-    </author>
-    
-        <category term="Программы для Nokia 5800" scheme="http://www.sixapart.com/ns/types#category" />
-    
-        <category term="Разное" scheme="http://www.sixapart.com/ns/types#category" />
-    
-    <category term="5800" label="5800" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="call" label="Call" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="eye" label="Eye" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="n97" label="N97:" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="nokia" label="Nokia" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="v104" label="v.1.04" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="для" label="для" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="и" label="и" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="Программы" label="Программы" scheme="http://www.sixapart.com/ns/types#tag" />
-    
-    <content type="html" xml:lang="ru" xml:base="http://touchnokia.ru/">
-        <![CDATA[<span class="Apple-style-span" style="color: rgb(38, 57, 77); font-family: Verdana; font-size: 12px; line-height: 19px; -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px; "><span style="font-size: 14pt; line-height: 19px; "><b>Eye Call v.1.04</b></span><br /><br /><b>Разработчик:</b>&nbsp;EyeSight.<br /><b>Язык:</b>&nbsp;Английский<br /><b>Состояние:</b>&nbsp;Free<br /><b>Описание:</b>&nbsp;Бывает так что кто-то звонит, а звук так неуместен, а с помощью вот этой программы достаточно махнуть рукой и телефон заглушит его. Также можно настроить что-бы на 2-ой взмах отсылалось SMS звонящему.<br /><b><span style="color: rgb(255, 0, 0); ">[*]</span>&nbsp;</b>Если у вас&nbsp;<a href="http://touchnokia.ru/forums/index.php?showtopic=252" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><span style="color: rgb(255, 0, 0); ">разблокирован смартфон</span></a>&nbsp;то качаем и ставим, если нет то файл необходимо&nbsp;<a href="http://touchnokia.ru/forums/index.php?showtopic=8" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><span style="color: rgb(0, 128, 0); ">подписать</span></a><br /><table id="ipb-attach-table-1598-0-56466900-1243705624" cellspacing="0" cellpadding="0" style="width: auto; display: inline-block; "><tbody><tr><td style="padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; "><div id="ipb-attach-div-1598-0-56466900-1243705624" class="resized-linked-image" title="Нажмите для просмотра полного изображения" style="margin-top: 1px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 8px; padding-bottom: 5px; padding-left: 8px; background-color: rgb(134, 161, 184); border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; color: rgb(0, 0, 0); font-size: 10px; width: 180px; height: 358px; text-align: center; "><div id="ipb-attach-ct-1598-0-56466900-1243705624" style="font-size: 9px; "><img src="http://touchnokia.ru/forums/style_images/hi-tech/img-resized.png" border="0" alt="" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " />&nbsp;Уменьшено до 50%</div><a id="ipb-attach-url-1598-0-56466900-1243705624" href="http://touchnokia.ru/forums/index.php?act=attach&amp;type=post&amp;id=1598" title="Scr000385.jpg - Размер: 30,56 килобайт, Скачано: 0" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><img src="http://touchnokia.ru/forums/uploads/monthly_05_2009/post-1-1243705383_thumb.jpg" id="ipb-attach-img-1598-0-56466900-1243705624" class="ipb" width="180" height="320" alt="Прикрепленное изображение" title="Нажмите для просмотра полного изображения" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; cursor: pointer; " /></a><div id="ipb-attach-cb-1598-0-56466900-1243705624" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-size: 9px; text-align: center; ">360 x 640 (30,56 килобайт)</div></div></td></tr></tbody></table>&nbsp;<table id="ipb-attach-table-1599-0-56483600-1243705624" cellspacing="0" cellpadding="0" style="width: auto; display: inline-block; "><tbody><tr><td style="padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; "><div id="ipb-attach-div-1599-0-56483600-1243705624" class="resized-linked-image" title="Нажмите для просмотра полного изображения" style="margin-top: 1px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 8px; padding-bottom: 5px; padding-left: 8px; background-color: rgb(134, 161, 184); border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; color: rgb(0, 0, 0); font-size: 10px; width: 180px; height: 358px; text-align: center; "><div id="ipb-attach-ct-1599-0-56483600-1243705624" style="font-size: 9px; "><img src="http://touchnokia.ru/forums/style_images/hi-tech/img-resized.png" border="0" alt="" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " />&nbsp;Уменьшено до 50%</div><a id="ipb-attach-url-1599-0-56483600-1243705624" href="http://touchnokia.ru/forums/index.php?act=attach&amp;type=post&amp;id=1599" title="Scr000388.jpg - Размер: 47,39 килобайт, Скачано: 0" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><img src="http://touchnokia.ru/forums/uploads/monthly_05_2009/post-1-1243705390_thumb.jpg" id="ipb-attach-img-1599-0-56483600-1243705624" class="ipb" width="180" height="320" alt="Прикрепленное изображение" title="Нажмите для просмотра полного изображения" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " /></a><div id="ipb-attach-cb-1599-0-56483600-1243705624" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-size: 9px; text-align: center; ">360 x 640 (47,39 килобайт)</div></div></td></tr></tbody></table>&nbsp;<br /><a href="http://touchnokia.ru/forums/index.php?act=attach&amp;type=post&amp;id=1600" title="Скачать файл" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><img src="http://touchnokia.ru/forums/style_images/hi-tech/folder_mime_types/zip.gif" alt="Прикрепленный файл" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " /></a>&nbsp;&nbsp;<a href="http://touchnokia.ru/forums/index.php?act=attach&amp;type=post&amp;id=1600" title="Скачать файл" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; ">eyesight.zip</a>&nbsp;( 1,34 мегабайт )</span> <div><font class="Apple-style-span" color="#26394D" face="Verdana" size="3"><span class="Apple-style-span" style="font-size: 12px; line-height: 19px; -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px;">Обсуждение ведем <a href="http://touchnokia.ru/forums/index.php?showtopic=947">здесь</a></span></font></div>]]>
-        
-    </content>
-</entry>
-
-<entry>
-    <title>Программы для Nokia 5800 и Nokia N97: OVI Store</title>
-    <link rel="alternate" type="text/html" href="http://touchnokia.ru/2009/05/programmi-dlja-nokia-5800-i-nokia-n97-ovi-store.html" />
-    <id>tag:touchnokia.ru,2009://1.803</id>
-
-    <published>2009-05-28T19:57:54Z</published>
-    <updated>2009-05-28T19:59:03Z</updated>
-
-    <summary><![CDATA[OVI StoreРазработчик:&nbsp;Язык:&nbsp;РусскийСостояние:&nbsp;FreeОписание:&nbsp;Программа для скачивания контента из Nokia OVI Store (программы, игры, картинки и т.д) прямо на телефоне.Присутствует возможность фильтрации представленного - только бесплатные.&nbsp;Уменьшено до 50%360 x 640 (61,05 килобайт)&nbsp;&nbsp;Уменьшено до 50%360 x 640 (25,44 килобайт)&nbsp;&nbsp;&nbsp;OVIStore.zip&nbsp;( 616,74 килобайт ) Обсуждение ведем...]]></summary>
-    <author>
-        <name>iPod</name>
-        <uri>http://TouchNokia.ru</uri>
-    </author>
-    
-        <category term="Интернет" scheme="http://www.sixapart.com/ns/types#category" />
-    
-        <category term="Программы для Nokia 5800" scheme="http://www.sixapart.com/ns/types#category" />
-    
-    <category term="5800" label="5800" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="n97" label="N97:" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="nokia" label="Nokia" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="ovi" label="OVI" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="store" label="Store" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="для" label="для" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="и" label="и" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="Программы" label="Программы" scheme="http://www.sixapart.com/ns/types#tag" />
-    
-    <content type="html" xml:lang="ru" xml:base="http://touchnokia.ru/">
-        <![CDATA[<span class="Apple-style-span" style="color: rgb(38, 57, 77); font-family: Verdana; font-size: 12px; line-height: 19px; -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px; "><span style="font-size: 14pt; line-height: 19px; "><b>OVI Store</b></span><br /><br /><b>Разработчик:</b>&nbsp;<br /><b>Язык:</b>&nbsp;Русский<br /><b>Состояние:</b>&nbsp;Free<br /><b>Описание:</b>&nbsp;Программа для скачивания контента из Nokia OVI Store (программы, игры, картинки и т.д) прямо на телефоне.<br />Присутствует возможность фильтрации представленного - только бесплатные.<br /><table id="ipb-attach-table-1594-0-86762900-1243540593" cellspacing="0" cellpadding="0" style="width: auto; display: inline-block; "><tbody><tr><td style="padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; "><div id="ipb-attach-div-1594-0-86762900-1243540593" class="resized-linked-image" title="Нажмите для просмотра полного изображения" style="margin-top: 1px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 8px; padding-bottom: 5px; padding-left: 8px; background-color: rgb(134, 161, 184); border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; color: rgb(0, 0, 0); font-size: 10px; width: 180px; height: 358px; text-align: center; "><div id="ipb-attach-ct-1594-0-86762900-1243540593" style="font-size: 9px; "><img src="http://touchnokia.ru/forums/style_images/hi-tech/img-resized.png" border="0" alt="" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " />&nbsp;Уменьшено до 50%</div><a id="ipb-attach-url-1594-0-86762900-1243540593" href="http://touchnokia.ru/forums/index.php?act=attach&amp;type=post&amp;id=1594" title="Scr000379.jpg - Размер: 61,05 килобайт, Скачано: 0" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><img src="http://touchnokia.ru/forums/uploads/monthly_05_2009/post-1-1243540199_thumb.jpg" id="ipb-attach-img-1594-0-86762900-1243540593" class="ipb" width="180" height="320" alt="Прикрепленное изображение" title="Нажмите для просмотра полного изображения" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; cursor: pointer; " /></a><div id="ipb-attach-cb-1594-0-86762900-1243540593" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-size: 9px; text-align: center; ">360 x 640 (61,05 килобайт)</div></div></td></tr></tbody></table>&nbsp;<table id="ipb-attach-table-1595-0-86774400-1243540593" cellspacing="0" cellpadding="0" style="width: auto; display: inline-block; "><tbody><tr><td style="padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; "><div id="ipb-attach-div-1595-0-86774400-1243540593" class="resized-linked-image" title="Нажмите для просмотра полного изображения" style="margin-top: 1px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 8px; padding-bottom: 5px; padding-left: 8px; background-color: rgb(134, 161, 184); border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; color: rgb(0, 0, 0); font-size: 10px; width: 180px; height: 358px; text-align: center; "><div id="ipb-attach-ct-1595-0-86774400-1243540593" style="font-size: 9px; "><img src="http://touchnokia.ru/forums/style_images/hi-tech/img-resized.png" border="0" alt="" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " />&nbsp;Уменьшено до 50%</div><a id="ipb-attach-url-1595-0-86774400-1243540593" href="http://touchnokia.ru/forums/index.php?act=attach&amp;type=post&amp;id=1595" title="Scr000380.jpg - Размер: 25,44 килобайт, Скачано: 0" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><img src="http://touchnokia.ru/forums/uploads/monthly_05_2009/post-1-1243540204_thumb.jpg" id="ipb-attach-img-1595-0-86774400-1243540593" class="ipb" width="180" height="320" alt="Прикрепленное изображение" title="Нажмите для просмотра полного изображения" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; cursor: pointer; " /></a><div id="ipb-attach-cb-1595-0-86774400-1243540593" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-size: 9px; text-align: center; ">360 x 640 (25,44 килобайт)</div></div></td></tr></tbody></table>&nbsp;<br /><a href="http://touchnokia.ru/forums/index.php?act=attach&amp;type=post&amp;id=1596" title="Скачать файл" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><img src="http://touchnokia.ru/forums/style_images/hi-tech/folder_mime_types/zip.gif" alt="Прикрепленный файл" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " /></a>&nbsp;&nbsp;<a href="http://touchnokia.ru/forums/index.php?act=attach&amp;type=post&amp;id=1596" title="Скачать файл" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; ">OVIStore.zip</a>&nbsp;( 616,74 килобайт )</span> <br /><div><font class="Apple-style-span" color="#26394D" face="Verdana" size="3"><span class="Apple-style-span" style="font-size: 12px; line-height: 19px; -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px; ">Обсуждение ведем <a href="http://touchnokia.ru/forums/index.php?showtopic=934">здесь&nbsp;</a></span></font></div>]]>
-        
-    </content>
-</entry>
-
-<entry>
-    <title>Программы для Nokia 5800 и Nokia N97: Talkonaut v.5.51.68</title>
-    <link rel="alternate" type="text/html" href="http://touchnokia.ru/2009/05/programmi-dlja-nokia-5800-i-nokia-n97-talkonaut-v55168.html" />
-    <id>tag:touchnokia.ru,2009://1.802</id>
-
-    <published>2009-05-28T19:16:28Z</published>
-    <updated>2009-05-28T19:18:50Z</updated>
-
-    <summary>Talkonaut v.5.51.68Разработчик: talkonaut.comЯзык: РусскийСостояние: FreeОписание: Talkonaut - это бесплатный GoogleTalk/Jabber IM клиент с голосовыми функциями.Функции:бесплатные звонки на GTalk, MSN Messenger, Yahoo, SIP;отправка и получение сообщений из: GTalk, Jabber, ICQ, MSN, AIM и Yahoo;дешевые звонки через GTalk;бесплатные звонки с вашего существующего...</summary>
-    <author>
-        <name>iPod</name>
-        <uri>http://TouchNokia.ru</uri>
-    </author>
-    
-        <category term="Интернет" scheme="http://www.sixapart.com/ns/types#category" />
-    
-        <category term="Программы для Nokia 5800" scheme="http://www.sixapart.com/ns/types#category" />
-    
-    <category term="5800" label="5800" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="n97" label="N97:" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="nokia" label="Nokia" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="talkonaut" label="Talkonaut" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="v55168" label="v.5.51.68" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="для" label="для" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="и" label="и" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="Программы" label="Программы" scheme="http://www.sixapart.com/ns/types#tag" />
-    
-    <content type="html" xml:lang="ru" xml:base="http://touchnokia.ru/">
-        <![CDATA[<span class="Apple-style-span" style="color: rgb(38, 57, 77); font-family: Verdana; font-size: 12px; line-height: 19px; -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px; "><span style="font-size: 14pt; line-height: 19px; "><b>Talkonaut v.5.51.68</b></span><br /><br /><b>Разработчик</b>: talkonaut.com<br /><b>Язык</b>: Русский<br /><b>Состояние</b>: Free<br /><b>Описание</b>: Talkonaut - это бесплатный GoogleTalk/Jabber IM клиент с голосовыми функциями.<br /><b>Функции:</b><ul><li>бесплатные звонки на GTalk, MSN Messenger, Yahoo, SIP;</li><li>отправка и получение сообщений из: GTalk, Jabber, ICQ, MSN, AIM и Yahoo;</li><li>дешевые звонки через GTalk;</li><li>бесплатные звонки с вашего существующего SIP-счета;</li><li>наличие смайликов, сигналов, передачи файлов через Jabber;</li><li>поддержка Jabber Service Discovery для работы с другими IM клиентами, поиск контактов ICQ и отправка SMS с помощью Mail.RU Agent;</li><li>поддержка сжатия трафика в 5-10 раз.</li></ul><b>Что нового:</b><br /><ul><li>Добавлено расширение (PNG, JPG или GIF) к имени файла при сохранении аватара.</li></ul><table id="ipb-attach-table-1592-0-63012200-1243538186" cellspacing="0" cellpadding="0" style="width: auto; display: inline-block; "><tbody><tr><td style="padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; "><div id="ipb-attach-div-1592-0-63012200-1243538186" class="resized-linked-image" title="Нажмите для просмотра полного изображения" style="margin-top: 1px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 8px; padding-bottom: 5px; padding-left: 8px; background-color: rgb(134, 161, 184); border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; color: rgb(0, 0, 0); font-size: 10px; width: 180px; height: 358px; text-align: center; "><div id="ipb-attach-ct-1592-0-63012200-1243538186" style="font-size: 9px; "><img src="http://touchnokia.ru/forums/style_images/hi-tech/img-resized.png" border="0" alt="" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " />&nbsp;Уменьшено до 50%</div><a id="ipb-attach-url-1592-0-63012200-1243538186" href="http://touchnokia.ru/forums/index.php?act=attach&amp;type=post&amp;id=1592" title="Scr000002.jpg - Размер: 74,56 килобайт, Скачано: 0" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><img src="http://touchnokia.ru/forums/uploads/monthly_05_2009/post-1-1243538165_thumb.jpg" id="ipb-attach-img-1592-0-63012200-1243538186" class="ipb" width="180" height="320" alt="Прикрепленное изображение" title="Нажмите для просмотра полного изображения" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " /></a><div id="ipb-attach-cb-1592-0-63012200-1243538186" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-size: 9px; text-align: center; ">360 x 640 (74,56 килобайт)</div></div></td></tr></tbody></table>&nbsp;<table id="ipb-attach-table-1591-0-63028800-1243538186" cellspacing="0" cellpadding="0" style="width: auto; display: inline-block; "><tbody><tr><td style="padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; "><div id="ipb-attach-div-1591-0-63028800-1243538186" class="resized-linked-image" title="Нажмите для просмотра полного изображения" style="margin-top: 1px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 8px; padding-bottom: 5px; padding-left: 8px; background-color: rgb(134, 161, 184); border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; color: rgb(0, 0, 0); font-size: 10px; width: 180px; height: 358px; text-align: center; "><div id="ipb-attach-ct-1591-0-63028800-1243538186" style="font-size: 9px; "><img src="http://touchnokia.ru/forums/style_images/hi-tech/img-resized.png" border="0" alt="" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " />&nbsp;Уменьшено до 50%</div><a id="ipb-attach-url-1591-0-63028800-1243538186" href="http://touchnokia.ru/forums/index.php?act=attach&amp;type=post&amp;id=1591" title="Scr000001.jpg - Размер: 34,58 килобайт, Скачано: 0" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><img src="http://touchnokia.ru/forums/uploads/monthly_05_2009/post-1-1243538155_thumb.jpg" id="ipb-attach-img-1591-0-63028800-1243538186" class="ipb" width="180" height="320" alt="Прикрепленное изображение" title="Нажмите для просмотра полного изображения" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; cursor: pointer; " /></a><div id="ipb-attach-cb-1591-0-63028800-1243538186" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-size: 9px; text-align: center; ">360 x 640 (34,58 килобайт)</div></div></td></tr></tbody></table>&nbsp;<br /><a href="http://touchnokia.ru/forums/index.php?act=attach&amp;type=post&amp;id=1590" title="Скачать файл" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><img src="http://touchnokia.ru/forums/style_images/hi-tech/folder_mime_types/zip.gif" alt="Прикрепленный файл" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " /></a>&nbsp;&nbsp;<a href="http://touchnokia.ru/forums/index.php?act=attach&amp;type=post&amp;id=1590" title="Скачать файл" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; ">talkonaut.zip</a>&nbsp;( 1,29 мегабайт )</span> <div><font class="Apple-style-span" color="#26394D" face="Verdana" size="3"><span class="Apple-style-span" style="font-size: 12px; line-height: 19px; -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px;">Обсуждение ведем <a href="http://touchnokia.ru/forums/index.php?showtopic=928">здесь</a></span></font></div>]]>
-        
-    </content>
-</entry>
-
-<entry>
-    <title>Программы для Nokia 5800 и Nokia N97: MobileAgent v.1.51</title>
-    <link rel="alternate" type="text/html" href="http://touchnokia.ru/2009/05/programmi-dlja-nokia-5800-i-nokia-n97-mobileagent-v151.html" />
-    <id>tag:touchnokia.ru,2009://1.801</id>
-
-    <published>2009-05-27T20:38:05Z</published>
-    <updated>2009-05-28T19:27:55Z</updated>
-
-    <summary><![CDATA[MobileAgent v.1.51Разработчик:&nbsp;mail.ruЯзык:&nbsp;РусскийСостояние:&nbsp;FreeОписание:&nbsp;- Одновременная работа в агенте, аське и Jabber/GTalk- передача файлов- анимированные смайлы- доступ к почтеи многое другое...Изменения:- анимация интерфейса;- поддержка системных скинов;- поддержка графических скинов;- поддержка Jabber/GTalk/Я.Онлайн/Live Journal и т.п.- расширенный поиск по Агенту;- автостатусы и автоответчик;- работа с...]]></summary>
-    <author>
-        <name>iPod</name>
-        <uri>http://TouchNokia.ru</uri>
-    </author>
-    
-        <category term="Интернет" scheme="http://www.sixapart.com/ns/types#category" />
-    
-        <category term="Программы для Nokia 5800" scheme="http://www.sixapart.com/ns/types#category" />
-    
-    <category term="5800" label="5800" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="mobileagent" label="MobileAgent" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="n97" label="N97:" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="nokia" label="Nokia" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="v151" label="v.1.51" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="для" label="для" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="и" label="и" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="Программы" label="Программы" scheme="http://www.sixapart.com/ns/types#tag" />
-    
-    <content type="html" xml:lang="ru" xml:base="http://touchnokia.ru/">
-        <![CDATA[<span class="Apple-style-span" style="color: rgb(38, 57, 77); font-family: Verdana; font-size: 12px; line-height: 19px; -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px; "><span style="font-size: 14pt; line-height: 19px; "><b><div>MobileAgent v.1.51</div></b></span><br /><b>Разработчик:</b>&nbsp;mail.ru<br /><b>Язык:</b>&nbsp;Русский<br /><b>Состояние:</b>&nbsp;Free<br /><b>Описание:</b>&nbsp;- Одновременная работа в агенте, аське и Jabber/GTalk<br />- передача файлов<br />- анимированные смайлы<br />- доступ к почте<br />и многое другое...<br /><b>Изменения:</b><br />- анимация интерфейса;<br />- поддержка системных скинов;<br />- поддержка графических скинов;<br />- поддержка Jabber/GTalk/Я.Онлайн/Live Journal и т.п.<br />- расширенный поиск по Агенту;<br />- автостатусы и автоответчик;<br />- работа с картами (пока Москва Питер детально, вся Россия в небольшом зуме);<br />- возможность заранее загрузить файлы кэша Москвы и Питера;<br />- показ пробок;<br />- поиск по карте;<br />- позиционирование по GPS или сотовым вышкам;<br />- отправка своего местоположения собеседникам;<br />- просмотр чужих локаций;<br />- виджет на рабочий стол для быстрого доступа к данным о погоде, пробках и валюте.&nbsp;<br /><table id="ipb-attach-table-1570-0-85779200-1243456696" cellspacing="0" cellpadding="0" style="width: auto; display: inline-block; "><tbody><tr><td style="padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; "><div id="ipb-attach-div-1570-0-85779200-1243456696" class="resized-linked-image" title="Нажмите для просмотра полного изображения" style="margin-top: 1px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 8px; padding-bottom: 5px; padding-left: 8px; background-color: rgb(134, 161, 184); border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; color: rgb(0, 0, 0); font-size: 10px; width: 180px; height: 358px; text-align: center; "><div id="ipb-attach-ct-1570-0-85779200-1243456696" style="font-size: 9px; "><img src="http://touchnokia.ru/forums/style_images/hi-tech/img-resized.png" border="0" alt="" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " />&nbsp;Уменьшено до 50%</div><a id="ipb-attach-url-1570-0-85779200-1243456696" href="http://touchnokia.ru/forums/index.php?act=attach&amp;type=post&amp;id=1570" title="Scr000377.jpg - Размер: 45,85 килобайт, Скачано: 0" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><img src="http://touchnokia.ru/forums/uploads/monthly_05_2009/post-1-1243456529_thumb.jpg" id="ipb-attach-img-1570-0-85779200-1243456696" class="ipb" width="180" height="320" alt="Прикрепленное изображение" title="Нажмите для просмотра полного изображения" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; cursor: pointer; " /></a><div id="ipb-attach-cb-1570-0-85779200-1243456696" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-size: 9px; text-align: center; ">360 x 640 (45,85 килобайт)</div></div></td></tr></tbody></table>&nbsp;<table id="ipb-attach-table-1571-0-85795300-1243456696" cellspacing="0" cellpadding="0" style="width: auto; display: inline-block; "><tbody><tr><td style="padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; "><div id="ipb-attach-div-1571-0-85795300-1243456696" class="resized-linked-image" title="Нажмите для просмотра полного изображения" style="margin-top: 1px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 8px; padding-bottom: 5px; padding-left: 8px; background-color: rgb(134, 161, 184); border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; color: rgb(0, 0, 0); font-size: 10px; width: 180px; height: 358px; text-align: center; "><div id="ipb-attach-ct-1571-0-85795300-1243456696" style="font-size: 9px; "><img src="http://touchnokia.ru/forums/style_images/hi-tech/img-resized.png" border="0" alt="" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " />&nbsp;Уменьшено до 50%</div><a id="ipb-attach-url-1571-0-85795300-1243456696" href="http://touchnokia.ru/forums/index.php?act=attach&amp;type=post&amp;id=1571" title="Scr000378.jpg - Размер: 48,64 килобайт, Скачано: 0" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><img src="http://touchnokia.ru/forums/uploads/monthly_05_2009/post-1-1243456538_thumb.jpg" id="ipb-attach-img-1571-0-85795300-1243456696" class="ipb" width="180" height="320" alt="Прикрепленное изображение" title="Нажмите для просмотра полного изображения" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " /></a><div id="ipb-attach-cb-1571-0-85795300-1243456696" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-size: 9px; text-align: center; ">360 x 640 (48,64 килобайт)</div></div></td></tr></tbody></table>&nbsp;<br /><a href="http://touchnokia.ru/forums/index.php?act=attach&amp;type=post&amp;id=1593" title="Скачать файл" target="_blank"><img src="http://touchnokia.ru/forums/style_images/hi-tech/folder_mime_types/zip.gif" alt="Прикрепленный файл" /></a>
-&nbsp;<a href="http://touchnokia.ru/forums/index.php?act=attach&amp;type=post&amp;id=1593" title="Скачать файл" target="_blank">mobileagent.zip</a> ( 1,36 мегабайт )</span><div><font class="Apple-style-span" color="#26394D" face="Verdana" size="3"><span class="Apple-style-span" style="font-size: 12px; line-height: 19px; -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px; ">Обсуждение ведем <a href="http://touchnokia.ru/forums/index.php?showtopic=926">здесь</a></span></font></div>]]>
-        
-    </content>
-</entry>
-
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_background_repeat_repeat_x.xml b/lib/feedparser/tests/wellformed/sanitize/style_background_repeat_repeat_x.xml
deleted file mode 100644
index a18a4ed2e..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_background_repeat_repeat_x.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="background-repeat: repeat-x;"
-Expect:       not bozo and entries[0]['description'] == '<span>Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="background-repeat: repeat-x;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_background_url.xml b/lib/feedparser/tests/wellformed/sanitize/style_background_url.xml
deleted file mode 100644
index 6a11b45bf..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_background_url.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style contains url
-Expect:       not bozo and entries[0]['description'] == '<span style="background-color: #000;">Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="background-color: #000; background-image: url(/category/images/cafeneon_small.jpg); background-repeat: no-repeat;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_background_yellow.xml b/lib/feedparser/tests/wellformed/sanitize/style_background_yellow.xml
deleted file mode 100644
index a96c7fe3b..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_background_yellow.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="background: yellow;"
-Expect:       not bozo and entries[0]['description'] == '<span style="background: yellow;">Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="background: yellow;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_border_0.xml b/lib/feedparser/tests/wellformed/sanitize/style_border_0.xml
deleted file mode 100644
index 082aeb471..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_border_0.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="border: 0;"
-Expect:       not bozo and entries[0]['description'] == '<span style="border: 0;">Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="border: 0;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_border_1px_solid_rgb_0_0_0_.xml b/lib/feedparser/tests/wellformed/sanitize/style_border_1px_solid_rgb_0_0_0_.xml
deleted file mode 100644
index ead5a4df2..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_border_1px_solid_rgb_0_0_0_.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="border: 1px solid rgb(0, 0, 0);"
-Expect:       not bozo and entries[0]['description'] == '<span style="border: 1px solid rgb(0, 0, 0);">Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="border: 1px solid rgb(0, 0, 0);"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_border_3px_solid_ccc.xml b/lib/feedparser/tests/wellformed/sanitize/style_border_3px_solid_ccc.xml
deleted file mode 100644
index 211b47f1d..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_border_3px_solid_ccc.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="border: 3px solid #ccc;"
-Expect:       not bozo and entries[0]['description'] == '<span style="border: 3px solid #ccc;">Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="border: 3px solid #ccc;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_border_bottom_0pt.xml b/lib/feedparser/tests/wellformed/sanitize/style_border_bottom_0pt.xml
deleted file mode 100644
index 0a6157046..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_border_bottom_0pt.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="border-bottom: 0pt;"
-Expect:       not bozo and entries[0]['description'] == '<span style="border-bottom: 0pt;">Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="border-bottom: 0pt;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_border_bottom_dashed.xml b/lib/feedparser/tests/wellformed/sanitize/style_border_bottom_dashed.xml
deleted file mode 100644
index 3938ecca4..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_border_bottom_dashed.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="border-bottom: dashed;"
-Expect:       not bozo and entries[0]['description'] == '<span style="border-bottom: dashed;">Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="border-bottom: dashed;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_border_bottom_dotted.xml b/lib/feedparser/tests/wellformed/sanitize/style_border_bottom_dotted.xml
deleted file mode 100644
index 6f22f48f3..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_border_bottom_dotted.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="border-bottom: dotted;"
-Expect:       not bozo and entries[0]['description'] == '<span style="border-bottom: dotted;">Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="border-bottom: dotted;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_border_collapse_collapse.xml b/lib/feedparser/tests/wellformed/sanitize/style_border_collapse_collapse.xml
deleted file mode 100644
index 6e6d62e94..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_border_collapse_collapse.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="border-collapse: collapse;"
-Expect:       not bozo and entries[0]['description'] == '<span style="border-collapse: collapse;">Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="border-collapse: collapse;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_border_left_0pt.xml b/lib/feedparser/tests/wellformed/sanitize/style_border_left_0pt.xml
deleted file mode 100644
index 3f00fe001..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_border_left_0pt.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="border-left: 0pt;"
-Expect:       not bozo and entries[0]['description'] == '<span style="border-left: 0pt;">Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="border-left: 0pt;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_border_medium_none_.xml b/lib/feedparser/tests/wellformed/sanitize/style_border_medium_none_.xml
deleted file mode 100644
index bea1e643a..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_border_medium_none_.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="border: medium none ;"
-Expect:       not bozo and entries[0]['description'] == '<span style="border: medium none ;">Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="border: medium none ;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_border_none_important.xml b/lib/feedparser/tests/wellformed/sanitize/style_border_none_important.xml
deleted file mode 100644
index 1b9dfa94f..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_border_none_important.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="border: none !important;"
-Expect:       not bozo and entries[0]['description'] == '<span style="border: none !important;">Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="border: none !important;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_border_right_0pt.xml b/lib/feedparser/tests/wellformed/sanitize/style_border_right_0pt.xml
deleted file mode 100644
index d9066f523..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_border_right_0pt.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="border-right: 0pt;"
-Expect:       not bozo and entries[0]['description'] == '<span style="border-right: 0pt;">Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="border-right: 0pt;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_border_solid_2px_000000.xml b/lib/feedparser/tests/wellformed/sanitize/style_border_solid_2px_000000.xml
deleted file mode 100644
index 2fc5f4b69..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_border_solid_2px_000000.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="border: solid 2px #000000;"
-Expect:       not bozo and entries[0]['description'] == '<span style="border: solid 2px #000000;">Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="border: solid 2px #000000;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_border_top_0pt.xml b/lib/feedparser/tests/wellformed/sanitize/style_border_top_0pt.xml
deleted file mode 100644
index d12947118..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_border_top_0pt.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="border-top: 0pt;"
-Expect:       not bozo and entries[0]['description'] == '<span style="border-top: 0pt;">Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="border-top: 0pt;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_clear_both.xml b/lib/feedparser/tests/wellformed/sanitize/style_clear_both.xml
deleted file mode 100644
index 2efb73de0..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_clear_both.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="clear: both;"
-Expect:       not bozo and entries[0]['description'] == '<span style="clear: both;">Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="clear: both;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_color_000080.xml b/lib/feedparser/tests/wellformed/sanitize/style_color_000080.xml
deleted file mode 100644
index a03fde1e2..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_color_000080.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="color: #000080;"
-Expect:       not bozo and entries[0]['description'] == '<span style="color: #000080;">Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="color: #000080;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_color_008.xml b/lib/feedparser/tests/wellformed/sanitize/style_color_008.xml
deleted file mode 100644
index 4f412b304..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_color_008.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="color: #008;"
-Expect:       not bozo and entries[0]['description'] == '<span style="color: #008;">Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="color: #008;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_color_999999.xml b/lib/feedparser/tests/wellformed/sanitize/style_color_999999.xml
deleted file mode 100644
index e741bfa7b..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_color_999999.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="color: #999999;"
-Expect:       not bozo and entries[0]['description'] == '<span style="color: #999999;">Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="color: #999999;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_color_blue.xml b/lib/feedparser/tests/wellformed/sanitize/style_color_blue.xml
deleted file mode 100644
index 06eb8fe72..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_color_blue.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="color: blue;"
-Expect:       not bozo and entries[0]['description'] == '<span style="color: blue;">Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="color: blue;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_color_maroon.xml b/lib/feedparser/tests/wellformed/sanitize/style_color_maroon.xml
deleted file mode 100644
index 42649ebc2..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_color_maroon.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="color: maroon;"
-Expect:       not bozo and entries[0]['description'] == '<span style="color: maroon;">Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="color: maroon;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_color_red.xml b/lib/feedparser/tests/wellformed/sanitize/style_color_red.xml
deleted file mode 100644
index 6cacbbec0..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_color_red.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="color: red;"
-Expect:       not bozo and entries[0]['description'] == '<span style="color: red;">Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="color: red;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_color_rgb_0_128_0_.xml b/lib/feedparser/tests/wellformed/sanitize/style_color_rgb_0_128_0_.xml
deleted file mode 100644
index b269a17f9..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_color_rgb_0_128_0_.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="color: rgb(0, 128, 0);"
-Expect:       not bozo and entries[0]['description'] == '<span style="color: rgb(0, 128, 0);">Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="color: rgb(0, 128, 0);"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_color_teal.xml b/lib/feedparser/tests/wellformed/sanitize/style_color_teal.xml
deleted file mode 100644
index b5afc8f1a..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_color_teal.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="color: teal;"
-Expect:       not bozo and entries[0]['description'] == '<span style="color: teal;">Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="color: teal;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_cursor_pointer.xml b/lib/feedparser/tests/wellformed/sanitize/style_cursor_pointer.xml
deleted file mode 100644
index ee69ca178..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_cursor_pointer.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="cursor: pointer;"
-Expect:       not bozo and entries[0]['description'] == '<span style="cursor: pointer;">Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="cursor: pointer;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_display_block.xml b/lib/feedparser/tests/wellformed/sanitize/style_display_block.xml
deleted file mode 100644
index 95642617f..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_display_block.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="display: block;"
-Expect:       not bozo and entries[0]['description'] == '<span style="display: block;">Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="display: block;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_float_left.xml b/lib/feedparser/tests/wellformed/sanitize/style_float_left.xml
deleted file mode 100644
index b9e11fa78..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_float_left.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="float: left;"
-Expect:       not bozo and entries[0]['description'] == '<span style="float: left;">Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="float: left;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_float_right.xml b/lib/feedparser/tests/wellformed/sanitize/style_float_right.xml
deleted file mode 100644
index eb4009cf7..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_float_right.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="float: right;"
-Expect:       not bozo and entries[0]['description'] == '<span style="float: right;">Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="float: right;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_font_family__comic_sans_ms.xml b/lib/feedparser/tests/wellformed/sanitize/style_font_family__comic_sans_ms.xml
deleted file mode 100644
index 3ae327dc1..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_font_family__comic_sans_ms.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="font-family : Comic Sans MS;"
-Expect:       not bozo and entries[0]['description'] == '<span style="font-family: Comic Sans MS;">Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="font-family : Comic Sans MS;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_font_family_arial_sans_serif.xml b/lib/feedparser/tests/wellformed/sanitize/style_font_family_arial_sans_serif.xml
deleted file mode 100644
index 5b21c4245..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_font_family_arial_sans_serif.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="font-family: arial,sans-serif;"
-Expect:       not bozo and entries[0]['description'] == '<span style="font-family: arial,sans-serif;">Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="font-family: arial,sans-serif;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_font_family_lucida_console_.xml b/lib/feedparser/tests/wellformed/sanitize/style_font_family_lucida_console_.xml
deleted file mode 100644
index a8a6fe5fb..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_font_family_lucida_console_.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="font-family: 'Lucida Console';"
-Expect:       not bozo and entries[0]['description'] == '''<span style="font-family: 'Lucida Console';">Some text</span>'''
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="font-family: 'Lucida Console';"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_font_family_symbol.xml b/lib/feedparser/tests/wellformed/sanitize/style_font_family_symbol.xml
deleted file mode 100644
index 0221e7a8e..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_font_family_symbol.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="font-family: Symbol;"
-Expect:       not bozo and entries[0]['description'] == '<span style="font-family: Symbol;">Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="font-family: Symbol;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_font_size_0_9em.xml b/lib/feedparser/tests/wellformed/sanitize/style_font_size_0_9em.xml
deleted file mode 100644
index 4b658fcfc..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_font_size_0_9em.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="font-size: 0.9em;"
-Expect:       not bozo and entries[0]['description'] == '<span style="font-size: 0.9em;">Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="font-size: 0.9em;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_font_size_10pt.xml b/lib/feedparser/tests/wellformed/sanitize/style_font_size_10pt.xml
deleted file mode 100644
index 27a79943d..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_font_size_10pt.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="font-size: 10pt;"
-Expect:       not bozo and entries[0]['description'] == '<span style="font-size: 10pt;">Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="font-size: 10pt;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_font_size_10px.xml b/lib/feedparser/tests/wellformed/sanitize/style_font_size_10px.xml
deleted file mode 100644
index ba00024a2..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_font_size_10px.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="font-size: 10px;"
-Expect:       not bozo and entries[0]['description'] == '<span style="font-size: 10px;">Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="font-size: 10px;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_font_size_smaller.xml b/lib/feedparser/tests/wellformed/sanitize/style_font_size_smaller.xml
deleted file mode 100644
index 04bf3641a..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_font_size_smaller.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="font-size: smaller;"
-Expect:       not bozo and entries[0]['description'] == '<span style="font-size: smaller;">Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="font-size: smaller;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_font_style_italic.xml b/lib/feedparser/tests/wellformed/sanitize/style_font_style_italic.xml
deleted file mode 100644
index 31aa7539b..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_font_style_italic.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="font-style: italic;"
-Expect:       not bozo and entries[0]['description'] == '<span style="font-style: italic;">Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="font-style: italic;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_font_weight_bold.xml b/lib/feedparser/tests/wellformed/sanitize/style_font_weight_bold.xml
deleted file mode 100644
index f63a008f8..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_font_weight_bold.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="font-weight: bold;"
-Expect:       not bozo and entries[0]['description'] == '<span style="font-weight: bold;">Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="font-weight: bold;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_height_100px.xml b/lib/feedparser/tests/wellformed/sanitize/style_height_100px.xml
deleted file mode 100644
index bba108a59..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_height_100px.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="height: 100px;"
-Expect:       not bozo and entries[0]['description'] == '<span style="height: 100px;">Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="height: 100px;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_height_2px.xml b/lib/feedparser/tests/wellformed/sanitize/style_height_2px.xml
deleted file mode 100644
index 4b2291617..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_height_2px.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="height: 2px;"
-Expect:       not bozo and entries[0]['description'] == '<span style="height: 2px;">Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="height: 2px;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_letter_spacing_1px.xml b/lib/feedparser/tests/wellformed/sanitize/style_letter_spacing_1px.xml
deleted file mode 100644
index 23e7b90c8..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_letter_spacing_1px.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="letter-spacing:1px;"
-Expect:       not bozo and entries[0]['description'] == '<span style="letter-spacing: 1px;">Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="letter-spacing:1px;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_line_height_normal.xml b/lib/feedparser/tests/wellformed/sanitize/style_line_height_normal.xml
deleted file mode 100644
index 1637198b8..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_line_height_normal.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="line-height: normal;"
-Expect:       not bozo and entries[0]['description'] == '<span style="line-height: normal;">Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="line-height: normal;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_margin_0.xml b/lib/feedparser/tests/wellformed/sanitize/style_margin_0.xml
deleted file mode 100644
index 572664ff5..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_margin_0.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="margin: 0;"
-Expect:       not bozo and entries[0]['description'] == '<span style="margin: 0;">Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="margin: 0;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_margin_0_15px_0_0.xml b/lib/feedparser/tests/wellformed/sanitize/style_margin_0_15px_0_0.xml
deleted file mode 100644
index 0ff41b46a..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_margin_0_15px_0_0.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="margin: 0 15px 0 0;"
-Expect:       not bozo and entries[0]['description'] == '<span style="margin: 0 15px 0 0;">Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="margin: 0 15px 0 0;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_margin_0px_important.xml b/lib/feedparser/tests/wellformed/sanitize/style_margin_0px_important.xml
deleted file mode 100644
index 2c9fb9cd7..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_margin_0px_important.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="margin: 0px !important;"
-Expect:       not bozo and entries[0]['description'] == '<span style="margin: 0px !important;">Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="margin: 0px !important;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_margin_5px.xml b/lib/feedparser/tests/wellformed/sanitize/style_margin_5px.xml
deleted file mode 100644
index e64fcffff..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_margin_5px.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="margin: 5px;"
-Expect:       not bozo and entries[0]['description'] == '<span style="margin: 5px;">Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="margin: 5px;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_margin_99999em.xml b/lib/feedparser/tests/wellformed/sanitize/style_margin_99999em.xml
deleted file mode 100644
index 09e9b2b78..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_margin_99999em.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="margin: 99999em;"
-Expect:       not bozo and entries[0]['description'] == '<span>Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="margin: 99999em;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_margin_bottom_0pt.xml b/lib/feedparser/tests/wellformed/sanitize/style_margin_bottom_0pt.xml
deleted file mode 100644
index 2b7f4a71f..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_margin_bottom_0pt.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="margin-bottom: 0pt;"
-Expect:       not bozo and entries[0]['description'] == '<span style="margin-bottom: 0pt;">Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="margin-bottom: 0pt;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_margin_bottom_10px.xml b/lib/feedparser/tests/wellformed/sanitize/style_margin_bottom_10px.xml
deleted file mode 100644
index ab6801a84..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_margin_bottom_10px.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="margin-bottom: 10px;"
-Expect:       not bozo and entries[0]['description'] == '<span style="margin-bottom: 10px;">Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="margin-bottom: 10px;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_margin_left_5px.xml b/lib/feedparser/tests/wellformed/sanitize/style_margin_left_5px.xml
deleted file mode 100644
index be252c76d..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_margin_left_5px.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="margin-left: 5px;"
-Expect:       not bozo and entries[0]['description'] == '<span style="margin-left: 5px;">Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="margin-left: 5px;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_margin_right_0px.xml b/lib/feedparser/tests/wellformed/sanitize/style_margin_right_0px.xml
deleted file mode 100644
index 14fc788c7..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_margin_right_0px.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="margin-right: 0px;"
-Expect:       not bozo and entries[0]['description'] == '<span style="margin-right: 0px;">Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="margin-right: 0px;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_margin_top_0in.xml b/lib/feedparser/tests/wellformed/sanitize/style_margin_top_0in.xml
deleted file mode 100644
index 906cbb556..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_margin_top_0in.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="margin-top: 0in;"
-Expect:       not bozo and entries[0]['description'] == '<span style="margin-top: 0in;">Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="margin-top: 0in;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_margin_top_10px.xml b/lib/feedparser/tests/wellformed/sanitize/style_margin_top_10px.xml
deleted file mode 100644
index 78fb3c85a..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_margin_top_10px.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="margin-top: 10px;"
-Expect:       not bozo and entries[0]['description'] == '<span style="margin-top: 10px;">Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="margin-top: 10px;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_moz_background_clip_initial.xml b/lib/feedparser/tests/wellformed/sanitize/style_moz_background_clip_initial.xml
deleted file mode 100644
index f4ab50682..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_moz_background_clip_initial.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="-moz-background-clip: initial;"
-Expect:       not bozo and entries[0]['description'] == '<tr>Some text</tr>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;tr style="background: yellow none repeat scroll 0%; -moz-background-clip: initial; -moz-background-origin: initial; -moz-background-inline-policy: initial;"&gt;Some text&lt;/tr&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_mso_ansi_language_nl.xml b/lib/feedparser/tests/wellformed/sanitize/style_mso_ansi_language_nl.xml
deleted file mode 100644
index 3fea651e4..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_mso_ansi_language_nl.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="mso-ansi-language: NL;"
-Expect:       not bozo and entries[0]['description'] == '<span>Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="mso-ansi-language: NL;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_mso_bidi_font_weight_normal.xml b/lib/feedparser/tests/wellformed/sanitize/style_mso_bidi_font_weight_normal.xml
deleted file mode 100644
index d075aa0d8..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_mso_bidi_font_weight_normal.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="mso-bidi-font-weight: normal;"
-Expect:       not bozo and entries[0]['description'] == '<span>Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="mso-bidi-font-weight: normal;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_mso_highlight_yellow.xml b/lib/feedparser/tests/wellformed/sanitize/style_mso_highlight_yellow.xml
deleted file mode 100644
index b44c6dc40..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_mso_highlight_yellow.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="mso-highlight: yellow;"
-Expect:       not bozo and entries[0]['description'] == '<span>Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="mso-highlight: yellow;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_mso_layout_grid_align_none.xml b/lib/feedparser/tests/wellformed/sanitize/style_mso_layout_grid_align_none.xml
deleted file mode 100644
index 275bfcae9..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_mso_layout_grid_align_none.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="mso-layout-grid-align: none;"
-Expect:       not bozo and entries[0]['description'] == '<span>Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="mso-layout-grid-align: none;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_mso_list_l0_level1_lfo1.xml b/lib/feedparser/tests/wellformed/sanitize/style_mso_list_l0_level1_lfo1.xml
deleted file mode 100644
index d743dd108..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_mso_list_l0_level1_lfo1.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="mso-list: l0 level1 lfo1;"
-Expect:       not bozo and entries[0]['description'] == '<span>Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="mso-list: l0 level1 lfo1;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_mso_no_proof_yes.xml b/lib/feedparser/tests/wellformed/sanitize/style_mso_no_proof_yes.xml
deleted file mode 100644
index 8a9f5b1c2..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_mso_no_proof_yes.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="mso-no-proof: yes;"
-Expect:       not bozo and entries[0]['description'] == '<span>Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="mso-no-proof: yes;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_mso_spacerun_yes.xml b/lib/feedparser/tests/wellformed/sanitize/style_mso_spacerun_yes.xml
deleted file mode 100644
index a7ed12c67..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_mso_spacerun_yes.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="mso-spacerun: yes;"
-Expect:       not bozo and entries[0]['description'] == '<span>Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="mso-spacerun: yes;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_mso_tab_count_3.xml b/lib/feedparser/tests/wellformed/sanitize/style_mso_tab_count_3.xml
deleted file mode 100644
index 665118d12..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_mso_tab_count_3.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="mso-tab-count: 3;"
-Expect:       not bozo and entries[0]['description'] == '<span>Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="mso-tab-count: 3;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_overflow_auto.xml b/lib/feedparser/tests/wellformed/sanitize/style_overflow_auto.xml
deleted file mode 100644
index bc347ec5d..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_overflow_auto.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="overflow: auto;"
-Expect:       not bozo and entries[0]['description'] == '<span style="overflow: auto;">Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="overflow: auto;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_padding_0.xml b/lib/feedparser/tests/wellformed/sanitize/style_padding_0.xml
deleted file mode 100644
index 7f3ee3fcf..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_padding_0.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="padding: 0;"
-Expect:       not bozo and entries[0]['description'] == '<span style="padding: 0;">Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="padding: 0;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_padding_0_0_12px_12px.xml b/lib/feedparser/tests/wellformed/sanitize/style_padding_0_0_12px_12px.xml
deleted file mode 100644
index 4a4310cd7..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_padding_0_0_12px_12px.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="padding: 0 0 12px 12px;"
-Expect:       not bozo and entries[0]['description'] == '<span style="padding: 0 0 12px 12px;">Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="padding: 0 0 12px 12px;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_padding_2ex.xml b/lib/feedparser/tests/wellformed/sanitize/style_padding_2ex.xml
deleted file mode 100644
index 6dc1b5b3d..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_padding_2ex.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="padding: 2ex;"
-Expect:       not bozo and entries[0]['description'] == '<span style="padding: 2ex;">Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="padding: 2ex;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_padding_99999em.xml b/lib/feedparser/tests/wellformed/sanitize/style_padding_99999em.xml
deleted file mode 100644
index eca4144ca..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_padding_99999em.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="padding: 99999em;"
-Expect:       not bozo and entries[0]['description'] == '<span>Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="padding: 99999em;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_padding_left_4px.xml b/lib/feedparser/tests/wellformed/sanitize/style_padding_left_4px.xml
deleted file mode 100644
index 7cbe16efc..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_padding_left_4px.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="padding-left: 4px;"
-Expect:       not bozo and entries[0]['description'] == '<span style="padding-left: 4px;">Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="padding-left: 4px;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_padding_right_0in.xml b/lib/feedparser/tests/wellformed/sanitize/style_padding_right_0in.xml
deleted file mode 100644
index 1077f170f..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_padding_right_0in.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="padding-right: 0in;"
-Expect:       not bozo and entries[0]['description'] == '<span style="padding-right: 0in;">Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="padding-right: 0in;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_position_absolute.xml b/lib/feedparser/tests/wellformed/sanitize/style_position_absolute.xml
deleted file mode 100644
index 4b436e00d..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_position_absolute.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="position: absolute;"
-Expect:       not bozo and entries[0]['description'] == '<span>Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="position: absolute;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_tab_stops_list_5in.xml b/lib/feedparser/tests/wellformed/sanitize/style_tab_stops_list_5in.xml
deleted file mode 100644
index 6bd2c9abb..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_tab_stops_list_5in.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="tab-stops: list .5in;"
-Expect:       not bozo and entries[0]['description'] == '<span>Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="tab-stops: list .5in;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_text_align_center.xml b/lib/feedparser/tests/wellformed/sanitize/style_text_align_center.xml
deleted file mode 100644
index f3055eae5..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_text_align_center.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="text-align: center;"
-Expect:       not bozo and entries[0]['description'] == '<span style="text-align: center;">Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="text-align: center;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_text_align_left.xml b/lib/feedparser/tests/wellformed/sanitize/style_text_align_left.xml
deleted file mode 100644
index cc9b3e525..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_text_align_left.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="text-align: left;"
-Expect:       not bozo and entries[0]['description'] == '<span style="text-align: left;">Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="text-align: left;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_text_align_right.xml b/lib/feedparser/tests/wellformed/sanitize/style_text_align_right.xml
deleted file mode 100644
index aaa3c7579..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_text_align_right.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="text-align: right;"
-Expect:       not bozo and entries[0]['description'] == '<span style="text-align: right;">Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="text-align: right;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_text_decoration_underline.xml b/lib/feedparser/tests/wellformed/sanitize/style_text_decoration_underline.xml
deleted file mode 100644
index b2461ecdf..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_text_decoration_underline.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="text-decoration: underline;"
-Expect:       not bozo and entries[0]['description'] == '<span style="text-decoration: underline;">Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="text-decoration: underline;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_text_indent_0_5in.xml b/lib/feedparser/tests/wellformed/sanitize/style_text_indent_0_5in.xml
deleted file mode 100644
index 87d1cacd2..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_text_indent_0_5in.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="TEXT-INDENT: 0.5in;"
-Expect:       not bozo and entries[0]['description'] == '<span style="TEXT-INDENT: 0.5in;">Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="TEXT-INDENT: 0.5in;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_vertical_align_bottom.xml b/lib/feedparser/tests/wellformed/sanitize/style_vertical_align_bottom.xml
deleted file mode 100644
index 9c3da9f05..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_vertical_align_bottom.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="vertical-align: bottom;"
-Expect:       not bozo and entries[0]['description'] == '<span style="vertical-align: bottom;">Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="vertical-align: bottom;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_vertical_align_top.xml b/lib/feedparser/tests/wellformed/sanitize/style_vertical_align_top.xml
deleted file mode 100644
index 55b45cc1a..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_vertical_align_top.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="vertical-align: top;"
-Expect:       not bozo and entries[0]['description'] == '<span style="vertical-align: top;">Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="vertical-align: top;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_white_space_nowrap.xml b/lib/feedparser/tests/wellformed/sanitize/style_white_space_nowrap.xml
deleted file mode 100644
index 61e0c04dd..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_white_space_nowrap.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="white-space: nowrap;"
-Expect:       not bozo and entries[0]['description'] == '<span style="white-space: nowrap;">Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="white-space: nowrap;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_white_space_top.xml b/lib/feedparser/tests/wellformed/sanitize/style_white_space_top.xml
deleted file mode 100644
index c48d32a8e..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_white_space_top.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="white-space: top;"
-Expect:       not bozo and entries[0]['description'] == '<span style="white-space: top;">Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="white-space: top;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_width_300px.xml b/lib/feedparser/tests/wellformed/sanitize/style_width_300px.xml
deleted file mode 100644
index f7ae6d706..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_width_300px.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="width: 300px;"
-Expect:       not bozo and entries[0]['description'] == '<span style="width: 300px;">Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="width: 300px;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/xml_declaration_unexpected_character.xml b/lib/feedparser/tests/wellformed/sanitize/xml_declaration_unexpected_character.xml
deleted file mode 100644
index 089dceae5..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/xml_declaration_unexpected_character.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: xml declaration unexpected character
-Expect:      not bozo and feed['title'] == u'&lt;!DOCTYPE ~'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <title type="html">&lt;!DOCTYPE ~</title>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/xml_malicious_comment.xml b/lib/feedparser/tests/wellformed/sanitize/xml_malicious_comment.xml
deleted file mode 100644
index db79e86c5..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/xml_malicious_comment.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: malicious comment
-Expect:      not bozo and feed['title'] == u'safe'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <title type="html">sa&lt;!-- -- nonwhitespace &gt;fe&lt;script&gt;alert(1);&lt;/script&gt;</title>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/xml_unclosed_comment.xml b/lib/feedparser/tests/wellformed/sanitize/xml_unclosed_comment.xml
deleted file mode 100644
index 75a642796..000000000
--- a/lib/feedparser/tests/wellformed/sanitize/xml_unclosed_comment.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: unclosed comment
-Expect:      not bozo and feed['title'] == u'safe'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <title type="html">safe&lt;!--</title>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sgml/charref_uppercase_x.xml b/lib/feedparser/tests/wellformed/sgml/charref_uppercase_x.xml
deleted file mode 100644
index 51a13b737..000000000
--- a/lib/feedparser/tests/wellformed/sgml/charref_uppercase_x.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: ensure an uppercase X in a hex charref doesn't crash feedparser
-Expect: not bozo and entries[0]['summary'] == u'&#x61;'
--->
-<rss version="2.0">
-  <channel>
-    <item><description>&amp;#X61;</description></item>
-  </channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/xml/empty_xmlns_uri.xml b/lib/feedparser/tests/wellformed/xml/empty_xmlns_uri.xml
deleted file mode 100644
index da68ece27..000000000
--- a/lib/feedparser/tests/wellformed/xml/empty_xmlns_uri.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: empty xmlns uri
-Expect:      not bozo and feed['title'] == u'empty'
--->
-<rss xmlns="">
-    <channel>
-        <title>empty</title>
-    </channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/xml/escaped_apos.xml b/lib/feedparser/tests/wellformed/xml/escaped_apos.xml
deleted file mode 100644
index 6340ca9bd..000000000
--- a/lib/feedparser/tests/wellformed/xml/escaped_apos.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<!--
-XXX - THIS TEST SHOULD BE UPDATED WHEN SGML AND XML OUTPUT IS IDENTICAL
-Description: ensure apos is translated correctly
-Expect: not bozo and feed['title'] == u'it&apos;s correct' or feed['title'] == u"it's correct"
--->
-<rss>
-<channel>
-    <title type="html">it&amp;apos;s correct</title>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/xml/xlink_ns_no_prefix.xml b/lib/feedparser/tests/wellformed/xml/xlink_ns_no_prefix.xml
deleted file mode 100644
index a0c376cd3..000000000
--- a/lib/feedparser/tests/wellformed/xml/xlink_ns_no_prefix.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<!--
-Description: xmlns without prefix with xlink uri causes crash
-Expect: not bozo and feed['title'] == u'xlink'
--->
-<rss>
-    <bogus xmlns="http://www.w3.org/1999/xlink"/>
-    <channel>
-        <title>xlink</title>
-    </channel>
-</rss>
diff --git a/lib/feedparser/urls.py b/lib/feedparser/urls.py
new file mode 100644
index 000000000..85b8fd1c4
--- /dev/null
+++ b/lib/feedparser/urls.py
@@ -0,0 +1,131 @@
+from __future__ import absolute_import, unicode_literals
+
+import re
+
+try:
+    import urllib.parse as urlparse
+except ImportError:
+    import urlparse as urlparse
+
+from .html import _BaseHTMLProcessor
+
+# If you want feedparser to allow all URL schemes, set this to ()
+# List culled from Python's urlparse documentation at:
+#   http://docs.python.org/library/urlparse.html
+# as well as from "URI scheme" at Wikipedia:
+#   https://secure.wikimedia.org/wikipedia/en/wiki/URI_scheme
+# Many more will likely need to be added!
+ACCEPTABLE_URI_SCHEMES = (
+    'file', 'ftp', 'gopher', 'h323', 'hdl', 'http', 'https', 'imap', 'magnet',
+    'mailto', 'mms', 'news', 'nntp', 'prospero', 'rsync', 'rtsp', 'rtspu',
+    'sftp', 'shttp', 'sip', 'sips', 'snews', 'svn', 'svn+ssh', 'telnet',
+    'wais',
+    # Additional common-but-unofficial schemes
+    'aim', 'callto', 'cvs', 'facetime', 'feed', 'git', 'gtalk', 'irc', 'ircs',
+    'irc6', 'itms', 'mms', 'msnim', 'skype', 'ssh', 'smb', 'svn', 'ymsg',
+)
+#ACCEPTABLE_URI_SCHEMES = ()
+
+_urifixer = re.compile('^([A-Za-z][A-Za-z0-9+-.]*://)(/*)(.*?)')
+def _urljoin(base, uri):
+    uri = _urifixer.sub(r'\1\3', uri)
+    try:
+        uri = urlparse.urljoin(base, uri)
+    except ValueError:
+        uri = ''
+    return uri
+
+def _convert_to_idn(url):
+    """Convert a URL to IDN notation"""
+    # this function should only be called with a unicode string
+    # strategy: if the host cannot be encoded in ascii, then
+    # it'll be necessary to encode it in idn form
+    parts = list(urlparse.urlsplit(url))
+    try:
+        parts[1].encode('ascii')
+    except UnicodeEncodeError:
+        # the url needs to be converted to idn notation
+        host = parts[1].rsplit(':', 1)
+        newhost = []
+        port = ''
+        if len(host) == 2:
+            port = host.pop()
+        for h in host[0].split('.'):
+            newhost.append(h.encode('idna').decode('utf-8'))
+        parts[1] = '.'.join(newhost)
+        if port:
+            parts[1] += ':' + port
+        return urlparse.urlunsplit(parts)
+    else:
+        return url
+
+def _makeSafeAbsoluteURI(base, rel=None):
+    # bail if ACCEPTABLE_URI_SCHEMES is empty
+    if not ACCEPTABLE_URI_SCHEMES:
+        return _urljoin(base, rel or '')
+    if not base:
+        return rel or ''
+    if not rel:
+        try:
+            scheme = urlparse.urlparse(base)[0]
+        except ValueError:
+            return ''
+        if not scheme or scheme in ACCEPTABLE_URI_SCHEMES:
+            return base
+        return ''
+    uri = _urljoin(base, rel)
+    if uri.strip().split(':', 1)[0] not in ACCEPTABLE_URI_SCHEMES:
+        return ''
+    return uri
+
+class _RelativeURIResolver(_BaseHTMLProcessor):
+    relative_uris = set([('a', 'href'),
+                     ('applet', 'codebase'),
+                     ('area', 'href'),
+                     ('audio', 'src'),
+                     ('blockquote', 'cite'),
+                     ('body', 'background'),
+                     ('del', 'cite'),
+                     ('form', 'action'),
+                     ('frame', 'longdesc'),
+                     ('frame', 'src'),
+                     ('iframe', 'longdesc'),
+                     ('iframe', 'src'),
+                     ('head', 'profile'),
+                     ('img', 'longdesc'),
+                     ('img', 'src'),
+                     ('img', 'usemap'),
+                     ('input', 'src'),
+                     ('input', 'usemap'),
+                     ('ins', 'cite'),
+                     ('link', 'href'),
+                     ('object', 'classid'),
+                     ('object', 'codebase'),
+                     ('object', 'data'),
+                     ('object', 'usemap'),
+                     ('q', 'cite'),
+                     ('script', 'src'),
+                     ('source', 'src'),
+                     ('video', 'poster'),
+                     ('video', 'src')])
+
+    def __init__(self, baseuri, encoding, _type):
+        _BaseHTMLProcessor.__init__(self, encoding, _type)
+        self.baseuri = baseuri
+
+    def resolveURI(self, uri):
+        return _makeSafeAbsoluteURI(self.baseuri, uri.strip())
+
+    def unknown_starttag(self, tag, attrs):
+        attrs = self.normalize_attrs(attrs)
+        attrs = [(key, ((tag, key) in self.relative_uris) and self.resolveURI(value) or value) for key, value in attrs]
+        _BaseHTMLProcessor.unknown_starttag(self, tag, attrs)
+
+def _resolveRelativeURIs(htmlSource, baseURI, encoding, _type):
+    # if not _SGML_AVAILABLE:
+    #     return htmlSource
+
+    p = _RelativeURIResolver(baseURI, encoding, _type)
+    p.feed(htmlSource)
+    return p.output()
+
diff --git a/lib/feedparser/util.py b/lib/feedparser/util.py
new file mode 100644
index 000000000..f7c02c01e
--- /dev/null
+++ b/lib/feedparser/util.py
@@ -0,0 +1,144 @@
+# Copyright 2010-2015 Kurt McKee <contactme@kurtmckee.org>
+# Copyright 2002-2008 Mark Pilgrim
+# All rights reserved.
+#
+# This file is a part of feedparser.
+#
+# Redistribution and use in source and binary forms, with or without modification,
+# are permitted provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice,
+#   this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice,
+#   this list of conditions and the following disclaimer in the documentation
+#   and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+
+from __future__ import absolute_import, unicode_literals
+
+import warnings
+
+class FeedParserDict(dict):
+    keymap = {'channel': 'feed',
+              'items': 'entries',
+              'guid': 'id',
+              'date': 'updated',
+              'date_parsed': 'updated_parsed',
+              'description': ['summary', 'subtitle'],
+              'description_detail': ['summary_detail', 'subtitle_detail'],
+              'url': ['href'],
+              'modified': 'updated',
+              'modified_parsed': 'updated_parsed',
+              'issued': 'published',
+              'issued_parsed': 'published_parsed',
+              'copyright': 'rights',
+              'copyright_detail': 'rights_detail',
+              'tagline': 'subtitle',
+              'tagline_detail': 'subtitle_detail'}
+    def __getitem__(self, key):
+        '''
+        :return: A :class:`FeedParserDict`.
+        '''
+        if key == 'category':
+            try:
+                return dict.__getitem__(self, 'tags')[0]['term']
+            except IndexError:
+                raise KeyError("object doesn't have key 'category'")
+        elif key == 'enclosures':
+            norel = lambda link: FeedParserDict([(name,value) for (name,value) in link.items() if name!='rel'])
+            return [norel(link) for link in dict.__getitem__(self, 'links') if link['rel']=='enclosure']
+        elif key == 'license':
+            for link in dict.__getitem__(self, 'links'):
+                if link['rel']=='license' and 'href' in link:
+                    return link['href']
+        elif key == 'updated':
+            # Temporarily help developers out by keeping the old
+            # broken behavior that was reported in issue 310.
+            # This fix was proposed in issue 328.
+            if not dict.__contains__(self, 'updated') and \
+                dict.__contains__(self, 'published'):
+                warnings.warn("To avoid breaking existing software while "
+                    "fixing issue 310, a temporary mapping has been created "
+                    "from `updated` to `published` if `updated` doesn't "
+                    "exist. This fallback will be removed in a future version "
+                    "of feedparser.", DeprecationWarning)
+                return dict.__getitem__(self, 'published')
+            return dict.__getitem__(self, 'updated')
+        elif key == 'updated_parsed':
+            if not dict.__contains__(self, 'updated_parsed') and \
+                dict.__contains__(self, 'published_parsed'):
+                warnings.warn("To avoid breaking existing software while "
+                    "fixing issue 310, a temporary mapping has been created "
+                    "from `updated_parsed` to `published_parsed` if "
+                    "`updated_parsed` doesn't exist. This fallback will be "
+                    "removed in a future version of feedparser.",
+                    DeprecationWarning)
+                return dict.__getitem__(self, 'published_parsed')
+            return dict.__getitem__(self, 'updated_parsed')
+        else:
+            realkey = self.keymap.get(key, key)
+            if isinstance(realkey, list):
+                for k in realkey:
+                    if dict.__contains__(self, k):
+                        return dict.__getitem__(self, k)
+            elif dict.__contains__(self, realkey):
+                return dict.__getitem__(self, realkey)
+        return dict.__getitem__(self, key)
+
+    def __contains__(self, key):
+        if key in ('updated', 'updated_parsed'):
+            # Temporarily help developers out by keeping the old
+            # broken behavior that was reported in issue 310.
+            # This fix was proposed in issue 328.
+            return dict.__contains__(self, key)
+        try:
+            self.__getitem__(key)
+        except KeyError:
+            return False
+        else:
+            return True
+
+    has_key = __contains__
+
+    def get(self, key, default=None):
+        '''
+        :return: A :class:`FeedParserDict`.
+        '''
+        try:
+            return self.__getitem__(key)
+        except KeyError:
+            return default
+
+    def __setitem__(self, key, value):
+        key = self.keymap.get(key, key)
+        if isinstance(key, list):
+            key = key[0]
+        return dict.__setitem__(self, key, value)
+
+    def setdefault(self, key, value):
+        if key not in self:
+            self[key] = value
+            return value
+        return self[key]
+
+    def __getattr__(self, key):
+        # __getattribute__() is called first; this will be called
+        # only if an attribute was not already found
+        try:
+            return self.__getitem__(key)
+        except KeyError:
+            raise AttributeError("object has no attribute '%s'" % key)
+
+    def __hash__(self):
+        return id(self)
-- 
GitLab


From 4f83679cd0ff6be0ca88a33cc9b502e31e959674 Mon Sep 17 00:00:00 2001
From: Dustyn Gibson <miigotu@gmail.com>
Date: Tue, 3 Nov 2015 22:26:53 -0800
Subject: [PATCH 005/215] Code changes to support not using feedcache and new
 feedparser

---
 sickbeard/providers/generic.py |  2 +-
 sickbeard/rssfeeds.py          | 56 +++++++++++++---------------------
 sickbeard/tvcache.py           |  5 ++-
 3 files changed, 25 insertions(+), 38 deletions(-)

diff --git a/sickbeard/providers/generic.py b/sickbeard/providers/generic.py
index 41fb6443c..dad863e31 100644
--- a/sickbeard/providers/generic.py
+++ b/sickbeard/providers/generic.py
@@ -557,7 +557,7 @@ class TorrentProvider(GenericProvider):
         self.providerType = GenericProvider.TORRENT
 
     def _get_title_and_url(self, item):
-        from feedparser.feedparser import FeedParserDict
+        from feedparser.util import FeedParserDict
         if isinstance(item, (dict, FeedParserDict)):
             title = item.get('title', '')
             download_url = item.get('url', '')
diff --git a/sickbeard/rssfeeds.py b/sickbeard/rssfeeds.py
index 5fb71ca83..3c7e84b75 100644
--- a/sickbeard/rssfeeds.py
+++ b/sickbeard/rssfeeds.py
@@ -1,43 +1,31 @@
+from six.moves import urllib
 
-import os
-import urllib
-
-import sickbeard
+import urlparse
+import re
+from feedparser.api import parse
 
 from sickbeard import logger
-from sickrage.helper.encoding import ek
 from sickrage.helper.exceptions import ex
 
-from feedcache.cache import Cache
-
-from sqliteshelf import SQLiteShelf
-
-
-class RSSFeeds:
-    def __init__(self, db_name='feeds'):
-        try:
-            db_name = ek(os.path.join, sickbeard.CACHE_DIR, 'rss', db_name) + '.db'
-            if not os.path.exists(os.path.dirname(db_name)):
-                sickbeard.helpers.makeDir(os.path.dirname(db_name))
-
-            self.rssDB = SQLiteShelf(db_name)
-        except Exception as e:
-            logger.log(u"FeedParser error: " + ex(e), logger.DEBUG)
-
-    def clearCache(self, age=None):
-        try:
-            Cache(self.rssDB).purge(age)
-        finally:
-            self.rssDB.close()
+def getFeed(url, post_data=None, request_headers=None, items=None, handlers=[]):
+    parsed = list(urlparse.urlparse(url))
+    parsed[2] = re.sub("/{2,}", "/", parsed[2])  # replace two or more / with one
 
-    def getFeed(self, url, post_data=None, request_headers=None, items=None, handlers=[]):
+    if post_data:
+        url += urllib.parse.urlencode(post_data)
 
-        if post_data:
-            url += urllib.urlencode(post_data)
+    try:
+        feed = parse(url, False, False, request_headers, handlers=handlers)
 
-        try:
-            resp = Cache(self.rssDB, userAgent=sickbeard.common.USER_AGENT).fetch(url, force_update=True, request_headers=request_headers, handlers=handlers)
-        finally:
-            self.rssDB.close()
+        if feed:
+            if 'entries' in feed:
+                return feed
+            elif 'error' in feed.feed:
+                err_code = feed.feed['error']['code']
+                err_desc = feed.feed['error']['description']
+                logger.log(u'RSS ERROR:[%s] CODE:[%s]' % (err_desc, err_code), logger.DEBUG)
+        else:
+            logger.log(u'RSS error loading url: ' + url, logger.DEBUG)
 
-        return resp
+    except Exception as e:
+        logger.log(u'RSS error: ' + ex(e), logger.DEBUG)
diff --git a/sickbeard/tvcache.py b/sickbeard/tvcache.py
index 1103353ab..7b5a2f866 100644
--- a/sickbeard/tvcache.py
+++ b/sickbeard/tvcache.py
@@ -28,7 +28,7 @@ from sickbeard import db
 from sickbeard import logger
 from sickbeard.common import Quality
 from sickbeard import helpers
-from sickbeard.rssfeeds import RSSFeeds
+from sickbeard.rssfeeds import getFeed
 from name_parser.parser import NameParser, InvalidNameException, InvalidShowException
 from sickbeard import show_name_helpers
 from sickrage.helper.encoding import ss
@@ -148,7 +148,7 @@ class TVCache():
         elif 'Referer' in self.provider.headers:
             self.provider.headers.pop('Referer')
 
-        return RSSFeeds(self.providerID).getFeed(
+        return getFeed(
             self.provider.proxy._buildURL(url),
             post_data,
             self.provider.headers,
@@ -392,4 +392,3 @@ class TVCache():
         self.setLastSearch()
 
         return neededEps
-
-- 
GitLab


From 21c75ee53d187b574aef8724aa08f7f684b67e86 Mon Sep 17 00:00:00 2001
From: Dustyn Gibson <miigotu@gmail.com>
Date: Tue, 3 Nov 2015 22:59:35 -0800
Subject: [PATCH 006/215] Fix up code and build testing

---
 sickbeard/providers/animenzb.py     |  2 +-
 sickbeard/providers/nyaatorrents.py | 21 +++++----------------
 sickbeard/providers/shazbat.py      |  5 ++---
 sickbeard/rssfeeds.py               | 12 +++++-------
 sickbeard/tvcache.py                | 18 ++++++++----------
 tests/feedparser_tests.py           | 29 -----------------------------
 6 files changed, 21 insertions(+), 66 deletions(-)
 delete mode 100644 tests/feedparser_tests.py

diff --git a/sickbeard/providers/animenzb.py b/sickbeard/providers/animenzb.py
index 5a384a622..bed7f6872 100644
--- a/sickbeard/providers/animenzb.py
+++ b/sickbeard/providers/animenzb.py
@@ -71,7 +71,7 @@ class animenzb(generic.NZBProvider):
         searchURL = self.url + "rss?" + urllib.urlencode(params)
         logger.log(u"Search URL: %s" %  searchURL, logger.DEBUG)
         results = []
-        for curItem in self.cache.getRSSFeed(searchURL, items=['entries'])['entries'] or []:
+        for curItem in self.cache.getRSSFeed(searchURL)['entries'] or []:
             (title, url) = self._get_title_and_url(curItem)
 
             if title and url:
diff --git a/sickbeard/providers/nyaatorrents.py b/sickbeard/providers/nyaatorrents.py
index d306e5952..ea6190849 100644
--- a/sickbeard/providers/nyaatorrents.py
+++ b/sickbeard/providers/nyaatorrents.py
@@ -19,13 +19,9 @@
 import urllib
 import re
 
-import generic
-
-from sickbeard import show_name_helpers
 from sickbeard import logger
-from sickbeard.common import Quality
 from sickbeard import tvcache
-from sickbeard import show_name_helpers
+from sickbeard.providers import generic
 
 
 class NyaaProvider(generic.TorrentProvider):
@@ -81,7 +77,7 @@ class NyaaProvider(generic.TorrentProvider):
                 s = re.compile(summary_regex, re.DOTALL)
 
                 results = []
-                for curItem in self.cache.getRSSFeed(searchURL, items=['entries'])['entries'] or []:
+                for curItem in self.cache.getRSSFeed(searchURL)['entries'] or []:
                     title = curItem['title']
                     download_url = curItem['link']
                     if not all([title, download_url]):
@@ -113,15 +109,8 @@ class NyaaProvider(generic.TorrentProvider):
 
         return results
 
-    def _extract_name_from_filename(self, filename):
-        name_regex = '(.*?)\.?(\[.*]|\d+\.TPB)\.torrent$'
-        logger.log(u"Comparing %s against %s" % (name_regex, filename), logger.DEBUG)
-        match = re.match(name_regex, filename, re.I)
-        if match:
-            return match.group(1)
-        return None
-
-    def _convertSize(self, size):
+    @staticmethod
+    def _convertSize(size):
         size, modifier = size.split(' ')
         size = float(size)
         if modifier in 'KiB':
@@ -132,7 +121,7 @@ class NyaaProvider(generic.TorrentProvider):
             size = size * 1024**3
         elif modifier in 'TiB':
             size = size * 1024**4
-        return size
+        return int(size)
 
     def seedRatio(self):
         return self.ratio
diff --git a/sickbeard/providers/shazbat.py b/sickbeard/providers/shazbat.py
index 8fffb1dfd..4e0b5bfab 100644
--- a/sickbeard/providers/shazbat.py
+++ b/sickbeard/providers/shazbat.py
@@ -16,10 +16,9 @@
 # You should have received a copy of the GNU General Public License
 # along with SickRage.  If not, see <http://www.gnu.org/licenses/>.
 
-import generic
-
 from sickbeard import logger
 from sickbeard import tvcache
+from sickbeard.providers import generic
 from sickrage.helper.exceptions import AuthException
 
 
@@ -74,7 +73,7 @@ class ShazbatCache(tvcache.TVCache):
         rss_url = self.provider.urls['base_url'] + 'rss/recent?passkey=' + provider.passkey + '&fname=true'
         logger.log(u"Cache update URL: %s" % rss_url, logger.DEBUG)
 
-        return self.getRSSFeed(rss_url, items=['entries', 'feed'])
+        return self.getRSSFeed(rss_url)
 
     def _checkAuth(self, data):
         return self.provider._checkAuthFromData(data)
diff --git a/sickbeard/rssfeeds.py b/sickbeard/rssfeeds.py
index 3c7e84b75..2e7fc26fc 100644
--- a/sickbeard/rssfeeds.py
+++ b/sickbeard/rssfeeds.py
@@ -1,19 +1,15 @@
-from six.moves import urllib
-
-import urlparse
 import re
+import urlparse
 from feedparser.api import parse
+from feedparser.util import FeedParserDict
 
 from sickbeard import logger
 from sickrage.helper.exceptions import ex
 
-def getFeed(url, post_data=None, request_headers=None, items=None, handlers=[]):
+def getFeed(url, request_headers=None, handlers=None):
     parsed = list(urlparse.urlparse(url))
     parsed[2] = re.sub("/{2,}", "/", parsed[2])  # replace two or more / with one
 
-    if post_data:
-        url += urllib.parse.urlencode(post_data)
-
     try:
         feed = parse(url, False, False, request_headers, handlers=handlers)
 
@@ -29,3 +25,5 @@ def getFeed(url, post_data=None, request_headers=None, items=None, handlers=[]):
 
     except Exception as e:
         logger.log(u'RSS error: ' + ex(e), logger.DEBUG)
+
+    return FeedParserDict()
diff --git a/sickbeard/tvcache.py b/sickbeard/tvcache.py
index 7b5a2f866..b6ef30229 100644
--- a/sickbeard/tvcache.py
+++ b/sickbeard/tvcache.py
@@ -23,16 +23,15 @@ import itertools
 import urllib2
 
 import sickbeard
-
 from sickbeard import db
 from sickbeard import logger
-from sickbeard.common import Quality
 from sickbeard import helpers
+from sickbeard.common import Quality
 from sickbeard.rssfeeds import getFeed
-from name_parser.parser import NameParser, InvalidNameException, InvalidShowException
 from sickbeard import show_name_helpers
 from sickrage.helper.encoding import ss
 from sickrage.helper.exceptions import AuthException, ex
+from sickbeard.name_parser.parser import NameParser, InvalidNameException, InvalidShowException
 
 
 class CacheDBConnection(db.DBConnection):
@@ -74,7 +73,7 @@ class CacheDBConnection(db.DBConnection):
                 raise
 
 
-class TVCache():
+class TVCache(object):
     def __init__(self, provider):
         self.provider = provider
         self.providerID = self.provider.getID()
@@ -134,7 +133,7 @@ class TVCache():
         except Exception, e:
             logger.log(u"Error while searching " + self.provider.name + ", skipping: " + repr(e), logger.DEBUG)
 
-    def getRSSFeed(self, url, post_data=None, items=[]):
+    def getRSSFeed(self, url):
         handlers = []
 
         if self.provider.proxy.isEnabled():
@@ -150,9 +149,7 @@ class TVCache():
 
         return getFeed(
             self.provider.proxy._buildURL(url),
-            post_data,
-            self.provider.headers,
-            items,
+            request_headers=self.provider.headers,
             handlers=handlers)
 
     def _translateTitle(self, title):
@@ -297,14 +294,15 @@ class TVCache():
         neededEps = self.findNeededEpisodes(episode, manualSearch, downCurQuality)
         return neededEps[episode] if episode in neededEps else []
 
-    def listPropers(self, date=None, delimiter="."):
+    def listPropers(self, date=None):
         myDB = self._getDB()
         sql = "SELECT * FROM [" + self.providerID + "] WHERE name LIKE '%.PROPER.%' OR name LIKE '%.REPACK.%'"
 
         if date != None:
             sql += " AND time >= " + str(int(time.mktime(date.timetuple())))
 
-        return filter(lambda x: x['indexerid'] != 0, myDB.select(sql))
+        propers_results = myDB.select(sql)
+        return [x for x in propers_results if x['indexerid']]
 
 
     def findNeededEpisodes(self, episode, manualSearch=False, downCurQuality=False):
diff --git a/tests/feedparser_tests.py b/tests/feedparser_tests.py
deleted file mode 100644
index 61603bbd5..000000000
--- a/tests/feedparser_tests.py
+++ /dev/null
@@ -1,29 +0,0 @@
-import sys, os.path
-
-sys.path.insert(1, os.path.abspath(os.path.join(os.path.dirname(__file__), '../lib')))
-sys.path.insert(1, os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
-
-import unittest
-import test_lib as test
-
-from sickbeard.rssfeeds import RSSFeeds
-from sickbeard.tvcache import TVCache
-class FeedParserTests(unittest.TestCase):
-    def test_womble(self):
-        RSSFeeds().clearCache()
-        result = RSSFeeds().getFeed('https://newshost.co.za/rss/?sec=tv-sd&fr=false')
-        self.assertTrue('entries' in result)
-        self.assertTrue('feed' in result)
-        for item in result['entries']:
-            self.assertTrue(TVCache._parseItem(item))
-
-if __name__ == "__main__":
-    print "=================="
-    print "STARTING - FEEDPARSER TESTS"
-    print "=================="
-    print "######################################################################"
-    suite = unittest.TestLoader().loadTestsFromTestCase(FeedParserTests)
-    testresults = unittest.TextTestRunner(verbosity=2).run(suite)
-
-    # Return 0 if successful, 1 if there was a failure
-    sys.exit(not testresults.wasSuccessful())
-- 
GitLab


From 18056a265f866fc0352761cccd1777e8287985ae Mon Sep 17 00:00:00 2001
From: Dustyn Gibson <miigotu@gmail.com>
Date: Tue, 3 Nov 2015 23:29:37 -0800
Subject: [PATCH 007/215] Re-add womble feed parser test, and make it work
 Change womble from https to http

---
 sickbeard/providers/womble.py |  4 ++--
 sickbeard/tvcache.py          |  2 ++
 tests/feedparser_tests.py     | 29 +++++++++++++++++++++++++++++
 3 files changed, 33 insertions(+), 2 deletions(-)
 create mode 100644 tests/feedparser_tests.py

diff --git a/sickbeard/providers/womble.py b/sickbeard/providers/womble.py
index 5a93315fc..89728b8a1 100644
--- a/sickbeard/providers/womble.py
+++ b/sickbeard/providers/womble.py
@@ -16,7 +16,7 @@
 # You should have received a copy of the GNU General Public License
 # along with SickRage.  If not, see <http://www.gnu.org/licenses/>.
 
-import generic
+from sickbeard.providers import generic
 
 from sickbeard import logger
 from sickbeard import tvcache
@@ -27,7 +27,7 @@ class WombleProvider(generic.NZBProvider):
         generic.NZBProvider.__init__(self, "Womble's Index")
         self.public = True
         self.cache = WombleCache(self)
-        self.urls = {'base_url': 'https://newshost.co.za/'}
+        self.urls = {'base_url': 'http://newshost.co.za/'}
         self.url = self.urls['base_url']
 
     def isEnabled(self):
diff --git a/sickbeard/tvcache.py b/sickbeard/tvcache.py
index b6ef30229..bf7149e54 100644
--- a/sickbeard/tvcache.py
+++ b/sickbeard/tvcache.py
@@ -175,6 +175,8 @@ class TVCache(object):
                 u"The data returned from the " + self.provider.name + " feed is incomplete, this result is unusable",
                 logger.DEBUG)
 
+        return False
+
     def _getLastUpdate(self):
         myDB = self._getDB()
         sqlResults = myDB.select("SELECT time FROM lastUpdate WHERE provider = ?", [self.providerID])
diff --git a/tests/feedparser_tests.py b/tests/feedparser_tests.py
new file mode 100644
index 000000000..5ef68544a
--- /dev/null
+++ b/tests/feedparser_tests.py
@@ -0,0 +1,29 @@
+import sys, os.path
+
+sys.path.insert(1, os.path.abspath(os.path.join(os.path.dirname(__file__), '../lib')))
+sys.path.insert(1, os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
+
+import unittest
+
+from sickbeard.providers.womble import provider as womble
+
+class FeedParserTests(unittest.TestCase):
+    # pylint: disable=W0212
+    def test_womble(self):
+        result = womble.cache.getRSSFeed('http://newshost.co.za/rss/?sec=tv-sd&fr=false')
+        self.assertTrue('entries' in result)
+        self.assertTrue('feed' in result)
+        for item in result['entries'] or []:
+            title, url = womble._get_title_and_url(item)
+            self.assertTrue(title and url)
+
+if __name__ == "__main__":
+    print "=================="
+    print "STARTING - FEEDPARSER TESTS"
+    print "=================="
+    print "######################################################################"
+    suite = unittest.TestLoader().loadTestsFromTestCase(FeedParserTests)
+    testresults = unittest.TextTestRunner(verbosity=2).run(suite)
+
+    # Return 0 if successful, 1 if there was a failure
+    sys.exit(not testresults.wasSuccessful())
-- 
GitLab


From 68341f325689b286f8451dd254a2f10c824c85aa Mon Sep 17 00:00:00 2001
From: Dustyn Gibson <miigotu@gmail.com>
Date: Wed, 4 Nov 2015 15:55:26 -0800
Subject: [PATCH 008/215] Dont try normal regexes when we know the show is
 anime (still might need to flip the order on line 87) Closes
 https://github.com/SiCKRAGETV/sickrage-issues/issues/2834 Closes
 https://github.com/SiCKRAGETV/sickrage-issues/issues/3562 Closes
 https://github.com/SiCKRAGETV/sickrage-issues/issues/946

---
 sickbeard/name_parser/parser.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/sickbeard/name_parser/parser.py b/sickbeard/name_parser/parser.py
index 2e77fe375..6c1a503a9 100644
--- a/sickbeard/name_parser/parser.py
+++ b/sickbeard/name_parser/parser.py
@@ -78,7 +78,7 @@ class NameParser(object):
     def _compile_regexes(self, regexMode):
         if regexMode == self.ANIME_REGEX:
             dbg_str = u"ANIME"
-            uncompiled_regex = [regexes.anime_regexes, regexes.normal_regexes]
+            uncompiled_regex = [regexes.anime_regexes]
         elif regexMode == self.NORMAL_REGEX:
             dbg_str = u"NORMAL"
             uncompiled_regex = [regexes.normal_regexes]
-- 
GitLab


From 3c825d9965d7939c9bbf1c69684989e4136211f5 Mon Sep 17 00:00:00 2001
From: Dustyn Gibson <miigotu@gmail.com>
Date: Wed, 4 Nov 2015 16:30:12 -0800
Subject: [PATCH 009/215] Fix Shomin Sample Fixes
 https://github.com/SiCKRAGETV/sickrage-issues/issues/3564

---
 sickbeard/helpers.py           | 2 +-
 sickbeard/show_name_helpers.py | 4 ++--
 2 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/sickbeard/helpers.py b/sickbeard/helpers.py
index e994d7171..b5c7a0c9e 100644
--- a/sickbeard/helpers.py
+++ b/sickbeard/helpers.py
@@ -237,7 +237,7 @@ def isMediaFile(filename):
     """
 
     # ignore samples
-    if re.search(r'(^|[\W_])(sample\d*)[\W_]', filename, re.I):
+    if re.search(r'(^|[\W_])(?<!shomin.)(sample\d*)[\W_]', filename, re.I):
         return False
 
     # ignore RARBG release intro
diff --git a/sickbeard/show_name_helpers.py b/sickbeard/show_name_helpers.py
index 392d17af0..c1c522d66 100644
--- a/sickbeard/show_name_helpers.py
+++ b/sickbeard/show_name_helpers.py
@@ -34,8 +34,8 @@ from name_parser.parser import NameParser, InvalidNameException, InvalidShowExce
 
 resultFilters = [
     "sub(bed|ed|pack|s)",
-    "(dir|sample|sub|nfo)fix",
-    "sample",
+    "(dir|sub|nfo)fix",
+    "(?<!shomin.)sample",
     "(dvd)?extras",
     "dub(bed)?"
 ]
-- 
GitLab


From f950c5c73b80b9541e7f7f2bf721e01a729497ea Mon Sep 17 00:00:00 2001
From: Dustyn Gibson <miigotu@gmail.com>
Date: Wed, 4 Nov 2015 17:58:12 -0800
Subject: [PATCH 010/215] Update CPasbian URL Replaces #3080

---
 sickbeard/providers/cpasbien.py | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/sickbeard/providers/cpasbien.py b/sickbeard/providers/cpasbien.py
index 6baa067b4..7d80b003f 100644
--- a/sickbeard/providers/cpasbien.py
+++ b/sickbeard/providers/cpasbien.py
@@ -34,7 +34,7 @@ class CpasbienProvider(generic.TorrentProvider):
         self.supportsBacklog = True
         self.public = True
         self.ratio = None
-        self.url = "http://www.cpasbien.pw"
+        self.url = "http://www.cpasbien.io"
 
         self.proper_strings = ['PROPER', 'REPACK']
 
@@ -88,7 +88,7 @@ class CpasbienProvider(generic.TorrentProvider):
                                 #downloadTorrentLink = torrentSoup.find("a", title.startswith('Cliquer'))
                                 tmp = pageURL.split('/')[-1].replace('.html', '.torrent')
 
-                                downloadTorrentLink = ('http://www.cpasbien.pw/telechargement/%s' % tmp)
+                                downloadTorrentLink = ('http://www.cpasbien.io/telechargement/%s' % tmp)
 
                                 if downloadTorrentLink:
                                     download_url = downloadTorrentLink
-- 
GitLab


From be0d1a458ecafac46fc73417168813a5d0aaeb7a Mon Sep 17 00:00:00 2001
From: Dustyn Gibson <miigotu@gmail.com>
Date: Wed, 4 Nov 2015 18:03:48 -0800
Subject: [PATCH 011/215] Allow bare anime results without release group if no
 black ir white list

---
 sickbeard/blackandwhitelist.py | 29 +++++++++++++++--------------
 1 file changed, 15 insertions(+), 14 deletions(-)

diff --git a/sickbeard/blackandwhitelist.py b/sickbeard/blackandwhitelist.py
index 1368ed23e..dd98667b8 100644
--- a/sickbeard/blackandwhitelist.py
+++ b/sickbeard/blackandwhitelist.py
@@ -38,7 +38,7 @@ class BlackAndWhiteList(object):
         logger.log(u'Building black and white list for ' + str(self.show_id), logger.DEBUG)
         self.blacklist = self._load_list('blacklist')
         self.whitelist = self._load_list('whitelist')
-        
+
     def _add_keywords(self, table, values):
         """
         DB: Adds keywords into database for current show
@@ -48,7 +48,7 @@ class BlackAndWhiteList(object):
         """
         myDB = db.DBConnection()
         for value in values:
-            myDB.action('INSERT INTO [' + table + '] (show_id, keyword) VALUES (?,?)', [self.show_id, value]) 
+            myDB.action('INSERT INTO [' + table + '] (show_id, keyword) VALUES (?,?)', [self.show_id, value])
 
     def set_black_keywords(self, values):
         """
@@ -70,7 +70,7 @@ class BlackAndWhiteList(object):
         self._del_all_keywords('whitelist')
         self._add_keywords('whitelist', values)
         self.whitelist = values
-        logger.log('Whitelist set to: %s' % self.whitelist, logger.DEBUG)            
+        logger.log('Whitelist set to: %s' % self.whitelist, logger.DEBUG)
 
     def _del_all_keywords(self, table):
         """
@@ -79,8 +79,8 @@ class BlackAndWhiteList(object):
         :param table: SQL table remove keywords from
         """
         myDB = db.DBConnection()
-        myDB.action('DELETE FROM [' + table + '] WHERE show_id = ?', [self.show_id])        
-        
+        myDB.action('DELETE FROM [' + table + '] WHERE show_id = ?', [self.show_id])
+
     def _load_list(self, table):
         """
         DB: Fetch keywords for current show
@@ -96,7 +96,7 @@ class BlackAndWhiteList(object):
         groups = []
         for result in sqlResults:
             groups.append(result["keyword"])
-            
+
         logger.log('BWL: ' + str(self.show_id) + ' loaded keywords from ' + table + ': ' + str(groups), logger.DEBUG)
         return groups
 
@@ -107,10 +107,11 @@ class BlackAndWhiteList(object):
         :param result: Result to analyse
         :return: False if result is not allowed in white/blacklist, True if it is
         """
-        if not result.release_group:
-            logger.log('Failed to detect release group, invalid result', logger.DEBUG)
-            return False
         if self.whitelist or self.blacklist:
+            if not result.release_group:
+                logger.log('Failed to detect release group, invalid result', logger.DEBUG)
+                return False
+
             if result.release_group.lower() in [x.lower() for x in self.whitelist]:
                 white_result = True
             elif not self.whitelist:
@@ -125,13 +126,13 @@ class BlackAndWhiteList(object):
             logger.log('Whitelist check passed: %s. Blacklist check passed: %s' % (white_result, black_result), logger.DEBUG)
 
             if white_result and black_result:
-                 return True 
+                return True
             else:
-                 return False
+                return False
         else:
             logger.log('No Whitelist and  Blacklist defined, check passed.', logger.DEBUG)
-            return True 
-             
+            return True
+
 class BlackWhitelistNoShowIDException(Exception):
     'No show_id was given'
 
@@ -150,7 +151,7 @@ def short_group_names(groups):
                 group = sickbeard.ADBA_CONNECTION.group(gname=groupName)
             except AniDBCommandTimeoutError:
                 logger.log(u"Timeout while loading group from AniDB. Trying next group", logger.DEBUG)
-            except:
+            except Exception:
                 logger.log(u"Failed while loading group from AniDB. Trying next group", logger.DEBUG)
             else:
                 for line in group.datalines:
-- 
GitLab


From f93a5a384d432425f9d46f8d88cb78d3b586f3e8 Mon Sep 17 00:00:00 2001
From: CristianBB <cristian.blazquez.bustos@gmail.com>
Date: Wed, 4 Nov 2015 16:40:22 +0100
Subject: [PATCH 012/215] Added quality string

---
 sickbeard/providers/newpct.py | 1 +
 1 file changed, 1 insertion(+)

diff --git a/sickbeard/providers/newpct.py b/sickbeard/providers/newpct.py
index 89f0563c3..842b8f311 100644
--- a/sickbeard/providers/newpct.py
+++ b/sickbeard/providers/newpct.py
@@ -163,6 +163,7 @@ class newpctProvider(generic.TorrentProvider):
         title = title.replace('[DVDRIP]', '[DVDrip x264]')
         title = title.replace('[DVD Rip]', '[DVDrip x264]')
         title = title.replace('[DVDrip]', '[DVDrip x264]')
+        title = title.replace('[DVDRIP-AC3.5.1]', '[DVDrip x264]')
         title = title.replace('[BLuRayRip]', '[720p BlueRay x264]')
         title = title.replace('[BRrip]', '[720p BlueRay x264]')
         title = title.replace('[BDrip]', '[720p BlueRay x264]')
-- 
GitLab


From eed661038b390693930974dafc78c44a0864b07c Mon Sep 17 00:00:00 2001
From: labrys <labrys@useres.noreply.github.com>
Date: Tue, 3 Nov 2015 20:05:42 -0500
Subject: [PATCH 013/215] PEP8: comments should start with '# '

---
 SickBeard.py                             | 10 +++---
 sickbeard/__init__.py                    |  6 ++--
 sickbeard/browser.py                     |  2 +-
 sickbeard/clients/transmission_client.py |  2 +-
 sickbeard/clients/utorrent_client.py     |  4 +--
 sickbeard/common.py                      |  4 +--
 sickbeard/db.py                          |  4 +--
 sickbeard/helpers.py                     |  8 ++---
 sickbeard/image_cache.py                 |  2 +-
 sickbeard/indexers/indexer_config.py     |  2 +-
 sickbeard/indexers/indexer_exceptions.py |  8 ++---
 sickbeard/logger.py                      | 20 +++++------
 sickbeard/metadata/kodi_12plus.py        |  4 +--
 sickbeard/notifiers/boxcar.py            |  2 +-
 sickbeard/notifiers/boxcar2.py           |  2 +-
 sickbeard/notifiers/growl.py             |  8 ++---
 sickbeard/notifiers/libnotify.py         |  2 +-
 sickbeard/notifiers/nmj.py               |  2 +-
 sickbeard/notifiers/nmjv2.py             |  4 +--
 sickbeard/notifiers/pushover.py          |  2 +-
 sickbeard/notifiers/pytivo.py            |  2 +-
 sickbeard/notifiers/synoindex.py         |  4 +--
 sickbeard/notifiers/synologynotifier.py  |  2 +-
 sickbeard/notifiers/trakt.py             |  2 +-
 sickbeard/notifiers/tweet.py             |  8 ++---
 sickbeard/nzbSplitter.py                 |  2 +-
 sickbeard/postProcessor.py               |  2 +-
 sickbeard/processTV.py                   | 32 ++++++++---------
 sickbeard/providers/__init__.py          |  2 +-
 sickbeard/providers/alpharatio.py        |  8 ++---
 sickbeard/providers/animenzb.py          |  2 +-
 sickbeard/providers/bitcannon.py         |  8 ++---
 sickbeard/providers/bitsoup.py           |  8 ++---
 sickbeard/providers/bluetigers.py        |  8 ++---
 sickbeard/providers/btdigg.py            | 10 +++---
 sickbeard/providers/btn.py               |  2 +-
 sickbeard/providers/cpasbien.py          |  8 ++---
 sickbeard/providers/extratorrent.py      |  4 +--
 sickbeard/providers/fnt.py               |  6 ++--
 sickbeard/providers/frenchtorrentdb.py   |  8 ++---
 sickbeard/providers/freshontv.py         | 20 +++++------
 sickbeard/providers/generic.py           |  2 +-
 sickbeard/providers/hdbits.py            |  4 +--
 sickbeard/providers/hdspace.py           |  6 ++--
 sickbeard/providers/hdtorrents.py        |  4 +--
 sickbeard/providers/hounddawgs.py        | 14 ++++----
 sickbeard/providers/iptorrents.py        |  6 ++--
 sickbeard/providers/kat.py               |  8 ++---
 sickbeard/providers/libertalia.py        | 16 ++++-----
 sickbeard/providers/morethantv.py        |  8 ++---
 sickbeard/providers/newpct.py            |  4 +--
 sickbeard/providers/newznab.py           |  2 +-
 sickbeard/providers/nextgen.py           |  8 ++---
 sickbeard/providers/pretome.py           |  6 ++--
 sickbeard/providers/rarbg.py             |  4 +--
 sickbeard/providers/scc.py               |  6 ++--
 sickbeard/providers/scenetime.py         |  8 ++---
 sickbeard/providers/speedcd.py           |  6 ++--
 sickbeard/providers/strike.py            |  6 ++--
 sickbeard/providers/t411.py              |  4 +--
 sickbeard/providers/thepiratebay.py      | 10 +++---
 sickbeard/providers/titansoftv.py        | 10 +++---
 sickbeard/providers/tntvillage.py        |  8 ++---
 sickbeard/providers/tokyotoshokan.py     | 12 +++----
 sickbeard/providers/torrentbytes.py      |  8 ++---
 sickbeard/providers/torrentday.py        |  6 ++--
 sickbeard/providers/torrentleech.py      |  8 ++---
 sickbeard/providers/torrentproject.py    |  4 +--
 sickbeard/providers/torrentz.py          |  4 +--
 sickbeard/providers/transmitthenet.py    |  4 +--
 sickbeard/providers/tvchaosuk.py         | 10 +++---
 sickbeard/providers/xthor.py             |  8 ++---
 sickbeard/scene_numbering.py             |  2 +-
 sickbeard/scheduler.py                   |  2 +-
 sickbeard/search_queue.py                |  2 +-
 sickbeard/show_name_helpers.py           |  4 +--
 sickbeard/show_queue.py                  | 20 +++++------
 sickbeard/subtitles.py                   |  2 +-
 sickbeard/traktChecker.py                |  6 ++--
 sickbeard/tv.py                          | 46 ++++++++++++------------
 sickbeard/ui.py                          |  2 +-
 sickbeard/versionChecker.py              |  4 +--
 sickbeard/webapi.py                      |  4 +--
 sickbeard/webserve.py                    | 12 +++----
 84 files changed, 283 insertions(+), 283 deletions(-)

diff --git a/SickBeard.py b/SickBeard.py
index fe5bb2c77..7954af972 100755
--- a/SickBeard.py
+++ b/SickBeard.py
@@ -175,7 +175,7 @@ class SickRage(object):
             reload(sys)
 
         if sys.platform == 'win32':
-            #pylint: disable=E1101
+            # pylint: disable=E1101
             if sys.getwindowsversion()[0] >= 6 and sys.stdout.encoding == 'cp65001':
                 sickbeard.SYS_ENCODING = 'UTF-8'
 
@@ -388,8 +388,8 @@ class SickRage(object):
         if sickbeard.USE_FAILED_DOWNLOADS:
             failed_history.trimHistory()
 
-        # Check for metadata indexer updates for shows (Disabled until we use api)
-        #sickbeard.showUpdateScheduler.forceRun()
+        # # Check for metadata indexer updates for shows (Disabled until we use api)
+        # sickbeard.showUpdateScheduler.forceRun()
 
         # Launch browser
         if sickbeard.LAUNCH_BROWSER and not (self.noLaunch or self.runAsDaemon):
@@ -541,11 +541,11 @@ class SickRage(object):
                     if '--nolaunch' not in popen_list:
                         popen_list += ['--nolaunch']
                     logger.log(u"Restarting SickRage with " + str(popen_list))
-                    logger.shutdown() #shutdown the logger to make sure it's released the logfile BEFORE it restarts SR.
+                    logger.shutdown()  # shutdown the logger to make sure it's released the logfile BEFORE it restarts SR.
                     subprocess.Popen(popen_list, cwd=os.getcwd())
 
         # system exit
-        logger.shutdown() #Make sure the logger has stopped, just in case
+        logger.shutdown()  # Make sure the logger has stopped, just in case
         # pylint: disable=W0212
         os._exit(0)
 
diff --git a/sickbeard/__init__.py b/sickbeard/__init__.py
index 18f99b6bb..73b06fd4c 100644
--- a/sickbeard/__init__.py
+++ b/sickbeard/__init__.py
@@ -550,7 +550,7 @@ CALENDAR_ICONS = False
 NO_RESTART = False
 
 TMDB_API_KEY = 'edc5f123313769de83a71e157758030b'
-#TRAKT_API_KEY = 'd4161a7a106424551add171e5470112e4afdaf2438e6ef2fe0548edc75924868'
+# TRAKT_API_KEY = 'd4161a7a106424551add171e5470112e4afdaf2438e6ef2fe0548edc75924868'
 
 TRAKT_API_KEY = '5c65f55e11d48c35385d9e8670615763a605fad28374c8ae553a7b7a50651ddd'
 TRAKT_API_SECRET = 'b53e32045ac122a445ef163e6d859403301ffe9b17fb8321d428531b69022a82'
@@ -668,8 +668,8 @@ def initialize(consoleLogging=True):
 
         ACTUAL_LOG_DIR = check_setting_str(CFG, 'General', 'log_dir', 'Logs')
         LOG_DIR = os.path.normpath(os.path.join(DATA_DIR, ACTUAL_LOG_DIR))
-        LOG_NR = check_setting_int(CFG, 'General', 'log_nr', 5) #Default to 5 backup file (sickrage.log.x)
-        LOG_SIZE = check_setting_int(CFG, 'General', 'log_size', 1048576) #Default to max 1MB per logfile
+        LOG_NR = check_setting_int(CFG, 'General', 'log_nr', 5)  # Default to 5 backup file (sickrage.log.x)
+        LOG_SIZE = check_setting_int(CFG, 'General', 'log_size', 1048576)  # Default to max 1MB per logfile
         fileLogging = True
         if not helpers.makeDir(LOG_DIR):
             sys.stderr.write("!!! No log folder, logging to screen only!\n")
diff --git a/sickbeard/browser.py b/sickbeard/browser.py
index 6d50b8587..127fbe9c1 100644
--- a/sickbeard/browser.py
+++ b/sickbeard/browser.py
@@ -31,7 +31,7 @@ def getWinDrives():
     from ctypes import windll
 
     drives = []
-    bitmask = windll.kernel32.GetLogicalDrives()  #@UndefinedVariable
+    bitmask = windll.kernel32.GetLogicalDrives()  # @UndefinedVariable
     for letter in string.uppercase:
         if bitmask & 1:
             drives.append(letter)
diff --git a/sickbeard/clients/transmission_client.py b/sickbeard/clients/transmission_client.py
index 06fc75a54..81e81b8a9 100644
--- a/sickbeard/clients/transmission_client.py
+++ b/sickbeard/clients/transmission_client.py
@@ -53,7 +53,7 @@ class TransmissionAPI(GenericClient):
 
         self.session.headers.update({'x-transmission-session-id': self.auth})
 
-        #Validating Transmission authorization
+        # Validating Transmission authorization
         post_data = json.dumps({'arguments': {},
                                 'method': 'session-get',
         })
diff --git a/sickbeard/clients/utorrent_client.py b/sickbeard/clients/utorrent_client.py
index c0462f8df..6a466b445 100644
--- a/sickbeard/clients/utorrent_client.py
+++ b/sickbeard/clients/utorrent_client.py
@@ -31,8 +31,8 @@ class uTorrentAPI(GenericClient):
 
     def _request(self, method='get', params={}, files=None):
 
-        #Workaround for uTorrent 2.2.1
-        #Need a odict but only supported in 2.7+ and sickrage is 2.6+
+        # Workaround for uTorrent 2.2.1
+        # Need a odict but only supported in 2.7+ and sickrage is 2.6+
         ordered_params = {'token': self.auth}
 
         for k,v in params.iteritems():
diff --git a/sickbeard/common.py b/sickbeard/common.py
index 6000606f2..846488ff2 100644
--- a/sickbeard/common.py
+++ b/sickbeard/common.py
@@ -89,7 +89,7 @@ ARCHIVED = 6  # episodes that you don't have locally (counts toward download com
 IGNORED = 7  # episodes that you don't want included in your download stats
 SNATCHED_PROPER = 9  # qualified with quality
 SUBTITLED = 10  # qualified with quality
-FAILED = 11  #episode downloaded or snatched we don't want
+FAILED = 11  # episode downloaded or snatched we don't want
 SNATCHED_BEST = 12  # episode redownloaded using best quality
 
 NAMING_REPEAT = 1
@@ -221,7 +221,7 @@ class Quality:
         :return: Quality prefix
         """
 
-        #Try Scene names first
+        # Try Scene names first
         quality = Quality.sceneQuality(name, anime)
         if quality != Quality.UNKNOWN:
             return quality
diff --git a/sickbeard/db.py b/sickbeard/db.py
index 1b03819a7..a82b8991b 100644
--- a/sickbeard/db.py
+++ b/sickbeard/db.py
@@ -169,7 +169,7 @@ class DBConnection(object):
                     logger.log(u"Fatal error executing query: " + ex(e), logger.ERROR)
                     raise
 
-            #time.sleep(0.02)
+            # time.sleep(0.02)
 
             return sqlResult
 
@@ -214,7 +214,7 @@ class DBConnection(object):
                     logger.log(u"Fatal error executing query: " + ex(e), logger.ERROR)
                     raise
 
-            #time.sleep(0.02)
+            # time.sleep(0.02)
 
             return sqlResult
 
diff --git a/sickbeard/helpers.py b/sickbeard/helpers.py
index b5c7a0c9e..cd195401e 100644
--- a/sickbeard/helpers.py
+++ b/sickbeard/helpers.py
@@ -457,7 +457,7 @@ def searchIndexerForShowID(regShowName, indexer=None, indexer_id=None, ui=None):
             if not (seriesname and series_id):
                 continue
             ShowObj = findCertainShow(sickbeard.showList, int(series_id))
-            #Check if we can find the show in our list (if not, it's not the right show)
+            # Check if we can find the show in our list (if not, it's not the right show)
             if (indexer_id is None) and (ShowObj is not None) and (ShowObj.indexerid == int(series_id)):
                 return (seriesname, i, int(series_id))
             elif (indexer_id is not None) and (int(indexer_id) == int(series_id)):
@@ -646,7 +646,7 @@ def rename_ep_file(cur_path, new_path, old_path_length=0):
     :param old_path_length: The length of media file path (old name) WITHOUT THE EXTENSION
     """
 
-    #new_dest_dir, new_dest_name = os.path.split(new_path)  # @UnusedVariable
+    # new_dest_dir, new_dest_name = os.path.split(new_path)  # @UnusedVariable
 
     if old_path_length == 0 or old_path_length > len(cur_path):
         # approach from the right
@@ -1220,12 +1220,12 @@ def get_show(name, tryIndexers=False):
             fromCache = True
             showObj = findCertainShow(sickbeard.showList, int(cache))
 
-        #try indexers
+        # try indexers
         if not showObj and tryIndexers:
             showObj = findCertainShow(sickbeard.showList,
                                       searchIndexerForShowID(full_sanitizeSceneName(name), ui=classes.ShowListUI)[2])
 
-        #try scene exceptions
+        # try scene exceptions
         if not showObj:
             ShowID = sickbeard.scene_exceptions.get_scene_exception_by_name(name)[0]
             if ShowID:
diff --git a/sickbeard/image_cache.py b/sickbeard/image_cache.py
index 0e576bd93..457998eeb 100644
--- a/sickbeard/image_cache.py
+++ b/sickbeard/image_cache.py
@@ -250,7 +250,7 @@ class ImageCache:
             return False
 
         # retrieve the image from indexer using the generic metadata class
-        #TODO: refactor
+        # TODO: refactor
         metadata_generator = GenericMetadata()
         img_data = metadata_generator._retrieve_show_image(img_type_name, show_obj)
         result = metadata_generator._write_image(img_data, dest_path)
diff --git a/sickbeard/indexers/indexer_config.py b/sickbeard/indexers/indexer_config.py
index ee1d77a95..6040d2325 100644
--- a/sickbeard/indexers/indexer_config.py
+++ b/sickbeard/indexers/indexer_config.py
@@ -3,7 +3,7 @@ import requests
 
 INDEXER_TVDB = 1
 
-#Must keep
+# Must keep
 INDEXER_TVRAGE = 2
 
 initConfig = {}
diff --git a/sickbeard/indexers/indexer_exceptions.py b/sickbeard/indexers/indexer_exceptions.py
index f8bd22218..32a90ffda 100644
--- a/sickbeard/indexers/indexer_exceptions.py
+++ b/sickbeard/indexers/indexer_exceptions.py
@@ -1,9 +1,9 @@
 #!/usr/bin/env python2.7
 # encoding:utf-8
-#author:echel0n
-#project:indexer_api
-#repository:http://github.com/echel0n/Sick-Beard
-#license:unlicense (http://unlicense.org/)
+# author:echel0n
+# project:indexer_api
+# repository:http://github.com/echel0n/Sick-Beard
+# license:unlicense (http://unlicense.org/)
 
 """Custom exceptions used or raised by indexer_api"""
 
diff --git a/sickbeard/logger.py b/sickbeard/logger.py
index 5bfa36189..5cac491c4 100644
--- a/sickbeard/logger.py
+++ b/sickbeard/logger.py
@@ -147,11 +147,11 @@ class Logger(object):
             message = check
             level = WARNING
         
-        #Avoid open issues when user only need to clear cache to fix issue    
+        # Avoid open issues when user only need to clear cache to fix issue
         if re.search(r"_mako\'$",message):
-            #'C__SickRage_gui_slick_views_schedule_mako' 
-            #'_usr_local_sickrage_var_SickRage_gui_slick_views_schedule_mako'
-            #'_volume1___plugins_AppCentral_sickbeard_tvrage_SickBeard_TVRage_gui_slick_views_schedule_mako'
+            # 'C__SickRage_gui_slick_views_schedule_mako'
+            # '_usr_local_sickrage_var_SickRage_gui_slick_views_schedule_mako'
+            # '_volume1___plugins_AppCentral_sickbeard_tvrage_SickBeard_TVRage_gui_slick_views_schedule_mako'
             message = 'Please stop SickRage and delete \SickRage\cache\mako folder. You can see cache folder location in SickRage Help&Info menu'
             level = WARNING            
 
@@ -276,18 +276,18 @@ class Logger(object):
                 reports = gh.get_organization(gh_org).get_repo(gh_repo).get_issues(state="all")
 
                 def is_mako_error(title):
-                    #[APP SUBMITTED]: Loaded module _home_pi_SickRage_gui_slick_views_home_mako not found in sys.modules
-                    #[APP SUBMITTED]: Loaded module _opt_sickbeard_gui_slick_views_home_mako not found in sys.modules
-                    #[APP SUBMITTED]: Loaded module D__TV_SickRage_gui_slick_views_home_mako not found in sys.modules
+                    # [APP SUBMITTED]: Loaded module _home_pi_SickRage_gui_slick_views_home_mako not found in sys.modules
+                    # [APP SUBMITTED]: Loaded module _opt_sickbeard_gui_slick_views_home_mako not found in sys.modules
+                    # [APP SUBMITTED]: Loaded module D__TV_SickRage_gui_slick_views_home_mako not found in sys.modules
                     return re.search(r".* Loaded module .* not found in sys\.modules", title) is not None
 
                 def is_ascii_error(title):
-                    #[APP SUBMITTED]: 'ascii' codec can't encode characters in position 00-00: ordinal not in range(128)
-                    #[APP SUBMITTED]: 'charmap' codec can't decode byte 0x00 in position 00: character maps to <undefined>
+                    # [APP SUBMITTED]: 'ascii' codec can't encode characters in position 00-00: ordinal not in range(128)
+                    # [APP SUBMITTED]: 'charmap' codec can't decode byte 0x00 in position 00: character maps to <undefined>
                     return re.search(r".* codec can't .*code .* in position .*:", title) is not None
 
                 def is_malformed_error(title):
-                    #[APP SUBMITTED]: not well-formed (invalid token): line 0, column 0
+                    # [APP SUBMITTED]: not well-formed (invalid token): line 0, column 0
                     re.search(r".* not well-formed \(invalid token\): line .* column .*", title) is not None
 
                 mako_error = is_mako_error(title_Error)
diff --git a/sickbeard/metadata/kodi_12plus.py b/sickbeard/metadata/kodi_12plus.py
index cdd254333..5d61c52ba 100644
--- a/sickbeard/metadata/kodi_12plus.py
+++ b/sickbeard/metadata/kodi_12plus.py
@@ -305,8 +305,8 @@ class KODI_12PlusMetadata(generic.GenericMetadata):
                 thumb = etree.SubElement(episode, "thumb")
                 thumb.text = myEp['filename'].strip()
 
-            #watched = etree.SubElement(episode, "watched")
-            #watched.text = 'false'
+            # watched = etree.SubElement(episode, "watched")
+            # watched.text = 'false'
 
             if getattr(myEp, 'writer', None):
                 credits = etree.SubElement(episode, "credits")
diff --git a/sickbeard/notifiers/boxcar.py b/sickbeard/notifiers/boxcar.py
index 40be70aa9..6de1752fb 100644
--- a/sickbeard/notifiers/boxcar.py
+++ b/sickbeard/notifiers/boxcar.py
@@ -92,7 +92,7 @@ class BoxcarNotifier:
                     # i dont know if this is true or false ... its neither but i also dont know how we got here in the first place
                     return False
 
-                #HTTP status 401 if the user doesn't have the service added
+                # HTTP status 401 if the user doesn't have the service added
                 else:
                     subscribeNote = self._sendBoxcar(msg, title, email, True)
                     if subscribeNote:
diff --git a/sickbeard/notifiers/boxcar2.py b/sickbeard/notifiers/boxcar2.py
index b6e9f4680..9cb6dd88d 100644
--- a/sickbeard/notifiers/boxcar2.py
+++ b/sickbeard/notifiers/boxcar2.py
@@ -45,7 +45,7 @@ class Boxcar2Notifier:
         """
 
         # build up the URL and parameters
-	#more info goes here - https://boxcar.uservoice.com/knowledgebase/articles/306788-how-to-send-your-boxcar-account-a-notification
+        # more info goes here - https://boxcar.uservoice.com/knowledgebase/articles/306788-how-to-send-your-boxcar-account-a-notification
         msg = msg.strip()
         curUrl = API_URL
 
diff --git a/sickbeard/notifiers/growl.py b/sickbeard/notifiers/growl.py
index 7b7d111db..93ee98684 100644
--- a/sickbeard/notifiers/growl.py
+++ b/sickbeard/notifiers/growl.py
@@ -52,10 +52,10 @@ class GrowlNotifier:
 
     def _send_growl(self, options, message=None):
 
-        #Send Notification
+        # Send Notification
         notice = gntp.GNTPNotice()
 
-        #Required
+        # Required
         notice.add_header('Application-Name', options['app'])
         notice.add_header('Notification-Name', options['name'])
         notice.add_header('Notification-Title', options['title'])
@@ -63,7 +63,7 @@ class GrowlNotifier:
         if options['password']:
             notice.set_password(options['password'])
 
-        #Optional
+        # Optional
         if options['sticky']:
             notice.add_header('Notification-Sticky', options['sticky'])
         if options['priority']:
@@ -169,7 +169,7 @@ class GrowlNotifier:
         opts['app'] = 'SickRage'
         opts['debug'] = False
 
-        #Send Registration
+        # Send Registration
         register = gntp.GNTPRegister()
         register.add_header('Application-Name', opts['app'])
         register.add_header('Application-Icon', self.sr_logo_url)
diff --git a/sickbeard/notifiers/libnotify.py b/sickbeard/notifiers/libnotify.py
index dc86055c7..402b99a1e 100644
--- a/sickbeard/notifiers/libnotify.py
+++ b/sickbeard/notifiers/libnotify.py
@@ -29,7 +29,7 @@ def diagnose():
     user-readable message indicating possible issues.
     '''
     try:
-        from gi.repository import Notify #@UnusedImport
+        from gi.repository import Notify  # @UnusedImport
     except ImportError:
         return (u"<p>Error: gir-notify isn't installed. On Ubuntu/Debian, install the "
                 u"<a href=\"apt:gir1.2-notify-0.7\">gir1.2-notify-0.7</a> or "
diff --git a/sickbeard/notifiers/nmj.py b/sickbeard/notifiers/nmj.py
index e86b81be0..63a8b3625 100644
--- a/sickbeard/notifiers/nmj.py
+++ b/sickbeard/notifiers/nmj.py
@@ -87,7 +87,7 @@ class NMJNotifier:
 
     def notify_snatch(self, ep_name):
         return False
-        #Not implemented: Start the scanner when snatched does not make any sense
+        # Not implemented: Start the scanner when snatched does not make any sense
 
     def notify_download(self, ep_name):
         if sickbeard.USE_NMJ:
diff --git a/sickbeard/notifiers/nmjv2.py b/sickbeard/notifiers/nmjv2.py
index 7c02bca11..c138580cd 100644
--- a/sickbeard/notifiers/nmjv2.py
+++ b/sickbeard/notifiers/nmjv2.py
@@ -33,7 +33,7 @@ except ImportError:
 class NMJv2Notifier:
     def notify_snatch(self, ep_name):
         return False
-        #Not implemented: Start the scanner when snatched does not make any sense
+        # Not implemented: Start the scanner when snatched does not make any sense
 
     def notify_download(self, ep_name):
         self._notifyNMJ()
@@ -104,7 +104,7 @@ class NMJv2Notifier:
         Returns: True if the request succeeded, False otherwise
         """
 
-        #if a host is provided then attempt to open a handle to that URL
+        # if a host is provided then attempt to open a handle to that URL
         try:
             url_scandir = "http://" + host + ":8008/metadata_database?arg0=update_scandir&arg1=" + sickbeard.NMJv2_DATABASE + "&arg2=&arg3=update_all"
             logger.log(u"NMJ scan update command sent to host: %s" % (host), logger.DEBUG)
diff --git a/sickbeard/notifiers/pushover.py b/sickbeard/notifiers/pushover.py
index d21ba2043..44ce1614e 100644
--- a/sickbeard/notifiers/pushover.py
+++ b/sickbeard/notifiers/pushover.py
@@ -106,7 +106,7 @@ class PushoverNotifier:
             # For HTTP status code 401's, it is because you are passing in either an invalid token, or the user has not added your service.
             elif e.code == 401:
 
-                #HTTP status 401 if the user doesn't have the service added
+                # HTTP status 401 if the user doesn't have the service added
                 subscribeNote = self._sendPushover(msg, title, sound=sound, userKey=userKey, apiKey=apiKey)
                 if subscribeNote:
                     logger.log("Subscription sent", logger.DEBUG)
diff --git a/sickbeard/notifiers/pytivo.py b/sickbeard/notifiers/pytivo.py
index 1fb2f631b..e7e9434df 100644
--- a/sickbeard/notifiers/pytivo.py
+++ b/sickbeard/notifiers/pytivo.py
@@ -90,7 +90,7 @@ class pyTivoNotifier:
         request = Request(requestUrl)
 
         try:
-            response = urlopen(request)  #@UnusedVariable
+            response = urlopen(request)  # @UnusedVariable
         except HTTPError , e:
             if hasattr(e, 'reason'):
                 logger.log(u"pyTivo notification: Error, failed to reach a server - " + e.reason, logger.ERROR)
diff --git a/sickbeard/notifiers/synoindex.py b/sickbeard/notifiers/synoindex.py
index 95d3a14ed..854eb1e43 100644
--- a/sickbeard/notifiers/synoindex.py
+++ b/sickbeard/notifiers/synoindex.py
@@ -54,7 +54,7 @@ class synoIndexNotifier:
             try:
                 p = subprocess.Popen(synoindex_cmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT,
                                      cwd=sickbeard.PROG_DIR)
-                out, err = p.communicate()  #@UnusedVariable
+                out, err = p.communicate()  # @UnusedVariable
                 logger.log(u"Script result: " + str(out), logger.DEBUG)
             except OSError, e:
                 logger.log(u"Unable to run synoindex: " + ex(e), logger.ERROR)
@@ -79,7 +79,7 @@ class synoIndexNotifier:
             try:
                 p = subprocess.Popen(synoindex_cmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT,
                                      cwd=sickbeard.PROG_DIR)
-                out, err = p.communicate()  #@UnusedVariable
+                out, err = p.communicate()  # @UnusedVariable
                 logger.log(u"Script result: " + str(out), logger.DEBUG)
             except OSError, e:
                 logger.log(u"Unable to run synoindex: " + ex(e), logger.ERROR)
diff --git a/sickbeard/notifiers/synologynotifier.py b/sickbeard/notifiers/synologynotifier.py
index 240c69fb2..ee0591f01 100644
--- a/sickbeard/notifiers/synologynotifier.py
+++ b/sickbeard/notifiers/synologynotifier.py
@@ -52,7 +52,7 @@ class synologyNotifier:
         try:
             p = subprocess.Popen(synodsmnotify_cmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT,
                                  cwd=sickbeard.PROG_DIR)
-            out, err = p.communicate()  #@UnusedVariable
+            out, err = p.communicate()  # @UnusedVariable
             logger.log(u"Script result: " + str(out), logger.DEBUG)
         except OSError, e:
             logger.log(u"Unable to run synodsmnotify: " + ex(e))
diff --git a/sickbeard/notifiers/trakt.py b/sickbeard/notifiers/trakt.py
index a7f7f2c1c..ab587637e 100644
--- a/sickbeard/notifiers/trakt.py
+++ b/sickbeard/notifiers/trakt.py
@@ -194,7 +194,7 @@ class TraktNotifier:
             if season not in uniqueSeasons:
                 uniqueSeasons.append(season)
 
-        #build the query
+        # build the query
         seasonsList = []
         for searchedSeason in uniqueSeasons:
             episodesList = []
diff --git a/sickbeard/notifiers/tweet.py b/sickbeard/notifiers/tweet.py
index f905b31c3..76cb64efd 100644
--- a/sickbeard/notifiers/tweet.py
+++ b/sickbeard/notifiers/tweet.py
@@ -23,9 +23,9 @@ from sickrage.helper.exceptions import ex
 
 # parse_qsl moved to urlparse module in v2.6
 try:
-    from urlparse import parse_qsl  #@UnusedImport
+    from urlparse import parse_qsl  # @UnusedImport
 except ImportError:
-    from cgi import parse_qsl  #@Reimport
+    from cgi import parse_qsl  # @Reimport
 
 import oauth2 as oauth
 import pythontwitter as twitter
@@ -63,7 +63,7 @@ class TwitterNotifier:
 
     def _get_authorization(self):
 
-        signature_method_hmac_sha1 = oauth.SignatureMethod_HMAC_SHA1()  #@UnusedVariable
+        signature_method_hmac_sha1 = oauth.SignatureMethod_HMAC_SHA1()  # @UnusedVariable
         oauth_consumer = oauth.Consumer(key=self.consumer_key, secret=self.consumer_secret)
         oauth_client = oauth.Client(oauth_consumer)
 
@@ -93,7 +93,7 @@ class TwitterNotifier:
 
         logger.log('Generating and signing request for an access token using key ' + key, logger.DEBUG)
 
-        signature_method_hmac_sha1 = oauth.SignatureMethod_HMAC_SHA1()  #@UnusedVariable
+        signature_method_hmac_sha1 = oauth.SignatureMethod_HMAC_SHA1()  # @UnusedVariable
         oauth_consumer = oauth.Consumer(key=self.consumer_key, secret=self.consumer_secret)
         logger.log('oauth_consumer: ' + str(oauth_consumer), logger.DEBUG)
         oauth_client = oauth.Client(oauth_consumer, token)
diff --git a/sickbeard/nzbSplitter.py b/sickbeard/nzbSplitter.py
index b9087c389..8c547270b 100644
--- a/sickbeard/nzbSplitter.py
+++ b/sickbeard/nzbSplitter.py
@@ -76,7 +76,7 @@ def getSeasonNZBs(name, urlData, season):
             xmlns = xmlnsMatch.group(1)
         match = re.search(regex, curFile.get("subject"), re.I)
         if not match:
-            #print curFile.get("subject"), "doesn't match", regex
+            # print curFile.get("subject"), "doesn't match", regex
             continue
         curEp = match.group(1)
         if curEp not in epFiles:
diff --git a/sickbeard/postProcessor.py b/sickbeard/postProcessor.py
index 3515aa1e6..34175cdac 100644
--- a/sickbeard/postProcessor.py
+++ b/sickbeard/postProcessor.py
@@ -1108,7 +1108,7 @@ class PostProcessor(object):
         # log it to history
         history.logDownload(ep_obj, self.file_path, new_ep_quality, self.release_group, new_ep_version)
 
-        #If any notification fails, don't stop postProcessor
+        # If any notification fails, don't stop postProcessor
         try:
             # send notifications
             notifiers.notify_download(ep_obj._format_pattern('%SN - %Sx%0E - %EN - %QN'))
diff --git a/sickbeard/processTV.py b/sickbeard/processTV.py
index 93832ae50..0ba1f8899 100644
--- a/sickbeard/processTV.py
+++ b/sickbeard/processTV.py
@@ -209,7 +209,7 @@ def processDir(dirName, nzbName=None, process_method=None, force=False, is_prior
 
         result.result = True
 
-        #Don't Link media when the media is extracted from a rar in the same path
+        # Don't Link media when the media is extracted from a rar in the same path
         if process_method in ('hardlink', 'symlink') and videoInRar:
             process_media(path, videoInRar, nzbName, 'move', force, is_priority, result)
             delete_files(path, rarContent, result)
@@ -229,7 +229,7 @@ def processDir(dirName, nzbName=None, process_method=None, force=False, is_prior
         result.output += logHelper(u"Sync Files: " + str(SyncFiles) + " in path: " + path)
         result.missedfiles.append(path + " : Syncfiles found")
 
-    #Process Video File in all TV Subdir
+    # Process Video File in all TV Subdir
     for dir in [x for x in dirs if validateDir(path, x, nzbNameOriginal, failed, result)]:
 
         result.result = True
@@ -257,7 +257,7 @@ def processDir(dirName, nzbName=None, process_method=None, force=False, is_prior
                 if notwantedFiles:
                     result.output += logHelper(u"Found unwanted files: " + str(notwantedFiles), logger.DEBUG)
 
-                #Don't Link media when the media is extracted from a rar in the same path
+                # Don't Link media when the media is extracted from a rar in the same path
                 if process_method in ('hardlink', 'symlink') and videoInRar:
                     process_media(processPath, videoInRar, nzbName, 'move', force, is_priority, result)
                     process_media(processPath, set(videoFiles) - set(videoInRar), nzbName, process_method, force,
@@ -271,9 +271,9 @@ def processDir(dirName, nzbName=None, process_method=None, force=False, is_prior
                 else:
                     process_media(processPath, videoFiles, nzbName, process_method, force, is_priority, result)
 
-                    #Delete all file not needed
+                    # Delete all file not needed
                     if process_method != "move" or not result.result \
-                            or (type == "manual" and not delete_on):  #Avoid to delete files if is Manual PostProcessing
+                            or (type == "manual" and not delete_on):  # Avoid to delete files if is Manual PostProcessing
                         continue
 
                     delete_files(processPath, notwantedFiles, result)
@@ -367,7 +367,7 @@ def validateDir(path, dirName, nzbNameOriginal, failed, result):
     videoFiles = filter(helpers.isMediaFile, allFiles)
     allDirs.append(dirName)
 
-    #check if the dir have at least one tv video file
+    # check if the dir have at least one tv video file
     for video in videoFiles:
         try:
             NameParser().parse(video, cache_result=False)
@@ -383,7 +383,7 @@ def validateDir(path, dirName, nzbNameOriginal, failed, result):
             pass
 
     if sickbeard.UNPACK:
-        #Search for packed release
+        # Search for packed release
         packedFiles = filter(helpers.isRarFile, allFiles)
 
         for packed in packedFiles:
@@ -494,27 +494,27 @@ def already_postprocessed(dirName, videofile, force, result):
     myDB = db.DBConnection()
     sqlResult = myDB.select("SELECT * FROM tv_episodes WHERE release_name = ?", [dirName])
     if sqlResult:
-        #result.output += logHelper(u"You're trying to post process a dir that's already been processed, skipping", logger.DEBUG)
+        # result.output += logHelper(u"You're trying to post process a dir that's already been processed, skipping", logger.DEBUG)
         return True
 
     else:
         sqlResult = myDB.select("SELECT * FROM tv_episodes WHERE release_name = ?", [videofile.rpartition('.')[0]])
         if sqlResult:
-            #result.output += logHelper(u"You're trying to post process a video that's already been processed, skipping", logger.DEBUG)
+            # result.output += logHelper(u"You're trying to post process a video that's already been processed, skipping", logger.DEBUG)
             return True
 
-        #Needed if we have downloaded the same episode @ different quality
-        #But we need to make sure we check the history of the episode we're going to PP, and not others
+        # Needed if we have downloaded the same episode @ different quality
+        # But we need to make sure we check the history of the episode we're going to PP, and not others
         np = NameParser(dirName, tryIndexers=True)
-        try: #if it fails to find any info (because we're doing an unparsable folder (like the TV root dir) it will throw an exception, which we want to ignore
+        try:  # if it fails to find any info (because we're doing an unparsable folder (like the TV root dir) it will throw an exception, which we want to ignore
             parse_result = np.parse(dirName)
-        except: #ignore the exception, because we kind of expected it, but create parse_result anyway so we can perform a check on it.
+        except:  # ignore the exception, because we kind of expected it, but create parse_result anyway so we can perform a check on it.
             parse_result = False
 
 
-        search_sql = "SELECT tv_episodes.indexerid, history.resource FROM tv_episodes INNER JOIN history ON history.showid=tv_episodes.showid" #This part is always the same
+        search_sql = "SELECT tv_episodes.indexerid, history.resource FROM tv_episodes INNER JOIN history ON history.showid=tv_episodes.showid"  # This part is always the same
         search_sql += " WHERE history.season=tv_episodes.season and history.episode=tv_episodes.episode"
-        #If we find a showid, a season number, and one or more episode numbers then we need to use those in the query
+        # If we find a showid, a season number, and one or more episode numbers then we need to use those in the query
         if parse_result and (parse_result.show.indexerid and parse_result.episode_numbers and parse_result.season_number):
             search_sql += " and tv_episodes.showid = '" + str(parse_result.show.indexerid) + "' and tv_episodes.season = '" + str(parse_result.season_number) + "' and tv_episodes.episode = '" + str(parse_result.episode_numbers[0]) + "'"
 
@@ -522,7 +522,7 @@ def already_postprocessed(dirName, videofile, force, result):
         search_sql += " and history.resource LIKE ?"
         sqlResult = myDB.select(search_sql, [u'%' + videofile])
         if sqlResult:
-            #result.output += logHelper(u"You're trying to post process a video that's already been processed, skipping", logger.DEBUG)
+            # result.output += logHelper(u"You're trying to post process a video that's already been processed, skipping", logger.DEBUG)
             return True
 
     return False
diff --git a/sickbeard/providers/__init__.py b/sickbeard/providers/__init__.py
index 781f76169..8770dd8b4 100644
--- a/sickbeard/providers/__init__.py
+++ b/sickbeard/providers/__init__.py
@@ -228,7 +228,7 @@ def makeTorrentRssProvider(configString):
 
 
 def getDefaultNewznabProviders():
-    #name|url|key|catIDs|enabled|search_mode|search_fallback|enable_daily|enable_backlog
+    # name|url|key|catIDs|enabled|search_mode|search_fallback|enable_daily|enable_backlog
     return 'NZB.Cat|https://nzb.cat/||5030,5040,5010|0|eponly|1|1|1!!!' + \
            'NZBGeek|https://api.nzbgeek.info/||5030,5040|0|eponly|0|0|0!!!' + \
            'NZBs.org|https://nzbs.org/||5030,5040|0|eponly|0|0|0!!!' + \
diff --git a/sickbeard/providers/alpharatio.py b/sickbeard/providers/alpharatio.py
index c6d6a8d09..529bc5f74 100644
--- a/sickbeard/providers/alpharatio.py
+++ b/sickbeard/providers/alpharatio.py
@@ -101,7 +101,7 @@ class AlphaRatioProvider(generic.TorrentProvider):
                         torrent_table = html.find('table', attrs={'id': 'torrent_table'})
                         torrent_rows = torrent_table.find_all('tr') if torrent_table else []
 
-                        #Continue only if one Release is found
+                        # Continue only if one Release is found
                         if len(torrent_rows) < 2:
                             logger.log(u"Data returned from provider does not contain any torrents", logger.DEBUG)
                             continue
@@ -116,7 +116,7 @@ class AlphaRatioProvider(generic.TorrentProvider):
                                 download_url = self.urls['download'] % (url['href'])
                                 seeders = cells[len(cells)-2].contents[0]
                                 leechers = cells[len(cells)-1].contents[0]
-                                #FIXME
+                                # FIXME
                                 size = -1
                             except (AttributeError, TypeError):
                                 continue
@@ -124,7 +124,7 @@ class AlphaRatioProvider(generic.TorrentProvider):
                             if not all([title, download_url]):
                                 continue
 
-                            #Filter unseeded torrent
+                            # Filter unseeded torrent
                             if seeders < self.minseed or leechers < self.minleech:
                                 if mode != 'RSS':
                                     logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG)
@@ -139,7 +139,7 @@ class AlphaRatioProvider(generic.TorrentProvider):
                 except Exception, e:
                     logger.log(u"Failed parsing provider. Traceback: %s" % traceback.format_exc(), logger.WARNING)
 
-            #For each search mode sort all the items by seeders if available
+            # For each search mode sort all the items by seeders if available
             items[mode].sort(key=lambda tup: tup[3], reverse=True)
 
             results += items[mode]
diff --git a/sickbeard/providers/animenzb.py b/sickbeard/providers/animenzb.py
index bed7f6872..dfeece3eb 100644
--- a/sickbeard/providers/animenzb.py
+++ b/sickbeard/providers/animenzb.py
@@ -78,7 +78,7 @@ class animenzb(generic.NZBProvider):
                 results.append(curItem)
                 logger.log(u"Found result: %s " % title, logger.DEBUG)
 
-        #For each search mode sort all the items by seeders if available if available
+        # For each search mode sort all the items by seeders if available if available
         results.sort(key=lambda tup: tup[0], reverse=True)
 
         return results
diff --git a/sickbeard/providers/bitcannon.py b/sickbeard/providers/bitcannon.py
index d5feddffd..e6744d056 100644
--- a/sickbeard/providers/bitcannon.py
+++ b/sickbeard/providers/bitcannon.py
@@ -76,7 +76,7 @@ class BitCannonProvider(generic.TorrentProvider):
                     leechers = swarm.get(u'Leechers', 0)
                     size = item.get(u'Size', -1)
 
-                    #Filter unseeded torrent
+                    # Filter unseeded torrent
                     if seeders < self.minseed or leechers < self.minleech:
                         if mode != 'RSS':
                             logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG)
@@ -91,7 +91,7 @@ class BitCannonProvider(generic.TorrentProvider):
 
                     items[mode].append(item)
 
-            #For each search mode sort all the items by seeders if available
+            # For each search mode sort all the items by seeders if available
             items[mode].sort(key=lambda tup: tup[3], reverse=True)
 
             results += items[mode]
@@ -112,7 +112,7 @@ class BitCannonCache(tvcache.TVCache):
 
     def _getRSSData(self):
         return {'entries': []}
-        #search_strings = {'RSS': ['']}
-        #return {'entries': self.provider._doSearch(search_strings)}
+        # search_strings = {'RSS': ['']}
+        # return {'entries': self.provider._doSearch(search_strings)}
 
 provider = BitCannonProvider()
diff --git a/sickbeard/providers/bitsoup.py b/sickbeard/providers/bitsoup.py
index 0867cacb0..c49849025 100644
--- a/sickbeard/providers/bitsoup.py
+++ b/sickbeard/providers/bitsoup.py
@@ -106,7 +106,7 @@ class BitSoupProvider(generic.TorrentProvider):
                         torrent_table = html.find('table', attrs={'class': 'koptekst'})
                         torrent_rows = torrent_table.find_all('tr') if torrent_table else []
 
-                        #Continue only if one Release is found
+                        # Continue only if one Release is found
                         if len(torrent_rows) < 2:
                             logger.log(u"Data returned from provider does not contain any torrents", logger.DEBUG)
                             continue
@@ -121,7 +121,7 @@ class BitSoupProvider(generic.TorrentProvider):
                                 title = link.getText()
                                 seeders = int(cells[10].getText())
                                 leechers = int(cells[11].getText())
-                                #FIXME
+                                # FIXME
                                 size = -1
                             except (AttributeError, TypeError):
                                 continue
@@ -129,7 +129,7 @@ class BitSoupProvider(generic.TorrentProvider):
                             if not all([title, download_url]):
                                 continue
 
-                                #Filter unseeded torrent
+                                # Filter unseeded torrent
                             if seeders < self.minseed or leechers < self.minleech:
                                 if mode != 'RSS':
                                     logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG)
@@ -144,7 +144,7 @@ class BitSoupProvider(generic.TorrentProvider):
                 except Exception, e:
                     logger.log(u"Failed parsing provider. Traceback: %s" % traceback.format_exc(), logger.WARNING)
 
-            #For each search mode sort all the items by seeders if available
+            # For each search mode sort all the items by seeders if available
             items[mode].sort(key=lambda tup: tup[3], reverse=True)
 
             results += items[mode]
diff --git a/sickbeard/providers/bluetigers.py b/sickbeard/providers/bluetigers.py
index 98039041a..e28361ffd 100644
--- a/sickbeard/providers/bluetigers.py
+++ b/sickbeard/providers/bluetigers.py
@@ -113,7 +113,7 @@ class BLUETIGERSProvider(generic.TorrentProvider):
                                 title = link.text
                                 download_url = self.urls['base_url'] + "/" + link['href']
                                 download_url = download_url.replace("torrents-details", "download")
-                                #FIXME
+                                # FIXME
                                 size = -1
                                 seeders = 1
                                 leechers = 0
@@ -121,8 +121,8 @@ class BLUETIGERSProvider(generic.TorrentProvider):
                                 if not title or not download_url:
                                     continue
 
-                                #Filter unseeded torrent
-                                #if seeders < self.minseed or leechers < self.minleech:
+                                # Filter unseeded torrent
+                                # if seeders < self.minseed or leechers < self.minleech:
                                 #    if mode != 'RSS':
                                 #        logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG)
                                 #    continue
@@ -136,7 +136,7 @@ class BLUETIGERSProvider(generic.TorrentProvider):
                 except Exception, e:
                     logger.log(u"Failed parsing provider. Traceback: %s" % traceback.format_exc(), logger.ERROR)
 
-            #For each search mode sort all the items by seeders if available
+            # For each search mode sort all the items by seeders if available
             items[mode].sort(key=lambda tup: tup[3], reverse=True)
 
             results += items[mode]
diff --git a/sickbeard/providers/btdigg.py b/sickbeard/providers/btdigg.py
index 648f8612c..21b7bab46 100644
--- a/sickbeard/providers/btdigg.py
+++ b/sickbeard/providers/btdigg.py
@@ -1,7 +1,7 @@
 # Author: Jodi Jones <venom@gen-x.co.nz>
 # URL: http://code.google.com/p/sickbeard/
 #
-#Ported to sickrage by: matigonkas
+# Ported to sickrage by: matigonkas
 #
 # This file is part of SickRage.
 #
@@ -66,15 +66,15 @@ class BTDIGGProvider(generic.TorrentProvider):
                         title = torrent['name']
                         download_url = torrent['magnet']
                         size = torrent['size']
-                        #FIXME
+                        # FIXME
                         seeders = 1
                         leechers = 0
 
                         if not all([title, download_url]):
                             continue
 
-                        #Filter unseeded torrent
-                        #if seeders < self.minseed or leechers < self.minleech:
+                        # Filter unseeded torrent
+                        # if seeders < self.minseed or leechers < self.minleech:
                         #    if mode != 'RSS':
                         #        logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG)
                         #    continue
@@ -85,7 +85,7 @@ class BTDIGGProvider(generic.TorrentProvider):
 
                         items[mode].append(item)
 
-            #For each search mode sort all the items by seeders if available
+            # For each search mode sort all the items by seeders if available
             items[mode].sort(key=lambda tup: tup[3], reverse=True)
 
             results += items[mode]
diff --git a/sickbeard/providers/btn.py b/sickbeard/providers/btn.py
index 6647c3816..e055388d1 100644
--- a/sickbeard/providers/btn.py
+++ b/sickbeard/providers/btn.py
@@ -128,7 +128,7 @@ class BTNProvider(generic.TorrentProvider):
                     logger.log(u"Found result: %s " % title, logger.DEBUG)
                     results.append(torrent_info)
 
-        #FIXME SORT RESULTS
+        # FIXME SORT RESULTS
         return results
 
     def _api_call(self, apikey, params={}, results_per_page=1000, offset=0):
diff --git a/sickbeard/providers/cpasbien.py b/sickbeard/providers/cpasbien.py
index 7d80b003f..794430e74 100644
--- a/sickbeard/providers/cpasbien.py
+++ b/sickbeard/providers/cpasbien.py
@@ -85,14 +85,14 @@ class CpasbienProvider(generic.TorrentProvider):
                                 title = link.text.lower().strip()
                                 pageURL = link['href']
 
-                                #downloadTorrentLink = torrentSoup.find("a", title.startswith('Cliquer'))
+                                # downloadTorrentLink = torrentSoup.find("a", title.startswith('Cliquer'))
                                 tmp = pageURL.split('/')[-1].replace('.html', '.torrent')
 
                                 downloadTorrentLink = ('http://www.cpasbien.io/telechargement/%s' % tmp)
 
                                 if downloadTorrentLink:
                                     download_url = downloadTorrentLink
-                                    #FIXME
+                                    # FIXME
                                     size = -1
                                     seeders = 1
                                     leechers = 0
@@ -112,7 +112,7 @@ class CpasbienProvider(generic.TorrentProvider):
                 except Exception, e:
                     logger.log(u"Failed parsing provider. Traceback: %s" % traceback.format_exc(), logger.ERROR)
 
-            #For each search mode sort all the items by seeders if available
+            # For each search mode sort all the items by seeders if available
             items[mode].sort(key=lambda tup: tup[3], reverse=True)
 
             results += items[mode]
@@ -130,7 +130,7 @@ class CpasbienCache(tvcache.TVCache):
         self.minTime = 30
 
     def _getRSSData(self):
-        #search_strings = {'RSS': ['']}
+        # search_strings = {'RSS': ['']}
         return {'entries': {}}
 
 provider = CpasbienProvider()
diff --git a/sickbeard/providers/extratorrent.py b/sickbeard/providers/extratorrent.py
index e2a0b51de..f6aaa1c2b 100644
--- a/sickbeard/providers/extratorrent.py
+++ b/sickbeard/providers/extratorrent.py
@@ -101,7 +101,7 @@ class ExtraTorrentProvider(generic.TorrentProvider):
                         if not all([title, download_url]):
                             continue
 
-                            #Filter unseeded torrent
+                            # Filter unseeded torrent
                         if seeders < self.minseed or leechers < self.minleech:
                             if mode != 'RSS':
                                 logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG)
@@ -116,7 +116,7 @@ class ExtraTorrentProvider(generic.TorrentProvider):
                 except (AttributeError, TypeError, KeyError, ValueError):
                     logger.log(u"Failed parsing provider. Traceback: %r" % traceback.format_exc(), logger.ERROR)
 
-            #For each search mode sort all the items by seeders if available
+            # For each search mode sort all the items by seeders if available
             items[mode].sort(key=lambda tup: tup[3], reverse=True)
 
             results += items[mode]
diff --git a/sickbeard/providers/fnt.py b/sickbeard/providers/fnt.py
index 4d1549643..ab676c581 100644
--- a/sickbeard/providers/fnt.py
+++ b/sickbeard/providers/fnt.py
@@ -127,7 +127,7 @@ class FNTProvider(generic.TorrentProvider):
                                         detailseedleech = link['mtcontent']
                                         seeders = int(detailseedleech.split("<font color='#00b72e'>")[1].split("</font>")[0])
                                         leechers = int(detailseedleech.split("<font color='red'>")[1].split("</font>")[0])
-                                        #FIXME
+                                        # FIXME
                                         size = -1
                                     except Exception:
                                         logger.log(u"Unable to parse torrent id & seeders & leechers. Traceback: %s " % traceback.format_exc(), logger.DEBUG)
@@ -136,7 +136,7 @@ class FNTProvider(generic.TorrentProvider):
                                     if not all([title, download_url]):
                                         continue
 
-                                    #Filter unseeded torrent
+                                    # Filter unseeded torrent
                                     if seeders < self.minseed or leechers < self.minleech:
                                         if mode != 'RSS':
                                             logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG)
@@ -151,7 +151,7 @@ class FNTProvider(generic.TorrentProvider):
                 except Exception, e:
                     logger.log(u"Failed parsing provider. Traceback: %s" % traceback.format_exc(), logger.ERROR)
 
-            #For each search mode sort all the items by seeders if available
+            # For each search mode sort all the items by seeders if available
             items[mode].sort(key=lambda tup: tup[3], reverse=True)
 
             results += items[mode]
diff --git a/sickbeard/providers/frenchtorrentdb.py b/sickbeard/providers/frenchtorrentdb.py
index 90e1e2e00..9cf7c5882 100644
--- a/sickbeard/providers/frenchtorrentdb.py
+++ b/sickbeard/providers/frenchtorrentdb.py
@@ -152,7 +152,7 @@ class FrenchTorrentDBProvider(generic.TorrentProvider):
                         for row in rows:
                             link = row.find("a", title=True)
                             title = link['title']
-                            #FIXME
+                            # FIXME
                             size = -1
                             seeders = 1
                             leechers = 0
@@ -166,8 +166,8 @@ class FrenchTorrentDBProvider(generic.TorrentProvider):
                                 if not all([title, download_url]):
                                     continue
 
-                                #Filter unseeded torrent
-                                #if seeders < self.minseed or leechers < self.minleech:
+                                # Filter unseeded torrent
+                                # if seeders < self.minseed or leechers < self.minleech:
                                 #    if mode != 'RSS':
                                 #        logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG)
                                 #    continue
@@ -178,7 +178,7 @@ class FrenchTorrentDBProvider(generic.TorrentProvider):
 
                                 items[mode].append(item)
 
-            #For each search mode sort all the items by seeders if available
+            # For each search mode sort all the items by seeders if available
             items[mode].sort(key=lambda tup: tup[3], reverse=True)
 
             results += items[mode]
diff --git a/sickbeard/providers/freshontv.py b/sickbeard/providers/freshontv.py
index ec355f82f..c84907986 100644
--- a/sickbeard/providers/freshontv.py
+++ b/sickbeard/providers/freshontv.py
@@ -135,7 +135,7 @@ class FreshOnTVProvider(generic.TorrentProvider):
                 try:
                     with BS4Parser(init_html, features=["html5lib", "permissive"]) as init_soup:
 
-                        #Check to see if there is more than 1 page of results
+                        # Check to see if there is more than 1 page of results
                         pager = init_soup.find('div', {'class': 'pager'})
                         if pager:
                             page_links = pager.find_all('a', href=True)
@@ -150,10 +150,10 @@ class FreshOnTVProvider(generic.TorrentProvider):
                                     if page_int > max_page_number:
                                         max_page_number = page_int
 
-                        #limit page number to 15 just in case something goes wrong
+                        # limit page number to 15 just in case something goes wrong
                         if max_page_number > 15:
                             max_page_number = 15
-                        #limit RSS search
+                        # limit RSS search
                         if max_page_number > 3 and mode is 'RSS':
                             max_page_number = 3
                 except:
@@ -163,13 +163,13 @@ class FreshOnTVProvider(generic.TorrentProvider):
                 data_response_list = []
                 data_response_list.append(init_html)
 
-                #Freshon starts counting pages from zero, even though it displays numbers from 1
+                # Freshon starts counting pages from zero, even though it displays numbers from 1
                 if max_page_number > 1:
                     for i in range(1, max_page_number):
 
                         time.sleep(1)
                         page_searchURL = searchURL + '&page=' + str(i)
-                        #'.log(u"Search string: " + page_searchURL, logger.DEBUG)
+                        # '.log(u"Search string: " + page_searchURL, logger.DEBUG)
                         page_html = self.getURL(page_searchURL)
 
                         if not page_html:
@@ -185,14 +185,14 @@ class FreshOnTVProvider(generic.TorrentProvider):
 
                             torrent_rows = html.findAll("tr", {"class": re.compile('torrent_[0-9]*')})
 
-                            #Continue only if a Release is found
+                            # Continue only if a Release is found
                             if len(torrent_rows) == 0:
                                 logger.log(u"Data returned from provider does not contain any torrents", logger.DEBUG)
                                 continue
 
                             for individual_torrent in torrent_rows:
 
-                                #skip if torrent has been nuked due to poor quality
+                                # skip if torrent has been nuked due to poor quality
                                 if individual_torrent.find('img', alt='Nuked') != None:
                                     continue
 
@@ -208,7 +208,7 @@ class FreshOnTVProvider(generic.TorrentProvider):
                                     download_url = self.urls['download'] % (str(torrent_id))
                                     seeders = tryInt(individual_torrent.find('td', {'class': 'table_seeders'}).find('span').text.strip(), 1)
                                     leechers = tryInt(individual_torrent.find('td', {'class': 'table_leechers'}).find('a').text.strip(), 0)
-                                    #FIXME
+                                    # FIXME
                                     size = -1
                                 except Exception:
                                     continue
@@ -216,7 +216,7 @@ class FreshOnTVProvider(generic.TorrentProvider):
                                 if not all([title, download_url]):
                                     continue
 
-                                #Filter unseeded torrent
+                                # Filter unseeded torrent
                                 if seeders < self.minseed or leechers < self.minleech:
                                     if mode != 'RSS':
                                         logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG)
@@ -231,7 +231,7 @@ class FreshOnTVProvider(generic.TorrentProvider):
                 except Exception as e:
                     logger.log(u"Failed parsing provider. Traceback: %s" % traceback.format_exc(), logger.ERROR)
 
-            #For each search mode sort all the items by seeders if available
+            # For each search mode sort all the items by seeders if available
             items[mode].sort(key=lambda tup: tup[3], reverse=True)
 
             results += items[mode]
diff --git a/sickbeard/providers/generic.py b/sickbeard/providers/generic.py
index cd37bc182..e6e076a82 100644
--- a/sickbeard/providers/generic.py
+++ b/sickbeard/providers/generic.py
@@ -604,7 +604,7 @@ class TorrentProvider(GenericProvider):
             elif ep_obj.show.anime:
                 ep_string = show_name + ' ' + "%d" % ep_obj.scene_absolute_number
             else:
-                ep_string = show_name + ' S%02d' % int(ep_obj.scene_season)  #1) showName.SXX
+                ep_string = show_name + ' S%02d' % int(ep_obj.scene_season)  # 1) showName.SXX
 
             search_string['Season'].append(ep_string.encode('utf-8').strip())
 
diff --git a/sickbeard/providers/hdbits.py b/sickbeard/providers/hdbits.py
index a4eb0acf2..bbbdb2a80 100644
--- a/sickbeard/providers/hdbits.py
+++ b/sickbeard/providers/hdbits.py
@@ -87,7 +87,7 @@ class HDBitsProvider(generic.TorrentProvider):
 
     def _doSearch(self, search_params, search_mode='eponly', epcount=0, age=0, epObj=None):
 
-        #FIXME
+        # FIXME
         results = []
 
         logger.log(u"Search string: %s" %  search_params, logger.DEBUG)
@@ -107,7 +107,7 @@ class HDBitsProvider(generic.TorrentProvider):
 
             for item in items:
                 results.append(item)
-        #FIXME SORTING
+        # FIXME SORTING
         return results
 
     def findPropers(self, search_date=None):
diff --git a/sickbeard/providers/hdspace.py b/sickbeard/providers/hdspace.py
index fe6d82b8b..d7da35202 100644
--- a/sickbeard/providers/hdspace.py
+++ b/sickbeard/providers/hdspace.py
@@ -133,7 +133,7 @@ class HDSpaceProvider(generic.TorrentProvider):
                 # Skip column headers
                 for result in torrents[1:]:
                     if len(result.contents) < 10:
-                        #skip extraneous rows at the end
+                        # skip extraneous rows at the end
                         continue
 
                     try:
@@ -147,7 +147,7 @@ class HDSpaceProvider(generic.TorrentProvider):
                         if not all([title, download_url]):
                             continue
 
-                        #Filter unseeded torrent
+                        # Filter unseeded torrent
                         if seeders < self.minseed or leechers < self.minleech:
                             if mode != 'RSS':
                                 logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG)
@@ -162,7 +162,7 @@ class HDSpaceProvider(generic.TorrentProvider):
                     except (AttributeError, TypeError, KeyError, ValueError):
                         continue
 
-            #For each search mode sort all the items by seeders if available
+            # For each search mode sort all the items by seeders if available
             items[mode].sort(key=lambda tup: tup[3], reverse=True)
 
             results += items[mode]
diff --git a/sickbeard/providers/hdtorrents.py b/sickbeard/providers/hdtorrents.py
index 357e207e9..7eb9af279 100644
--- a/sickbeard/providers/hdtorrents.py
+++ b/sickbeard/providers/hdtorrents.py
@@ -179,7 +179,7 @@ class HDTorrentsProvider(generic.TorrentProvider):
                             if not all([title, download_url]):
                                 continue
 
-                            #Filter unseeded torrent
+                            # Filter unseeded torrent
                             if seeders < self.minseed or leechers < self.minleech:
                                 if mode != 'RSS':
                                     logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG)
@@ -194,7 +194,7 @@ class HDTorrentsProvider(generic.TorrentProvider):
                         except (AttributeError, TypeError, KeyError, ValueError):
                             continue
 
-            #For each search mode sort all the items by seeders if available
+            # For each search mode sort all the items by seeders if available
             items[mode].sort(key=lambda tup: tup[3], reverse=True)
 
             results += items[mode]
diff --git a/sickbeard/providers/hounddawgs.py b/sickbeard/providers/hounddawgs.py
index 6c9f18c1a..24d0a1acb 100644
--- a/sickbeard/providers/hounddawgs.py
+++ b/sickbeard/providers/hounddawgs.py
@@ -132,10 +132,10 @@ class HoundDawgsProvider(generic.TorrentProvider):
                             allAs = (torrent[1]).find_all('a')
 
                             try:
-                                #link = self.urls['base_url'] + allAs[2].attrs['href']
-                                #url = result.find('td', attrs={'class': 'quickdownload'}).find('a')
+                                # link = self.urls['base_url'] + allAs[2].attrs['href']
+                                # url = result.find('td', attrs={'class': 'quickdownload'}).find('a')
                                 title = allAs[2].string
-                                #Trimming title so accepted by scene check(Feature has been rewuestet i forum)
+                                # Trimming title so accepted by scene check(Feature has been rewuestet i forum)
                                 title = title.replace("custom.", "")
                                 title = title.replace("CUSTOM.", "")
                                 title = title.replace("Custom.", "")
@@ -147,7 +147,7 @@ class HoundDawgsProvider(generic.TorrentProvider):
                                 title = title.replace("Subs.", "")
 
                                 download_url = self.urls['base_url']+allAs[0].attrs['href']
-                                #FIXME
+                                # FIXME
                                 size = -1
                                 seeders = 1
                                 leechers = 0
@@ -158,8 +158,8 @@ class HoundDawgsProvider(generic.TorrentProvider):
                             if not title or not download_url:
                                 continue
 
-                            #Filter unseeded torrent
-                            #if seeders < self.minseed or leechers < self.minleech:
+                            # Filter unseeded torrent
+                            # if seeders < self.minseed or leechers < self.minleech:
                             #    if mode != 'RSS':
                             #        logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG)
                             #    continue
@@ -173,7 +173,7 @@ class HoundDawgsProvider(generic.TorrentProvider):
                 except Exception, e:
                     logger.log(u"Failed parsing provider. Traceback: %s" % traceback.format_exc(), logger.ERROR)
 
-            #For each search mode sort all the items by seeders if available
+            # For each search mode sort all the items by seeders if available
             items[mode].sort(key=lambda tup: tup[3], reverse=True)
 
             results += items[mode]
diff --git a/sickbeard/providers/iptorrents.py b/sickbeard/providers/iptorrents.py
index de5774886..b644a230e 100644
--- a/sickbeard/providers/iptorrents.py
+++ b/sickbeard/providers/iptorrents.py
@@ -119,7 +119,7 @@ class IPTorrentsProvider(generic.TorrentProvider):
                         torrent_table = html.find('table', attrs={'class': 'torrents'})
                         torrents = torrent_table.find_all('tr') if torrent_table else []
 
-                        #Continue only if one Release is found
+                        # Continue only if one Release is found
                         if len(torrents) < 2:
                             logger.log(u"Data returned from provider does not contain any torrents", logger.DEBUG)
                             continue
@@ -137,7 +137,7 @@ class IPTorrentsProvider(generic.TorrentProvider):
                             if not all([title, download_url]):
                                 continue
 
-                            #Filter unseeded torrent
+                            # Filter unseeded torrent
                             if seeders < self.minseed or leechers < self.minleech:
                                 if mode != 'RSS':
                                     logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG)
@@ -152,7 +152,7 @@ class IPTorrentsProvider(generic.TorrentProvider):
                 except Exception, e:
                     logger.log(u"Failed parsing provider. Error: %r" % ex(e), logger.ERROR)
 
-            #For each search mode sort all the items by seeders if available
+            # For each search mode sort all the items by seeders if available
             items[mode].sort(key=lambda tup: tup[3], reverse=True)
 
             results += items[mode]
diff --git a/sickbeard/providers/kat.py b/sickbeard/providers/kat.py
index eb76ff76a..af650aad2 100755
--- a/sickbeard/providers/kat.py
+++ b/sickbeard/providers/kat.py
@@ -89,7 +89,7 @@ class KATProvider(generic.TorrentProvider):
                     searchURL = self.urls['search'] % url_fmt_string + '?' + urlencode(self.search_params)
                     logger.log(u"Search URL: %s" % searchURL, logger.DEBUG)
                     data = self.getURL(searchURL)
-                    #data = self.getURL(self.urls[('search', 'rss')[mode == 'RSS']], params=self.search_params)
+                    # data = self.getURL(self.urls[('search', 'rss')[mode == 'RSS']], params=self.search_params)
                     if not data:
                         logger.log("No data returned from provider", logger.DEBUG)
                         continue
@@ -130,7 +130,7 @@ class KATProvider(generic.TorrentProvider):
                             size = int(item['torrent:contentLength'])
 
                             info_hash = item['torrent:infoHash']
-                            #link = item['link']
+                            # link = item['link']
 
                         except (AttributeError, TypeError, KeyError):
                             continue
@@ -138,7 +138,7 @@ class KATProvider(generic.TorrentProvider):
                         if not all([title, download_url]):
                             continue
 
-                        #Filter unseeded torrent
+                        # Filter unseeded torrent
                         if seeders < self.minseed or leechers < self.minleech:
                             if mode != 'RSS':
                                 logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG)
@@ -158,7 +158,7 @@ class KATProvider(generic.TorrentProvider):
                 except Exception:
                     logger.log(u"Failed parsing provider. Traceback: %r" % traceback.format_exc(), logger.ERROR)
 
-            #For each search mode sort all the items by seeders if available
+            # For each search mode sort all the items by seeders if available
             items[mode].sort(key=lambda tup: tup[3], reverse=True)
 
             results += items[mode]
diff --git a/sickbeard/providers/libertalia.py b/sickbeard/providers/libertalia.py
index 6a7a86898..549523a0f 100644
--- a/sickbeard/providers/libertalia.py
+++ b/sickbeard/providers/libertalia.py
@@ -105,16 +105,16 @@ class LibertaliaProvider(generic.TorrentProvider):
                         rows = resultsTable.findAll("tr", {"class" : re.compile("torrent_row(.*)?")})
                         for row in rows:
 
-                            #bypass first row because title only
+                            # bypass first row because title only
                             columns = row.find('td', {"class" : "torrent_name"})
-                           # isvfclass = row.find('td', {"class" : "sprite-vf"})
-                            #isvostfrclass = row.find('td', {"class" : "sprite-vostfr"})
+                            # isvfclass = row.find('td', {"class" : "sprite-vf"})
+                            # isvostfrclass = row.find('td', {"class" : "sprite-vostfr"})
                             link = columns.find("a", href=re.compile("torrents"))
                             if link:
                                 title = link.text
-                                #recherched = searchURL.replace(".", "(.*)").replace(" ", "(.*)").replace("'", "(.*)")
+                                # recherched = searchURL.replace(".", "(.*)").replace(" ", "(.*)").replace("'", "(.*)")
                                 download_url = row.find("a", href=re.compile("torrent_pass"))['href']
-                                #FIXME
+                                # FIXME
                                 size = -1
                                 seeders = 1
                                 leechers = 0
@@ -122,8 +122,8 @@ class LibertaliaProvider(generic.TorrentProvider):
                                 if not all([title, download_url]):
                                     continue
 
-                                #Filter unseeded torrent
-                                #if seeders < self.minseed or leechers < self.minleech:
+                                # Filter unseeded torrent
+                                # if seeders < self.minseed or leechers < self.minleech:
                                 #    if mode != 'RSS':
                                 #        logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG)
                                 #    continue
@@ -134,7 +134,7 @@ class LibertaliaProvider(generic.TorrentProvider):
 
                                 items[mode].append(item)
 
-            #For each search mode sort all the items by seeders if available
+            # For each search mode sort all the items by seeders if available
             items[mode].sort(key=lambda tup: tup[3], reverse=True)
 
             results += items[mode]
diff --git a/sickbeard/providers/morethantv.py b/sickbeard/providers/morethantv.py
index a4e55cbcd..d6034c8ef 100644
--- a/sickbeard/providers/morethantv.py
+++ b/sickbeard/providers/morethantv.py
@@ -125,7 +125,7 @@ class MoreThanTVProvider(generic.TorrentProvider):
                         torrent_table = html.find('table', attrs={'class': 'torrent_table'})
                         torrent_rows = torrent_table.findChildren('tr') if torrent_table else []
 
-                        #Continue only if one Release is found
+                        # Continue only if one Release is found
                         if len(torrent_rows) < 2:
                             logger.log(u"Data returned from provider does not contain any torrents", logger.DEBUG)
                             continue
@@ -135,7 +135,7 @@ class MoreThanTVProvider(generic.TorrentProvider):
                             cells = result.findChildren('td')
                             link = cells[1].find('a', attrs={'title': 'Download'})
 
-                            #skip if torrent has been nuked due to poor quality
+                            # skip if torrent has been nuked due to poor quality
                             if cells[1].find('img', alt='Nuked') != None:
                                 continue
 
@@ -163,7 +163,7 @@ class MoreThanTVProvider(generic.TorrentProvider):
                             if not all([title, download_url]):
                                 continue
 
-                            #Filter unseeded torrent
+                            # Filter unseeded torrent
                             if seeders < self.minseed or leechers < self.minleech:
                                 if mode != 'RSS':
                                     logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG)
@@ -178,7 +178,7 @@ class MoreThanTVProvider(generic.TorrentProvider):
                 except Exception, e:
                     logger.log(u"Failed parsing provider. Traceback: %s" % traceback.format_exc(), logger.ERROR)
 
-            #For each search mode sort all the items by seeders if available
+            # For each search mode sort all the items by seeders if available
             items[mode].sort(key=lambda tup: tup[3], reverse=True)
 
             results += items[mode]
diff --git a/sickbeard/providers/newpct.py b/sickbeard/providers/newpct.py
index 842b8f311..dbc410f91 100644
--- a/sickbeard/providers/newpct.py
+++ b/sickbeard/providers/newpct.py
@@ -82,7 +82,7 @@ class newpctProvider(generic.TorrentProvider):
 
         lang_info = '' if not epObj or not epObj.show else epObj.show.lang
 
-        #Only search if user conditions are true
+        # Only search if user conditions are true
         if self.onlyspasearch and lang_info != 'es':
             logger.log(u"Show info is not spanish, skipping provider search", logger.DEBUG)
             return results
@@ -156,7 +156,7 @@ class newpctProvider(generic.TorrentProvider):
 
         title = title.replace('Descargar ', '')
 
-        #Quality
+        # Quality
         title = title.replace('[HDTV]', '[720p HDTV x264]')
         title = title.replace('[HDTV 720p AC3 5.1]', '[720p HDTV x264]')
         title = title.replace('[HDTV 1080p AC3 5.1]', '[1080p HDTV x264]')
diff --git a/sickbeard/providers/newznab.py b/sickbeard/providers/newznab.py
index 6ba2e0474..feaf5e860 100644
--- a/sickbeard/providers/newznab.py
+++ b/sickbeard/providers/newznab.py
@@ -200,7 +200,7 @@ class NewznabProvider(generic.NZBProvider):
 
         if self.needs_auth and not self.key:
             logger.log(u"Invalid api key. Check your settings", logger.WARNING)
-            #raise AuthException("Your authentication credentials for " + self.name + " are missing, check your config.")
+            # raise AuthException("Your authentication credentials for " + self.name + " are missing, check your config.")
 
         return True
 
diff --git a/sickbeard/providers/nextgen.py b/sickbeard/providers/nextgen.py
index 55f6413a8..b9707cac4 100644
--- a/sickbeard/providers/nextgen.py
+++ b/sickbeard/providers/nextgen.py
@@ -148,8 +148,8 @@ class NextGenProvider(generic.TorrentProvider):
 
                         entries = entries_std + entries_sticky
 
-                        #Xirg STANDARD TORRENTS
-                        #Continue only if one Release is found
+                        # Xirg STANDARD TORRENTS
+                        # Continue only if one Release is found
                         if not entries:
                             logger.log(u"Data returned from provider does not contain any torrents", logger.DEBUG)
                             continue
@@ -172,7 +172,7 @@ class NextGenProvider(generic.TorrentProvider):
                             if not all([title, download_url]):
                                 continue
 
-                            #Filter unseeded torrent
+                            # Filter unseeded torrent
                             if seeders < self.minseed or leechers < self.minleech:
                                 if mode != 'RSS':
                                     logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG)
@@ -187,7 +187,7 @@ class NextGenProvider(generic.TorrentProvider):
                 except Exception, e:
                     logger.log(u"Failed parsing provider. Traceback: %s" % traceback.format_exc(), logger.ERROR)
 
-            #For each search mode sort all the items by seeders if available
+            # For each search mode sort all the items by seeders if available
             items[mode].sort(key=lambda tup: tup[3], reverse=True)
 
             results += items[mode]
diff --git a/sickbeard/providers/pretome.py b/sickbeard/providers/pretome.py
index dda59e612..1ee425f28 100644
--- a/sickbeard/providers/pretome.py
+++ b/sickbeard/providers/pretome.py
@@ -106,7 +106,7 @@ class PretomeProvider(generic.TorrentProvider):
 
                 try:
                     with BS4Parser(data, features=["html5lib", "permissive"]) as html:
-                        #Continue only if one Release is found
+                        # Continue only if one Release is found
                         empty = html.find('h2', text="No .torrents fit this filter criteria")
                         if empty:
                             logger.log(u"Data returned from provider does not contain any torrents", logger.DEBUG)
@@ -149,7 +149,7 @@ class PretomeProvider(generic.TorrentProvider):
                             if not all([title, download_url]):
                                 continue
 
-                            #Filter unseeded torrent
+                            # Filter unseeded torrent
                             if seeders < self.minseed or leechers < self.minleech:
                                 if mode != 'RSS':
                                     logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG)
@@ -164,7 +164,7 @@ class PretomeProvider(generic.TorrentProvider):
                 except Exception, e:
                     logger.log(u"Failed parsing provider. Traceback: %s" % traceback.format_exc(), logger.ERROR)
 
-            #For each search mode sort all the items by seeders if available
+            # For each search mode sort all the items by seeders if available
             items[mode].sort(key=lambda tup: tup[3], reverse=True)
 
             results += items[mode]
diff --git a/sickbeard/providers/rarbg.py b/sickbeard/providers/rarbg.py
index 149f23519..a671b00d0 100644
--- a/sickbeard/providers/rarbg.py
+++ b/sickbeard/providers/rarbg.py
@@ -119,7 +119,7 @@ class RarbgProvider(generic.TorrentProvider):
             ep_indexerid = None
             ep_indexer = None
 
-        for mode in search_params.keys(): #Mode = RSS, Season, Episode
+        for mode in search_params.keys():  # Mode = RSS, Season, Episode
             logger.log(u"Search Mode: %s" % mode, logger.DEBUG)
             for search_string in search_params[mode]:
 
@@ -202,7 +202,7 @@ class RarbgProvider(generic.TorrentProvider):
                             searchURL = searchURL.replace(u'https', 'http')
                             continue
 
-                        #No error found break
+                        # No error found break
                         break
                     else:
                         logger.log(u"Retried 3 times without getting results", logger.DEBUG)
diff --git a/sickbeard/providers/scc.py b/sickbeard/providers/scc.py
index f59d9fc71..2b0f4cda3 100644
--- a/sickbeard/providers/scc.py
+++ b/sickbeard/providers/scc.py
@@ -114,7 +114,7 @@ class SCCProvider(generic.TorrentProvider):
                     torrent_table = html.find('table', attrs={'id': 'torrents-table'})
                     torrent_rows = torrent_table.find_all('tr') if torrent_table else []
 
-                    #Continue only if at least one Release is found
+                    # Continue only if at least one Release is found
                     if len(torrent_rows) < 2:
                         logger.log(u"Data returned from provider does not contain any torrents", logger.DEBUG)
                         continue
@@ -141,7 +141,7 @@ class SCCProvider(generic.TorrentProvider):
                         if not all([title, download_url]):
                             continue
 
-                        #Filter unseeded torrent
+                        # Filter unseeded torrent
                         if seeders < self.minseed or leechers < self.minleech:
                             if mode != 'RSS':
                                 logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG)
@@ -153,7 +153,7 @@ class SCCProvider(generic.TorrentProvider):
 
                         items[mode].append(item)
 
-            #For each search mode sort all the items by seeders if available
+            # For each search mode sort all the items by seeders if available
             items[mode].sort(key=lambda tup: tup[3], reverse=True)
 
             results += items[mode]
diff --git a/sickbeard/providers/scenetime.py b/sickbeard/providers/scenetime.py
index 3d50a0daa..2e89e7ee1 100644
--- a/sickbeard/providers/scenetime.py
+++ b/sickbeard/providers/scenetime.py
@@ -99,7 +99,7 @@ class SceneTimeProvider(generic.TorrentProvider):
                         torrent_table = html.select("#torrenttable table")
                         torrent_rows = torrent_table[0].select("tr") if torrent_table else []
 
-                        #Continue only if one Release is found
+                        # Continue only if one Release is found
                         if len(torrent_rows) < 2:
                             logger.log(u"Data returned from provider does not contain any torrents", logger.DEBUG)
                             continue
@@ -124,7 +124,7 @@ class SceneTimeProvider(generic.TorrentProvider):
 
                                 seeders = int(cells[labels.index('Seeders')].get_text())
                                 leechers = int(cells[labels.index('Leechers')].get_text())
-                                #FIXME
+                                # FIXME
                                 size = -1
 
                             except (AttributeError, TypeError):
@@ -133,7 +133,7 @@ class SceneTimeProvider(generic.TorrentProvider):
                             if not all([title, download_url]):
                                 continue
 
-                            #Filter unseeded torrent
+                            # Filter unseeded torrent
                             if seeders < self.minseed or leechers < self.minleech:
                                 if mode != 'RSS':
                                     logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG)
@@ -148,7 +148,7 @@ class SceneTimeProvider(generic.TorrentProvider):
                 except Exception, e:
                     logger.log(u"Failed parsing provider. Traceback: %s" % traceback.format_exc(), logger.ERROR)
 
-            #For each search mode sort all the items by seeders if available
+            # For each search mode sort all the items by seeders if available
             items[mode].sort(key=lambda tup: tup[3], reverse=True)
 
             results += items[mode]
diff --git a/sickbeard/providers/speedcd.py b/sickbeard/providers/speedcd.py
index ca93eba6c..2483b2af4 100644
--- a/sickbeard/providers/speedcd.py
+++ b/sickbeard/providers/speedcd.py
@@ -109,13 +109,13 @@ class SpeedCDProvider(generic.TorrentProvider):
                     download_url = self.urls['download'] % (torrent['id'])
                     seeders = int(torrent['seed'])
                     leechers = int(torrent['leech'])
-                    #FIXME
+                    # FIXME
                     size = -1
 
                     if not all([title, download_url]):
                         continue
 
-                    #Filter unseeded torrent
+                    # Filter unseeded torrent
                     if seeders < self.minseed or leechers < self.minleech:
                         if mode != 'RSS':
                             logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG)
@@ -127,7 +127,7 @@ class SpeedCDProvider(generic.TorrentProvider):
 
                     items[mode].append(item)
 
-            #For each search mode sort all the items by seeders if available
+            # For each search mode sort all the items by seeders if available
             items[mode].sort(key=lambda tup: tup[3], reverse=True)
 
             results += items[mode]
diff --git a/sickbeard/providers/strike.py b/sickbeard/providers/strike.py
index 0ee96b147..c22442b47 100644
--- a/sickbeard/providers/strike.py
+++ b/sickbeard/providers/strike.py
@@ -40,7 +40,7 @@ class STRIKEProvider(generic.TorrentProvider):
         results = []
         items = {'Season': [], 'Episode': [], 'RSS': []}
 
-        for mode in search_strings.keys(): #Mode = RSS, Season, Episode
+        for mode in search_strings.keys():  # Mode = RSS, Season, Episode
             logger.log(u"Search Mode: %s" % mode, logger.DEBUG)
             for search_string in search_strings[mode]:
 
@@ -66,7 +66,7 @@ class STRIKEProvider(generic.TorrentProvider):
                     if not all([title, download_url]):
                         continue
 
-                    #Filter unseeded torrent
+                    # Filter unseeded torrent
                     if seeders < self.minseed or leechers < self.minleech:
                         if mode != 'RSS':
                             logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG)
@@ -78,7 +78,7 @@ class STRIKEProvider(generic.TorrentProvider):
                     item = title, download_url, size, seeders, leechers
                     items[mode].append(item)
 
-            #For each search mode sort all the items by seeders if available
+            # For each search mode sort all the items by seeders if available
             items[mode].sort(key=lambda tup: tup[3], reverse=True)
 
             results += items[mode]
diff --git a/sickbeard/providers/t411.py b/sickbeard/providers/t411.py
index e1f10c646..030f46279 100644
--- a/sickbeard/providers/t411.py
+++ b/sickbeard/providers/t411.py
@@ -130,7 +130,7 @@ class T411Provider(generic.TorrentProvider):
                                 leechers = int(torrent['leechers'])
                                 verified = bool(torrent['isVerified'])
 
-                                #Filter unseeded torrent
+                                # Filter unseeded torrent
                                 if seeders < self.minseed or leechers < self.minleech:
                                     if mode != 'RSS':
                                         logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG)
@@ -154,7 +154,7 @@ class T411Provider(generic.TorrentProvider):
                     except Exception, e:
                         logger.log(u"Failed parsing provider. Traceback: %s" % traceback.format_exc(), logger.ERROR)
 
-            #For each search mode sort all the items by seeders if available if available
+            # For each search mode sort all the items by seeders if available if available
             items[mode].sort(key=lambda tup: tup[3], reverse=True)
 
             results += items[mode]
diff --git a/sickbeard/providers/thepiratebay.py b/sickbeard/providers/thepiratebay.py
index 6b90b5c5b..6eb4e10dc 100644
--- a/sickbeard/providers/thepiratebay.py
+++ b/sickbeard/providers/thepiratebay.py
@@ -84,7 +84,7 @@ class ThePirateBayProvider(generic.TorrentProvider):
                 searchURL = self.urls[('search', 'rss')[mode == 'RSS']] + '?' + urlencode(self.search_params)
                 logger.log(u"Search URL: %s" % searchURL, logger.DEBUG)
                 data = self.getURL(searchURL)
-                #data = self.getURL(self.urls[('search', 'rss')[mode == 'RSS']], params=self.search_params)
+                # data = self.getURL(self.urls[('search', 'rss')[mode == 'RSS']], params=self.search_params)
                 if not data:
                     continue
 
@@ -93,7 +93,7 @@ class ThePirateBayProvider(generic.TorrentProvider):
                 for torrent in matches:
                     title = torrent.group('title')
                     download_url = torrent.group('url')
-                    #id = int(torrent.group('id'))
+                    # id = int(torrent.group('id'))
                     size = self._convertSize(torrent.group('size'))
                     seeders = int(torrent.group('seeders'))
                     leechers = int(torrent.group('leechers'))
@@ -101,13 +101,13 @@ class ThePirateBayProvider(generic.TorrentProvider):
                     if not all([title, download_url]):
                         continue
 
-                    #Filter unseeded torrent
+                    # Filter unseeded torrent
                     if seeders < self.minseed or leechers < self.minleech:
                         if mode != 'RSS':
                             logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG)
                         continue
 
-                    #Accept Torrent only from Good People for every Episode Search
+                    # Accept Torrent only from Good People for every Episode Search
                     if self.confirmed and re.search(r'(VIP|Trusted|Helper|Moderator)', torrent.group(0)) is None:
                         if mode != 'RSS':
                             logger.log(u"Found result %s but that doesn't seem like a trusted result so I'm ignoring it" % title, logger.DEBUG)
@@ -119,7 +119,7 @@ class ThePirateBayProvider(generic.TorrentProvider):
 
                     items[mode].append(item)
 
-            #For each search mode sort all the items by seeders if available
+            # For each search mode sort all the items by seeders if available
             items[mode].sort(key=lambda tup: tup[3], reverse=True)
 
             results += items[mode]
diff --git a/sickbeard/providers/titansoftv.py b/sickbeard/providers/titansoftv.py
index 8e6d254c6..1ce3bd3a2 100644
--- a/sickbeard/providers/titansoftv.py
+++ b/sickbeard/providers/titansoftv.py
@@ -58,7 +58,7 @@ class TitansOfTVProvider(generic.TorrentProvider):
         return True
 
     def _doSearch(self, search_params, search_mode='eponly', epcount=0, age=0, epObj=None):
-        #FIXME ADD MODE
+        # FIXME ADD MODE
         self._checkAuth()
         results = []
         params = {}
@@ -88,7 +88,7 @@ class TitansOfTVProvider(generic.TorrentProvider):
                 title = parsedJSON['release_name']
                 id = parsedJSON['id']
                 download_url = self.download_url % (id, self.api_key)
-                #FIXME
+                # FIXME
                 size = -1
                 seeders = 1
                 leechers = 0
@@ -96,8 +96,8 @@ class TitansOfTVProvider(generic.TorrentProvider):
                 if not all([title, download_url]):
                     continue
 
-                #Filter unseeded torrent
-                #if seeders < self.minseed or leechers < self.minleech:
+                # Filter unseeded torrent
+                # if seeders < self.minseed or leechers < self.minleech:
                 #    if mode != 'RSS':
                 #        logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG)
                 #    continue
@@ -107,7 +107,7 @@ class TitansOfTVProvider(generic.TorrentProvider):
                 logger.log(u"Found result: %s " % title, logger.DEBUG)
                 results.append(result)
 
-        #FIXME SORTING
+        # FIXME SORTING
 
         return results
 
diff --git a/sickbeard/providers/tntvillage.py b/sickbeard/providers/tntvillage.py
index c62797543..9400508d0 100644
--- a/sickbeard/providers/tntvillage.py
+++ b/sickbeard/providers/tntvillage.py
@@ -322,7 +322,7 @@ class TNTVillageProvider(generic.TorrentProvider):
                             torrent_table = html.find('table', attrs={'class' : 'copyright'})
                             torrent_rows = torrent_table.find_all('tr') if torrent_table else []
 
-                            #Continue only if one Release is found
+                            # Continue only if one Release is found
                             if len(torrent_rows) < 3:
                                 logger.log(u"Data returned from provider does not contain any torrents", logger.DEBUG)
                                 last_page = 1
@@ -341,7 +341,7 @@ class TNTVillageProvider(generic.TorrentProvider):
                                     leechers = int(leechers.strip('[]'))
                                     seeders = result.find_all('td')[3].find_all('td')[2].text
                                     seeders = int(seeders.strip('[]'))
-                                    #FIXME
+                                    # FIXME
                                     size = -1
                                 except (AttributeError, TypeError):
                                     continue
@@ -380,7 +380,7 @@ class TNTVillageProvider(generic.TorrentProvider):
                                 if self._is_season_pack(title):
                                     title = re.sub(r'([Ee][\d{1,2}\-?]+)', '', title)
 
-                                #Filter unseeded torrent
+                                # Filter unseeded torrent
                                 if seeders < self.minseed or leechers < self.minleech:
                                     if mode != 'RSS':
                                         logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG)
@@ -395,7 +395,7 @@ class TNTVillageProvider(generic.TorrentProvider):
                     except Exception:
                         logger.log(u"Failed parsing provider. Traceback: %s" % traceback.format_exc(), logger.ERROR)
 
-                #For each search mode sort all the items by seeders if available if available
+                # For each search mode sort all the items by seeders if available if available
                 items[mode].sort(key=lambda tup: tup[3], reverse=True)
 
                 results += items[mode]
diff --git a/sickbeard/providers/tokyotoshokan.py b/sickbeard/providers/tokyotoshokan.py
index d1d909528..2f53b6941 100644
--- a/sickbeard/providers/tokyotoshokan.py
+++ b/sickbeard/providers/tokyotoshokan.py
@@ -55,7 +55,7 @@ class TokyoToshokanProvider(generic.TorrentProvider):
         return [x.replace('.', ' ') for x in show_name_helpers.makeSceneSearchString(self.show, ep_obj)]
 
     def _doSearch(self, search_string, search_mode='eponly', epcount=0, age=0, epObj=None):
-        #FIXME ADD MODE
+        # FIXME ADD MODE
         if self.show and not self.show.is_anime:
             return []
 
@@ -63,7 +63,7 @@ class TokyoToshokanProvider(generic.TorrentProvider):
 
         params = {
             "terms": search_string.encode('utf-8'),
-            "type": 1, # get anime types
+            "type": 1,  # get anime types
         }
 
         searchURL = self.url + 'search.php?' + urllib.urlencode(params)
@@ -88,7 +88,7 @@ class TokyoToshokanProvider(generic.TorrentProvider):
                         title = top.find('td', attrs={'class': 'desc-top'}).text
                         title.lstrip()
                         download_url = top.find('td', attrs={'class': 'desc-top'}).find('a')['href']
-                        #FIXME
+                        # FIXME
                         size = -1
                         seeders = 1
                         leechers = 0
@@ -96,8 +96,8 @@ class TokyoToshokanProvider(generic.TorrentProvider):
                         if not all([title, download_url]):
                             continue
 
-                        #Filter unseeded torrent
-                        #if seeders < self.minseed or leechers < self.minleech:
+                        # Filter unseeded torrent
+                        # if seeders < self.minseed or leechers < self.minleech:
                         #    if mode != 'RSS':
                         #        logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG)
                         #    continue
@@ -109,7 +109,7 @@ class TokyoToshokanProvider(generic.TorrentProvider):
         except Exception, e:
             logger.log(u"Failed parsing provider. Traceback: %s" % traceback.format_exc(), logger.ERROR)
 
-        #FIXME SORTING
+        # FIXME SORTING
         return results
 
 
diff --git a/sickbeard/providers/torrentbytes.py b/sickbeard/providers/torrentbytes.py
index 48d4c5d5a..2bc38e29a 100644
--- a/sickbeard/providers/torrentbytes.py
+++ b/sickbeard/providers/torrentbytes.py
@@ -99,7 +99,7 @@ class TorrentBytesProvider(generic.TorrentProvider):
 
                 try:
                     with BS4Parser(data, features=["html5lib", "permissive"]) as html:
-                        #Continue only if one Release is found
+                        # Continue only if one Release is found
                         empty = html.find('Nothing found!')
                         if empty:
                             logger.log(u"Data returned from provider does not contain any torrents", logger.DEBUG)
@@ -116,7 +116,7 @@ class TorrentBytesProvider(generic.TorrentProvider):
                             full_id = link['href'].replace('details.php?id=', '')
                             torrent_id = full_id.split("&")[0]
 
-                            #Free leech torrents are marked with green [F L] in the title (i.e. <font color=green>[F&nbsp;L]</font>)
+                            # Free leech torrents are marked with green [F L] in the title (i.e. <font color=green>[F&nbsp;L]</font>)
                             freeleechTag = cells[1].find('font', attrs={'color': 'green'})
                             if freeleechTag and freeleechTag.text == u'[F\xa0L]':
                                 isFreeleechTorrent = True
@@ -148,7 +148,7 @@ class TorrentBytesProvider(generic.TorrentProvider):
                             if not all([title, download_url]):
                                 continue
 
-                            #Filter unseeded torrent
+                            # Filter unseeded torrent
                             if seeders < self.minseed or leechers < self.minleech:
                                 if mode != 'RSS':
                                     logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG)
@@ -163,7 +163,7 @@ class TorrentBytesProvider(generic.TorrentProvider):
                 except Exception, e:
                     logger.log(u"Failed parsing provider. Traceback: %s" % traceback.format_exc(), logger.ERROR)
 
-            #For each search mode sort all the items by seeders if available
+            # For each search mode sort all the items by seeders if available
             items[mode].sort(key=lambda tup: tup[3], reverse=True)
 
             results += items[mode]
diff --git a/sickbeard/providers/torrentday.py b/sickbeard/providers/torrentday.py
index 82b2cf235..353f0673d 100644
--- a/sickbeard/providers/torrentday.py
+++ b/sickbeard/providers/torrentday.py
@@ -133,13 +133,13 @@ class TorrentDayProvider(generic.TorrentProvider):
                     download_url = self.urls['download'] % ( torrent['id'], torrent['fname'])
                     seeders = int(torrent['seed'])
                     leechers = int(torrent['leech'])
-                    #FIXME
+                    # FIXME
                     size = -1
 
                     if not all([title, download_url]):
                         continue
 
-                    #Filter unseeded torrent
+                    # Filter unseeded torrent
                     if seeders < self.minseed or leechers < self.minleech:
                         if mode != 'RSS':
                             logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG)
@@ -151,7 +151,7 @@ class TorrentDayProvider(generic.TorrentProvider):
 
                     items[mode].append(item)
 
-            #For each search mode sort all the items by seeders if available if available
+            # For each search mode sort all the items by seeders if available if available
             items[mode].sort(key=lambda tup: tup[3], reverse=True)
 
             results += items[mode]
diff --git a/sickbeard/providers/torrentleech.py b/sickbeard/providers/torrentleech.py
index f08df58bb..11d6dcaa1 100644
--- a/sickbeard/providers/torrentleech.py
+++ b/sickbeard/providers/torrentleech.py
@@ -104,7 +104,7 @@ class TorrentLeechProvider(generic.TorrentProvider):
                         torrent_table = html.find('table', attrs={'id': 'torrenttable'})
                         torrent_rows = torrent_table.find_all('tr') if torrent_table else []
 
-                        #Continue only if one Release is found
+                        # Continue only if one Release is found
                         if len(torrent_rows) < 2:
                             logger.log(u"Data returned from provider does not contain any torrents", logger.DEBUG)
                             continue
@@ -118,7 +118,7 @@ class TorrentLeechProvider(generic.TorrentProvider):
                                 download_url = self.urls['download'] % url['href']
                                 seeders = int(result.find('td', attrs={'class': 'seeders'}).string)
                                 leechers = int(result.find('td', attrs={'class': 'leechers'}).string)
-                                #FIXME
+                                # FIXME
                                 size = -1
                             except (AttributeError, TypeError):
                                 continue
@@ -126,7 +126,7 @@ class TorrentLeechProvider(generic.TorrentProvider):
                             if not all([title, download_url]):
                                 continue
 
-                            #Filter unseeded torrent
+                            # Filter unseeded torrent
                             if seeders < self.minseed or leechers < self.minleech:
                                 if mode != 'RSS':
                                     logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG)
@@ -141,7 +141,7 @@ class TorrentLeechProvider(generic.TorrentProvider):
                 except Exception, e:
                     logger.log(u"Failed parsing provider. Traceback: %s" % traceback.format_exc(), logger.ERROR)
 
-            #For each search mode sort all the items by seeders if available
+            # For each search mode sort all the items by seeders if available
             items[mode].sort(key=lambda tup: tup[3], reverse=True)
 
             results += items[mode]
diff --git a/sickbeard/providers/torrentproject.py b/sickbeard/providers/torrentproject.py
index 1aa69aa1d..184e23c27 100644
--- a/sickbeard/providers/torrentproject.py
+++ b/sickbeard/providers/torrentproject.py
@@ -47,7 +47,7 @@ class TORRENTPROJECTProvider(generic.TorrentProvider):
         results = []
         items = {'Season': [], 'Episode': [], 'RSS': []}
 
-        for mode in search_strings.keys(): #Mode = RSS, Season, Episode
+        for mode in search_strings.keys():  # Mode = RSS, Season, Episode
             logger.log(u"Search Mode: %s" % mode, logger.DEBUG)
             for search_string in search_strings[mode]:
                 if mode != 'RSS':
@@ -92,7 +92,7 @@ class TORRENTPROJECTProvider(generic.TorrentProvider):
                             download_url = "magnet:?xt=urn:btih:" + t_hash + "&dn=" + title + "&tr=udp://tracker.openbittorrent.com:80&tr=udp://tracker.coppersurfer.tk:6969&tr=udp://open.demonii.com:1337&tr=udp://tracker.leechers-paradise.org:6969&tr=udp://exodus.desync.com:6969"
                             logger.log("Result has less than 10 seeds but not using Dyn Magnet becouse its from RSS" + title, logger.DEBUG)
                     else:
-                        #logger.log("Torrent has more than 10 seeds using hard coded trackers", logger.DEBUG)
+                        # logger.log("Torrent has more than 10 seeds using hard coded trackers", logger.DEBUG)
                         download_url = "magnet:?xt=urn:btih:" + t_hash + "&dn=" + title + "&tr=udp://tracker.openbittorrent.com:80&tr=udp://tracker.coppersurfer.tk:6969&tr=udp://open.demonii.com:1337&tr=udp://tracker.leechers-paradise.org:6969&tr=udp://exodus.desync.com:6969"
 
 
diff --git a/sickbeard/providers/torrentz.py b/sickbeard/providers/torrentz.py
index 6fb1ef3bb..10aafa1aa 100644
--- a/sickbeard/providers/torrentz.py
+++ b/sickbeard/providers/torrentz.py
@@ -113,7 +113,7 @@ class TORRENTZProvider(generic.TorrentProvider):
                     download_url = "magnet:?xt=urn:btih:" + t_hash + "&dn=" + title + "&tr=udp://tracker.openbittorrent.com:80&tr=udp://tracker.coppersurfer.tk:6969&tr=udp://open.demonii.com:1337&tr=udp://tracker.leechers-paradise.org:6969&tr=udp://exodus.desync.com:6969"
                     size, seeders, leechers = self._split_description(item.get('description', ''))
 
-                    #Filter unseeded torrent
+                    # Filter unseeded torrent
                     if seeders < self.minseed or leechers < self.minleech:
                         if mode != 'RSS':
                             logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG)
@@ -121,7 +121,7 @@ class TORRENTZProvider(generic.TorrentProvider):
 
                     items[mode].append((title, download_url, size, seeders, leechers))
 
-            #For each search mode sort all the items by seeders if available
+            # For each search mode sort all the items by seeders if available
             items[mode].sort(key=lambda tup: tup[3], reverse=True)
             results += items[mode]
 
diff --git a/sickbeard/providers/transmitthenet.py b/sickbeard/providers/transmitthenet.py
index 136cc1f54..f021f2b0b 100644
--- a/sickbeard/providers/transmitthenet.py
+++ b/sickbeard/providers/transmitthenet.py
@@ -128,13 +128,13 @@ class TransmitTheNetProvider(generic.TorrentProvider):
                             seeders = int(torrent_row.findAll('a', {'title': 'Click here to view peers details'})[0].text.strip())
                             leechers = int(torrent_row.findAll('a', {'title': 'Click here to view peers details'})[1].text.strip())
                             download_url = self.urls['base_url'] + download_href
-                            #FIXME
+                            # FIXME
                             size = -1
 
                             if not all([title, download_url]):
                                 continue
 
-                            #Filter unseeded torrent
+                            # Filter unseeded torrent
                             if seeders < self.minseed or leechers < self.minleech:
                                 if mode != 'RSS':
                                     logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG)
diff --git a/sickbeard/providers/tvchaosuk.py b/sickbeard/providers/tvchaosuk.py
index 30dbc2f9a..69de245fa 100644
--- a/sickbeard/providers/tvchaosuk.py
+++ b/sickbeard/providers/tvchaosuk.py
@@ -14,7 +14,7 @@
 # along with SickRage.  If not, see <http://www.gnu.org/licenses/>.
 
 import re
-#from urllib import urlencode
+# from urllib import urlencode
 
 import sickbeard
 from sickbeard import logger
@@ -139,7 +139,7 @@ class TVChaosUKProvider(generic.TorrentProvider):
 
                 self.search_params['keywords'] = search_string.strip()
                 data = self.getURL(self.urls['search'], params=self.search_params)
-                #url_searched = self.urls['search'] + '?' + urlencode(self.search_params)
+                # url_searched = self.urls['search'] + '?' + urlencode(self.search_params)
 
                 if not data:
                     logger.log("No data returned from provider", logger.DEBUG)
@@ -157,7 +157,7 @@ class TVChaosUKProvider(generic.TorrentProvider):
                             if not all([title, download_url]):
                                 continue
 
-                            #Filter unseeded torrent
+                            # Filter unseeded torrent
                             if seeders < self.minseed or leechers < self.minleech:
                                 if mode != 'RSS':
                                     logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG)
@@ -175,7 +175,7 @@ class TVChaosUKProvider(generic.TorrentProvider):
                             # Strip year from the end or we can't parse it!
                             title = re.sub(r'[\. ]?\(\d{4}\)', '', title)
 
-                            #FIXME
+                            # FIXME
                             size = -1
 
                             item = title, download_url, size, seeders, leechers
@@ -187,7 +187,7 @@ class TVChaosUKProvider(generic.TorrentProvider):
                         except Exception:
                             continue
 
-            #For each search mode sort all the items by seeders if available
+            # For each search mode sort all the items by seeders if available
             items[mode].sort(key=lambda tup: tup[3], reverse=True)
 
             results += items[mode]
diff --git a/sickbeard/providers/xthor.py b/sickbeard/providers/xthor.py
index 0b0623c34..a5f2dddc7 100644
--- a/sickbeard/providers/xthor.py
+++ b/sickbeard/providers/xthor.py
@@ -102,7 +102,7 @@ class XthorProvider(generic.TorrentProvider):
                             if link:
                                 title = link.text
                                 download_url = self.url + '/' + row.find("a", href=re.compile("download.php"))['href']
-                                #FIXME
+                                # FIXME
                                 size = -1
                                 seeders = 1
                                 leechers = 0
@@ -110,8 +110,8 @@ class XthorProvider(generic.TorrentProvider):
                                 if not all([title, download_url]):
                                     continue
 
-                                #Filter unseeded torrent
-                                #if seeders < self.minseed or leechers < self.minleech:
+                                # Filter unseeded torrent
+                                # if seeders < self.minseed or leechers < self.minleech:
                                 #    if mode != 'RSS':
                                 #        logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG)
                                 #    continue
@@ -122,7 +122,7 @@ class XthorProvider(generic.TorrentProvider):
 
                                 items[mode].append(item)
 
-            #For each search mode sort all the items by seeders if available if available
+            # For each search mode sort all the items by seeders if available if available
             items[mode].sort(key=lambda tup: tup[3], reverse=True)
 
             results += items[mode]
diff --git a/sickbeard/scene_numbering.py b/sickbeard/scene_numbering.py
index 6ad0a15d3..ae3a70f44 100644
--- a/sickbeard/scene_numbering.py
+++ b/sickbeard/scene_numbering.py
@@ -218,7 +218,7 @@ def set_scene_numbering(indexer_id, indexer, season=None, episode=None, absolute
             "UPDATE scene_numbering SET scene_absolute_number = ? WHERE indexer = ? and indexer_id = ? and absolute_number = ?",
             [sceneAbsolute, indexer, indexer_id, absolute_number])
 
-    #Reload data from DB so that cache and db are in sync
+    # Reload data from DB so that cache and db are in sync
     show = helpers.findCertainShow(sickbeard.showList, indexer_id)
     show.flushEpisodes()
 
diff --git a/sickbeard/scheduler.py b/sickbeard/scheduler.py
index b3068f54d..c30634e5b 100644
--- a/sickbeard/scheduler.py
+++ b/sickbeard/scheduler.py
@@ -82,7 +82,7 @@ class Scheduler(threading.Thread):
                 if self.enable:
                     current_time = datetime.datetime.now()
                     should_run = False
-                    #Is self.force enable
+                    # Is self.force enable
                     if self.force:
                         should_run = True
                     # check if interval has passed
diff --git a/sickbeard/search_queue.py b/sickbeard/search_queue.py
index 91a1cf197..48777c2e8 100644
--- a/sickbeard/search_queue.py
+++ b/sickbeard/search_queue.py
@@ -279,7 +279,7 @@ class FailedQueueItem(generic_queue.QueueItem):
                     time.sleep(common.cpu_presets[sickbeard.CPU_PRESET])
             else:
                 pass
-                #logger.log(u"No valid episode found to retry for: [" + self.segment.prettyName() + "]")
+                # logger.log(u"No valid episode found to retry for: [" + self.segment.prettyName() + "]")
         except Exception:
             logger.log(traceback.format_exc(), logger.DEBUG)
 
diff --git a/sickbeard/show_name_helpers.py b/sickbeard/show_name_helpers.py
index c1c522d66..8e640b250 100644
--- a/sickbeard/show_name_helpers.py
+++ b/sickbeard/show_name_helpers.py
@@ -328,8 +328,8 @@ def allPossibleShowNames(show, season=-1):
                 elif curName.endswith(' (' + curCountry + ')'):
                     newShowNames.append(curName.replace(' (' + curCountry + ')', ' (' + country_list[curCountry] + ')'))
 
-            # if we have "Show Name (2013)" this will strip the (2013) show year from the show name
-            #newShowNames.append(re.sub('\(\d{4}\)','',curName))
+            # # if we have "Show Name (2013)" this will strip the (2013) show year from the show name
+            # newShowNames.append(re.sub('\(\d{4}\)', '', curName))
 
         showNames += newShowNames
 
diff --git a/sickbeard/show_queue.py b/sickbeard/show_queue.py
index 544cffa92..359a6210a 100644
--- a/sickbeard/show_queue.py
+++ b/sickbeard/show_queue.py
@@ -205,7 +205,7 @@ class ShowQueueItem(generic_queue.QueueItem):
 
     def isInQueue(self):
         return self in sickbeard.showQueueScheduler.action.queue + [
-            sickbeard.showQueueScheduler.action.currentItem]  #@UndefinedVariable
+            sickbeard.showQueueScheduler.action.currentItem]  # @UndefinedVariable
 
     def _getName(self):
         return str(self.show.indexerid)
@@ -306,8 +306,8 @@ class QueueItemAdd(ShowQueueItem):
                 return
         except Exception, e:
             logger.log(u"Error while loading information from indexer %s. Error: %r" % (self.indexer_id,sickbeard.indexerApi(self.indexer).name, ex(e)),logger.ERROR)
-            #logger.log(u"Show name with ID %s doesn't exist on %s anymore. If you are using trakt, it will be removed from your TRAKT watchlist. If you are adding manually, try removing the nfo and adding again" %
-            #    (self.indexer_id,sickbeard.indexerApi(self.indexer).name) , logger.WARNING)
+            # logger.log(u"Show name with ID %s doesn't exist on %s anymore. If you are using trakt, it will be removed from your TRAKT watchlist. If you are adding manually, try removing the nfo and adding again" %
+            #            (self.indexer_id, sickbeard.indexerApi(self.indexer).name), logger.WARNING)
 
             ui.notifications.error("Unable to add show",
                                    "Unable to look up the show in " + self.showDir + " on " + str(sickbeard.indexerApi(
@@ -365,13 +365,13 @@ class QueueItemAdd(ShowQueueItem):
                 if self.whitelist:
                     self.show.release_groups.set_white_keywords(self.whitelist)
 
-            # be smartish about this
-            #if self.show.genre and "talk show" in self.show.genre.lower():
-            #    self.show.air_by_date = 1
-            #if self.show.genre and "documentary" in self.show.genre.lower():
-            #    self.show.air_by_date = 0
-            #if self.show.classification and "sports" in self.show.classification.lower():
-            #    self.show.sports = 1
+            # # be smartish about this
+            # if self.show.genre and "talk show" in self.show.genre.lower():
+            #     self.show.air_by_date = 1
+            # if self.show.genre and "documentary" in self.show.genre.lower():
+            #     self.show.air_by_date = 0
+            # if self.show.classification and "sports" in self.show.classification.lower():
+            #     self.show.sports = 1
 
         except sickbeard.indexer_exception, e:
             logger.log(
diff --git a/sickbeard/subtitles.py b/sickbeard/subtitles.py
index a9e3000dc..06b708427 100644
--- a/sickbeard/subtitles.py
+++ b/sickbeard/subtitles.py
@@ -102,7 +102,7 @@ def sortedServiceList():
 def getEnabledServiceList():
     return [x['name'] for x in sortedServiceList() if x['enabled']]
 
-#Hack around this for now.
+# Hack around this for now.
 def fromietf(language):
     return Language.fromopensubtitles(language)
 
diff --git a/sickbeard/traktChecker.py b/sickbeard/traktChecker.py
index b0754d6a1..beae78222 100644
--- a/sickbeard/traktChecker.py
+++ b/sickbeard/traktChecker.py
@@ -370,7 +370,7 @@ class TraktChecker():
             indexer_id = int(str(show_el))
             show = self.ShowWatchlist[trakt_id][show_el]
 
-            #logger.log(u"Checking Show: %s %s %s" % (trakt_id, indexer_id, show['title']),logger.DEBUG)
+            # logger.log(u"Checking Show: %s %s %s" % (trakt_id, indexer_id, show['title']),logger.DEBUG)
             if int(sickbeard.TRAKT_METHOD_ADD) != 2:
                 self.addDefaultShow(indexer, indexer_id, show['title'], SKIPPED)
             else:
@@ -470,7 +470,7 @@ class TraktChecker():
          Check in the Watchlist or CollectionList for Show
          Is the Show, Season and Episode in the trakt_id list (tvdb / tvrage)
         """
-        #logger.log(u"Checking Show: %s %s %s " % (trakt_id, showid, List),logger.DEBUG)
+        # logger.log(u"Checking Show: %s %s %s " % (trakt_id, showid, List),logger.DEBUG)
 
         if "Collection" == List:
             try:
@@ -658,7 +658,7 @@ class TraktChecker():
             if season not in uniqueSeasons[showid]:
                 uniqueSeasons[showid].append(season)
 
-        #build the query
+        # build the query
         showList = []
         seasonsList = {}
         for searchedShow in uniqueShows:
diff --git a/sickbeard/tv.py b/sickbeard/tv.py
index 70b1572bd..956b2506f 100644
--- a/sickbeard/tv.py
+++ b/sickbeard/tv.py
@@ -277,7 +277,7 @@ class TVShow(object):
             if noCreate:
                 return None
 
-            #logger.log(str(self.indexerid) + u": An object for episode S%02dE%02d didn't exist in the cache, trying to create it" % (season or 0, episode or 0), logger.DEBUG)
+            # logger.log(str(self.indexerid) + u": An object for episode S%02dE%02d didn't exist in the cache, trying to create it" % (season or 0, episode or 0), logger.DEBUG)
 
             if file:
                 ep = TVEpisode(self, season, episode, file)
@@ -483,8 +483,8 @@ class TVShow(object):
         if self.dvdorder != 0:
             lINDEXER_API_PARMS['dvdorder'] = True
 
-        #logger.log(u"lINDEXER_API_PARMS: " + str(lINDEXER_API_PARMS), logger.DEBUG)
-        #Spamming log
+        # logger.log(u"lINDEXER_API_PARMS: " + str(lINDEXER_API_PARMS), logger.DEBUG)
+        # Spamming log
         t = sickbeard.indexerApi(self.indexer).indexer(**lINDEXER_API_PARMS)
 
         cachedShow = t[self.indexerid]
@@ -607,7 +607,7 @@ class TVShow(object):
 
         for cur_provider in sickbeard.metadata_provider_dict.values():
 
-            #logger.log(u"Running metadata routines for " + cur_provider.name, logger.DEBUG)
+            # logger.log(u"Running metadata routines for " + cur_provider.name, logger.DEBUG)
 
             fanart_result = cur_provider.create_fanart(self) or fanart_result
             poster_result = cur_provider.create_poster(self) or poster_result
@@ -1435,10 +1435,10 @@ class TVEpisode(object):
 
         logger.log(u"%s: Downloading subtitles for S%02dE%02d" % (self.show.indexerid, self.season or 0, self.episode or 0), logger.DEBUG)
 
-        #logging.getLogger('subliminal.api').addHandler(logging.StreamHandler())
-        #logging.getLogger('subliminal.api').setLevel(logging.DEBUG)
-        #logging.getLogger('subliminal').addHandler(logging.StreamHandler())
-        #logging.getLogger('subliminal').setLevel(logging.DEBUG)
+        # logging.getLogger('subliminal.api').addHandler(logging.StreamHandler())
+        # logging.getLogger('subliminal.api').setLevel(logging.DEBUG)
+        # logging.getLogger('subliminal').addHandler(logging.StreamHandler())
+        # logging.getLogger('subliminal').setLevel(logging.DEBUG)
 
         subtitles_info = {'location': self.location, 'subtitles': self.subtitles, 'show.indexerid': self.show.indexerid, 'season': self.season,
                           'episode': self.episode, 'name': self.name, 'show.name': self.show.name, 'status': self.status}
@@ -1644,10 +1644,10 @@ class TVEpisode(object):
         if getattr(myEp, 'episodename', None) is None:
             logger.log(u"This episode %s - S%02dE%02d has no name on %s. Setting to an empty string" % (self.show.name, season or 0, episode or 0, sickbeard.indexerApi(self.indexer).name))
             setattr(myEp, 'episodename', '')
-            # if I'm incomplete on TVDB but I once was complete then just delete myself from the DB for now
-            #if self.indexerid != -1:
-            #    self.deleteEpisode()
-            #return False
+            # # if I'm incomplete on TVDB but I once was complete then just delete myself from the DB for now
+            # if self.indexerid != -1:
+            #     self.deleteEpisode()
+            # return False
 
         if getattr(myEp, 'absolute_number', None) is None:
             logger.log(u"This episode %s - S%02dE%02d has no absolute number on %s" %(self.show.name, season or 0, episode or 0, sickbeard.indexerApi(self.indexer).name), logger.DEBUG)
@@ -2114,18 +2114,18 @@ class TVEpisode(object):
         if encoder:
             logger.log(u"Found codec for '" + show_name + ": " + ep_name + "'.", logger.DEBUG)
 
-        #try to get the release group
+        # try to get the release group
         rel_grp = {}
         rel_grp["SiCKRAGE"] = 'SiCKRAGE'
-        if hasattr(self, 'location'): #from the location name
+        if hasattr(self, 'location'):  # from the location name
             rel_grp['location'] = release_group(self.show, self.location)
             if not rel_grp['location']:
                 del rel_grp['location']
-        if hasattr(self, '_release_group'): #from the release group field in db
+        if hasattr(self, '_release_group'):  # from the release group field in db
             rel_grp['database'] = self._release_group
             if not rel_grp['database']:
                 del rel_grp['database']
-        if hasattr(self, 'release_name'): #from the release name field in db
+        if hasattr(self, 'release_name'):  # from the release name field in db
             rel_grp['release_name'] = release_group(self.show, self.release_name)
             if not rel_grp['release_name']:
                 del rel_grp['release_name']
@@ -2216,10 +2216,10 @@ class TVEpisode(object):
         # if there's no release group in the db, let the user know we replaced it
         if not hasattr(self, '_release_group') and not replace_map['%RG'] == 'SiCKRAGE':
             logger.log(u"Episode has no release group, replacing it with '" + replace_map['%RG'] + "'", logger.DEBUG)
-            self._release_group = replace_map['%RG'] #if release_group is not in the db, put it there
+            self._release_group = replace_map['%RG']  # if release_group is not in the db, put it there
         elif not self._release_group and not replace_map['%RG'] == 'SiCKRAGE':
             logger.log(u"Episode has no release group, replacing it with '" + replace_map['%RG'] + "'", logger.DEBUG)
-            self._release_group = replace_map['%RG'] #if release_group is not in the db, put it there
+            self._release_group = replace_map['%RG']  # if release_group is not in the db, put it there
 
         # if there's no release name then replace it with a reasonable facsimile
         if not replace_map['%RN']:
@@ -2236,7 +2236,7 @@ class TVEpisode(object):
                 result_name = result_name.replace('%RN', '%S.N.S%0SE%0E.%E.N-' + replace_map['%RG'])
                 result_name = result_name.replace('%rn', '%s.n.s%0se%0e.%e.n-' + replace_map['%RG'].lower())
 
-            #logger.log(u"Episode has no release name, replacing it with a generic one: " + result_name, logger.DEBUG)
+            # logger.log(u"Episode has no release name, replacing it with a generic one: " + result_name, logger.DEBUG)
 
         if not replace_map['%RT']:
             result_name = re.sub('([ _.-]*)%RT([ _.-]*)', r'\2', result_name)
@@ -2457,7 +2457,7 @@ class TVEpisode(object):
         related_files = postProcessor.PostProcessor(self.location).list_associated_files(
             self.location, base_name_only=True, subfolders=True)
 
-        #This is wrong. Cause of pp not moving subs.
+        # This is wrong. Cause of pp not moving subs.
         if self.show.subtitles and sickbeard.SUBTITLES_DIR != '':
             related_subs = postProcessor.PostProcessor(self.location).list_associated_files(sickbeard.SUBTITLES_DIR,
                                                                                             subtitles_only=True, subfolders=True)
@@ -2470,11 +2470,11 @@ class TVEpisode(object):
 
         # move related files
         for cur_related_file in related_files:
-            #We need to fix something here because related files can be in subfolders and the original code doesn't handle this (at all)
+            # We need to fix something here because related files can be in subfolders and the original code doesn't handle this (at all)
             cur_related_dir = ek(os.path.dirname, ek(os.path.abspath, cur_related_file))
             subfolder = cur_related_dir.replace(ek(os.path.dirname, ek(os.path.abspath, self.location)), '')
-            #We now have a subfolder. We need to add that to the absolute_proper_path.
-            #First get the absolute proper-path dir
+            # We now have a subfolder. We need to add that to the absolute_proper_path.
+            # First get the absolute proper-path dir
             proper_related_dir = ek(os.path.dirname, ek(os.path.abspath, absolute_proper_path + file_ext))
             proper_related_path = absolute_proper_path.replace(proper_related_dir, proper_related_dir + subfolder)
 
diff --git a/sickbeard/ui.py b/sickbeard/ui.py
index 43044c6cf..3d7c559bf 100644
--- a/sickbeard/ui.py
+++ b/sickbeard/ui.py
@@ -156,7 +156,7 @@ class QueueProgressIndicator():
         return len([x for x in self.queueItemList if x.isInQueue()])
 
     def nextName(self):
-        for curItem in [sickbeard.showQueueScheduler.action.currentItem]+sickbeard.showQueueScheduler.action.queue: #@UndefinedVariable
+        for curItem in [sickbeard.showQueueScheduler.action.currentItem]+sickbeard.showQueueScheduler.action.queue:  # @UndefinedVariable
             if curItem in self.queueItemList:
                 return curItem.name
 
diff --git a/sickbeard/versionChecker.py b/sickbeard/versionChecker.py
index 7ed739835..257525eed 100644
--- a/sickbeard/versionChecker.py
+++ b/sickbeard/versionChecker.py
@@ -621,7 +621,7 @@ class GitUpdateManager(UpdateManager):
 
         # remove untracked files and performs a hard reset on git branch to avoid update issues
         if sickbeard.GIT_RESET:
-            #self.clean() # This is removing user data and backups
+            # self.clean() # This is removing user data and backups
             self.reset()
 
         if self.branch == self._find_installed_branch():
@@ -857,7 +857,7 @@ class SourceUpdateManager(UpdateManager):
 
                     # Avoid DLL access problem on WIN32/64
                     # These files needing to be updated manually
-                    #or find a way to kill the access from memory
+                    # or find a way to kill the access from memory
                     if curfile in ('unrar.dll', 'unrar64.dll'):
                         try:
                             os.chmod(new_path, stat.S_IWRITE)
diff --git a/sickbeard/webapi.py b/sickbeard/webapi.py
index f2420e539..29e0534e0 100644
--- a/sickbeard/webapi.py
+++ b/sickbeard/webapi.py
@@ -96,8 +96,8 @@ class ApiHandler(RequestHandler):
     def __init__(self, *args, **kwargs):
         super(ApiHandler, self).__init__(*args, **kwargs)
 
-    #def set_default_headers(self):
-        #self.set_header('Cache-Control', 'no-store, no-cache, must-revalidate, max-age=0')
+    # def set_default_headers(self):
+    #     self.set_header('Cache-Control', 'no-store, no-cache, must-revalidate, max-age=0')
 
     def get(self, *args, **kwargs):
         kwargs = self.request.arguments
diff --git a/sickbeard/webserve.py b/sickbeard/webserve.py
index 5b98cfd52..b0907c84e 100644
--- a/sickbeard/webserve.py
+++ b/sickbeard/webserve.py
@@ -158,8 +158,8 @@ class BaseHandler(RequestHandler):
 
         super(BaseHandler, self).__init__(*args, **kwargs)
 
-    #def set_default_headers(self):
-        #self.set_header('Cache-Control', 'no-store, no-cache, must-revalidate, max-age=0')
+    # def set_default_headers(self):
+    #     self.set_header('Cache-Control', 'no-store, no-cache, must-revalidate, max-age=0')
 
     def write_error(self, status_code, **kwargs):
         # handle 404 http errors
@@ -393,7 +393,7 @@ class WebRoot(WebHandler):
             layout = 'poster'
 
         sickbeard.HOME_LAYOUT = layout
-        #Dont redirect to default page so user can see new layout
+        # Don't redirect to default page so user can see new layout
         return self.redirect("/home/")
 
     @staticmethod
@@ -2653,7 +2653,7 @@ class HomeAddShows(Home):
                 logger.log(u"Unable to create the folder " + show_dir + ", can't add the show", logger.ERROR)
                 ui.notifications.error("Unable to add show",
                                        "Unable to create the folder " + show_dir + ", can't add the show")
-                #Dont redirect to default page because user wants to see the new show
+                # Don't redirect to default page because user wants to see the new show
                 return self.redirect("/home/")
             else:
                 helpers.chmodAsParent(show_dir)
@@ -3708,8 +3708,8 @@ class ConfigGeneral(Config):
         sickbeard.PROXY_INDEXERS = config.checkbox_to_value(proxy_indexers)
         sickbeard.GIT_USERNAME = git_username
         sickbeard.GIT_PASSWORD = git_password
-        #sickbeard.GIT_RESET = config.checkbox_to_value(git_reset)
-        #Force GIT_RESET
+        # sickbeard.GIT_RESET = config.checkbox_to_value(git_reset)
+        # Force GIT_RESET
         sickbeard.GIT_RESET = 1
         sickbeard.GIT_AUTOISSUES = config.checkbox_to_value(git_autoissues)
         sickbeard.GIT_PATH = git_path
-- 
GitLab


From 272eaf45776b6c6cdbbbaf72dcadaaddea85150c Mon Sep 17 00:00:00 2001
From: Labrys <labrys@users.noreply.github.com>
Date: Thu, 5 Nov 2015 03:46:58 -0500
Subject: [PATCH 014/215] PEP 8: Add blank lines for consistency

---
 sickbeard/blackandwhitelist.py | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/sickbeard/blackandwhitelist.py b/sickbeard/blackandwhitelist.py
index dd98667b8..d4d98d3dc 100644
--- a/sickbeard/blackandwhitelist.py
+++ b/sickbeard/blackandwhitelist.py
@@ -21,6 +21,7 @@ import sickbeard
 from sickbeard import db, logger, helpers
 from adba.aniDBerrors import AniDBCommandTimeoutError
 
+
 class BlackAndWhiteList(object):
     blacklist = []
     whitelist = []
@@ -133,9 +134,11 @@ class BlackAndWhiteList(object):
             logger.log('No Whitelist and  Blacklist defined, check passed.', logger.DEBUG)
             return True
 
+
 class BlackWhitelistNoShowIDException(Exception):
     'No show_id was given'
 
+
 def short_group_names(groups):
     """
     Find AniDB short group names for release groups
-- 
GitLab


From c4cc2ea7d778030d7f13b485c2d8cc48adab60dd Mon Sep 17 00:00:00 2001
From: Labrys <labrys@users.noreply.github.com>
Date: Thu, 5 Nov 2015 03:47:46 -0500
Subject: [PATCH 015/215] PEP 8: Convert membership test from 'not x in y' to
 'x not in y'

---
 sickbeard/blackandwhitelist.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/sickbeard/blackandwhitelist.py b/sickbeard/blackandwhitelist.py
index d4d98d3dc..71013208e 100644
--- a/sickbeard/blackandwhitelist.py
+++ b/sickbeard/blackandwhitelist.py
@@ -161,7 +161,7 @@ def short_group_names(groups):
                     if line["shortname"]:
                         shortGroupList.append(line["shortname"])
                     else:
-                        if not groupName in shortGroupList:
+                        if groupName not in shortGroupList:
                             shortGroupList.append(groupName)
     else:
         shortGroupList = groups
-- 
GitLab


From 1ae38cec6ac9ec59a211a8bfd7d10ecbaa662596 Mon Sep 17 00:00:00 2001
From: Labrys <labrys@users.noreply.github.com>
Date: Thu, 5 Nov 2015 03:53:59 -0500
Subject: [PATCH 016/215] PEP 257: Convert docstrings to triple quoted
 docstrings

---
 sickbeard/blackandwhitelist.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/sickbeard/blackandwhitelist.py b/sickbeard/blackandwhitelist.py
index 71013208e..06d8c2a07 100644
--- a/sickbeard/blackandwhitelist.py
+++ b/sickbeard/blackandwhitelist.py
@@ -136,7 +136,7 @@ class BlackAndWhiteList(object):
 
 
 class BlackWhitelistNoShowIDException(Exception):
-    'No show_id was given'
+    """No show_id was given"""
 
 
 def short_group_names(groups):
-- 
GitLab


From 50ed65c979fa6a0558554e46732ffd137c712b58 Mon Sep 17 00:00:00 2001
From: Labrys <labrys@users.noreply.github.com>
Date: Thu, 5 Nov 2015 03:55:35 -0500
Subject: [PATCH 017/215] PEP 263: Add encoding declaration

---
 sickbeard/blackandwhitelist.py | 1 +
 1 file changed, 1 insertion(+)

diff --git a/sickbeard/blackandwhitelist.py b/sickbeard/blackandwhitelist.py
index 06d8c2a07..cc4efcd74 100644
--- a/sickbeard/blackandwhitelist.py
+++ b/sickbeard/blackandwhitelist.py
@@ -1,3 +1,4 @@
+# coding=utf-8
 # Author: Dennis Lutter <lad1337@gmail.com>
 # URL: https://sickrage.tv/
 # Git: https://github.com/SiCKRAGETV/SickRage.git
-- 
GitLab


From e6db3e3cdb12a29da0b19d6ab2689ebc088602ad Mon Sep 17 00:00:00 2001
From: Labrys <labrys@users.noreply.github.com>
Date: Thu, 5 Nov 2015 05:03:04 -0500
Subject: [PATCH 018/215] PEP 8: Add missing whitespace around operators and
 removed excess

---
 sickbeard/traktChecker.py | 66 +++++++++++++++++++--------------------
 1 file changed, 33 insertions(+), 33 deletions(-)

diff --git a/sickbeard/traktChecker.py b/sickbeard/traktChecker.py
index beae78222..7446017c3 100644
--- a/sickbeard/traktChecker.py
+++ b/sickbeard/traktChecker.py
@@ -47,7 +47,7 @@ def setEpisodeToWanted(show, s, e):
             if epObj.status != SKIPPED or epObj.airdate == datetime.date.fromordinal(1):
                 return
 
-            logger.log(u"Setting episode %s S%02dE%02d to wanted" %(show.name, s, e))
+            logger.log(u"Setting episode %s S%02dE%02d to wanted" % (show.name, s, e))
             # figure out what segment the episode is in and remember it so we can backlog it
 
             epObj.status = WANTED
@@ -189,17 +189,17 @@ class TraktChecker():
             logger.log(u"COLLECTION::REMOVE::START - Look for Episodes to Remove From Trakt Collection", logger.DEBUG)
 
             myDB = db.DBConnection()
-            sql_selection='select tv_shows.indexer, tv_shows.startyear, showid, show_name, season, episode, tv_episodes.status, tv_episodes.location from tv_episodes,tv_shows where tv_shows.indexer_id = tv_episodes.showid'
+            sql_selection = 'select tv_shows.indexer, tv_shows.startyear, showid, show_name, season, episode, tv_episodes.status, tv_episodes.location from tv_episodes,tv_shows where tv_shows.indexer_id = tv_episodes.showid'
             episodes = myDB.select(sql_selection)
             if episodes is not None:
                 trakt_data = []
                 for cur_episode in episodes:
                     trakt_id = sickbeard.indexerApi(cur_episode["indexer"]).config['trakt_id']
-                    if self._checkInList(trakt_id,str(cur_episode["showid"]),str(cur_episode["season"]),str(cur_episode["episode"]), List='Collection'):
+                    if self._checkInList(trakt_id, str(cur_episode["showid"]), str(cur_episode["season"]), str(cur_episode["episode"]), List='Collection'):
                         if cur_episode["location"] == '':
                             logger.log(u"Removing Episode %s S%02dE%02d from collection" %
                             (cur_episode["show_name"], cur_episode["season"], cur_episode["episode"]), logger.DEBUG)
-                            trakt_data.append((cur_episode["showid"],cur_episode["indexer"],cur_episode["show_name"],cur_episode["startyear"],cur_episode["season"], cur_episode["episode"]))
+                            trakt_data.append((cur_episode["showid"], cur_episode["indexer"], cur_episode["show_name"], cur_episode["startyear"], cur_episode["season"], cur_episode["episode"]))
 
             if len(trakt_data):
 
@@ -217,16 +217,16 @@ class TraktChecker():
             logger.log(u"COLLECTION::ADD::START - Look for Episodes to Add to Trakt Collection", logger.DEBUG)
 
             myDB = db.DBConnection()
-            sql_selection='select tv_shows.indexer, tv_shows.startyear, showid, show_name, season, episode from tv_episodes,tv_shows where tv_shows.indexer_id = tv_episodes.showid and tv_episodes.status in ('+','.join([str(x) for x in Quality.DOWNLOADED + [ARCHIVED]])+')'
+            sql_selection = 'select tv_shows.indexer, tv_shows.startyear, showid, show_name, season, episode from tv_episodes,tv_shows where tv_shows.indexer_id = tv_episodes.showid and tv_episodes.status in (' + ','.join([str(x) for x in Quality.DOWNLOADED + [ARCHIVED]]) + ')'
             episodes = myDB.select(sql_selection)
             if episodes is not None:
                 trakt_data = []
                 for cur_episode in episodes:
                     trakt_id = sickbeard.indexerApi(cur_episode["indexer"]).config['trakt_id']
-                    if not self._checkInList(trakt_id,str(cur_episode["showid"]),str(cur_episode["season"]),str(cur_episode["episode"]), List='Collection'):
+                    if not self._checkInList(trakt_id, str(cur_episode["showid"]), str(cur_episode["season"]), str(cur_episode["episode"]), List='Collection'):
                         logger.log(u"Adding Episode %s S%02dE%02d to collection" %
                         (cur_episode["show_name"], cur_episode["season"], cur_episode["episode"]), logger.DEBUG)
-                        trakt_data.append((cur_episode["showid"],cur_episode["indexer"],cur_episode["show_name"],cur_episode["startyear"],cur_episode["season"], cur_episode["episode"]))
+                        trakt_data.append((cur_episode["showid"], cur_episode["indexer"], cur_episode["show_name"], cur_episode["startyear"], cur_episode["season"], cur_episode["episode"]))
 
                 if len(trakt_data):
                     
@@ -259,17 +259,17 @@ class TraktChecker():
             logger.log(u"WATCHLIST::REMOVE::START - Look for Episodes to Remove from Trakt Watchlist", logger.DEBUG)
 
             myDB = db.DBConnection()
-            sql_selection='select tv_shows.indexer, tv_shows.startyear, showid, show_name, season, episode, tv_episodes.status from tv_episodes,tv_shows where tv_shows.indexer_id = tv_episodes.showid'
+            sql_selection = 'select tv_shows.indexer, tv_shows.startyear, showid, show_name, season, episode, tv_episodes.status from tv_episodes,tv_shows where tv_shows.indexer_id = tv_episodes.showid'
             episodes = myDB.select(sql_selection)
             if episodes is not None:
                 trakt_data = []
                 for cur_episode in episodes:
                     trakt_id = sickbeard.indexerApi(cur_episode["indexer"]).config['trakt_id']
-                    if self._checkInList(trakt_id,str(cur_episode["showid"]),str(cur_episode["season"]),str(cur_episode["episode"])):
+                    if self._checkInList(trakt_id, str(cur_episode["showid"]), str(cur_episode["season"]), str(cur_episode["episode"])):
                         if cur_episode["status"] not in Quality.SNATCHED + Quality.SNATCHED_PROPER + [UNKNOWN] + [WANTED]:
                             logger.log(u"Removing Episode %s S%02dE%02d from watchlist" %
                             (cur_episode["show_name"], cur_episode["season"], cur_episode["episode"]), logger.DEBUG)
-                            trakt_data.append((cur_episode["showid"],cur_episode["indexer"],cur_episode["show_name"],cur_episode["startyear"],cur_episode["season"], cur_episode["episode"]))
+                            trakt_data.append((cur_episode["showid"], cur_episode["indexer"], cur_episode["show_name"], cur_episode["startyear"], cur_episode["season"], cur_episode["episode"]))
 
             if len(trakt_data):
                 
@@ -287,16 +287,16 @@ class TraktChecker():
             logger.log(u"WATCHLIST::ADD::START - Look for Episodes to Add to Trakt Watchlist", logger.DEBUG)
 
             myDB = db.DBConnection()
-            sql_selection='select tv_shows.indexer, tv_shows.startyear, showid, show_name, season, episode from tv_episodes,tv_shows where tv_shows.indexer_id = tv_episodes.showid and tv_episodes.status in ('+','.join([str(x) for x in Quality.SNATCHED + Quality.SNATCHED_PROPER + [WANTED]])+')'
+            sql_selection = 'select tv_shows.indexer, tv_shows.startyear, showid, show_name, season, episode from tv_episodes,tv_shows where tv_shows.indexer_id = tv_episodes.showid and tv_episodes.status in (' + ','.join([str(x) for x in Quality.SNATCHED + Quality.SNATCHED_PROPER + [WANTED]]) + ')'
             episodes = myDB.select(sql_selection)
             if episodes is not None:
                 trakt_data = []
                 for cur_episode in episodes:
                     trakt_id = sickbeard.indexerApi(cur_episode["indexer"]).config['trakt_id']
-                    if not self._checkInList(trakt_id,str(cur_episode["showid"]),str(cur_episode["season"]),str(cur_episode["episode"])):
+                    if not self._checkInList(trakt_id, str(cur_episode["showid"]), str(cur_episode["season"]), str(cur_episode["episode"])):
                         logger.log(u"Adding Episode %s S%02dE%02d to watchlist" %
                         (cur_episode["show_name"], cur_episode["season"], cur_episode["episode"]), logger.DEBUG)
-                        trakt_data.append((cur_episode["showid"],cur_episode["indexer"],cur_episode["show_name"],cur_episode["startyear"],cur_episode["season"],
+                        trakt_data.append((cur_episode["showid"], cur_episode["indexer"], cur_episode["show_name"], cur_episode["startyear"], cur_episode["season"],
                         cur_episode["episode"]))
 
                 if len(trakt_data):
@@ -318,8 +318,8 @@ class TraktChecker():
                 trakt_data = []
                 for show in sickbeard.showList:
                     trakt_id = sickbeard.indexerApi(show.indexer).config['trakt_id']
-                    if not self._checkInList(trakt_id,str(show.indexerid),'0','0',List='Show'):
-                        logger.log(u"Adding Show: Indexer %s %s - %s to Watchlist" % ( trakt_id,str(show.indexerid), show.name), logger.DEBUG)
+                    if not self._checkInList(trakt_id, str(show.indexerid), '0', '0', List='Show'):
+                        logger.log(u"Adding Show: Indexer %s %s - %s to Watchlist" % (trakt_id, str(show.indexerid), show.name), logger.DEBUG)
                         show_el = {'title': show.name, 'year': show.startyear, 'ids': {}}
                         if trakt_id == 'tvdb_id':
                             show_el['ids']['tvdb'] = show.indexerid
@@ -465,7 +465,7 @@ class TraktChecker():
             self.todoWanted.remove(episode)
             setEpisodeToWanted(show, episode[1], episode[2])
 
-    def _checkInList(self,trakt_id, showid, season, episode, List = None):
+    def _checkInList(self, trakt_id, showid, season, episode, List=None):
         """
          Check in the Watchlist or CollectionList for Show
          Is the Show, Season and Episode in the trakt_id list (tvdb / tvrage)
@@ -497,7 +497,7 @@ class TraktChecker():
         """
 
         try:
-            self.ShowWatchlist = { 'tvdb_id' : {}, 'tvrage_id': {} }
+            self.ShowWatchlist = {'tvdb_id': {}, 'tvrage_id': {}}
             TraktShowWatchlist = self.trakt_api.traktRequest("sync/watchlist/shows")
             tvdb_id = 'tvdb'
             tvrage_id = 'tvrage'
@@ -515,10 +515,10 @@ class TraktChecker():
 
                 if tvdb:
                     showid = str(watchlist_el['show']['ids'][tvdb_id])
-                    self.ShowWatchlist[tvdb_id + '_id'][showid] = { 'id': showid , 'title' : title , 'year': year }
+                    self.ShowWatchlist[tvdb_id + '_id'][showid] = {'id': showid, 'title': title, 'year': year}
                 if tvrage:
                     showid = str(watchlist_el['show']['ids'][tvrage_id])
-                    self.ShowWatchlist[tvrage_id + '_id'][showid] = { 'id': showid , 'title' : title , 'year': year }
+                    self.ShowWatchlist[tvrage_id + '_id'][showid] = {'id': showid, 'title': title, 'year': year}
 
         except traktException as e:
             logger.log(u"Could not connect to trakt service, cannot download Show Watchlist: %s" % repr(e), logger.WARNING)
@@ -532,7 +532,7 @@ class TraktChecker():
         """
 
         try:
-            self.EpisodeWatchlist = { 'tvdb_id' : {}, 'tvrage_id': {} }
+            self.EpisodeWatchlist = {'tvdb_id': {}, 'tvrage_id': {}}
             TraktEpisodeWatchlist = self.trakt_api.traktRequest("sync/watchlist/episodes")
             tvdb_id = 'tvdb'
             tvrage_id = 'tvrage'
@@ -553,10 +553,10 @@ class TraktChecker():
                 if tvdb:
                     showid = str(watchlist_el['show']['ids'][tvdb_id])
                     if not showid in self.EpisodeWatchlist[tvdb_id + '_id'].keys():
-                        self.EpisodeWatchlist[tvdb_id + '_id'][showid] = { 'id': showid , 'title' : title , 'year': year , 'seasons' : {} }
+                        self.EpisodeWatchlist[tvdb_id + '_id'][showid] = {'id': showid, 'title': title, 'year': year, 'seasons': {}}
 
                     if not season in self.EpisodeWatchlist[tvdb_id + '_id'][showid]['seasons'].keys():
-                        self.EpisodeWatchlist[tvdb_id + '_id'][showid]['seasons'][season] = { 's': season , 'episodes' : {} }
+                        self.EpisodeWatchlist[tvdb_id + '_id'][showid]['seasons'][season] = {'s': season, 'episodes': {}}
 
                     if not episode in self.EpisodeWatchlist[tvdb_id + '_id'][showid]['seasons'][season]['episodes'].keys():
                         self.EpisodeWatchlist[tvdb_id + '_id'][showid]['seasons'][season]['episodes'][episode] = episode
@@ -564,10 +564,10 @@ class TraktChecker():
                 if tvrage:
                     showid = str(watchlist_el['show']['ids'][tvrage_id])
                     if not showid in self.EpisodeWatchlist[tvrage_id + '_id'].keys():
-                        self.EpisodeWatchlist[tvrage_id + '_id'][showid] = { 'id': showid , 'title' : title , 'year': year , 'seasons' : {} }
+                        self.EpisodeWatchlist[tvrage_id + '_id'][showid] = {'id': showid, 'title': title, 'year': year, 'seasons': {}}
 
                     if not season in self.EpisodeWatchlist[tvrage_id + '_id'][showid]['seasons'].keys():
-                        self.EpisodeWatchlist[tvrage_id + '_id'][showid]['seasons'][season] = { 's': season , 'episodes' : {} }
+                        self.EpisodeWatchlist[tvrage_id + '_id'][showid]['seasons'][season] = {'s': season, 'episodes': {}}
 
                     if not episode in self.EpisodeWatchlist[tvrage_id + '_id'][showid]['seasons'][season]['episodes'].keys():
                         self.EpisodeWatchlist[tvrage_id + '_id'][showid]['seasons'][season]['episodes'][episode] = episode
@@ -585,7 +585,7 @@ class TraktChecker():
 
         try:
 
-            self.Collectionlist = { 'tvdb_id' : {}, 'tvrage_id': {} }
+            self.Collectionlist = {'tvdb_id': {}, 'tvrage_id': {}}
             logger.log(u"Getting Show Collection", logger.DEBUG)
             TraktCollectionList = self.trakt_api.traktRequest("sync/collection/shows")
             tvdb_id = 'tvdb'
@@ -611,10 +611,10 @@ class TraktChecker():
                             if tvdb:
                                 showid = str(watchlist_el['show']['ids'][tvdb_id])
                                 if not showid in self.Collectionlist[tvdb_id + '_id'].keys():
-                                    self.Collectionlist[tvdb_id + '_id'][showid] = { 'id': showid , 'title' : title , 'year': year , 'seasons' : {} }
+                                    self.Collectionlist[tvdb_id + '_id'][showid] = {'id': showid, 'title': title, 'year': year, 'seasons': {}}
 
                                 if not season in self.Collectionlist[tvdb_id + '_id'][showid]['seasons'].keys():
-                                    self.Collectionlist[tvdb_id + '_id'][showid]['seasons'][season] = { 's': season , 'episodes' : {} }
+                                    self.Collectionlist[tvdb_id + '_id'][showid]['seasons'][season] = {'s': season, 'episodes': {}}
 
                                 if not episode in self.Collectionlist[tvdb_id + '_id'][showid]['seasons'][season]['episodes'].keys():
                                     self.Collectionlist[tvdb_id + '_id'][showid]['seasons'][season]['episodes'][episode] = episode
@@ -622,10 +622,10 @@ class TraktChecker():
                             if tvrage:
                                 showid = str(watchlist_el['show']['ids'][tvrage_id])
                                 if not showid in self.Collectionlist[tvrage_id + '_id'].keys():
-                                    self.Collectionlist[tvrage_id + '_id'][showid] = { 'id': showid , 'title' : title , 'year': year , 'seasons' : {} }
+                                    self.Collectionlist[tvrage_id + '_id'][showid] = {'id': showid, 'title': title, 'year': year, 'seasons': {}}
 
                                 if not season in self.Collectionlist[tvrage_id + '_id'][showid]['seasons'].keys():
-                                    self.Collectionlist[tvrage_id + '_id'][showid]['seasons'][season] = { 's': season , 'episodes' : {} }
+                                    self.Collectionlist[tvrage_id + '_id'][showid]['seasons'][season] = {'s': season, 'episodes': {}}
 
                                 if not episode in self.Collectionlist[tvrage_id + '_id'][showid]['seasons'][season]['episodes'].keys():
                                     self.Collectionlist[tvrage_id + '_id'][showid]['seasons'][season]['episodes'][episode] = episode
@@ -643,9 +643,9 @@ class TraktChecker():
 
         uniqueShows = {}
         uniqueSeasons = {}
-        for showid,indexerid,show_name,startyear,season,episode in data:
+        for showid, indexerid, show_name, startyear, season, episode in data:
             if showid not in uniqueShows:
-                uniqueShows[showid] = {'title': show_name, 'year': startyear, 'ids': {},'seasons': []}
+                uniqueShows[showid] = {'title': show_name, 'year': startyear, 'ids': {}, 'seasons': []}
                 trakt_id = sickbeard.indexerApi(indexerid).config['trakt_id']
                 if trakt_id == 'tvdb_id':
                     uniqueShows[showid]['ids']["tvdb"] = showid
@@ -654,7 +654,7 @@ class TraktChecker():
                 uniqueSeasons[showid] = []
 
         # Get the unique seasons per Show
-        for showid,indexerid,show_name,startyear,season,episode in data:
+        for showid, indexerid, show_name, startyear, season, episode in data:
             if season not in uniqueSeasons[showid]:
                 uniqueSeasons[showid].append(season)
 
@@ -665,7 +665,7 @@ class TraktChecker():
             seasonsList[searchedShow] = []
             for searchedSeason in uniqueSeasons[searchedShow]:
                 episodesList = []
-                for showid,indexerid,show_name,startyear,season,episode in data:
+                for showid, indexerid, show_name, startyear, season, episode in data:
                     if season == searchedSeason and showid == searchedShow:
                         episodesList.append({'number': episode})
                 show = uniqueShows[searchedShow]
-- 
GitLab


From 53152773fbaa2b78b841a570151c23e937f0a927 Mon Sep 17 00:00:00 2001
From: Labrys <labrys@users.noreply.github.com>
Date: Thu, 5 Nov 2015 05:15:46 -0500
Subject: [PATCH 019/215] PEP 8: Add and remove blank lines for consistency

---
 sickbeard/traktChecker.py | 59 ++++++++++++++++++++++++++-------------
 1 file changed, 39 insertions(+), 20 deletions(-)

diff --git a/sickbeard/traktChecker.py b/sickbeard/traktChecker.py
index 7446017c3..e378bc20f 100644
--- a/sickbeard/traktChecker.py
+++ b/sickbeard/traktChecker.py
@@ -60,7 +60,6 @@ def setEpisodeToWanted(show, s, e):
 
 
 class TraktChecker():
-
     def __init__(self):
         self.trakt_api = TraktAPI(sickbeard.SSL_VERIFY, sickbeard.TRAKT_TIMEOUT)
         self.todoBacklog = []
@@ -71,7 +70,6 @@ class TraktChecker():
         self.amActive = False
 
     def run(self, force=False):
-
         self.amActive = True
 
         # add shows from trakt.tv watchlist
@@ -128,6 +126,7 @@ class TraktChecker():
                     }
                 ]
             }
+
             if trakt_id == 'tvdb_id':
                 data['shows'][0]['ids']['tvdb'] = show_obj.indexerid
             else:
@@ -146,7 +145,6 @@ class TraktChecker():
 
         show_obj: The TVShow object to add to trakt
         """
-
         data = {}
 
         if not self.findShow(show_obj.indexer, show_obj.indexerid):
@@ -161,6 +159,7 @@ class TraktChecker():
                     }
                 ]
             }
+
             if trakt_id == 'tvdb_id':
                 data['shows'][0]['ids']['tvdb'] = show_obj.indexerid
             else:
@@ -191,10 +190,13 @@ class TraktChecker():
             myDB = db.DBConnection()
             sql_selection = 'select tv_shows.indexer, tv_shows.startyear, showid, show_name, season, episode, tv_episodes.status, tv_episodes.location from tv_episodes,tv_shows where tv_shows.indexer_id = tv_episodes.showid'
             episodes = myDB.select(sql_selection)
+
             if episodes is not None:
                 trakt_data = []
+
                 for cur_episode in episodes:
                     trakt_id = sickbeard.indexerApi(cur_episode["indexer"]).config['trakt_id']
+
                     if self._checkInList(trakt_id, str(cur_episode["showid"]), str(cur_episode["season"]), str(cur_episode["episode"]), List='Collection'):
                         if cur_episode["location"] == '':
                             logger.log(u"Removing Episode %s S%02dE%02d from collection" %
@@ -202,7 +204,6 @@ class TraktChecker():
                             trakt_data.append((cur_episode["showid"], cur_episode["indexer"], cur_episode["show_name"], cur_episode["startyear"], cur_episode["season"], cur_episode["episode"]))
 
             if len(trakt_data):
-
                 try:
                     data = self.trakt_bulk_data_generate(trakt_data)
                     self.trakt_api.traktRequest("sync/collection/remove", data, method='POST')
@@ -219,17 +220,19 @@ class TraktChecker():
             myDB = db.DBConnection()
             sql_selection = 'select tv_shows.indexer, tv_shows.startyear, showid, show_name, season, episode from tv_episodes,tv_shows where tv_shows.indexer_id = tv_episodes.showid and tv_episodes.status in (' + ','.join([str(x) for x in Quality.DOWNLOADED + [ARCHIVED]]) + ')'
             episodes = myDB.select(sql_selection)
+
             if episodes is not None:
                 trakt_data = []
+
                 for cur_episode in episodes:
                     trakt_id = sickbeard.indexerApi(cur_episode["indexer"]).config['trakt_id']
+
                     if not self._checkInList(trakt_id, str(cur_episode["showid"]), str(cur_episode["season"]), str(cur_episode["episode"]), List='Collection'):
                         logger.log(u"Adding Episode %s S%02dE%02d to collection" %
                         (cur_episode["show_name"], cur_episode["season"], cur_episode["episode"]), logger.DEBUG)
                         trakt_data.append((cur_episode["showid"], cur_episode["indexer"], cur_episode["show_name"], cur_episode["startyear"], cur_episode["season"], cur_episode["episode"]))
 
                 if len(trakt_data):
-                    
                     try:
                         data = self.trakt_bulk_data_generate(trakt_data)
                         self.trakt_api.traktRequest("sync/collection", data, method='POST')
@@ -261,10 +264,13 @@ class TraktChecker():
             myDB = db.DBConnection()
             sql_selection = 'select tv_shows.indexer, tv_shows.startyear, showid, show_name, season, episode, tv_episodes.status from tv_episodes,tv_shows where tv_shows.indexer_id = tv_episodes.showid'
             episodes = myDB.select(sql_selection)
+
             if episodes is not None:
                 trakt_data = []
+
                 for cur_episode in episodes:
                     trakt_id = sickbeard.indexerApi(cur_episode["indexer"]).config['trakt_id']
+
                     if self._checkInList(trakt_id, str(cur_episode["showid"]), str(cur_episode["season"]), str(cur_episode["episode"])):
                         if cur_episode["status"] not in Quality.SNATCHED + Quality.SNATCHED_PROPER + [UNKNOWN] + [WANTED]:
                             logger.log(u"Removing Episode %s S%02dE%02d from watchlist" %
@@ -272,7 +278,6 @@ class TraktChecker():
                             trakt_data.append((cur_episode["showid"], cur_episode["indexer"], cur_episode["show_name"], cur_episode["startyear"], cur_episode["season"], cur_episode["episode"]))
 
             if len(trakt_data):
-                
                 try:
                     data = self.trakt_bulk_data_generate(trakt_data)
                     self.trakt_api.traktRequest("sync/watchlist/remove", data, method='POST')
@@ -289,10 +294,13 @@ class TraktChecker():
             myDB = db.DBConnection()
             sql_selection = 'select tv_shows.indexer, tv_shows.startyear, showid, show_name, season, episode from tv_episodes,tv_shows where tv_shows.indexer_id = tv_episodes.showid and tv_episodes.status in (' + ','.join([str(x) for x in Quality.SNATCHED + Quality.SNATCHED_PROPER + [WANTED]]) + ')'
             episodes = myDB.select(sql_selection)
+
             if episodes is not None:
                 trakt_data = []
+
                 for cur_episode in episodes:
                     trakt_id = sickbeard.indexerApi(cur_episode["indexer"]).config['trakt_id']
+
                     if not self._checkInList(trakt_id, str(cur_episode["showid"]), str(cur_episode["season"]), str(cur_episode["episode"])):
                         logger.log(u"Adding Episode %s S%02dE%02d to watchlist" %
                         (cur_episode["show_name"], cur_episode["season"], cur_episode["episode"]), logger.DEBUG)
@@ -300,7 +308,6 @@ class TraktChecker():
                         cur_episode["episode"]))
 
                 if len(trakt_data):
-
                     try:
                         data = self.trakt_bulk_data_generate(trakt_data)
                         self.trakt_api.traktRequest("sync/watchlist", data, method='POST')
@@ -316,8 +323,10 @@ class TraktChecker():
 
             if sickbeard.showList is not None:
                 trakt_data = []
+
                 for show in sickbeard.showList:
                     trakt_id = sickbeard.indexerApi(show.indexer).config['trakt_id']
+
                     if not self._checkInList(trakt_id, str(show.indexerid), '0', '0', List='Show'):
                         logger.log(u"Adding Show: Indexer %s %s - %s to Watchlist" % (trakt_id, str(show.indexerid), show.name), logger.DEBUG)
                         show_el = {'title': show.name, 'year': show.startyear, 'ids': {}}
@@ -328,7 +337,6 @@ class TraktChecker():
                         trakt_data.append(show_el)
 
                 if len(trakt_data):
-                    
                     try:
                         data = {'shows': trakt_data}
                         self.trakt_api.traktRequest("sync/watchlist", data, method='POST')
@@ -366,6 +374,7 @@ class TraktChecker():
 
         indexer = int(sickbeard.TRAKT_DEFAULT_INDEXER)
         trakt_id = sickbeard.indexerApi(indexer).config['trakt_id']
+
         for show_el in self.ShowWatchlist[trakt_id]:
             indexer_id = int(str(show_el))
             show = self.ShowWatchlist[trakt_id][show_el]
@@ -378,6 +387,7 @@ class TraktChecker():
 
             if int(sickbeard.TRAKT_METHOD_ADD) == 1:
                 newShow = helpers.findCertainShow(sickbeard.showList, indexer_id)
+
                 if newShow is not None:
                     setEpisodeToWanted(newShow, 1, 1)
                 else:
@@ -403,7 +413,6 @@ class TraktChecker():
             indexer_id = int(show_el)
             show = self.EpisodeWatchlist[trakt_id][show_el]
 
-
             newShow = helpers.findCertainShow(sickbeard.showList, indexer_id)
 
             try:
@@ -411,14 +420,17 @@ class TraktChecker():
                     if indexer_id not in managed_show:
                         self.addDefaultShow(indexer, indexer_id, show['title'], SKIPPED)
                         managed_show.append(indexer_id)
+
                         for season_el in show['seasons']:
                             season = int(season_el)
+
                             for episode_el in show['seasons'][season_el]['episodes']:
                                 self.todoWanted.append((indexer_id, season, int(episode_el)))
                 else:
                     if newShow.indexer == indexer:
                         for season_el in show['seasons']:
                             season = int(season_el)
+
                             for episode_el in show['seasons'][season_el]['episodes']:
                                 setEpisodeToWanted(newShow, season, int(episode_el))
             except TypeError:
@@ -441,6 +453,7 @@ class TraktChecker():
             if location:
                 showPath = ek(os.path.join, location, helpers.sanitizeFileName(name))
                 dir_exists = helpers.makeDir(showPath)
+
                 if not dir_exists:
                     logger.log(u"Unable to create the folder %s , can't add the show" % showPath, logger.WARNING)
                     return
@@ -461,6 +474,7 @@ class TraktChecker():
     def manageNewShow(self, show):
         logger.log(u"Checking if trakt watch list wants to search for episodes from new show " + show.name, logger.DEBUG)
         episodes = [i for i in self.todoWanted if i[0] == show.indexerid]
+
         for episode in episodes:
             self.todoWanted.remove(episode)
             setEpisodeToWanted(show, episode[1], episode[2])
@@ -495,7 +509,6 @@ class TraktChecker():
         """
         Get Watchlist and parse once into addressable structure
         """
-
         try:
             self.ShowWatchlist = {'tvdb_id': {}, 'tvrage_id': {}}
             TraktShowWatchlist = self.trakt_api.traktRequest("sync/watchlist/shows")
@@ -505,8 +518,10 @@ class TraktChecker():
             for watchlist_el in TraktShowWatchlist:
                 tvdb = False
                 tvrage = False
+
                 if not watchlist_el['show']['ids']["tvdb"] is None:
                     tvdb = True
+
                 if not watchlist_el['show']['ids']["tvrage"] is None:
                     tvrage = True
 
@@ -516,21 +531,19 @@ class TraktChecker():
                 if tvdb:
                     showid = str(watchlist_el['show']['ids'][tvdb_id])
                     self.ShowWatchlist[tvdb_id + '_id'][showid] = {'id': showid, 'title': title, 'year': year}
+
                 if tvrage:
                     showid = str(watchlist_el['show']['ids'][tvrage_id])
                     self.ShowWatchlist[tvrage_id + '_id'][showid] = {'id': showid, 'title': title, 'year': year}
-
         except traktException as e:
             logger.log(u"Could not connect to trakt service, cannot download Show Watchlist: %s" % repr(e), logger.WARNING)
             return False
-
         return True
 
     def _getEpisodeWatchlist(self):
         """
          Get Watchlist and parse once into addressable structure
         """
-
         try:
             self.EpisodeWatchlist = {'tvdb_id': {}, 'tvrage_id': {}}
             TraktEpisodeWatchlist = self.trakt_api.traktRequest("sync/watchlist/episodes")
@@ -540,8 +553,10 @@ class TraktChecker():
             for watchlist_el in TraktEpisodeWatchlist:
                 tvdb = False
                 tvrage = False
+
                 if not watchlist_el['show']['ids']["tvdb"] is None:
                     tvdb = True
+
                 if not watchlist_el['show']['ids']["tvrage"] is None:
                     tvrage = True
 
@@ -552,6 +567,7 @@ class TraktChecker():
 
                 if tvdb:
                     showid = str(watchlist_el['show']['ids'][tvdb_id])
+
                     if not showid in self.EpisodeWatchlist[tvdb_id + '_id'].keys():
                         self.EpisodeWatchlist[tvdb_id + '_id'][showid] = {'id': showid, 'title': title, 'year': year, 'seasons': {}}
 
@@ -563,6 +579,7 @@ class TraktChecker():
 
                 if tvrage:
                     showid = str(watchlist_el['show']['ids'][tvrage_id])
+
                     if not showid in self.EpisodeWatchlist[tvrage_id + '_id'].keys():
                         self.EpisodeWatchlist[tvrage_id + '_id'][showid] = {'id': showid, 'title': title, 'year': year, 'seasons': {}}
 
@@ -571,20 +588,16 @@ class TraktChecker():
 
                     if not episode in self.EpisodeWatchlist[tvrage_id + '_id'][showid]['seasons'][season]['episodes'].keys():
                         self.EpisodeWatchlist[tvrage_id + '_id'][showid]['seasons'][season]['episodes'][episode] = episode
-
         except traktException as e:
             logger.log(u"Could not connect to trakt service, cannot download Episode Watchlist: %s" % repr(e), logger.WARNING)
             return False
-
         return True
 
     def _getShowCollection(self):
         """
         Get Collection and parse once into addressable structure
         """
-
         try:
-
             self.Collectionlist = {'tvdb_id': {}, 'tvrage_id': {}}
             logger.log(u"Getting Show Collection", logger.DEBUG)
             TraktCollectionList = self.trakt_api.traktRequest("sync/collection/shows")
@@ -594,8 +607,10 @@ class TraktChecker():
             for watchlist_el in TraktCollectionList:
                 tvdb = False
                 tvrage = False
+
                 if not watchlist_el['show']['ids']["tvdb"] is None:
                     tvdb = True
+
                 if not watchlist_el['show']['ids']["tvrage"] is None:
                     tvrage = True
 
@@ -610,6 +625,7 @@ class TraktChecker():
 
                             if tvdb:
                                 showid = str(watchlist_el['show']['ids'][tvdb_id])
+
                                 if not showid in self.Collectionlist[tvdb_id + '_id'].keys():
                                     self.Collectionlist[tvdb_id + '_id'][showid] = {'id': showid, 'title': title, 'year': year, 'seasons': {}}
 
@@ -621,6 +637,7 @@ class TraktChecker():
 
                             if tvrage:
                                 showid = str(watchlist_el['show']['ids'][tvrage_id])
+
                                 if not showid in self.Collectionlist[tvrage_id + '_id'].keys():
                                     self.Collectionlist[tvrage_id + '_id'][showid] = {'id': showid, 'title': title, 'year': year, 'seasons': {}}
 
@@ -629,24 +646,23 @@ class TraktChecker():
 
                                 if not episode in self.Collectionlist[tvrage_id + '_id'][showid]['seasons'][season]['episodes'].keys():
                                     self.Collectionlist[tvrage_id + '_id'][showid]['seasons'][season]['episodes'][episode] = episode
-
         except traktException as e:
             logger.log(u"Could not connect to trakt service, cannot download Show Collection: %s" % repr(e), logger.WARNING)
             return False
-
         return True
 
     def trakt_bulk_data_generate(self, data):
         """
         Build the JSON structure to send back to Trakt
         """
-
         uniqueShows = {}
         uniqueSeasons = {}
+
         for showid, indexerid, show_name, startyear, season, episode in data:
             if showid not in uniqueShows:
                 uniqueShows[showid] = {'title': show_name, 'year': startyear, 'ids': {}, 'seasons': []}
                 trakt_id = sickbeard.indexerApi(indexerid).config['trakt_id']
+
                 if trakt_id == 'tvdb_id':
                     uniqueShows[showid]['ids']["tvdb"] = showid
                 else:
@@ -661,10 +677,13 @@ class TraktChecker():
         # build the query
         showList = []
         seasonsList = {}
+
         for searchedShow in uniqueShows:
             seasonsList[searchedShow] = []
+
             for searchedSeason in uniqueSeasons[searchedShow]:
                 episodesList = []
+
                 for showid, indexerid, show_name, startyear, season, episode in data:
                     if season == searchedSeason and showid == searchedShow:
                         episodesList.append({'number': episode})
-- 
GitLab


From b0f531cba0990be886cdb4ceb2fa96eb8f565ed0 Mon Sep 17 00:00:00 2001
From: Labrys <labrys@users.noreply.github.com>
Date: Thu, 5 Nov 2015 05:18:04 -0500
Subject: [PATCH 020/215] PEP 8: Fix under-indented continuation lines

---
 sickbeard/traktChecker.py | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/sickbeard/traktChecker.py b/sickbeard/traktChecker.py
index e378bc20f..3247cdb3b 100644
--- a/sickbeard/traktChecker.py
+++ b/sickbeard/traktChecker.py
@@ -200,7 +200,7 @@ class TraktChecker():
                     if self._checkInList(trakt_id, str(cur_episode["showid"]), str(cur_episode["season"]), str(cur_episode["episode"]), List='Collection'):
                         if cur_episode["location"] == '':
                             logger.log(u"Removing Episode %s S%02dE%02d from collection" %
-                            (cur_episode["show_name"], cur_episode["season"], cur_episode["episode"]), logger.DEBUG)
+                                       (cur_episode["show_name"], cur_episode["season"], cur_episode["episode"]), logger.DEBUG)
                             trakt_data.append((cur_episode["showid"], cur_episode["indexer"], cur_episode["show_name"], cur_episode["startyear"], cur_episode["season"], cur_episode["episode"]))
 
             if len(trakt_data):
@@ -229,7 +229,7 @@ class TraktChecker():
 
                     if not self._checkInList(trakt_id, str(cur_episode["showid"]), str(cur_episode["season"]), str(cur_episode["episode"]), List='Collection'):
                         logger.log(u"Adding Episode %s S%02dE%02d to collection" %
-                        (cur_episode["show_name"], cur_episode["season"], cur_episode["episode"]), logger.DEBUG)
+                                   (cur_episode["show_name"], cur_episode["season"], cur_episode["episode"]), logger.DEBUG)
                         trakt_data.append((cur_episode["showid"], cur_episode["indexer"], cur_episode["show_name"], cur_episode["startyear"], cur_episode["season"], cur_episode["episode"]))
 
                 if len(trakt_data):
@@ -274,7 +274,7 @@ class TraktChecker():
                     if self._checkInList(trakt_id, str(cur_episode["showid"]), str(cur_episode["season"]), str(cur_episode["episode"])):
                         if cur_episode["status"] not in Quality.SNATCHED + Quality.SNATCHED_PROPER + [UNKNOWN] + [WANTED]:
                             logger.log(u"Removing Episode %s S%02dE%02d from watchlist" %
-                            (cur_episode["show_name"], cur_episode["season"], cur_episode["episode"]), logger.DEBUG)
+                                       (cur_episode["show_name"], cur_episode["season"], cur_episode["episode"]), logger.DEBUG)
                             trakt_data.append((cur_episode["showid"], cur_episode["indexer"], cur_episode["show_name"], cur_episode["startyear"], cur_episode["season"], cur_episode["episode"]))
 
             if len(trakt_data):
@@ -303,9 +303,9 @@ class TraktChecker():
 
                     if not self._checkInList(trakt_id, str(cur_episode["showid"]), str(cur_episode["season"]), str(cur_episode["episode"])):
                         logger.log(u"Adding Episode %s S%02dE%02d to watchlist" %
-                        (cur_episode["show_name"], cur_episode["season"], cur_episode["episode"]), logger.DEBUG)
+                                   (cur_episode["show_name"], cur_episode["season"], cur_episode["episode"]), logger.DEBUG)
                         trakt_data.append((cur_episode["showid"], cur_episode["indexer"], cur_episode["show_name"], cur_episode["startyear"], cur_episode["season"],
-                        cur_episode["episode"]))
+                                           cur_episode["episode"]))
 
                 if len(trakt_data):
                     try:
-- 
GitLab


From d7202f554a9fe0b32e190d2f9d7f057b7e479bc4 Mon Sep 17 00:00:00 2001
From: Labrys <labrys@users.noreply.github.com>
Date: Thu, 5 Nov 2015 05:20:29 -0500
Subject: [PATCH 021/215] PEP 8: Convert membership test from 'not x in y' to
 'x not in y'

---
 sickbeard/traktChecker.py | 24 ++++++++++++------------
 1 file changed, 12 insertions(+), 12 deletions(-)

diff --git a/sickbeard/traktChecker.py b/sickbeard/traktChecker.py
index 3247cdb3b..04699762f 100644
--- a/sickbeard/traktChecker.py
+++ b/sickbeard/traktChecker.py
@@ -568,25 +568,25 @@ class TraktChecker():
                 if tvdb:
                     showid = str(watchlist_el['show']['ids'][tvdb_id])
 
-                    if not showid in self.EpisodeWatchlist[tvdb_id + '_id'].keys():
+                    if showid not in self.EpisodeWatchlist[tvdb_id + '_id'].keys():
                         self.EpisodeWatchlist[tvdb_id + '_id'][showid] = {'id': showid, 'title': title, 'year': year, 'seasons': {}}
 
-                    if not season in self.EpisodeWatchlist[tvdb_id + '_id'][showid]['seasons'].keys():
+                    if season not in self.EpisodeWatchlist[tvdb_id + '_id'][showid]['seasons'].keys():
                         self.EpisodeWatchlist[tvdb_id + '_id'][showid]['seasons'][season] = {'s': season, 'episodes': {}}
 
-                    if not episode in self.EpisodeWatchlist[tvdb_id + '_id'][showid]['seasons'][season]['episodes'].keys():
+                    if episode not in self.EpisodeWatchlist[tvdb_id + '_id'][showid]['seasons'][season]['episodes'].keys():
                         self.EpisodeWatchlist[tvdb_id + '_id'][showid]['seasons'][season]['episodes'][episode] = episode
 
                 if tvrage:
                     showid = str(watchlist_el['show']['ids'][tvrage_id])
 
-                    if not showid in self.EpisodeWatchlist[tvrage_id + '_id'].keys():
+                    if showid not in self.EpisodeWatchlist[tvrage_id + '_id'].keys():
                         self.EpisodeWatchlist[tvrage_id + '_id'][showid] = {'id': showid, 'title': title, 'year': year, 'seasons': {}}
 
-                    if not season in self.EpisodeWatchlist[tvrage_id + '_id'][showid]['seasons'].keys():
+                    if season not in self.EpisodeWatchlist[tvrage_id + '_id'][showid]['seasons'].keys():
                         self.EpisodeWatchlist[tvrage_id + '_id'][showid]['seasons'][season] = {'s': season, 'episodes': {}}
 
-                    if not episode in self.EpisodeWatchlist[tvrage_id + '_id'][showid]['seasons'][season]['episodes'].keys():
+                    if episode not in self.EpisodeWatchlist[tvrage_id + '_id'][showid]['seasons'][season]['episodes'].keys():
                         self.EpisodeWatchlist[tvrage_id + '_id'][showid]['seasons'][season]['episodes'][episode] = episode
         except traktException as e:
             logger.log(u"Could not connect to trakt service, cannot download Episode Watchlist: %s" % repr(e), logger.WARNING)
@@ -626,25 +626,25 @@ class TraktChecker():
                             if tvdb:
                                 showid = str(watchlist_el['show']['ids'][tvdb_id])
 
-                                if not showid in self.Collectionlist[tvdb_id + '_id'].keys():
+                                if showid not in self.Collectionlist[tvdb_id + '_id'].keys():
                                     self.Collectionlist[tvdb_id + '_id'][showid] = {'id': showid, 'title': title, 'year': year, 'seasons': {}}
 
-                                if not season in self.Collectionlist[tvdb_id + '_id'][showid]['seasons'].keys():
+                                if season not in self.Collectionlist[tvdb_id + '_id'][showid]['seasons'].keys():
                                     self.Collectionlist[tvdb_id + '_id'][showid]['seasons'][season] = {'s': season, 'episodes': {}}
 
-                                if not episode in self.Collectionlist[tvdb_id + '_id'][showid]['seasons'][season]['episodes'].keys():
+                                if episode not in self.Collectionlist[tvdb_id + '_id'][showid]['seasons'][season]['episodes'].keys():
                                     self.Collectionlist[tvdb_id + '_id'][showid]['seasons'][season]['episodes'][episode] = episode
 
                             if tvrage:
                                 showid = str(watchlist_el['show']['ids'][tvrage_id])
 
-                                if not showid in self.Collectionlist[tvrage_id + '_id'].keys():
+                                if showid not in self.Collectionlist[tvrage_id + '_id'].keys():
                                     self.Collectionlist[tvrage_id + '_id'][showid] = {'id': showid, 'title': title, 'year': year, 'seasons': {}}
 
-                                if not season in self.Collectionlist[tvrage_id + '_id'][showid]['seasons'].keys():
+                                if season not in self.Collectionlist[tvrage_id + '_id'][showid]['seasons'].keys():
                                     self.Collectionlist[tvrage_id + '_id'][showid]['seasons'][season] = {'s': season, 'episodes': {}}
 
-                                if not episode in self.Collectionlist[tvrage_id + '_id'][showid]['seasons'][season]['episodes'].keys():
+                                if episode not in self.Collectionlist[tvrage_id + '_id'][showid]['seasons'][season]['episodes'].keys():
                                     self.Collectionlist[tvrage_id + '_id'][showid]['seasons'][season]['episodes'][episode] = episode
         except traktException as e:
             logger.log(u"Could not connect to trakt service, cannot download Show Collection: %s" % repr(e), logger.WARNING)
-- 
GitLab


From 5d7718603f83cb67097ca18c85130f10b28e05fd Mon Sep 17 00:00:00 2001
From: Labrys <labrys@users.noreply.github.com>
Date: Thu, 5 Nov 2015 05:36:55 -0500
Subject: [PATCH 022/215] PEP 263: Add encoding declaration

---
 sickbeard/traktChecker.py | 1 +
 1 file changed, 1 insertion(+)

diff --git a/sickbeard/traktChecker.py b/sickbeard/traktChecker.py
index 04699762f..2047ab45f 100644
--- a/sickbeard/traktChecker.py
+++ b/sickbeard/traktChecker.py
@@ -1,3 +1,4 @@
+# coding=utf-8
 # Author: Frank Fenton
 # URL: http://code.google.com/p/sickbeard/
 #
-- 
GitLab


From 792ff3bd9619254711192c3258631ee042f66ed8 Mon Sep 17 00:00:00 2001
From: labrys <labrys@useres.noreply.github.com>
Date: Thu, 5 Nov 2015 08:53:51 -0500
Subject: [PATCH 023/215] Convert to new style classes

---
 sickbeard/traktChecker.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/sickbeard/traktChecker.py b/sickbeard/traktChecker.py
index 2047ab45f..5f81ed3ad 100644
--- a/sickbeard/traktChecker.py
+++ b/sickbeard/traktChecker.py
@@ -60,7 +60,7 @@ def setEpisodeToWanted(show, s, e):
         logger.log(u"Starting backlog search for %s S%02dE%02d because some episodes were set to wanted" % (show.name, s, e))
 
 
-class TraktChecker():
+class TraktChecker(object):
     def __init__(self):
         self.trakt_api = TraktAPI(sickbeard.SSL_VERIFY, sickbeard.TRAKT_TIMEOUT)
         self.todoBacklog = []
-- 
GitLab


From 9a76b2559432cdafd4d5cbf19d84a47b609c1a5b Mon Sep 17 00:00:00 2001
From: Labrys <labrys@users.noreply.github.com>
Date: Wed, 4 Nov 2015 02:58:41 -0500
Subject: [PATCH 024/215] PEP 8: Remove excess blank lines

---
 SickBeard.py | 9 ++++-----
 1 file changed, 4 insertions(+), 5 deletions(-)

diff --git a/SickBeard.py b/SickBeard.py
index 7954af972..bcfabd2a0 100755
--- a/SickBeard.py
+++ b/SickBeard.py
@@ -92,7 +92,6 @@ class SickRage(object):
         self.log_dir = None
         self.consoleLogging = True
 
-
     @staticmethod
     def help_message():
         """
@@ -127,7 +126,6 @@ class SickRage(object):
 
     @staticmethod
     def fix_clients_nonsense():
-
         filenames = [
             "sickbeard/clients/download_station.py",
             "sickbeard/clients/utorrent.py",
@@ -140,11 +138,13 @@ class SickRage(object):
 
         for filename in filenames:
             filename = ek(os.path.join, sickbeard.PROG_DIR, filename)
+
             try:
                 if ek(os.path.exists, filename):
                     ek(os.remove, filename)
             except Exception:
                 pass
+
             try:
                 if ek(os.path.exists, filename + "c"):
                     ek(os.remove, filename + "c")
@@ -422,7 +422,6 @@ class SickRage(object):
         # Daemons traditionally run with umask 0 anyways and this should not have repercussions
         os.umask(0)
 
-
         # Make the child a session-leader by detaching from the terminal
         try:
             pid = os.fork()  # @UndefinedVariable - only available in UNIX
@@ -436,6 +435,7 @@ class SickRage(object):
         if self.CREATEPID:
             pid = str(os.getpid())
             logger.log(u"Writing PID: " + pid + " to " + str(self.PIDFILE))
+
             try:
                 file(self.PIDFILE, 'w').write("%s\n" % pid)
             except IOError, e:
@@ -460,7 +460,6 @@ class SickRage(object):
         try:
             if os.path.exists(PIDFILE):
                 os.remove(PIDFILE)
-
         except (IOError, OSError):
             return False
 
@@ -471,7 +470,6 @@ class SickRage(object):
         """
         Populates the showList with shows from the database
         """
-
         logger.log(u"Loading initial show list", logger.DEBUG)
 
         myDB = db.DBConnection()
@@ -517,6 +515,7 @@ class SickRage(object):
             if self.webserver:
                 logger.log("Shutting down Tornado")
                 self.webserver.shutDown()
+
                 try:
                     self.webserver.join(10)
                 except Exception:
-- 
GitLab


From 941de3917da0d0bf304bc9b25fb1b54f5d3cff79 Mon Sep 17 00:00:00 2001
From: Labrys <labrys@users.noreply.github.com>
Date: Thu, 5 Nov 2015 02:27:48 -0500
Subject: [PATCH 025/215] Streamline datetime call for backup file
 time-stamping

---
 SickBeard.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/SickBeard.py b/SickBeard.py
index bcfabd2a0..6121919cc 100755
--- a/SickBeard.py
+++ b/SickBeard.py
@@ -495,7 +495,7 @@ class SickRage(object):
             for filename in filesList:
                 srcFile = os.path.join(srcDir, filename)
                 dstFile = os.path.join(dstDir, filename)
-                bakFile = os.path.join(dstDir, '{0}.bak-{1}'.format(filename, datetime.datetime.strftime(datetime.datetime.now(), '%Y%m%d_%H%M%S')))
+                bakFile = os.path.join(dstDir, '{0}.bak-{1}'.format(filename, datetime.datetime.now().strftime('%Y%m%d_%H%M%S')))
                 if os.path.isfile(dstFile):
                     shutil.move(dstFile, bakFile)
                 shutil.move(srcFile, dstFile)
-- 
GitLab


From cf725bad4b00e771326791e78142adc17dfc0448 Mon Sep 17 00:00:00 2001
From: Labrys <labrys@users.noreply.github.com>
Date: Thu, 5 Nov 2015 02:30:03 -0500
Subject: [PATCH 026/215] PEP 263: Add encoding declaration

---
 SickBeard.py | 1 +
 1 file changed, 1 insertion(+)

diff --git a/SickBeard.py b/SickBeard.py
index 6121919cc..a87ac4946 100755
--- a/SickBeard.py
+++ b/SickBeard.py
@@ -1,4 +1,5 @@
 #!/usr/bin/env python2.7
+# coding=utf-8
 # Author: Nic Wolfe <nic@wolfeden.ca>
 # URL: http://code.google.com/p/sickbeard/
 #
-- 
GitLab


From ce124e5ea87e774d74a0c7fa37cef57cbb1e188e Mon Sep 17 00:00:00 2001
From: labrys <labrys@useres.noreply.github.com>
Date: Thu, 5 Nov 2015 09:25:44 -0500
Subject: [PATCH 027/215] Add comments for existing pylint codes

---
 SickBeard.py | 11 +++++++++++
 1 file changed, 11 insertions(+)

diff --git a/SickBeard.py b/SickBeard.py
index a87ac4946..a72addfdd 100755
--- a/SickBeard.py
+++ b/SickBeard.py
@@ -21,6 +21,7 @@
 # Check needed software dependencies to nudge users to fix their setup
 
 # pylint: disable=W0703
+# Catching too general exception
 
 from __future__ import with_statement
 
@@ -49,6 +50,7 @@ if sys.version_info < (2, 7):
 if sys.version_info >= (2, 7, 9):
     import ssl
     # pylint: disable=W0212
+    # Access to a protected member of a client class
     ssl._create_default_https_context = ssl._create_unverified_context
 
 import locale
@@ -72,6 +74,7 @@ signal.signal(signal.SIGTERM, sickbeard.sig_handler)
 
 class SickRage(object):
     # pylint: disable=R0902
+    # Too many instance attributes
     def __init__(self):
         # system event callback for shutdown/restart
         sickbeard.events = Events(self.shutdown)
@@ -153,6 +156,8 @@ class SickRage(object):
                 pass
 
     # pylint: disable=R0912,R0915
+    # Too many branches
+    # Too many statements
     def start(self):
         # do some preliminary stuff
         sickbeard.MY_FULLNAME = os.path.normpath(os.path.abspath(__file__))
@@ -177,11 +182,13 @@ class SickRage(object):
 
         if sys.platform == 'win32':
             # pylint: disable=E1101
+            # An object is accessed for a non-existent member.
             if sys.getwindowsversion()[0] >= 6 and sys.stdout.encoding == 'cp65001':
                 sickbeard.SYS_ENCODING = 'UTF-8'
 
         try:
             # pylint: disable=E1101
+            # An object is accessed for a non-existent member.
             # On non-unicode builds this will raise an AttributeError, if encoding type is not valid it throws a LookupError
             sys.setdefaultencoding(sickbeard.SYS_ENCODING)
         except Exception:
@@ -196,6 +203,7 @@ class SickRage(object):
 
         try:
             # pylint: disable=W0612
+            # Unused variable
             opts, args = getopt.getopt(sys.argv[1:], "hqdp::",
                                        ['help', 'quiet', 'nolaunch', 'daemon', 'pidfile=', 'port=',
                                         'datadir=', 'config=', 'noresize'])  # @UnusedVariable
@@ -405,6 +413,8 @@ class SickRage(object):
         Fork off as a daemon
         """
         # pylint: disable=E1101,W0212
+        # An object is accessed for a non-existent member.
+        # Access to a protected member of a client class
         # Make a non-session-leader child process
         try:
             pid = os.fork()  # @UndefinedVariable - only available in UNIX
@@ -547,6 +557,7 @@ class SickRage(object):
         # system exit
         logger.shutdown()  # Make sure the logger has stopped, just in case
         # pylint: disable=W0212
+        # Access to a protected member of a client class
         os._exit(0)
 
 
-- 
GitLab


From b5333d881b008e9ae72cbf635b9b34fcb3caae5e Mon Sep 17 00:00:00 2001
From: Labrys <labrys@users.noreply.github.com>
Date: Thu, 5 Nov 2015 07:02:30 -0500
Subject: [PATCH 028/215] PEP 8: Add missing whitespace around operators and
 removed excess

---
 sickbeard/helpers.py | 27 +++++++++++++++++++++------
 1 file changed, 21 insertions(+), 6 deletions(-)

diff --git a/sickbeard/helpers.py b/sickbeard/helpers.py
index cd195401e..473e50c80 100644
--- a/sickbeard/helpers.py
+++ b/sickbeard/helpers.py
@@ -87,18 +87,19 @@ def fixGlob(path):
     path = re.sub(r'\[', '[[]', path)
     return re.sub(r'(?<!\[)\]', '[]]', path)
 
+
 def indentXML(elem, level=0):
     '''
     Does our pretty printing, makes Matt very happy
     '''
-    i = "\n" + level*"  "
+    i = "\n" + level * "  "
     if len(elem):
         if not elem.text or not elem.text.strip():
             elem.text = i + "  "
         if not elem.tail or not elem.tail.strip():
             elem.tail = i
         for elem in elem:
-            indentXML(elem, level+1)
+            indentXML(elem, level + 1)
         if not elem.tail or not elem.tail.strip():
             elem.tail = i
     else:
@@ -158,8 +159,8 @@ def remove_non_release_groups(name):
                        r'^\[www\.Cpasbien\.pe\] ':          'searchre',
                        r'^\[www\.Cpasbien\.com\] ':         'searchre',
                        r'^\[ www\.Cpasbien\.pw \] ':        'searchre',
-                       r'^\.www\.Cpasbien\.pw':            'searchre',
-                       r'^\[www\.newpct1\.com\]':            'searchre',
+                       r'^\.www\.Cpasbien\.pw':             'searchre',
+                       r'^\[www\.newpct1\.com\]':           'searchre',
                        r'^\[ www\.Cpasbien\.com \] ':       'searchre',
                        r'- \{ www\.SceneTime\.com \}$':     'searchre',
                        r'^\{ www\.SceneTime\.com \} - ':    'searchre',
@@ -211,6 +212,7 @@ def notTorNZBFile(filename):
 
     return not (filename.endswith(".torrent") or filename.endswith(".nzb"))
 
+
 def isSyncFile(filename):
     """
     Returns true if filename is a syncfile, indicating filesystem may be in flux
@@ -220,7 +222,7 @@ def isSyncFile(filename):
     """
 
     extension = filename.rpartition(".")[2].lower()
-    #if extension == '!sync' or extension == 'lftp-pget-status' or extension == 'part' or extension == 'bts':
+    # if extension == '!sync' or extension == 'lftp-pget-status' or extension == 'part' or extension == 'bts':
     syncfiles = sickbeard.SYNC_FILES
     if extension in syncfiles.split(",") or filename.startswith('.syncthing'):
         return True
@@ -306,7 +308,7 @@ def sanitizeFileName(name):
     # remove bad chars from the filename
     name = re.sub(r'[\\/\*]', '-', name)
     name = re.sub(r'[:"<>|?]', '', name)
-    name = re.sub(ur'\u2122', '', name) # Trade Mark Sign
+    name = re.sub(ur'\u2122', '', name)  # Trade Mark Sign
 
     # remove leading/trailing periods and spaces
     name = name.strip(' .')
@@ -352,6 +354,7 @@ def findCertainShow(showList, indexerid):
     elif len(results) > 1:
         raise MultipleShowObjectsException()
 
+
 def makeDir(path):
     """
     Make a directory on the filesystem
@@ -468,6 +471,7 @@ def searchIndexerForShowID(regShowName, indexer=None, indexer_id=None, ui=None):
 
     return (None, None, None)
 
+
 def listMediaFiles(path):
     """
     Get a list of files possibly containing media in a path
@@ -945,6 +949,7 @@ def arithmeticEval(s):
 
     return _eval(node.body)
 
+
 def create_https_certificates(ssl_cert, ssl_key):
     """
     Create self-signed HTTPS certificares and store in paths 'ssl_cert' and 'ssl_key'
@@ -1117,6 +1122,7 @@ def get_lan_ip():
     except Exception:
         return socket.gethostname()
 
+
 def check_url(url):
     """
     Check if a URL exists without downloading the whole file.
@@ -1159,6 +1165,7 @@ To add a new encryption_version:
 # Key Generators
 unique_key1 = hex(uuid.getnode() ** 2)  # Used in encryption v1
 
+
 # Encryption Functions
 def encrypt(data, encryption_version=0, _decrypt=False):
     # Version 1: Simple XOR encryption (this is not very secure, but works)
@@ -1528,6 +1535,7 @@ def _getTempDir():
 
     return os.path.join(tempfile.gettempdir(), "sickrage-%s" % (uid))
 
+
 def codeDescription(status_code):
     """
     Returns the description of the URL error code
@@ -1755,6 +1763,7 @@ def generateApiKey():
     logger.log(u"New API generated")
     return m.hexdigest()
 
+
 def pretty_filesize(file_bytes):
     """Return humanly formatted sizes from bytes"""
     for mod in ['B', 'KB', 'MB', 'GB', 'TB', 'PB']:
@@ -1766,16 +1775,19 @@ if __name__ == '__main__':
     import doctest
     doctest.testmod()
 
+
 def remove_article(text=''):
     """Remove the english articles from a text string"""
 
     return re.sub(r'(?i)^(?:(?:A(?!\s+to)n?)|The)\s(\w)', r'\1', text)
 
+
 def generateCookieSecret():
     """Generate a new cookie secret"""
 
     return base64.b64encode(uuid.uuid4().bytes + uuid.uuid4().bytes)
 
+
 def verify_freespace(src, dest, oldfile=None):
     """
     Checks if the target system has enough free space to copy or move a file.
@@ -1840,6 +1852,7 @@ def verify_freespace(src, dest, oldfile=None):
                    % (neededspace, pretty_filesize(neededspace), diskfree, pretty_filesize(diskfree)), logger.WARNING)
         return False
 
+
 # https://gist.github.com/thatalextaylor/7408395
 def pretty_time_delta(seconds):
     sign_string = '-' if seconds < 0 else ''
@@ -1860,6 +1873,7 @@ def pretty_time_delta(seconds):
 
     return time_delta
 
+
 def isFileLocked(checkfile, writeLockCheck=False):
     '''
     Checks to see if a file is locked. Performs three checks
@@ -1896,6 +1910,7 @@ def isFileLocked(checkfile, writeLockCheck=False):
 
     return False
 
+
 def getDiskSpaceUsage(diskPath=None):
     '''
     returns the free space in human readable bytes for a given path or False if no path given
-- 
GitLab


From 8cd170c077fe219e4326fe8d9f97f536374271b6 Mon Sep 17 00:00:00 2001
From: labrys <labrys@useres.noreply.github.com>
Date: Thu, 5 Nov 2015 13:33:33 -0500
Subject: [PATCH 029/215] PEP 8: Fix indentation

---
 sickbeard/helpers.py | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

diff --git a/sickbeard/helpers.py b/sickbeard/helpers.py
index 473e50c80..966e62d82 100644
--- a/sickbeard/helpers.py
+++ b/sickbeard/helpers.py
@@ -170,7 +170,7 @@ def remove_non_release_groups(name):
                        r'\[NO-RAR\] - \[ www\.torrentday\.com \]$': 'searchre',
                        r'- \[ www\.torrentday\.com \]$':            'searchre',
                        r'^\[ www\.TorrentDay\.com \] - ':           'searchre',
-                      }
+                       }
 
     _name = name
     for remove_string, remove_type in removeWordsList.iteritems():
@@ -1813,8 +1813,7 @@ def verify_freespace(src, dest, oldfile=None):
         import sys
 
         def disk_usage(path):
-            _, total, free = ctypes.c_ulonglong(), ctypes.c_ulonglong(), \
-                               ctypes.c_ulonglong()
+            _, total, free = ctypes.c_ulonglong(), ctypes.c_ulonglong(), ctypes.c_ulonglong()
             if sys.version_info >= (3,) or isinstance(path, unicode):
                 fun = ctypes.windll.kernel32.GetDiskFreeSpaceExW
             else:
-- 
GitLab


From 0fcb652db77ea3f9e8b7786f227e637505a8f7cc Mon Sep 17 00:00:00 2001
From: labrys <labrys@useres.noreply.github.com>
Date: Thu, 5 Nov 2015 14:03:04 -0500
Subject: [PATCH 030/215] PEP 257: Convert docstrings to triple double-quoted
 docstrings

---
 sickbeard/helpers.py | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/sickbeard/helpers.py b/sickbeard/helpers.py
index 966e62d82..093d6f887 100644
--- a/sickbeard/helpers.py
+++ b/sickbeard/helpers.py
@@ -89,9 +89,9 @@ def fixGlob(path):
 
 
 def indentXML(elem, level=0):
-    '''
+    """
     Does our pretty printing, makes Matt very happy
-    '''
+    """
     i = "\n" + level * "  "
     if len(elem):
         if not elem.text or not elem.text.strip():
@@ -1874,7 +1874,7 @@ def pretty_time_delta(seconds):
 
 
 def isFileLocked(checkfile, writeLockCheck=False):
-    '''
+    """
     Checks to see if a file is locked. Performs three checks
         1. Checks if the file even exists
         2. Attempts to open the file for reading. This will determine if the file has a write lock.
@@ -1884,7 +1884,7 @@ def isFileLocked(checkfile, writeLockCheck=False):
             or deleted.
     :param file: the file being checked
     :param writeLockCheck: when true will check if the file is locked for writing (prevents move operations)
-    '''
+    """
 
     checkfile = ek(os.path.abspath, checkfile)
 
@@ -1911,10 +1911,10 @@ def isFileLocked(checkfile, writeLockCheck=False):
 
 
 def getDiskSpaceUsage(diskPath=None):
-    '''
+    """
     returns the free space in human readable bytes for a given path or False if no path given
     :param diskPath: the filesystem path being checked
-    '''
+    """
     if diskPath and os.path.exists(diskPath):
         if platform.system() == 'Windows':
             free_bytes = ctypes.c_ulonglong(0)
-- 
GitLab


From 59db3d179b7c3a9433a9bcc0e72180d3e3e7cdf9 Mon Sep 17 00:00:00 2001
From: labrys <labrys@useres.noreply.github.com>
Date: Thu, 5 Nov 2015 14:04:37 -0500
Subject: [PATCH 031/215] PEP 263: Add encoding declaration

---
 sickbeard/helpers.py | 1 +
 1 file changed, 1 insertion(+)

diff --git a/sickbeard/helpers.py b/sickbeard/helpers.py
index 093d6f887..b039cca90 100644
--- a/sickbeard/helpers.py
+++ b/sickbeard/helpers.py
@@ -1,3 +1,4 @@
+# coding=utf-8
 # Author: Nic Wolfe <nic@wolfeden.ca>
 # URL: https://sickrage.tv
 # Git: https://github.com/SiCKRAGETV/SickRage.git
-- 
GitLab


From 8d68fb947ddb20b7826f18698ca67c42088fc4d9 Mon Sep 17 00:00:00 2001
From: labrys <labrys@useres.noreply.github.com>
Date: Thu, 5 Nov 2015 14:07:11 -0500
Subject: [PATCH 032/215] Remove redundant parentheses

---
 sickbeard/helpers.py | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/sickbeard/helpers.py b/sickbeard/helpers.py
index b039cca90..cf17110f8 100644
--- a/sickbeard/helpers.py
+++ b/sickbeard/helpers.py
@@ -463,14 +463,14 @@ def searchIndexerForShowID(regShowName, indexer=None, indexer_id=None, ui=None):
             ShowObj = findCertainShow(sickbeard.showList, int(series_id))
             # Check if we can find the show in our list (if not, it's not the right show)
             if (indexer_id is None) and (ShowObj is not None) and (ShowObj.indexerid == int(series_id)):
-                return (seriesname, i, int(series_id))
+                return seriesname, i, int(series_id)
             elif (indexer_id is not None) and (int(indexer_id) == int(series_id)):
-                return (seriesname, i, int(indexer_id))
+                return seriesname, i, int(indexer_id)
 
         if indexer:
             break
 
-    return (None, None, None)
+    return None, None, None
 
 
 def listMediaFiles(path):
@@ -820,7 +820,7 @@ def fixSetGroupID(childPath):
 
         try:
             ek(os.chown, childPath, -1, parentGID)  # @UndefinedVariable - only available on UNIX
-            logger.log(u"Respecting the set-group-ID bit on the parent directory for %s" % (childPath), logger.DEBUG)
+            logger.log(u"Respecting the set-group-ID bit on the parent directory for %s" % childPath, logger.DEBUG)
         except OSError:
             logger.log(
                 u"Failed to respect the set-group-ID bit on the parent directory for %s (setting group ID %i)" % (
@@ -886,7 +886,7 @@ def get_all_episodes_from_absolute_number(show, absolute_numbers, indexer_id=Non
                 episodes.append(ep.episode)
                 season = ep.season  # this will always take the last found season so eps that cross the season border are not handeled well
 
-    return (season, episodes)
+    return season, episodes
 
 
 def sanitizeSceneName(name, anime=False):
@@ -1534,7 +1534,7 @@ def _getTempDir():
         except ImportError:
             return os.path.join(tempfile.gettempdir(), "sickrage")
 
-    return os.path.join(tempfile.gettempdir(), "sickrage-%s" % (uid))
+    return os.path.join(tempfile.gettempdir(), "sickrage-%s" % uid)
 
 
 def codeDescription(status_code):
-- 
GitLab


From a6cb6255fcc66e6bc0f7b70fd377ae956bb7190d Mon Sep 17 00:00:00 2001
From: labrys <labrys@useres.noreply.github.com>
Date: Thu, 5 Nov 2015 14:00:39 -0500
Subject: [PATCH 033/215] Streamline datetime call for backup file
 time-stamping

---
 sickbeard/helpers.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/sickbeard/helpers.py b/sickbeard/helpers.py
index cf17110f8..c9d8cb948 100644
--- a/sickbeard/helpers.py
+++ b/sickbeard/helpers.py
@@ -1421,7 +1421,7 @@ def restoreConfigZip(archive, targetDir):
             def path_leaf(path):
                 head, tail = os.path.split(path)
                 return tail or os.path.basename(head)
-            bakFilename = '{0}-{1}'.format(path_leaf(targetDir), datetime.datetime.strftime(datetime.datetime.now(), '%Y%m%d_%H%M%S'))
+            bakFilename = '{0}-{1}'.format(path_leaf(targetDir), datetime.datetime.now().strftime('%Y%m%d_%H%M%S'))
             shutil.move(targetDir, os.path.join(os.path.dirname(targetDir), bakFilename))
 
         zip_file = zipfile.ZipFile(archive, 'r', allowZip64=True)
-- 
GitLab


From c12733b81fc3ef285267a071a0dacb12a0d77f39 Mon Sep 17 00:00:00 2001
From: labrys <labrys@useres.noreply.github.com>
Date: Thu, 5 Nov 2015 09:51:34 -0500
Subject: [PATCH 034/215] PEP 8: Convert membership test from 'not x in y' to
 'x not in y'

---
 sickbeard/helpers.py | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/sickbeard/helpers.py b/sickbeard/helpers.py
index c9d8cb948..96fbd39f5 100644
--- a/sickbeard/helpers.py
+++ b/sickbeard/helpers.py
@@ -1562,7 +1562,7 @@ def _setUpSession(session, headers):
     session = CacheControl(sess=session, cache=caches.FileCache(os.path.join(cache_dir, 'sessions'), use_dir_lock=True), cache_etags=False)
 
     # request session clear residual referer
-    if 'Referer' in session.headers and not 'Referer' in headers:
+    if 'Referer' in session.headers and 'Referer' not in headers:
         session.headers.pop('Referer')
 
     # request session headers
@@ -1573,7 +1573,7 @@ def _setUpSession(session, headers):
     session.verify = certifi.where() if sickbeard.SSL_VERIFY else False
 
     # request session proxies
-    if not 'Referer' in session.headers and sickbeard.PROXY_SETTING:
+    if 'Referer' not in session.headers and sickbeard.PROXY_SETTING:
         logger.log("Using proxy: " + sickbeard.PROXY_SETTING, logger.DEBUG)
         scheme, address = urllib2.splittype(sickbeard.PROXY_SETTING)
         address = sickbeard.PROXY_SETTING if scheme else 'http://' + sickbeard.PROXY_SETTING
-- 
GitLab


From a9ff03aae3077899d9e59499ad99527dfa5c1bae Mon Sep 17 00:00:00 2001
From: labrys <labrys@useres.noreply.github.com>
Date: Thu, 5 Nov 2015 13:54:15 -0500
Subject: [PATCH 035/215] PEP 8: Convert None comparisons from operators to 'is
 / is not None'

---
 sickbeard/helpers.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/sickbeard/helpers.py b/sickbeard/helpers.py
index 96fbd39f5..a32f310f4 100644
--- a/sickbeard/helpers.py
+++ b/sickbeard/helpers.py
@@ -1501,7 +1501,7 @@ def touchFile(fname, atime=None):
     :return: True on success, False on failure
     """
 
-    if None != atime:
+    if atime is not None:
         try:
             with file(fname, 'a'):
                 os.utime(fname, (atime, atime))
-- 
GitLab


From 5d9cbdf7838544c49e2d674cf0961acbc5f37444 Mon Sep 17 00:00:00 2001
From: labrys <labrys@useres.noreply.github.com>
Date: Thu, 5 Nov 2015 13:56:19 -0500
Subject: [PATCH 036/215] PEP 8: Convert lambda expression to a def

---
 sickbeard/helpers.py | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/sickbeard/helpers.py b/sickbeard/helpers.py
index a32f310f4..3a639b59e 100644
--- a/sickbeard/helpers.py
+++ b/sickbeard/helpers.py
@@ -1314,7 +1314,9 @@ def set_up_anidb_connection():
         return False
 
     if not sickbeard.ADBA_CONNECTION:
-        anidb_logger = lambda x: logger.log("anidb: %s " % x, logger.DEBUG)
+        def anidb_logger(msg):
+            return logger.log("anidb: %s " % msg, logger.DEBUG)
+
         try:
             sickbeard.ADBA_CONNECTION = adba.Connection(keepAlive=True, log=anidb_logger)
         except Exception as e:
-- 
GitLab


From 546812423a43dbb9417d1e1985fdf8eccf79e75f Mon Sep 17 00:00:00 2001
From: Alison Winters <alisonatwork@gmail.com>
Date: Thu, 5 Nov 2015 21:34:59 +0100
Subject: [PATCH 037/215] make sure the caret is in the right place on -xs
 (mobile) layout

---
 gui/slick/views/layouts/main.mako | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/gui/slick/views/layouts/main.mako b/gui/slick/views/layouts/main.mako
index 54f227cd2..a9c233576 100644
--- a/gui/slick/views/layouts/main.mako
+++ b/gui/slick/views/layouts/main.mako
@@ -166,7 +166,7 @@
                         </li>
 
                         <li id="NAVconfig" class="navbar-split dropdown${('', ' active')[topmenu == 'config']}">
-                            <a href="${srRoot}/config/" class="dropdown-toggle" data-toggle="dropdown" data-hover="dropdown"><span class="visible-xs">Config</span><img src="${srRoot}/images/menu/system18.png" class="navbaricon hidden-xs" />
+                            <a href="${srRoot}/config/" class="dropdown-toggle" data-toggle="dropdown" data-hover="dropdown"><span class="visible-xs-inline">Config</span><img src="${srRoot}/images/menu/system18.png" class="navbaricon hidden-xs" />
                             <b class="caret"></b>
                             </a>
                             <ul class="dropdown-menu">
@@ -203,7 +203,7 @@
                                 toolsBadge = ''
                         %>
                         <li id="NAVsystem" class="navbar-split dropdown${('', ' active')[topmenu == 'system']}">
-                            <a href="${srRoot}/home/status/" class="dropdown-toggle" data-toggle="dropdown" data-hover="dropdown"><span class="visible-xs">Tools</span><img src="${srRoot}/images/menu/system18-2.png" class="navbaricon hidden-xs" />${toolsBadge}
+                            <a href="${srRoot}/home/status/" class="dropdown-toggle" data-toggle="dropdown" data-hover="dropdown"><span class="visible-xs-inline">Tools</span><img src="${srRoot}/images/menu/system18-2.png" class="navbaricon hidden-xs" />${toolsBadge}
                             <b class="caret"></b>
                             </a>
                             <ul class="dropdown-menu">
-- 
GitLab


From 60fed92c90454ac6e0a03e1a3509e785a826d6a2 Mon Sep 17 00:00:00 2001
From: Fernando <fernandog@users.noreply.github.com>
Date: Thu, 5 Nov 2015 19:35:54 -0200
Subject: [PATCH 038/215] Allow user to submit 'Unknown error code' message

---
 sickbeard/helpers.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/sickbeard/helpers.py b/sickbeard/helpers.py
index cd195401e..1d9b67a22 100644
--- a/sickbeard/helpers.py
+++ b/sickbeard/helpers.py
@@ -1535,7 +1535,7 @@ def codeDescription(status_code):
     if status_code in clients.http_error_code:
         return clients.http_error_code[status_code]
     else:
-        logger.log(u"Unknown error code. Please submit an issue", logger.WARNING)
+        logger.log(u"Unknown error code: %s. Please submit an issue" % status_code , logger.ERROR)
         return 'unknown'
 
 
-- 
GitLab


From 0a8ec34a21fb649d790ae3d288594306ab49b418 Mon Sep 17 00:00:00 2001
From: Alison Winters <alisonatwork@gmail.com>
Date: Thu, 5 Nov 2015 22:43:16 +0100
Subject: [PATCH 039/215] add aria-haspopup to force ie11/edge to emulate hover
 on these elements, also add superfluous span so that bootstrap-hover-dropdown
 correctly attaches the events

---
 gui/slick/views/layouts/main.mako | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/gui/slick/views/layouts/main.mako b/gui/slick/views/layouts/main.mako
index a9c233576..4dbb89fe3 100644
--- a/gui/slick/views/layouts/main.mako
+++ b/gui/slick/views/layouts/main.mako
@@ -109,7 +109,7 @@
                 <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
                     <ul class="nav navbar-nav navbar-right">
                         <li id="NAVhome" class="navbar-split dropdown${('', ' active')[topmenu == 'home']}">
-                            <a href="${srRoot}/home/" class="dropdown-toggle" data-toggle="dropdown" data-hover="dropdown">Shows
+                            <a href="${srRoot}/home/" class="dropdown-toggle" aria-haspopup="true" data-toggle="dropdown" data-hover="dropdown"><span>Shows</span>
                             <b class="caret"></b>
                             </a>
                             <ul class="dropdown-menu">
@@ -135,7 +135,7 @@
                         </li>
 
                         <li id="NAVmanage" class="navbar-split dropdown${('', ' active')[topmenu == 'manage']}">
-                            <a href="${srRoot}/manage/episodeStatuses/" class="dropdown-toggle" data-toggle="dropdown" data-hover="dropdown">Manage
+                            <a href="${srRoot}/manage/episodeStatuses/" class="dropdown-toggle" aria-haspopup="true" data-toggle="dropdown" data-hover="dropdown"><span>Manage</span>
                             <b class="caret"></b>
                             </a>
                             <ul class="dropdown-menu">
@@ -166,7 +166,7 @@
                         </li>
 
                         <li id="NAVconfig" class="navbar-split dropdown${('', ' active')[topmenu == 'config']}">
-                            <a href="${srRoot}/config/" class="dropdown-toggle" data-toggle="dropdown" data-hover="dropdown"><span class="visible-xs-inline">Config</span><img src="${srRoot}/images/menu/system18.png" class="navbaricon hidden-xs" />
+                            <a href="${srRoot}/config/" class="dropdown-toggle" aria-haspopup="true" data-toggle="dropdown" data-hover="dropdown"><span class="visible-xs-inline">Config</span><img src="${srRoot}/images/menu/system18.png" class="navbaricon hidden-xs" />
                             <b class="caret"></b>
                             </a>
                             <ul class="dropdown-menu">
@@ -203,7 +203,7 @@
                                 toolsBadge = ''
                         %>
                         <li id="NAVsystem" class="navbar-split dropdown${('', ' active')[topmenu == 'system']}">
-                            <a href="${srRoot}/home/status/" class="dropdown-toggle" data-toggle="dropdown" data-hover="dropdown"><span class="visible-xs-inline">Tools</span><img src="${srRoot}/images/menu/system18-2.png" class="navbaricon hidden-xs" />${toolsBadge}
+                            <a href="${srRoot}/home/status/" class="dropdown-toggle" aria-haspopup="true" data-toggle="dropdown" data-hover="dropdown"><span class="visible-xs-inline">Tools</span><img src="${srRoot}/images/menu/system18-2.png" class="navbaricon hidden-xs" />${toolsBadge}
                             <b class="caret"></b>
                             </a>
                             <ul class="dropdown-menu">
-- 
GitLab


From 59f703760e42dad4799c2d7ab0a185cff20ed2d8 Mon Sep 17 00:00:00 2001
From: Dustyn Gibson <miigotu@gmail.com>
Date: Thu, 5 Nov 2015 14:30:14 -0800
Subject: [PATCH 040/215] No spaces before commas.
 https://github.com/SiCKRAGETV/SickRage/pull/3097

---
 sickbeard/helpers.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/sickbeard/helpers.py b/sickbeard/helpers.py
index 1d9b67a22..be4c02f7e 100644
--- a/sickbeard/helpers.py
+++ b/sickbeard/helpers.py
@@ -1535,7 +1535,7 @@ def codeDescription(status_code):
     if status_code in clients.http_error_code:
         return clients.http_error_code[status_code]
     else:
-        logger.log(u"Unknown error code: %s. Please submit an issue" % status_code , logger.ERROR)
+        logger.log(u"Unknown error code: %s. Please submit an issue" % status_code, logger.ERROR)
         return 'unknown'
 
 
-- 
GitLab


From 8f775f8049fa3520710013994b1d2bf4413842ee Mon Sep 17 00:00:00 2001
From: Dustyn Gibson <miigotu@gmail.com>
Date: Thu, 5 Nov 2015 15:15:14 -0800
Subject: [PATCH 041/215] Fixes
 https://github.com/SiCKRAGETV/sickrage-issues/issues/3569 @MGaetan the
 inheritance chain is hella broken in webapi, we need some major changes

---
 sickbeard/webapi.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/sickbeard/webapi.py b/sickbeard/webapi.py
index 29e0534e0..0023fe487 100644
--- a/sickbeard/webapi.py
+++ b/sickbeard/webapi.py
@@ -1512,7 +1512,7 @@ class CMD_SickBeardGetMessages(ApiCall):
 
     def run(self):
         messages = []
-        for cur_notification in ui.notifications.get_notifications(self.request.remote_ip):
+        for cur_notification in ui.notifications.get_notifications(self.rh.request.remote_ip):
             messages.append({"title": cur_notification.title,
                              "message": cur_notification.message,
                              "type": cur_notification.type})
-- 
GitLab


From 2d82a34d7ef442872ffac93e9c25597d40aa2732 Mon Sep 17 00:00:00 2001
From: Dustyn Gibson <miigotu@gmail.com>
Date: Thu, 5 Nov 2015 15:29:30 -0800
Subject: [PATCH 042/215] update kat to use a mirror

---
 sickbeard/providers/kat.py | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/sickbeard/providers/kat.py b/sickbeard/providers/kat.py
index af650aad2..37039b73a 100755
--- a/sickbeard/providers/kat.py
+++ b/sickbeard/providers/kat.py
@@ -48,8 +48,8 @@ class KATProvider(generic.TorrentProvider):
         self.cache = KATCache(self)
 
         self.urls = {
-            'base_url': 'https://kat.cr/',
-            'search': 'https://kat.cr/%s/',
+            'base_url': 'https://kickass.unblocked.la/',
+            'search': base_url + '%s/',
         }
 
         self.url = self.urls['base_url']
-- 
GitLab


From 0bfddc9faa87b78cb5f04f01eaf40d753d4c11c9 Mon Sep 17 00:00:00 2001
From: Dustyn Gibson <miigotu@gmail.com>
Date: Thu, 5 Nov 2015 16:03:33 -0800
Subject: [PATCH 043/215] oops

---
 sickbeard/providers/kat.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/sickbeard/providers/kat.py b/sickbeard/providers/kat.py
index 37039b73a..65fab5019 100755
--- a/sickbeard/providers/kat.py
+++ b/sickbeard/providers/kat.py
@@ -49,7 +49,7 @@ class KATProvider(generic.TorrentProvider):
 
         self.urls = {
             'base_url': 'https://kickass.unblocked.la/',
-            'search': base_url + '%s/',
+            'search': 'https://kickass.unblocked.la/%s/',
         }
 
         self.url = self.urls['base_url']
-- 
GitLab


From 93cd7013cf2dfddbde982c9e6fd7d7a59345c898 Mon Sep 17 00:00:00 2001
From: labrys <labrys@useres.noreply.github.com>
Date: Thu, 5 Nov 2015 14:53:54 -0500
Subject: [PATCH 044/215] PEP 8: Add/remove lines and whitespace for
 consistency

---
 sickbeard/webserve.py | 108 ++++++++++++------------------------------
 1 file changed, 30 insertions(+), 78 deletions(-)

diff --git a/sickbeard/webserve.py b/sickbeard/webserve.py
index b0907c84e..26f127da3 100644
--- a/sickbeard/webserve.py
+++ b/sickbeard/webserve.py
@@ -88,10 +88,11 @@ mako_lookup = None
 mako_cache = None
 mako_path = None
 
+
 def get_lookup():
-    global mako_lookup # pylint: disable=W0603
-    global mako_cache # pylint: disable=W0603
-    global mako_path # pylint: disable=W0603
+    global mako_lookup  # pylint: disable=W0603
+    global mako_cache  # pylint: disable=W0603
+    global mako_path  # pylint: disable=W0603
 
     if mako_path is None:
         mako_path = os.path.join(sickbeard.PROG_DIR, "gui/" + sickbeard.GUI_NAME + "/views/")
@@ -101,8 +102,8 @@ def get_lookup():
         mako_lookup = TemplateLookup(directories=[mako_path], module_directory=mako_cache, format_exceptions=True)
     return mako_lookup
 
-class PageTemplate(MakoTemplate):
 
+class PageTemplate(MakoTemplate):
     def __init__(self, rh, filename):
         self.arguments = {}
 
@@ -301,6 +302,7 @@ class LogoutHandler(BaseHandler):
         self.clear_cookie("sickrage_user")
         self.redirect('/login/')
 
+
 class KeyHandler(RequestHandler):
     def __init__(self, *args, **kwargs):
         super(KeyHandler, self).__init__(*args, **kwargs)
@@ -583,6 +585,7 @@ class CalendarHandler(BaseHandler):
 
         return ical
 
+
 @route('/ui(/?.*)')
 class UI(WebRoot):
     def __init__(self, *args, **kwargs):
@@ -681,10 +684,10 @@ class Home(WebRoot):
         myDB = db.DBConnection()
         today = str(datetime.date.today().toordinal())
 
-        status_quality  = '(' + ','.join([str(x) for x in Quality.SNATCHED + Quality.SNATCHED_PROPER]) + ')'
+        status_quality = '(' + ','.join([str(x) for x in Quality.SNATCHED + Quality.SNATCHED_PROPER]) + ')'
         status_download = '(' + ','.join([str(x) for x in Quality.DOWNLOADED + Quality.ARCHIVED]) + ')'
 
-        sql_statement  = 'SELECT showid, '
+        sql_statement = 'SELECT showid, '
 
         sql_statement += '(SELECT COUNT(*) FROM tv_episodes WHERE showid=tv_eps.showid AND season > 0 AND episode > 0 AND airdate > 1 AND status IN ' + status_quality + ') AS ep_snatched, '
         sql_statement += '(SELECT COUNT(*) FROM tv_episodes WHERE showid=tv_eps.showid AND season > 0 AND episode > 0 AND airdate > 1 AND status IN ' + status_download + ') AS ep_downloaded, '
@@ -709,7 +712,6 @@ class Home(WebRoot):
 
         return show_stat, max_download_count
 
-
     def is_alive(self, *args, **kwargs):
         if 'callback' in kwargs and '_' in kwargs:
             callback, _ = kwargs['callback'], kwargs['_']
@@ -741,9 +743,9 @@ class Home(WebRoot):
 
     @staticmethod
     def haveTORRENT():
-        if sickbeard.USE_TORRENTS and sickbeard.TORRENT_METHOD != 'blackhole' \
-                and (sickbeard.ENABLE_HTTPS and sickbeard.TORRENT_HOST[:5] == 'https'
-                     or not sickbeard.ENABLE_HTTPS and sickbeard.TORRENT_HOST[:5] == 'http:'):
+        if sickbeard.USE_TORRENTS and sickbeard.TORRENT_METHOD != 'blackhole' and \
+                (sickbeard.ENABLE_HTTPS and sickbeard.TORRENT_HOST[:5] == 'https' or not
+                 sickbeard.ENABLE_HTTPS and sickbeard.TORRENT_HOST[:5] == 'http:'):
             return True
         else:
             return False
@@ -810,7 +812,6 @@ class Home(WebRoot):
         else:
             return "Test prowl notice failed"
 
-
     @staticmethod
     def testBoxcar(username=None):
 
@@ -820,7 +821,6 @@ class Home(WebRoot):
         else:
             return "Error sending Boxcar notification"
 
-
     @staticmethod
     def testBoxcar2(accesstoken=None):
 
@@ -830,7 +830,6 @@ class Home(WebRoot):
         else:
             return "Error sending Boxcar2 notification"
 
-
     @staticmethod
     def testPushover(userKey=None, apiKey=None):
 
@@ -840,12 +839,10 @@ class Home(WebRoot):
         else:
             return "Error sending Pushover notification"
 
-
     @staticmethod
     def twitterStep1():
         return notifiers.twitter_notifier._get_authorization()
 
-
     @staticmethod
     def twitterStep2(key):
 
@@ -856,7 +853,6 @@ class Home(WebRoot):
         else:
             return "Unable to verify key"
 
-
     @staticmethod
     def testTwitter():
 
@@ -866,7 +862,6 @@ class Home(WebRoot):
         else:
             return "Error sending tweet"
 
-
     @staticmethod
     def testKODI(host=None, username=None, password=None):
 
@@ -882,7 +877,6 @@ class Home(WebRoot):
 
         return finalResult
 
-
     def testPMC(self, host=None, username=None, password=None):
         self.set_header('Cache-Control', 'max-age=0,no-cache,no-store')
 
@@ -1217,7 +1211,7 @@ class Home(WebRoot):
                 else:
                     submenu.append({'title': 'Pause', 'path': 'home/togglePause?show=%d' % showObj.indexerid, 'icon': 'ui-icon ui-icon-pause'})
 
-                submenu.append({'title': 'Remove', 'path': 'home/deleteShow?show=%d' % showObj.indexerid, 'class':'removeshow', 'confirm': True, 'icon': 'ui-icon ui-icon-trash'})
+                submenu.append({'title': 'Remove', 'path': 'home/deleteShow?show=%d' % showObj.indexerid, 'class': 'removeshow', 'confirm': True, 'icon': 'ui-icon ui-icon-trash'})
                 submenu.append({'title': 'Re-scan files', 'path': 'home/refreshShow?show=%d' % showObj.indexerid, 'icon': 'ui-icon ui-icon-refresh'})
                 submenu.append({'title': 'Force Full Update', 'path': 'home/updateShow?show=%d&amp;force=1' % showObj.indexerid, 'icon': 'ui-icon ui-icon-transfer-e-w'})
                 submenu.append({'title': 'Update show in KODI', 'path': 'home/updateKODI?show=%d' % showObj.indexerid, 'requires': self.haveKODI(), 'icon': 'submenu-icon-kodi'})
@@ -1316,7 +1310,6 @@ class Home(WebRoot):
             out.append("S" + str(season) + ": " + ", ".join(names))
         return "<br/>".join(out)
 
-
     def editShow(self, show=None, location=None, anyQualities=[], bestQualities=[], exceptions_list=[],
                  flatten_folders=None, paused=None, directCall=False, air_by_date=None, sports=None, dvdorder=None,
                  indexerLang=None, subtitles=None, archive_firstmatch=None, rls_ignore_words=None,
@@ -1372,7 +1365,7 @@ class Home(WebRoot):
             else:
                 return t.render(show=show, scene_exceptions=scene_exceptions, title='Edit Show', header='Edit Show')
 
-        flatten_folders = not config.checkbox_to_value(flatten_folders) # UI inverts this value
+        flatten_folders = not config.checkbox_to_value(flatten_folders)  # UI inverts this value
         dvdorder = config.checkbox_to_value(dvdorder)
         archive_firstmatch = config.checkbox_to_value(archive_firstmatch)
         paused = config.checkbox_to_value(paused)
@@ -1601,7 +1594,6 @@ class Home(WebRoot):
 
         return self.redirect("/home/displayShow?show=" + str(showObj.indexerid))
 
-
     def updateKODI(self, show=None):
         showName = None
         showObj = None
@@ -1716,12 +1708,12 @@ class Home(WebRoot):
                         continue
 
                     if int(status) in Quality.DOWNLOADED and epObj.status not in Quality.SNATCHED + \
-                        Quality.SNATCHED_PROPER + Quality.SNATCHED_BEST + Quality.DOWNLOADED + [IGNORED] and not ek(os.path.isfile, epObj.location):
+                            Quality.SNATCHED_PROPER + Quality.SNATCHED_BEST + Quality.DOWNLOADED + [IGNORED] and not ek(os.path.isfile, epObj.location):
                         logger.log(u"Refusing to change status of " + curEp + " to DOWNLOADED because it's not SNATCHED/DOWNLOADED", logger.WARNING)
                         continue
 
                     if int(status) == FAILED and epObj.status not in Quality.SNATCHED + Quality.SNATCHED_PROPER + \
-                        Quality.SNATCHED_BEST + Quality.DOWNLOADED + Quality.ARCHIVED:
+                            Quality.SNATCHED_BEST + Quality.DOWNLOADED + Quality.ARCHIVED:
                         logger.log(u"Refusing to change status of " + curEp + " to FAILED because it's not SNATCHED/DOWNLOADED", logger.WARNING)
                         continue
 
@@ -1794,7 +1786,6 @@ class Home(WebRoot):
         else:
             return self.redirect("/home/displayShow?show=" + show)
 
-
     def testRename(self, show=None):
 
         if show is None:
@@ -1838,9 +1829,7 @@ class Home(WebRoot):
 
         return t.render(submenu=submenu, ep_obj_list=ep_obj_rename_list, show=showObj, title='Preview Rename', header='Preview Rename')
 
-
     def doRename(self, show=None, eps=None):
-
         if show is None or eps is None:
             errMsg = "You must specify a show and at least one episode"
             return self._genericMessage("Error", errMsg)
@@ -2057,7 +2046,8 @@ class Home(WebRoot):
             show = int(show)
             indexer = int(indexer)
             forAbsolute = int(forAbsolute)
-            if sceneAbsolute is not None: sceneAbsolute = int(sceneAbsolute)
+            if sceneAbsolute is not None:
+                sceneAbsolute = int(sceneAbsolute)
 
             set_scene_numbering(show, indexer, absolute_number=forAbsolute, sceneAbsolute=sceneAbsolute)
         else:
@@ -2068,8 +2058,10 @@ class Home(WebRoot):
             indexer = int(indexer)
             forSeason = int(forSeason)
             forEpisode = int(forEpisode)
-            if sceneSeason is not None: sceneSeason = int(sceneSeason)
-            if sceneEpisode is not None: sceneEpisode = int(sceneEpisode)
+            if sceneSeason is not None:
+                sceneSeason = int(sceneSeason)
+            if sceneEpisode is not None:
+                sceneEpisode = int(sceneEpisode)
 
             set_scene_numbering(show, indexer, season=forSeason, episode=forEpisode, sceneSeason=sceneSeason,
                                 sceneEpisode=sceneEpisode)
@@ -2089,9 +2081,7 @@ class Home(WebRoot):
 
         return json.dumps(result)
 
-
     def retryEpisode(self, show, season, episode, downCurQuality):
-
         # retrieve the episode object and fail if we can't get one
         ep_obj = self._getEpisode(show, season, episode)
         if isinstance(ep_obj, str):
@@ -2120,6 +2110,7 @@ class Home(WebRoot):
 
         return json.dumps({'result': 'failure'})
 
+
 @route('/IRC(/?.*)')
 class HomeIRC(Home):
     def __init__(self, *args, **kwargs):
@@ -2130,6 +2121,7 @@ class HomeIRC(Home):
         t = PageTemplate(rh=self, filename="IRC.mako")
         return t.render(topmenu="system", header="IRC", title="IRC")
 
+
 @route('/news(/?.*)')
 class HomeNews(Home):
     def __init__(self, *args, **kwargs):
@@ -2140,7 +2132,7 @@ class HomeNews(Home):
             news = sickbeard.versionCheckScheduler.action.check_for_new_news(force=True)
         except Exception:
             logger.log(u'Could not load news from repo, giving a link!', logger.DEBUG)
-            news = 'Could not load news from the repo. [Click here for news.md]('+sickbeard.NEWS_URL+')'
+            news = 'Could not load news from the repo. [Click here for news.md](' + sickbeard.NEWS_URL + ')'
 
         sickbeard.NEWS_LAST_READ = sickbeard.NEWS_LATEST
         sickbeard.NEWS_UNREAD = 0
@@ -2256,7 +2248,7 @@ class HomeAddShows(Home):
 
         for i, shows in results.iteritems():
             final_results.extend([[sickbeard.indexerApi(i).name, i, sickbeard.indexerApi(i).config["show_url"], int(show['id']),
-               show['seriesname'], show['firstaired']] for show in shows])
+                                   show['seriesname'], show['firstaired']] for show in shows])
 
 #        map(final_results.extend,
 #            ([[sickbeard.indexerApi(id).name, id, sickbeard.indexerApi(id).config["show_url"], int(show['id']),
@@ -2265,7 +2257,6 @@ class HomeAddShows(Home):
         lang_id = sickbeard.indexerApi().config['langabbv_to_id'][lang]
         return json.dumps({'results': final_results, 'langid': lang_id})
 
-
     def massAddTable(self, rootDir=None):
         t = PageTemplate(rh=self, filename="home_massAddTable.mako")
 
@@ -2344,11 +2335,8 @@ class HomeAddShows(Home):
 
                 if indexer_id and helpers.findCertainShow(sickbeard.showList, indexer_id):
                     cur_dir['added_already'] = True
-
-
         return t.render(dirList=dir_list)
 
-
     def newShow(self, show_to_add=None, other_shows=None, search_string=None):
         """
         Display the new show page which collects a tvdb id, folder, and extra options and
@@ -2501,7 +2489,6 @@ class HomeAddShows(Home):
 
         return t.render(blacklist=blacklist, trending_shows=trending_shows)
 
-
     def popularShows(self):
         """
         Fetches data from IMDB to show a list of popular shows.
@@ -2516,9 +2503,7 @@ class HomeAddShows(Home):
 
         return t.render(title="Popular Shows", header="Popular Shows", popular_shows=popular_shows, imdb_exception=e, topmenu="home")
 
-
     def addShowToBlacklist(self, indexer_id):
-
         # URL parameters
         data = {'shows': [{'ids': {'tvdb': indexer_id}}]}
 
@@ -2704,13 +2689,11 @@ class HomeAddShows(Home):
 
         return (indexer, show_dir, indexer_id, show_name)
 
-
     def addExistingShows(self, shows_to_add=None, promptForSettings=None):
         """
         Receives a dir list and add them. Adds the ones with given TVDB IDs first, then forwards
         along to the newShow page.
         """
-
         # grab a list of other shows to add, if provided
         if not shows_to_add:
             shows_to_add = []
@@ -2739,7 +2722,6 @@ class HomeAddShows(Home):
 
                 indexer_id_given.append((int(indexer), show_dir, int(indexer_id), show_name))
 
-
         # if they want me to prompt for settings then I will just carry on to the newShow page
         if promptForSettings and shows_to_add:
             return self.newShow(shows_to_add[0], shows_to_add[1:])
@@ -2779,7 +2761,6 @@ class Manage(Home, WebRoot):
     def __init__(self, *args, **kwargs):
         super(Manage, self).__init__(*args, **kwargs)
 
-
     def index(self):
         t = PageTemplate(rh=self, filename="manage.mako")
         return t.render(title='Mass Update', header='Mass Update', topmenu='manage')
@@ -2807,7 +2788,6 @@ class Manage(Home, WebRoot):
 
         return json.dumps(result)
 
-
     def episodeStatuses(self, whichStatus=None):
         if whichStatus:
             status_list = [int(whichStatus)]
@@ -2850,9 +2830,7 @@ class Manage(Home, WebRoot):
             topmenu='manage', whichStatus=whichStatus,
             show_names=show_names, ep_counts=ep_counts, sorted_show_ids=sorted_show_ids)
 
-
     def changeEpisodeStatuses(self, oldStatus, newStatus, *args, **kwargs):
-
         status_list = [int(oldStatus)]
         if status_list[0] == SNATCHED:
             status_list = Quality.SNATCHED + Quality.SNATCHED_PROPER
@@ -2918,9 +2896,7 @@ class Manage(Home, WebRoot):
 
         return json.dumps(result)
 
-
     def subtitleMissed(self, whichSubs=None):
-
         t = PageTemplate(rh=self, filename="manage_subtitleMissed.mako")
 
         if not whichSubs:
@@ -2956,9 +2932,7 @@ class Manage(Home, WebRoot):
         return t.render(whichSubs=whichSubs, show_names=show_names, ep_counts=ep_counts, sorted_show_ids=sorted_show_ids,
                         title='Missing Subtitles', header='Missing Subtitles', topmenu='manage')
 
-
     def downloadSubtitleMissed(self, *args, **kwargs):
-
         to_download = {}
 
         # make a list of all shows and their associated args
@@ -2991,9 +2965,7 @@ class Manage(Home, WebRoot):
 
         return self.redirect('/manage/subtitleMissed/')
 
-
     def backlogShow(self, indexer_id):
-
         show_obj = helpers.findCertainShow(sickbeard.showList, int(indexer_id))
 
         if show_obj:
@@ -3001,9 +2973,7 @@ class Manage(Home, WebRoot):
 
         return self.redirect("/manage/backlogOverview/")
 
-
     def backlogOverview(self):
-
         t = PageTemplate(rh=self, filename="manage_backlogOverview.mako")
 
         showCounts = {}
@@ -3039,9 +3009,7 @@ class Manage(Home, WebRoot):
         return t.render(showCounts=showCounts, showCats=showCats, showSQLResults=showSQLResults,
                         title='Backlog Overview', header='Backlog Overview', topmenu='manage')
 
-
     def massEdit(self, toEdit=None):
-
         t = PageTemplate(rh=self, filename="manage_massEdit.mako")
 
         if not toEdit:
@@ -3176,12 +3144,10 @@ class Manage(Home, WebRoot):
                         quality_value=quality_value, subtitles_value=subtitles_value, scene_value=scene_value, sports_value=sports_value,
                         air_by_date_value=air_by_date_value, root_dir_list=root_dir_list, title='Mass Edit', header='Mass Edit', topmenu='manage')
 
-
     def massEditSubmit(self, archive_firstmatch=None, paused=None, default_ep_status=None,
                        anime=None, sports=None, scene=None, flatten_folders=None, quality_preset=None,
                        subtitles=None, air_by_date=None, anyQualities=[], bestQualities=[], toEdit=None, *args,
                        **kwargs):
-
         dir_map = {}
         for cur_arg in kwargs:
             if not cur_arg.startswith('orig_root_dir_'):
@@ -3289,10 +3255,8 @@ class Manage(Home, WebRoot):
 
         return self.redirect("/manage/")
 
-
     def massUpdate(self, toUpdate=None, toRefresh=None, toRename=None, toDelete=None, toRemove=None, toMetadata=None,
                    toSubtitle=None):
-
         if toUpdate is not None:
             toUpdate = toUpdate.split('|')
         else:
@@ -3409,9 +3373,7 @@ class Manage(Home, WebRoot):
 
         return self.redirect("/manage/")
 
-
     def manageTorrents(self):
-
         t = PageTemplate(rh=self, filename="manage_torrents.mako")
         info_download_station = ''
 
@@ -3439,9 +3401,7 @@ class Manage(Home, WebRoot):
             webui_url=webui_url, info_download_station=info_download_station,
             title='Manage Torrents', header='Manage Torrents', topmenu='manage')
 
-
     def failedDownloads(self, limit=100, toRemove=None):
-
         myDB = db.DBConnection('failed.db')
 
         if limit == "0":
@@ -3495,9 +3455,7 @@ class ManageSearches(Manage):
 
         return self.redirect("/manage/manageSearches/")
 
-
     def forceFindPropers(self):
-
         # force it to run the next time it looks
         result = sickbeard.properFinderScheduler.forceRun()
         if result:
@@ -3506,7 +3464,6 @@ class ManageSearches(Manage):
 
         return self.redirect("/manage/manageSearches/")
 
-
     def pauseBacklog(self, paused=None):
         if paused == "1":
             sickbeard.searchQueueScheduler.action.pause_backlog()
@@ -3575,8 +3532,8 @@ class History(WebRoot):
 
         t = PageTemplate(rh=self, filename="history.mako")
         submenu = [
-            {'title': 'Clear History', 'path': 'history/clearHistory', 'icon': 'ui-icon ui-icon-trash', 'class': 'clearhistory', 'confirm':True},
-            {'title': 'Trim History', 'path': 'history/trimHistory', 'icon': 'ui-icon ui-icon-trash', 'class': 'trimhistory', 'confirm':True},
+            {'title': 'Clear History', 'path': 'history/clearHistory', 'icon': 'ui-icon ui-icon-trash', 'class': 'clearhistory', 'confirm': True},
+            {'title': 'Trim History', 'path': 'history/trimHistory', 'icon': 'ui-icon ui-icon-trash', 'class': 'trimhistory', 'confirm': True},
         ]
 
         return t.render(historyResults=data, compactResults=compact, limit=limit, submenu=submenu, title='History', header='History', topmenu="history")
@@ -3753,7 +3710,6 @@ class ConfigGeneral(Config):
 
         sickbeard.TIMEZONE_DISPLAY = timezone_display
 
-
         if not config.change_LOG_DIR(log_dir, web_log):
             results += ["Unable to create directory " + os.path.normpath(log_dir) + ", log directory not changed."]
 
@@ -4302,9 +4258,7 @@ class ConfigProviders(Config):
 
         return '1'
 
-
     def saveProviders(self, newznab_string='', torrentrss_string='', provider_order=None, **kwargs):
-
         results = []
 
         provider_str_list = provider_order.split()
@@ -4980,8 +4934,8 @@ class ErrorLogs(WebRoot):
     def ErrorLogsMenu(self, level):
         menu = [
             {'title': 'Clear Errors', 'path': 'errorlogs/clearerrors/', 'requires': self.haveErrors() and level == logger.ERROR, 'icon': 'ui-icon ui-icon-trash'},
-            {'title': 'Clear Warnings', 'path': 'errorlogs/clearerrors/?level='+str(logger.WARNING), 'requires': self.haveWarnings() and level == logger.WARNING, 'icon': 'ui-icon ui-icon-trash'},
-            {'title': 'Submit Errors', 'path': 'errorlogs/submit_errors/', 'requires': self.haveErrors() and level == logger.ERROR, 'class':'sumbiterrors', 'confirm': True, 'icon': 'ui-icon ui-icon-arrowreturnthick-1-n'},
+            {'title': 'Clear Warnings', 'path': 'errorlogs/clearerrors/?level=' + str(logger.WARNING), 'requires': self.haveWarnings() and level == logger.WARNING, 'icon': 'ui-icon ui-icon-trash'},
+            {'title': 'Submit Errors', 'path': 'errorlogs/submit_errors/', 'requires': self.haveErrors() and level == logger.ERROR, 'class': 'sumbiterrors', 'confirm': True, 'icon': 'ui-icon ui-icon-arrowreturnthick-1-n'},
         ]
 
         return menu
@@ -5052,8 +5006,6 @@ class ErrorLogs(WebRoot):
                     finalData.append("AA" + x)
                     numLines += 1
 
-
-
                 if numLines >= numToShow:
                     return finalData
 
-- 
GitLab


From 6d8b748b9fad5d7182bcba1c65e126d96e9c1f3b Mon Sep 17 00:00:00 2001
From: labrys <labrys@useres.noreply.github.com>
Date: Thu, 5 Nov 2015 15:15:42 -0500
Subject: [PATCH 045/215] PEP 257: Convert docstrings to triple double-quoted
 docstrings

---
 sickbeard/webserve.py | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/sickbeard/webserve.py b/sickbeard/webserve.py
index 26f127da3..466652b89 100644
--- a/sickbeard/webserve.py
+++ b/sickbeard/webserve.py
@@ -4156,11 +4156,11 @@ class ConfigProviders(Config):
 
     @staticmethod
     def getNewznabCategories(name, url, key):
-        '''
+        """
         Retrieves a list of possible categories with category id's
         Using the default url/api?cat
         http://yournewznaburl.com/api?t=caps&apikey=yourapikey
-        '''
+        """
         error = ""
         success = False
 
-- 
GitLab


From 296a833d5213cc96d1d4d6a89bea4426bd55c026 Mon Sep 17 00:00:00 2001
From: labrys <labrys@useres.noreply.github.com>
Date: Thu, 5 Nov 2015 15:13:37 -0500
Subject: [PATCH 046/215] PEP 263: Add encoding declaration

---
 sickbeard/webserve.py | 1 +
 1 file changed, 1 insertion(+)

diff --git a/sickbeard/webserve.py b/sickbeard/webserve.py
index 466652b89..a5e5f70ed 100644
--- a/sickbeard/webserve.py
+++ b/sickbeard/webserve.py
@@ -1,3 +1,4 @@
+# coding=utf-8
 # Author: Nic Wolfe <nic@wolfeden.ca>
 # URL: http://code.google.com/p/sickbeard/
 #
-- 
GitLab


From 9e531684f6e0a51ee2af63fd18f97bb901205407 Mon Sep 17 00:00:00 2001
From: labrys <labrys@useres.noreply.github.com>
Date: Thu, 5 Nov 2015 15:14:07 -0500
Subject: [PATCH 047/215] Remove redundant parentheses

---
 sickbeard/webserve.py | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/sickbeard/webserve.py b/sickbeard/webserve.py
index a5e5f70ed..aae49ecd8 100644
--- a/sickbeard/webserve.py
+++ b/sickbeard/webserve.py
@@ -2677,18 +2677,18 @@ class HomeAddShows(Home):
     @staticmethod
     def split_extra_show(extra_show):
         if not extra_show:
-            return (None, None, None, None)
+            return None, None, None, None
         split_vals = extra_show.split('|')
         if len(split_vals) < 4:
             indexer = split_vals[0]
             show_dir = split_vals[1]
-            return (indexer, show_dir, None, None)
+            return indexer, show_dir, None, None
         indexer = split_vals[0]
         show_dir = split_vals[1]
         indexer_id = split_vals[2]
         show_name = '|'.join(split_vals[3:])
 
-        return (indexer, show_dir, indexer_id, show_name)
+        return indexer, show_dir, indexer_id, show_name
 
     def addExistingShows(self, shows_to_add=None, promptForSettings=None):
         """
-- 
GitLab


From 63f96e461b8d3158d02d3761a131527895c04587 Mon Sep 17 00:00:00 2001
From: labrys <labrys@useres.noreply.github.com>
Date: Thu, 5 Nov 2015 14:58:31 -0500
Subject: [PATCH 048/215] PEP 8: Convert comparisons

---
 sickbeard/webserve.py | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/sickbeard/webserve.py b/sickbeard/webserve.py
index aae49ecd8..b00e7fcf6 100644
--- a/sickbeard/webserve.py
+++ b/sickbeard/webserve.py
@@ -1111,7 +1111,7 @@ class Home(WebRoot):
         checkversion = CheckVersion()
         backup = checkversion._runbackup()
 
-        if backup == True:
+        if backup is True:
 
             if sickbeard.versionCheckScheduler.action.update():
                 # do a hard restart
@@ -2713,7 +2713,7 @@ class HomeAddShows(Home):
                 split_vals = cur_dir.split('|')
                 if len(split_vals) < 3:
                     dirs_only.append(cur_dir)
-            if not '|' in cur_dir:
+            if '|' not in cur_dir:
                 dirs_only.append(cur_dir)
             else:
                 indexer, show_dir, indexer_id, show_name = self.split_extra_show(cur_dir)
@@ -4172,7 +4172,7 @@ class ConfigProviders(Config):
         if not key:
             error += "\nNo Provider Api key specified"
 
-        if error <> "":
+        if error != "":
             return json.dumps({'success': False, 'error': error})
 
         # Get list with Newznabproviders
-- 
GitLab


From ea5ffdeece4140e84e223f51437795b4c50ece7c Mon Sep 17 00:00:00 2001
From: labrys <labrys@useres.noreply.github.com>
Date: Thu, 5 Nov 2015 15:07:06 -0500
Subject: [PATCH 049/215] PEP 203: Replace assignment with augmented assignment

---
 sickbeard/webserve.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/sickbeard/webserve.py b/sickbeard/webserve.py
index b00e7fcf6..5a15c504b 100644
--- a/sickbeard/webserve.py
+++ b/sickbeard/webserve.py
@@ -3391,7 +3391,7 @@ class Manage(Home, WebRoot):
             webui_url = '/'.join(s.strip('/') for s in (webui_url, 'gui/'))
         if sickbeard.TORRENT_METHOD == 'download_station':
             if helpers.check_url(webui_url + 'download/'):
-                webui_url = webui_url + 'download/'
+                webui_url += 'download/'
             else:
                 info_download_station = '<p>To have a better experience please set the Download Station alias as <code>download</code>, you can check this setting in the Synology DSM <b>Control Panel</b> > <b>Application Portal</b>. Make sure you allow DSM to be embedded with iFrames too in <b>Control Panel</b> > <b>DSM Settings</b> > <b>Security</b>.</p><br/><p>There is more information about this available <a href="https://github.com/midgetspy/Sick-Beard/pull/338">here</a>.</p><br/>'
 
-- 
GitLab


From 9cb7474ae318084157092c15b01b35a059a1c520 Mon Sep 17 00:00:00 2001
From: labrys <labrys@useres.noreply.github.com>
Date: Thu, 5 Nov 2015 15:13:10 -0500
Subject: [PATCH 050/215] Streamline dict and list creation

---
 sickbeard/webserve.py | 9 ++++-----
 1 file changed, 4 insertions(+), 5 deletions(-)

diff --git a/sickbeard/webserve.py b/sickbeard/webserve.py
index 5a15c504b..2ba745e3f 100644
--- a/sickbeard/webserve.py
+++ b/sickbeard/webserve.py
@@ -2412,8 +2412,7 @@ class HomeAddShows(Home):
             library_shows = trakt_api.traktRequest("sync/collection/shows?extended=full") or []
 
             for show_detail in shows:
-                show = {}
-                show['show'] = show_detail
+                show = {'show': show_detail}
                 try:
                     if not helpers.findCertainShow(sickbeard.showList, [int(show['show']['ids']['tvdb'])]):
                         if show['show']['ids']['tvdb'] not in (lshow['show']['ids']['tvdb'] for lshow in library_shows):
@@ -3761,9 +3760,9 @@ class ConfigBackupRestore(Config):
         finalResult = ''
 
         if backupDir:
-            source = [os.path.join(sickbeard.DATA_DIR, 'sickbeard.db'), sickbeard.CONFIG_FILE]
-            source.append(os.path.join(sickbeard.DATA_DIR, 'failed.db'))
-            source.append(os.path.join(sickbeard.DATA_DIR, 'cache.db'))
+            source = [os.path.join(sickbeard.DATA_DIR, 'sickbeard.db'), sickbeard.CONFIG_FILE,
+                      os.path.join(sickbeard.DATA_DIR, 'failed.db'),
+                      os.path.join(sickbeard.DATA_DIR, 'cache.db')]
             target = os.path.join(backupDir, 'sickrage-' + time.strftime('%Y%m%d%H%M%S') + '.zip')
 
             for (path, dirs, files) in os.walk(sickbeard.CACHE_DIR, topdown=True):
-- 
GitLab


From 955135b3ea99cbe7913c5151630802c544d35838 Mon Sep 17 00:00:00 2001
From: labrys <labrys@useres.noreply.github.com>
Date: Thu, 5 Nov 2015 20:23:05 -0500
Subject: [PATCH 051/215] Make sure we use .has_key() for statusStrings

---
 sickbeard/webserve.py | 1 +
 1 file changed, 1 insertion(+)

diff --git a/sickbeard/webserve.py b/sickbeard/webserve.py
index 2ba745e3f..7a4fe2baa 100644
--- a/sickbeard/webserve.py
+++ b/sickbeard/webserve.py
@@ -1654,6 +1654,7 @@ class Home(WebRoot):
             else:
                 return self._genericMessage("Error", errMsg)
 
+        # Use .has_key() since it is overridden for statusStrings in common.py
         if not statusStrings.has_key(int(status)):
             errMsg = "Invalid status"
             if direct:
-- 
GitLab


From 9ad7d4c5c4c871652228585312c3f53b1bb5f371 Mon Sep 17 00:00:00 2001
From: Fernando <fernandog@users.noreply.github.com>
Date: Fri, 6 Nov 2015 09:58:16 -0200
Subject: [PATCH 052/215] Add missing CF error codes - fix
 SiCKRAGETV/sickrage-issues/issues/3577

https://support.cloudflare.com/hc/en-us/sections/200820298-Error-Pages
---
 sickbeard/clients/__init__.py | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/sickbeard/clients/__init__.py b/sickbeard/clients/__init__.py
index 7fe1f62f3..1d262205c 100644
--- a/sickbeard/clients/__init__.py
+++ b/sickbeard/clients/__init__.py
@@ -91,8 +91,13 @@ http_error_code = {
     509: 'Bandwidth Limit Exceeded',
     510: 'Not Extended',
     511: 'Network Authentication Required',
-    522: 'Cloudfare Connection timed out',
-    524: 'Request to host timedout waiting for reply back',
+    520: 'Cloudfare - Web server is returning an unknown error',
+    521: 'Cloudfare - Web server is down',
+    522: 'Cloudfare - Connection timed out',
+    523: 'Cloudfare - Origin is unreachable',
+    524: 'Cloudfare - A timeout occurred',
+    525: 'Cloudfare - SSL handshake failed',
+    526: 'Cloudfare - Invalid SSL certificate',
     598: 'Network read timeout error',
     599: 'Network connect timeout error '
 }
-- 
GitLab


From ead4066b48c156ebefc5a774f1b729b3fa39f8b6 Mon Sep 17 00:00:00 2001
From: medariox <dariovizz@hotmail.it>
Date: Fri, 6 Nov 2015 13:33:12 +0100
Subject: [PATCH 053/215] Updated subliminal (develop) to newest version

---
 lib/subliminal/api.py                     |  2 +-
 lib/subliminal/cli.py                     |  5 ++-
 lib/subliminal/exceptions.py              |  5 +++
 lib/subliminal/providers/addic7ed.py      | 29 +++++++------
 lib/subliminal/providers/napiprojekt.py   |  5 ++-
 lib/subliminal/providers/opensubtitles.py | 19 +++++----
 lib/subliminal/providers/podnapisi.py     |  8 ++--
 lib/subliminal/providers/thesubdb.py      |  4 +-
 lib/subliminal/providers/tvsubtitles.py   |  4 +-
 lib/subliminal/subtitle.py                | 50 ++++++++++++++++++++---
 lib/subliminal/video.py                   | 18 +++++---
 11 files changed, 103 insertions(+), 46 deletions(-)

diff --git a/lib/subliminal/api.py b/lib/subliminal/api.py
index 906b897c9..ee51940a9 100644
--- a/lib/subliminal/api.py
+++ b/lib/subliminal/api.py
@@ -363,7 +363,7 @@ def download_best_subtitles(videos, languages, min_score=0, hearing_impaired=Fal
     checked_videos = []
     for video in videos:
         if not check_video(video, languages=languages, undefined=only_one):
-            logger.info('Skipping video %r')
+            logger.info('Skipping video %r', video)
             continue
         checked_videos.append(video)
 
diff --git a/lib/subliminal/cli.py b/lib/subliminal/cli.py
index c419ef46a..2c4f4c14f 100644
--- a/lib/subliminal/cli.py
+++ b/lib/subliminal/cli.py
@@ -307,7 +307,8 @@ def download(obj, provider, language, age, directory, encoding, single, force, h
             # directories
             if os.path.isdir(p):
                 try:
-                    scanned_videos = scan_videos(p, subtitles=not force, embedded_subtitles=not force)
+                    scanned_videos = scan_videos(p, subtitles=not force, embedded_subtitles=not force,
+                                                 subtitles_dir=directory)
                 except:
                     logger.exception('Unexpected error while collecting directory path %s', p)
                     errored_paths.append(p)
@@ -321,7 +322,7 @@ def download(obj, provider, language, age, directory, encoding, single, force, h
 
             # other inputs
             try:
-                video = scan_video(p, subtitles=not force, embedded_subtitles=not force)
+                video = scan_video(p, subtitles=not force, embedded_subtitles=not force, subtitles_dir=directory)
             except:
                 logger.exception('Unexpected error while collecting path %s', p)
                 errored_paths.append(p)
diff --git a/lib/subliminal/exceptions.py b/lib/subliminal/exceptions.py
index de2fabc0e..5f5c7a773 100644
--- a/lib/subliminal/exceptions.py
+++ b/lib/subliminal/exceptions.py
@@ -19,6 +19,11 @@ class AuthenticationError(ProviderError):
     pass
 
 
+class TooManyRequests(ProviderError):
+    """Exception raised by providers when too many requests are made."""
+    pass
+
+
 class DownloadLimitExceeded(ProviderError):
     """Exception raised by providers when download limit is exceeded."""
     pass
diff --git a/lib/subliminal/providers/addic7ed.py b/lib/subliminal/providers/addic7ed.py
index 3edfe357a..c8b9ed2bc 100644
--- a/lib/subliminal/providers/addic7ed.py
+++ b/lib/subliminal/providers/addic7ed.py
@@ -8,14 +8,15 @@ from requests import Session
 from . import ParserBeautifulSoup, Provider, get_version
 from .. import __version__
 from ..cache import SHOW_EXPIRATION_TIME, region
-from ..exceptions import AuthenticationError, ConfigurationError, DownloadLimitExceeded
-from ..subtitle import Subtitle, fix_line_ending, guess_matches, guess_properties
+from ..exceptions import AuthenticationError, ConfigurationError, DownloadLimitExceeded, TooManyRequests
+from ..subtitle import (Subtitle, fix_line_ending, guess_matches, guess_properties, sanitize_string,
+                        sanitized_string_equal)
 from ..video import Episode
 
 logger = logging.getLogger(__name__)
 language_converters.register('addic7ed = subliminal.converters.addic7ed:Addic7edConverter')
 
-series_year_re = re.compile('^(?P<series>[ \w]+)(?: \((?P<year>\d{4})\))?$')
+series_year_re = re.compile('^(?P<series>[ \w\'.:]+)(?: \((?P<year>\d{4})\))?$')
 
 
 class Addic7edSubtitle(Subtitle):
@@ -40,7 +41,7 @@ class Addic7edSubtitle(Subtitle):
         matches = super(Addic7edSubtitle, self).get_matches(video, hearing_impaired=hearing_impaired)
 
         # series
-        if video.series and self.series.lower() == video.series.lower():
+        if video.series and sanitized_string_equal(self.series, video.series):
             matches.add('series')
         # season
         if video.season and self.season == video.season:
@@ -49,7 +50,7 @@ class Addic7edSubtitle(Subtitle):
         if video.episode and self.episode == video.episode:
             matches.add('episode')
         # title
-        if video.title and self.title.lower() == video.title.lower():
+        if video.title and sanitized_string_equal(self.title, video.title):
             matches.add('title')
         # year
         if video.year == self.year:
@@ -130,7 +131,7 @@ class Addic7edProvider(Provider):
         # populate the show ids
         show_ids = {}
         for show in soup.select('td.version > h3 > a[href^="/show/"]'):
-            show_ids[show.text.lower().replace('\'', '')] = int(show['href'][6:])
+            show_ids[sanitize_string(show.text).lower()] = int(show['href'][6:])
         logger.debug('Found %d show ids', len(show_ids))
 
         return show_ids
@@ -147,8 +148,8 @@ class Addic7edProvider(Provider):
 
         """
         # build the params
-        series_year = '%s (%d)' % (series, year) if year is not None else series
-        params = {'search': series_year, 'Submit': 'Search'}
+        series_year = '%s %d' % (series, year) if year is not None else series
+        params = {'search': sanitize_string(series_year, replacement=' '), 'Submit': 'Search'}
 
         # make the search
         logger.info('Searching show ids with %r', params)
@@ -161,7 +162,7 @@ class Addic7edProvider(Provider):
         if not suggestion:
             logger.warning('Show id not found: no suggestion')
             return None
-        if not suggestion[0].i.text.lower() == series_year.lower():
+        if not sanitized_string_equal(suggestion[0].i.text, series_year):
             logger.warning('Show id not found: suggestion does not match')
             return None
         show_id = int(suggestion[0]['href'][6:])
@@ -183,24 +184,24 @@ class Addic7edProvider(Provider):
         :rtype: int or None
 
         """
-        series_clean = series.lower().replace('\'', '')
+        series_sanitized = sanitize_string(series).lower()
         show_ids = self._get_show_ids()
         show_id = None
 
         # attempt with country
         if not show_id and country_code:
             logger.debug('Getting show id with country')
-            show_id = show_ids.get('%s (%s)' % (series_clean, country_code.lower()))
+            show_id = show_ids.get('%s %s' % (series_sanitized, country_code.lower()))
 
         # attempt with year
         if not show_id and year:
             logger.debug('Getting show id with year')
-            show_id = show_ids.get('%s (%d)' % (series_clean, year))
+            show_id = show_ids.get('%s %d' % (series_sanitized, year))
 
         # attempt clean
         if not show_id:
             logger.debug('Getting show id')
-            show_id = show_ids.get(series_clean)
+            show_id = show_ids.get(series_sanitized)
 
         # search as last resort
         if not show_id:
@@ -220,6 +221,8 @@ class Addic7edProvider(Provider):
         logger.info('Getting the page of show id %d, season %d', show_id, season)
         r = self.session.get(self.server_url + 'show/%d' % show_id, params={'season': season}, timeout=10)
         r.raise_for_status()
+        if r.status_code == 304:
+            raise TooManyRequests()
         soup = ParserBeautifulSoup(r.content, ['lxml', 'html.parser'])
 
         # loop over subtitle rows
diff --git a/lib/subliminal/providers/napiprojekt.py b/lib/subliminal/providers/napiprojekt.py
index c89db7fb6..ef64a7171 100644
--- a/lib/subliminal/providers/napiprojekt.py
+++ b/lib/subliminal/providers/napiprojekt.py
@@ -4,7 +4,8 @@ import logging
 from babelfish import Language
 from requests import Session
 
-from . import Provider
+from . import Provider, get_version
+from .. import __version__
 from ..subtitle import Subtitle
 
 logger = logging.getLogger(__name__)
@@ -61,7 +62,7 @@ class NapiProjektProvider(Provider):
     server_url = 'http://napiprojekt.pl/unit_napisy/dl.php'
 
     def initialize(self):
-        self.session = Session()
+        self.session.headers = {'User-Agent': 'Subliminal/%s' % get_version(__version__)}
 
     def terminate(self):
         self.session.close()
diff --git a/lib/subliminal/providers/opensubtitles.py b/lib/subliminal/providers/opensubtitles.py
index 9698c11de..5a06a23b8 100644
--- a/lib/subliminal/providers/opensubtitles.py
+++ b/lib/subliminal/providers/opensubtitles.py
@@ -12,7 +12,7 @@ from six.moves.xmlrpc_client import ServerProxy
 from . import Provider, TimeoutSafeTransport, get_version
 from .. import __version__
 from ..exceptions import AuthenticationError, ConfigurationError, DownloadLimitExceeded, ProviderError
-from ..subtitle import Subtitle, fix_line_ending, guess_matches
+from ..subtitle import Subtitle, fix_line_ending, guess_matches, sanitized_string_equal
 from ..video import Episode, Movie
 
 logger = logging.getLogger(__name__)
@@ -23,8 +23,8 @@ class OpenSubtitlesSubtitle(Subtitle):
     series_re = re.compile('^"(?P<series_name>.*)" (?P<series_title>.*)$')
 
     def __init__(self, language, hearing_impaired, page_link, subtitle_id, matched_by, movie_kind, hash, movie_name,
-                 movie_release_name, movie_year, movie_imdb_id, series_season, series_episode):
-        super(OpenSubtitlesSubtitle, self).__init__(language, hearing_impaired, page_link)
+                 movie_release_name, movie_year, movie_imdb_id, series_season, series_episode, encoding):
+        super(OpenSubtitlesSubtitle, self).__init__(language, hearing_impaired, page_link, encoding)
         self.subtitle_id = subtitle_id
         self.matched_by = matched_by
         self.movie_kind = movie_kind
@@ -54,7 +54,7 @@ class OpenSubtitlesSubtitle(Subtitle):
         # episode
         if isinstance(video, Episode) and self.movie_kind == 'episode':
             # series
-            if video.series and self.series_name.lower() == video.series.lower():
+            if video.series and sanitized_string_equal(self.series_name, video.series):
                 matches.add('series')
             # season
             if video.season and self.series_season == video.season:
@@ -63,14 +63,14 @@ class OpenSubtitlesSubtitle(Subtitle):
             if video.episode and self.series_episode == video.episode:
                 matches.add('episode')
             # title
-            if video.title and self.series_title.lower() == video.title.lower():
+            if video.title and sanitized_string_equal(self.series_title, video.title):
                 matches.add('title')
             # guess
             matches |= guess_matches(video, guess_episode_info(self.movie_release_name + '.mkv'))
         # movie
         elif isinstance(video, Movie) and self.movie_kind == 'movie':
             # title
-            if video.title and self.movie_name.lower() == video.title.lower():
+            if video.title and sanitized_string_equal(self.movie_name, video.title):
                 matches.add('title')
             # year
             if video.year and self.movie_year == video.year:
@@ -129,9 +129,9 @@ class OpenSubtitlesProvider(Provider):
         if imdb_id:
             criteria.append({'imdbid': imdb_id})
         if query and season and episode:
-            criteria.append({'query': query, 'season': season, 'episode': episode})
+            criteria.append({'query': query.replace('\'', ''), 'season': season, 'episode': episode})
         elif query:
-            criteria.append({'query': query})
+            criteria.append({'query': query.replace('\'', '')})
         if not criteria:
             raise ValueError('Not enough information')
 
@@ -165,10 +165,11 @@ class OpenSubtitlesProvider(Provider):
             movie_imdb_id = int(subtitle_item['IDMovieImdb'])
             series_season = int(subtitle_item['SeriesSeason']) if subtitle_item['SeriesSeason'] else None
             series_episode = int(subtitle_item['SeriesEpisode']) if subtitle_item['SeriesEpisode'] else None
+            encoding = subtitle_item.get('SubEncoding') or None
 
             subtitle = OpenSubtitlesSubtitle(language, hearing_impaired, page_link, subtitle_id, matched_by, movie_kind,
                                              hash, movie_name, movie_release_name, movie_year, movie_imdb_id,
-                                             series_season, series_episode)
+                                             series_season, series_episode, encoding)
             logger.debug('Found subtitle %r', subtitle)
             subtitles.append(subtitle)
 
diff --git a/lib/subliminal/providers/podnapisi.py b/lib/subliminal/providers/podnapisi.py
index 2790c6fa0..3a1455714 100644
--- a/lib/subliminal/providers/podnapisi.py
+++ b/lib/subliminal/providers/podnapisi.py
@@ -18,7 +18,7 @@ from zipfile import ZipFile
 from . import Provider, get_version
 from .. import __version__
 from ..exceptions import ProviderError
-from ..subtitle import Subtitle, fix_line_ending, guess_matches
+from ..subtitle import Subtitle, fix_line_ending, guess_matches, sanitized_string_equal
 from ..video import Episode, Movie
 
 logger = logging.getLogger(__name__)
@@ -47,7 +47,7 @@ class PodnapisiSubtitle(Subtitle):
         # episode
         if isinstance(video, Episode):
             # series
-            if video.series and self.title.lower() == video.series.lower():
+            if video.series and sanitized_string_equal(self.title, video.series):
                 matches.add('series')
             # season
             if video.season and self.season == video.season:
@@ -61,7 +61,7 @@ class PodnapisiSubtitle(Subtitle):
         # movie
         elif isinstance(video, Movie):
             # title
-            if video.title and self.title.lower() == video.title.lower():
+            if video.title and sanitized_string_equal(self.title, video.title):
                 matches.add('title')
             # guess
             for release in self.releases:
@@ -162,7 +162,7 @@ class PodnapisiProvider(Provider):
 
     def download_subtitle(self, subtitle):
         # download as a zip
-        logger.info('Downloading subtitle %r')
+        logger.info('Downloading subtitle %r', subtitle)
         r = self.session.get(self.server_url + subtitle.pid + '/download', params={'container': 'zip'}, timeout=10)
         r.raise_for_status()
 
diff --git a/lib/subliminal/providers/thesubdb.py b/lib/subliminal/providers/thesubdb.py
index 67d71a504..f7f1f2451 100644
--- a/lib/subliminal/providers/thesubdb.py
+++ b/lib/subliminal/providers/thesubdb.py
@@ -21,7 +21,7 @@ class TheSubDBSubtitle(Subtitle):
 
     @property
     def id(self):
-        return self.hash
+        return self.hash + '-' + str(self.language)
 
     def get_matches(self, video, hearing_impaired=False):
         matches = super(TheSubDBSubtitle, self).get_matches(video, hearing_impaired=hearing_impaired)
@@ -73,7 +73,7 @@ class TheSubDBProvider(Provider):
         return [s for s in self.query(video.hashes['thesubdb']) if s.language in languages]
 
     def download_subtitle(self, subtitle):
-        logger.info('Downloading subtitle %r')
+        logger.info('Downloading subtitle %r', subtitle)
         params = {'action': 'download', 'hash': subtitle.hash, 'language': subtitle.language.alpha2}
         r = self.session.get(self.server_url, params=params, timeout=10)
         r.raise_for_status()
diff --git a/lib/subliminal/providers/tvsubtitles.py b/lib/subliminal/providers/tvsubtitles.py
index 06fd878a9..6df1ad227 100644
--- a/lib/subliminal/providers/tvsubtitles.py
+++ b/lib/subliminal/providers/tvsubtitles.py
@@ -11,7 +11,7 @@ from . import ParserBeautifulSoup, Provider, get_version
 from .. import __version__
 from ..cache import EPISODE_EXPIRATION_TIME, SHOW_EXPIRATION_TIME, region
 from ..exceptions import ProviderError
-from ..subtitle import Subtitle, fix_line_ending, guess_matches, guess_properties
+from ..subtitle import Subtitle, fix_line_ending, guess_matches, guess_properties, sanitized_string_equal
 from ..video import Episode
 
 logger = logging.getLogger(__name__)
@@ -42,7 +42,7 @@ class TVsubtitlesSubtitle(Subtitle):
         matches = super(TVsubtitlesSubtitle, self).get_matches(video, hearing_impaired=hearing_impaired)
 
         # series
-        if video.series and self.series.lower() == video.series.lower():
+        if video.series and sanitized_string_equal(self.series, video.series):
             matches.add('series')
         # season
         if video.season and self.season == video.season:
diff --git a/lib/subliminal/subtitle.py b/lib/subliminal/subtitle.py
index eeb840a80..5694af741 100644
--- a/lib/subliminal/subtitle.py
+++ b/lib/subliminal/subtitle.py
@@ -1,10 +1,12 @@
 # -*- coding: utf-8 -*-
 import logging
 import os
+import re
 
 import chardet
 from guessit.matchtree import MatchTree
 from guessit.plugins.transformers import get_transformer
+from codecs import lookup
 import pysrt
 
 from .video import Episode, Movie
@@ -25,7 +27,7 @@ class Subtitle(object):
     #: Name of the provider that returns that class of subtitle
     provider_name = ''
 
-    def __init__(self, language, hearing_impaired=False, page_link=None):
+    def __init__(self, language, hearing_impaired=False, page_link=None, encoding=None):
         #: Language of the subtitle
         self.language = language
 
@@ -39,7 +41,15 @@ class Subtitle(object):
         self.content = None
 
         #: Encoding to decode with when accessing :attr:`text`
-        self.encoding = None
+        if encoding:
+            try:
+                # set encoding to canonical codec name
+                self.encoding = lookup(encoding).name
+            except (TypeError, LookupError):
+                logger.debug('Unsupported encoding "%s", setting to None', encoding)
+                self.encoding = None
+        else:
+            self.encoding = None
 
     @property
     def id(self):
@@ -56,7 +66,11 @@ class Subtitle(object):
         if not self.content:
             return
 
-        return self.content.decode(self.encoding or self.guess_encoding(), errors='replace')
+        try:
+            return self.content.decode(self.encoding, errors='replace')
+        except (TypeError, LookupError):
+            # Failback to guess_encoding if empty or unknown encoding provided
+            return self.content.decode(self.guess_encoding(), errors='replace')
 
     def is_valid(self):
         """Check if a :attr:`text` is a valid SubRip format.
@@ -219,6 +233,32 @@ def get_subtitle_path(video_path, language=None, extension='.srt'):
     return subtitle_root + extension
 
 
+def sanitize_string(string, replacement=''):
+    """Replace any special characters from a string.
+
+    :param str string: the string to sanitize.
+    :param str replacement: the replacement for special characters.
+    :return: the sanitized string.
+    :rtype: str
+
+    """
+    return re.sub('[^ a-zA-Z0-9]', replacement, string)
+
+
+def sanitized_string_equal(string1, string2):
+    """Test two strings for equality case insensitively and ignoring special characters.
+
+    :param str string1: the first string to compare.
+    :param str string2: the second string to compare.
+    :return: `True` if the two strings are equal, `False` otherwise.
+    :rtype: bool
+
+    """
+    valid_pattern = '[^a-zA-Z0-9]'
+
+    return sanitize_string(string1).lower() == sanitize_string(string2).lower()
+
+
 def guess_matches(video, guess, partial=False):
     """Get matches between a `video` and a `guess`.
 
@@ -236,7 +276,7 @@ def guess_matches(video, guess, partial=False):
     matches = set()
     if isinstance(video, Episode):
         # series
-        if video.series and 'series' in guess and guess['series'].lower() == video.series.lower():
+        if video.series and 'series' in guess and sanitized_string_equal(guess['series'], video.series):
             matches.add('series')
         # season
         if video.season and 'season' in guess and guess['season'] == video.season:
@@ -255,7 +295,7 @@ def guess_matches(video, guess, partial=False):
         if video.year and 'year' in guess and guess['year'] == video.year:
             matches.add('year')
     # title
-    if video.title and 'title' in guess and guess['title'].lower() == video.title.lower():
+    if video.title and 'title' in guess and sanitized_string_equal(guess['title'], video.title):
         matches.add('title')
     # release_group
     if video.release_group and 'releaseGroup' in guess and guess['releaseGroup'].lower() == video.release_group.lower():
diff --git a/lib/subliminal/video.py b/lib/subliminal/video.py
index cc916ed1b..11fbfcd90 100644
--- a/lib/subliminal/video.py
+++ b/lib/subliminal/video.py
@@ -235,10 +235,13 @@ class Movie(Video):
         return '<%s [%r, %d]>' % (self.__class__.__name__, self.title, self.year)
 
 
-def search_external_subtitles(path):
+def search_external_subtitles(path, directory=None):
     """Search for external subtitles from a video `path` and their associated language.
 
+    Unless `directory` is provided, search will be made in the same directory as the video file.
+
     :param str path: path to the video.
+    :param str directory: directory to search for subtitles.
     :return: found subtitles with their languages.
     :rtype: dict
 
@@ -247,7 +250,7 @@ def search_external_subtitles(path):
     dirpath = dirpath or '.'
     fileroot, fileext = os.path.splitext(filename)
     subtitles = {}
-    for p in os.listdir(dirpath):
+    for p in os.listdir(directory or dirpath):
         # keep only valid subtitle filenames
         if not p.startswith(fileroot) or not p.endswith(SUBTITLE_EXTENSIONS):
             continue
@@ -272,12 +275,13 @@ def search_external_subtitles(path):
     return subtitles
 
 
-def scan_video(path, subtitles=True, embedded_subtitles=True):
+def scan_video(path, subtitles=True, embedded_subtitles=True, subtitles_dir=None):
     """Scan a video and its subtitle languages from a video `path`.
 
     :param str path: existing path to the video.
     :param bool subtitles: scan for subtitles with the same name.
     :param bool embedded_subtitles: scan for embedded subtitles.
+    :param str subtitles_dir: directory to search for subtitles.
     :return: the scanned video.
     :rtype: :class:`Video`
 
@@ -309,7 +313,7 @@ def scan_video(path, subtitles=True, embedded_subtitles=True):
 
     # external subtitles
     if subtitles:
-        video.subtitle_languages |= set(search_external_subtitles(path).values())
+        video.subtitle_languages |= set(search_external_subtitles(path, directory=subtitles_dir).values())
 
     # video metadata with enzyme
     try:
@@ -388,12 +392,13 @@ def scan_video(path, subtitles=True, embedded_subtitles=True):
     return video
 
 
-def scan_videos(path, subtitles=True, embedded_subtitles=True):
+def scan_videos(path, subtitles=True, embedded_subtitles=True, subtitles_dir=None):
     """Scan `path` for videos and their subtitles.
 
     :param str path: existing directory path to scan.
     :param bool subtitles: scan for subtitles with the same name.
     :param bool embedded_subtitles: scan for embedded subtitles.
+    :param str subtitles_dir: directory to search for subtitles.
     :return: the scanned videos.
     :rtype: list of :class:`Video`
 
@@ -438,7 +443,8 @@ def scan_videos(path, subtitles=True, embedded_subtitles=True):
 
             # scan video
             try:
-                video = scan_video(filepath, subtitles=subtitles, embedded_subtitles=embedded_subtitles)
+                video = scan_video(filepath, subtitles=subtitles, embedded_subtitles=embedded_subtitles,
+                                   subtitles_dir=subtitles_dir)
             except ValueError:  # pragma: no cover
                 logger.exception('Error scanning video')
                 continue
-- 
GitLab


From 39cbb85bcb060275af2feeb2a28888dfab255b5b Mon Sep 17 00:00:00 2001
From: kounch <kounch@mac.com>
Date: Fri, 6 Nov 2015 15:51:17 +0100
Subject: [PATCH 054/215] Added MLDonkey basic client

---
 gui/slick/js/configSearch.js       | 10 ++++++
 gui/slick/views/config_search.mako |  4 +--
 sickbeard/__init__.py              |  2 +-
 sickbeard/clients/__init__.py      |  6 ++--
 sickbeard/clients/mlnet_client.py  | 54 ++++++++++++++++++++++++++++++
 5 files changed, 71 insertions(+), 5 deletions(-)
 create mode 100644 sickbeard/clients/mlnet_client.py

diff --git a/gui/slick/js/configSearch.js b/gui/slick/js/configSearch.js
index 35dfd6b00..eca621cb5 100644
--- a/gui/slick/js/configSearch.js
+++ b/gui/slick/js/configSearch.js
@@ -166,6 +166,16 @@ $(document).ready(function(){
                 $(torrent_label_option).hide();
                 $(torrent_label_anime_option).hide();
                 $('#host_desc_torrent').text('URL to your qbittorrent client (e.g. http://localhost:8080)');
+            } else if ('mlnet' == selectedProvider){
+                client = 'mlnet';
+                $(torrent_path_option).hide();
+                $(torrent_label_option).hide();
+                $(torrent_verify_cert_option).hide();
+                $(torrent_verify_deluge).hide();
+                $(torrent_verify_rtorrent).hide();
+                $(torrent_label_anime_option).hide();
+                $(torrent_paused_option).hide();
+                $('#host_desc_torrent').text('URL to your MLDonkey (e.g. http://localhost:4080)');
             }
             $('#host_title').text(client + host);
             $('#username_title').text(client + username);
diff --git a/gui/slick/views/config_search.mako b/gui/slick/views/config_search.mako
index 1733d42c8..d8b1e4914 100644
--- a/gui/slick/views/config_search.mako
+++ b/gui/slick/views/config_search.mako
@@ -453,8 +453,8 @@
                                 <span class="component-title">Send .torrent files to:</span>
                                 <span class="component-desc">
                                 <select name="torrent_method" id="torrent_method" class="form-control input-sm">
-<% torrent_method_text = {'blackhole': "Black hole", 'utorrent': "uTorrent", 'transmission': "Transmission", 'deluge': "Deluge (via WebUI)", 'deluged': "Deluge (via Daemon)", 'download_station': "Synology DS", 'rtorrent': "rTorrent", 'qbittorrent': "qbittorrent"} %>
-% for curAction in ('blackhole', 'utorrent', 'transmission', 'deluge', 'deluged', 'download_station', 'rtorrent', 'qbittorrent'):
+<% torrent_method_text = {'blackhole': "Black hole", 'utorrent': "uTorrent", 'transmission': "Transmission", 'deluge': "Deluge (via WebUI)", 'deluged': "Deluge (via Daemon)", 'download_station': "Synology DS", 'rtorrent': "rTorrent", 'qbittorrent': "qbittorrent", 'mlnet': "MLDonkey"} %>
+% for curAction in ('blackhole', 'utorrent', 'transmission', 'deluge', 'deluged', 'download_station', 'rtorrent', 'qbittorrent', 'mlnet'):
                                 <option value="${curAction}" ${('', 'selected="selected"')[sickbeard.TORRENT_METHOD == curAction]}>${torrent_method_text[curAction]}</option>
 % endfor
                                 </select>
diff --git a/sickbeard/__init__.py b/sickbeard/__init__.py
index 73b06fd4c..61a43f017 100644
--- a/sickbeard/__init__.py
+++ b/sickbeard/__init__.py
@@ -857,7 +857,7 @@ def initialize(consoleLogging=True):
             NZB_METHOD = 'blackhole'
 
         TORRENT_METHOD = check_setting_str(CFG, 'General', 'torrent_method', 'blackhole')
-        if TORRENT_METHOD not in ('blackhole', 'utorrent', 'transmission', 'deluge', 'deluged', 'download_station', 'rtorrent', 'qbittorrent'):
+        if TORRENT_METHOD not in ('blackhole', 'utorrent', 'transmission', 'deluge', 'deluged', 'download_station', 'rtorrent', 'qbittorrent', 'mlnet'):
             TORRENT_METHOD = 'blackhole'
 
         DOWNLOAD_PROPERS = bool(check_setting_int(CFG, 'General', 'download_propers', 1))
diff --git a/sickbeard/clients/__init__.py b/sickbeard/clients/__init__.py
index 7fe1f62f3..2745ffaff 100644
--- a/sickbeard/clients/__init__.py
+++ b/sickbeard/clients/__init__.py
@@ -22,7 +22,8 @@ __all__ = ['utorrent',
            'deluged',
            'download_station',
            'rtorrent',
-           'qbittorrent'
+           'qbittorrent',
+           'mlnet'
 ]
 
 
@@ -103,7 +104,8 @@ default_host = {'utorrent': 'http://localhost:8000',
                 'deluged': 'scgi://localhost:58846',
                 'download_station': 'http://localhost:5000',
                 'rtorrent': 'scgi://localhost:5000',
-                'qbittorrent': 'http://localhost:8080'
+                'qbittorrent': 'http://localhost:8080',
+                'mlnet': 'http://localhost:4080'
 }
 
 
diff --git a/sickbeard/clients/mlnet_client.py b/sickbeard/clients/mlnet_client.py
new file mode 100644
index 000000000..3661ee5ca
--- /dev/null
+++ b/sickbeard/clients/mlnet_client.py
@@ -0,0 +1,54 @@
+# Author: kounch
+# URL: http://code.google.com/p/sickbeard/
+#
+# This file is part of SickRage.
+#
+# SickRage 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 3 of the License, or
+# (at your option) any later version.
+#
+# SickRage 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 SickRage.  If not, see <http://www.gnu.org/licenses/>.
+
+import sickbeard
+from .generic import GenericClient
+from requests.auth import HTTPDigestAuth
+
+class mlnetAPI(GenericClient):
+    def __init__(self, host=None, username=None, password=None):
+
+        super(mlnetAPI, self).__init__('mlnet', host, username, password)
+
+        self.url = self.host
+        #self.session.auth = HTTPDigestAuth(self.username, self.password);
+
+    def _get_auth(self):
+
+        try:
+            self.response = self.session.get(self.host, verify=False)
+            self.auth = self.response.content
+        except:
+            return None
+
+        return self.auth if not self.response.status_code == 404 else None
+
+    def _add_torrent_uri(self, result):
+
+        self.url = self.host+'submit'
+        params = {'q': 'dllink ' + result.url}
+        return self._request(method='get', params=params)
+
+    def _add_torrent_file(self, result):
+
+        self.url = self.host+'submit'
+        params = {'q': 'dllink ' + result.url}
+        return self._request(method='get', params=params)
+
+api = mlnetAPI()
+
-- 
GitLab


From 012c0be2b006696afc3b9ad2ba31f77f6a96049a Mon Sep 17 00:00:00 2001
From: Dustyn Gibson <miigotu@gmail.com>
Date: Thu, 5 Nov 2015 20:57:53 -0800
Subject: [PATCH 055/215] Remove glype proxy support

---
 sickbeard/helpers.py                | 98 +++++++++++++----------------
 sickbeard/providers/extratorrent.py |  2 +-
 sickbeard/providers/generic.py      | 65 ++-----------------
 sickbeard/providers/kat.py          |  2 +-
 sickbeard/providers/rarbg.py        |  4 --
 sickbeard/providers/thepiratebay.py |  5 +-
 sickbeard/providers/torrentz.py     |  2 +-
 sickbeard/tvcache.py                |  6 +-
 8 files changed, 56 insertions(+), 128 deletions(-)

diff --git a/sickbeard/helpers.py b/sickbeard/helpers.py
index 536bb76b5..afbcbd5b4 100644
--- a/sickbeard/helpers.py
+++ b/sickbeard/helpers.py
@@ -126,7 +126,6 @@ def remove_non_release_groups(name):
     """
     Remove non release groups from name
     """
-
     if not name:
         return name
 
@@ -134,44 +133,45 @@ def remove_non_release_groups(name):
     # Check your database for funky release_names and add them here, to improve failed handling, archiving, and history.
     # select release_name from tv_episodes WHERE LENGTH(release_name);
     # [eSc], [SSG], [GWC] are valid release groups for non-anime
-    removeWordsList = {r'\[rartv\]$':       'searchre',
-                       r'\[rarbg\]$':       'searchre',
-                       r'\[eztv\]$':        'searchre',
-                       r'\[ettv\]$':        'searchre',
-                       r'\[cttv\]$':        'searchre',
-                       r'\[vtv\]$':         'searchre',
-                       r'\[EtHD\]$':        'searchre',
-                       r'\[GloDLS\]$':      'searchre',
-                       r'\[silv4\]$':       'searchre',
-                       r'\[Seedbox\]$':     'searchre',
-                       r'\[PublicHD\]$':    'searchre',
-                       r'\[AndroidTwoU\]$': 'searchre',
-                       r'\.\[BT\]$':        'searchre',
-                       r' \[1044\]$':       'searchre',
-                       r'\.RiPSaLoT$':      'searchre',
-                       r'\.GiuseppeTnT$':   'searchre',
-                       r'\.Renc$':          'searchre',
-                       r'-NZBGEEK$':        'searchre',
-                       r'-Siklopentan$':    'searchre',
-                       r'-\SpastikusTV\]$':                 'searchre',
-                       r'-RP$':                             'searchre',
-                       r'-20-40$':                          'searchre',
-                       r'\.\[www\.usabit\.com\]$':          'searchre',
-                       r'^\[www\.Cpasbien\.pe\] ':          'searchre',
-                       r'^\[www\.Cpasbien\.com\] ':         'searchre',
-                       r'^\[ www\.Cpasbien\.pw \] ':        'searchre',
-                       r'^\.www\.Cpasbien\.pw':             'searchre',
-                       r'^\[www\.newpct1\.com\]':           'searchre',
-                       r'^\[ www\.Cpasbien\.com \] ':       'searchre',
-                       r'- \{ www\.SceneTime\.com \}$':     'searchre',
-                       r'^\{ www\.SceneTime\.com \} - ':    'searchre',
-                       r'^\[www\.frenchtorrentdb\.com\] ':  'searchre',
-                       r'^\]\.\[www\.tensiontorrent.com\] - ':      'searchre',
-                       r'^\]\.\[ www\.tensiontorrent.com \] - ':    'searchre',
-                       r'\[NO-RAR\] - \[ www\.torrentday\.com \]$': 'searchre',
-                       r'- \[ www\.torrentday\.com \]$':            'searchre',
-                       r'^\[ www\.TorrentDay\.com \] - ':           'searchre',
-                       }
+    removeWordsList = {
+        r'\[rartv\]$':       'searchre',
+        r'\[rarbg\]$':       'searchre',
+        r'\[eztv\]$':        'searchre',
+        r'\[ettv\]$':        'searchre',
+        r'\[cttv\]$':        'searchre',
+        r'\[vtv\]$':         'searchre',
+        r'\[EtHD\]$':        'searchre',
+        r'\[GloDLS\]$':      'searchre',
+        r'\[silv4\]$':       'searchre',
+        r'\[Seedbox\]$':     'searchre',
+        r'\[PublicHD\]$':    'searchre',
+        r'\[AndroidTwoU\]$': 'searchre',
+        r'\.\[BT\]$':        'searchre',
+        r' \[1044\]$':       'searchre',
+        r'\.RiPSaLoT$':      'searchre',
+        r'\.GiuseppeTnT$':   'searchre',
+        r'\.Renc$':          'searchre',
+        r'-NZBGEEK$':        'searchre',
+        r'-Siklopentan$':    'searchre',
+        r'-\[SpastikusTV\]$':                 'searchre',
+        r'-RP$':                             'searchre',
+        r'-20-40$':                          'searchre',
+        r'\.\[www\.usabit\.com\]$':          'searchre',
+        r'^\[www\.Cpasbien\.pe\] ':          'searchre',
+        r'^\[www\.Cpasbien\.com\] ':         'searchre',
+        r'^\[ www\.Cpasbien\.pw \] ':        'searchre',
+        r'^\.www\.Cpasbien\.pw':            'searchre',
+        r'^\[www\.newpct1\.com\]':            'searchre',
+        r'^\[ www\.Cpasbien\.com \] ':       'searchre',
+        r'- \{ www\.SceneTime\.com \}$':     'searchre',
+        r'^\{ www\.SceneTime\.com \} - ':    'searchre',
+        r'^\[www\.frenchtorrentdb\.com\] ':  'searchre',
+        r'^\]\.\[www\.tensiontorrent.com\] - ':      'searchre',
+        r'^\]\.\[ www\.tensiontorrent.com \] - ':    'searchre',
+        r'- \[ www\.torrentday\.com \]$':            'searchre',
+        r'^\[ www\.TorrentDay\.com \] - ':           'searchre',
+        r'\[NO-RAR\] - \[ www\.torrentday\.com \]$': 'searchre',
+    }
 
     _name = name
     for remove_string, remove_type in removeWordsList.iteritems():
@@ -180,7 +180,7 @@ def remove_non_release_groups(name):
         elif remove_type == 'searchre':
             _name = re.sub(r'(?i)' + remove_string, '', _name)
 
-    return _name.strip('.- ')
+    return _name.strip('.- []{}')
 
 
 def replaceExtension(filename, newExt):
@@ -1564,12 +1564,13 @@ def _setUpSession(session, headers):
     session = CacheControl(sess=session, cache=caches.FileCache(os.path.join(cache_dir, 'sessions'), use_dir_lock=True), cache_etags=False)
 
     # request session clear residual referer
-    if 'Referer' in session.headers and 'Referer' not in headers:
+    if 'Referer' in session.headers and 'Referer' not in headers or {}:
         session.headers.pop('Referer')
 
     # request session headers
     session.headers.update({'User-Agent': USER_AGENT, 'Accept-Encoding': 'gzip,deflate'})
-    session.headers.update(headers)
+    if headers:
+        session.headers.update(headers)
 
     # request session ssl verify
     session.verify = certifi.where() if sickbeard.SSL_VERIFY else False
@@ -1591,7 +1592,7 @@ def _setUpSession(session, headers):
     return session
 
 
-def getURL(url, post_data=None, params={}, headers={}, timeout=30, session=None, json=False, proxyGlypeProxySSLwarning=None):
+def getURL(url, post_data=None, params=None, headers=None, timeout=30, session=None, json=False):
     """
     Returns a byte-string retrieved from the url provider.
     """
@@ -1623,15 +1624,6 @@ def getURL(url, post_data=None, params={}, headers={}, timeout=30, session=None,
                        % (url, resp.status_code, codeDescription(resp.status_code)), logger.DEBUG)
             return None
 
-        if proxyGlypeProxySSLwarning is not None:
-            if re.search('The site you are attempting to browse is on a secure connection', resp.text):
-                resp = session.get(proxyGlypeProxySSLwarning, timeout=timeout, allow_redirects=True, verify=session.verify)
-
-                if not resp.ok:
-                    logger.log(u"GlypeProxySSLwarning: Requested getURL %s returned status code is %s: %s"
-                               % (url, resp.status_code, codeDescription(resp.status_code)), logger.DEBUG)
-                    return None
-
     except (SocketTimeout, TypeError) as e:
         logger.log(u"Connection timed out (sockets) accessing getURL %s Error: %r" % (url, ex(e)), logger.WARNING)
         return None
@@ -1661,7 +1653,7 @@ def getURL(url, post_data=None, params={}, headers={}, timeout=30, session=None,
     return resp.content if not json else resp.json()
 
 
-def download_file(url, filename, session=None, headers={}):
+def download_file(url, filename, session=None, headers=None):
     """
     Downloads a file specified
 
diff --git a/sickbeard/providers/extratorrent.py b/sickbeard/providers/extratorrent.py
index f6aaa1c2b..746df6eae 100644
--- a/sickbeard/providers/extratorrent.py
+++ b/sickbeard/providers/extratorrent.py
@@ -73,7 +73,7 @@ class ExtraTorrentProvider(generic.TorrentProvider):
                         continue
 
                     if not data.startswith('<?xml'):
-                        logger.log(u'Expected xml but got something else, is your proxy failing?', logger.INFO)
+                        logger.log(u'Expected xml but got something else, is your mirror failing?', logger.INFO)
                         continue
 
                     try:
diff --git a/sickbeard/providers/generic.py b/sickbeard/providers/generic.py
index e6e076a82..6d511e064 100644
--- a/sickbeard/providers/generic.py
+++ b/sickbeard/providers/generic.py
@@ -50,8 +50,6 @@ class GenericProvider:
         self.providerType = None
         self.name = name
 
-        self.proxy = ProviderProxy()
-        self.proxyGlypeProxySSLwarning = None
         self.urls = {}
         self.url = ''
 
@@ -141,16 +139,8 @@ class GenericProvider:
         for providers with special URL requirements (like cookies)
         """
 
-        if self.proxy.isEnabled():
-            self.headers.update({'Referer': self.proxy.getProxyURL()})
-            self.proxyGlypeProxySSLwarning = self.proxy.getProxyURL() + 'includes/process.php?action=sslagree&submit=Continue anyway...'
-        else:
-            if 'Referer' in self.headers:
-                self.headers.pop('Referer')
-            self.proxyGlypeProxySSLwarning = None
-
-        return helpers.getURL(self.proxy._buildURL(url), post_data=post_data, params=params, headers=self.headers, timeout=timeout,
-                              session=self.session, json=json, proxyGlypeProxySSLwarning=self.proxyGlypeProxySSLwarning)
+        return helpers.getURL(url, post_data=post_data, params=params, headers=self.headers, timeout=timeout,
+                              session=self.session, json=json)
 
 
     def _makeURL(self, result):
@@ -200,17 +190,11 @@ class GenericProvider:
 
         urls, filename = self._makeURL(result)
 
-        if self.proxy.isEnabled():
-            self.headers.update({'Referer': self.proxy.getProxyURL()})
-        elif 'Referer' in self.headers:
-            self.headers.pop('Referer')
-
         for url in urls:
             if 'NO_DOWNLOAD_NAME' in url:
                 continue
 
-            if not self.proxy.isEnabled() and url.startswith('http'):
-                # Let's just set a referer for every .torrent/.nzb, should work as a cover-all without side-effects
+            if url.startswith('http'):
                 self.headers.update({'Referer': '/'.join(url.split('/')[:3]) + '/'})
 
             logger.log(u"Downloading a result from " + self.name + " at " + url)
@@ -219,7 +203,7 @@ class GenericProvider:
             if url.endswith(GenericProvider.TORRENT) and filename.endswith(GenericProvider.NZB):
                 filename = filename.rsplit('.', 1)[0] + '.' + GenericProvider.TORRENT
 
-            if helpers.download_file(self.proxy._buildURL(url), filename, session=self.session, headers=self.headers):
+            if helpers.download_file(url, filename, session=self.session, headers=self.headers):
                 if self._verify_download(filename):
                     logger.log(u"Saved result to " + filename, logger.INFO)
                     return True
@@ -662,44 +646,3 @@ class TorrentProvider(GenericProvider):
                         results.append(classes.Proper(title, url, datetime.datetime.today(), show))
 
         return results
-
-class ProviderProxy:
-    def __init__(self):
-        self.Type = 'GlypeProxy'
-        self.param = 'browse.php?u='
-        self.option = '&b=32&f=norefer'
-        self.enabled = False
-        self.url = None
-
-        self.urls = {
-            'getprivate.eu (NL)': 'http://getprivate.eu/',
-            'hideme.nl (NL)': 'http://hideme.nl/',
-            'proxite.eu (DE)': 'http://proxite.eu/',
-            'interproxy.net (EU)': 'http://interproxy.net/',
-        }
-
-    def isEnabled(self):
-        """ Return True if we Choose to call TPB via Proxy """
-        return self.enabled
-
-    def getProxyURL(self):
-        """ Return the Proxy URL Choosen via Provider Setting """
-        return str(self.url)
-
-    def _buildURL(self, url):
-        """ Return the Proxyfied URL of the page """
-        if self.isEnabled():
-            url = self.getProxyURL() + self.param + urllib.quote_plus(url.encode('UTF-8')) + self.option
-            logger.log(u"Proxified URL: " + url, logger.DEBUG)
-
-        return url
-
-    def _buildRE(self, regx):
-        """ Return the Proxyfied RE string """
-        if self.isEnabled():
-            regx = re.sub('//1', self.option, regx).replace('&', '&amp;')
-            logger.log(u"Proxified REGEX: " + regx, logger.DEBUG)
-        else:
-            regx = re.sub('//1', '', regx)
-
-        return regx
diff --git a/sickbeard/providers/kat.py b/sickbeard/providers/kat.py
index 65fab5019..e6cd39f9c 100755
--- a/sickbeard/providers/kat.py
+++ b/sickbeard/providers/kat.py
@@ -95,7 +95,7 @@ class KATProvider(generic.TorrentProvider):
                         continue
 
                     if not data.startswith('<?xml'):
-                        logger.log(u'Expected xml but got something else, is your proxy failing?', logger.INFO)
+                        logger.log(u'Expected xml but got something else, is your mirror failing?', logger.INFO)
                         continue
 
                     try:
diff --git a/sickbeard/providers/rarbg.py b/sickbeard/providers/rarbg.py
index a671b00d0..1e7042653 100644
--- a/sickbeard/providers/rarbg.py
+++ b/sickbeard/providers/rarbg.py
@@ -197,10 +197,6 @@ class RarbgProvider(generic.TorrentProvider):
                                 return results
                             logger.log(u"Using new token", logger.DEBUG)
                             continue
-                        if re.search('<div id="error">.*</div>', data):
-                            logger.log(u"Proxy %s does not support https" % self.proxy.getProxyURL(), logger.DEBUG)
-                            searchURL = searchURL.replace(u'https', 'http')
-                            continue
 
                         # No error found break
                         break
diff --git a/sickbeard/providers/thepiratebay.py b/sickbeard/providers/thepiratebay.py
index 6eb4e10dc..bd85cb814 100644
--- a/sickbeard/providers/thepiratebay.py
+++ b/sickbeard/providers/thepiratebay.py
@@ -62,7 +62,7 @@ class ThePirateBayProvider(generic.TorrentProvider):
             'category': 200
         }
 
-        self.re_title_url = r'/torrent/(?P<id>\d+)/(?P<title>.*?)//1".+?(?P<url>magnet.*?)//1".+?Size (?P<size>[\d\.]*&nbsp;[TGKMiB]{2,3}).+?(?P<seeders>\d+)</td>.+?(?P<leechers>\d+)</td>'
+        self.re_title_url = r'/torrent/(?P<id>\d+)/(?P<title>.*?)".+?(?P<url>magnet.*?)".+?Size (?P<size>[\d\.]*&nbsp;[TGKMiB]{2,3}).+?(?P<seeders>\d+)</td>.+?(?P<leechers>\d+)</td>'
 
     def isEnabled(self):
         return self.enabled
@@ -88,8 +88,7 @@ class ThePirateBayProvider(generic.TorrentProvider):
                 if not data:
                     continue
 
-                re_title_url = self.proxy._buildRE(self.re_title_url).replace('&amp;f=norefer', '')
-                matches = re.compile(re_title_url, re.DOTALL).finditer(data)
+                matches = re.compile(self.re_title_url, re.DOTALL).finditer(data)
                 for torrent in matches:
                     title = torrent.group('title')
                     download_url = torrent.group('url')
diff --git a/sickbeard/providers/torrentz.py b/sickbeard/providers/torrentz.py
index 10aafa1aa..d36ece382 100644
--- a/sickbeard/providers/torrentz.py
+++ b/sickbeard/providers/torrentz.py
@@ -80,7 +80,7 @@ class TORRENTZProvider(generic.TorrentProvider):
                     continue
 
                 if not data.startswith('<?xml'):
-                    logger.log(u'Expected xml but got something else, is your proxy failing?', logger.INFO)
+                    logger.log(u'Expected xml but got something else, is your mirror failing?', logger.INFO)
                     continue
 
                 try:
diff --git a/sickbeard/tvcache.py b/sickbeard/tvcache.py
index bf7149e54..3c99eb36e 100644
--- a/sickbeard/tvcache.py
+++ b/sickbeard/tvcache.py
@@ -136,9 +136,7 @@ class TVCache(object):
     def getRSSFeed(self, url):
         handlers = []
 
-        if self.provider.proxy.isEnabled():
-            self.provider.headers.update({'Referer': self.provider.proxy.getProxyURL()})
-        elif sickbeard.PROXY_SETTING:
+        if sickbeard.PROXY_SETTING:
             logger.log("Using proxy for url: " + url, logger.DEBUG)
             scheme, address = urllib2.splittype(sickbeard.PROXY_SETTING)
             address = sickbeard.PROXY_SETTING if scheme else 'http://' + sickbeard.PROXY_SETTING
@@ -148,7 +146,7 @@ class TVCache(object):
             self.provider.headers.pop('Referer')
 
         return getFeed(
-            self.provider.proxy._buildURL(url),
+            url,
             request_headers=self.provider.headers,
             handlers=handlers)
 
-- 
GitLab


From 1ab3e86a875c3bdb5e00558fbddf38c1fc3380cf Mon Sep 17 00:00:00 2001
From: Dustyn Gibson <miigotu@gmail.com>
Date: Thu, 5 Nov 2015 20:58:30 -0800
Subject: [PATCH 056/215] Add removewords unit test, to prepare for using a
 regex there

---
 tests/helpers_tests.py | 96 ++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 96 insertions(+)
 create mode 100755 tests/helpers_tests.py

diff --git a/tests/helpers_tests.py b/tests/helpers_tests.py
new file mode 100755
index 000000000..b4ef164a2
--- /dev/null
+++ b/tests/helpers_tests.py
@@ -0,0 +1,96 @@
+#!/usr/bin/env python2.7
+"""
+Author: Dustyn Gibson <miigotu@gmail.com>
+URL: http://github.com/SiCKRAGETV/SickRage
+
+This file is part of SickRage.
+
+SickRage 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 3 of the License, or
+(at your option) any later version.
+
+SickRage 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 SickRage.  If not, see <http://www.gnu.org/licenses/>.
+"""
+
+import sys
+import os.path
+
+sys.path.insert(1, os.path.abspath(os.path.join(os.path.dirname(__file__), '../lib')))
+sys.path.insert(1, os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
+
+import unittest
+
+from sickbeard.helpers import remove_non_release_groups
+
+test_result = 'Show.Name.S01E01.HDTV.x264-RLSGROUP'
+test_cases = {
+    'removewords': [
+        test_result,
+        'Show.Name.S01E01.HDTV.x264-RLSGROUP[cttv]',
+        'Show.Name.S01E01.HDTV.x264-RLSGROUP.RiPSaLoT',
+        'Show.Name.S01E01.HDTV.x264-RLSGROUP[GloDLS]',
+        'Show.Name.S01E01.HDTV.x264-RLSGROUP[EtHD]',
+        'Show.Name.S01E01.HDTV.x264-RLSGROUP-20-40',
+        'Show.Name.S01E01.HDTV.x264-RLSGROUP[NO-RAR] - [ www.torrentday.com ]',
+        '[www.frenchtorrentdb.com] Show.Name.S01E01.HDTV.x264-RLSGROUP',
+        'Show.Name.S01E01.HDTV.x264-RLSGROUP[rarbg]',
+        'Show.Name.S01E01.HDTV.x264-RLSGROUP[Seedbox]',
+        '{ www.SceneTime.com } - Show.Name.S01E01.HDTV.x264-RLSGROUP',
+        '].[www.tensiontorrent.com] - Show.Name.S01E01.HDTV.x264-RLSGROUP',
+        '[ www.TorrentDay.com ] - Show.Name.S01E01.HDTV.x264-RLSGROUP',
+        'Show.Name.S01E01.HDTV.x264-RLSGROUP[silv4]',
+        'Show.Name.S01E01.HDTV.x264-RLSGROUP[AndroidTwoU]',
+        '[www.newpct1.com]Show.Name.S01E01.HDTV.x264-RLSGROUP',
+        'Show.Name.S01E01.HDTV.x264-RLSGROUP-NZBGEEK',
+        '.www.Cpasbien.pwShow.Name.S01E01.HDTV.x264-RLSGROUP',
+        'Show.Name.S01E01.HDTV.x264-RLSGROUP [1044]',
+        '[ www.Cpasbien.pw ] Show.Name.S01E01.HDTV.x264-RLSGROUP',
+        'Show.Name.S01E01.HDTV.x264-RLSGROUP.[BT]',
+        'Show.Name.S01E01.HDTV.x264-RLSGROUP[vtv]',
+        'Show.Name.S01E01.HDTV.x264-RLSGROUP.[www.usabit.com]',
+        '[www.Cpasbien.com] Show.Name.S01E01.HDTV.x264-RLSGROUP',
+        'Show.Name.S01E01.HDTV.x264-RLSGROUP[ettv]',
+        'Show.Name.S01E01.HDTV.x264-RLSGROUP[rartv]',
+        'Show.Name.S01E01.HDTV.x264-RLSGROUP-Siklopentan',
+        'Show.Name.S01E01.HDTV.x264-RLSGROUP-RP',
+        'Show.Name.S01E01.HDTV.x264-RLSGROUP[PublicHD]',
+        '[www.Cpasbien.pe] Show.Name.S01E01.HDTV.x264-RLSGROUP',
+        'Show.Name.S01E01.HDTV.x264-RLSGROUP[eztv]',
+        'Show.Name.S01E01.HDTV.x264-RLSGROUP-[SpastikusTV]',
+        '].[ www.tensiontorrent.com ] - Show.Name.S01E01.HDTV.x264-RLSGROUP',
+        '[ www.Cpasbien.com ] Show.Name.S01E01.HDTV.x264-RLSGROUP',
+        'Show.Name.S01E01.HDTV.x264-RLSGROUP- { www.SceneTime.com }',
+        'Show.Name.S01E01.HDTV.x264-RLSGROUP- [ www.torrentday.com ]',
+        'Show.Name.S01E01.HDTV.x264-RLSGROUP.Renc'
+    ]
+}
+
+class HelpersTests(unittest.TestCase):
+    def __init__(self, *args, **kwargs):
+        super(HelpersTests, self).__init__(*args, **kwargs)
+
+def test_generator(test_strings):
+    def _test(self):
+        for test_string in test_strings:
+            self.assertEqual(remove_non_release_groups(test_string), test_result)
+    return _test
+
+if __name__ == '__main__':
+    print "=================="
+    print "STARTING - Helpers TESTS"
+    print "=================="
+    print "######################################################################"
+    for name, test_data in test_cases.items():
+        test_name = 'test_%s' % name
+        test = test_generator(test_data)
+        setattr(HelpersTests, test_name, test)
+
+    suite = unittest.TestLoader().loadTestsFromTestCase(HelpersTests)
+    unittest.TextTestRunner(verbosity=2).run(suite)
-- 
GitLab


From 0ccc55b22d5836d64f3a789f78d8b3808fcc0c05 Mon Sep 17 00:00:00 2001
From: Dustyn Gibson <miigotu@gmail.com>
Date: Fri, 6 Nov 2015 10:51:57 -0800
Subject: [PATCH 057/215] Fix TitansOfTV, it was totally broken, was adding
 entire result to the list instead of the created item Remove
 alt.binaries.boneless and alt.binaries.misc from binsearch. No need to parse
 nonsesns Split genericProvider.isActive into inheriting classes Make
 isEnabled just return self.enabled (no need to override), and removed it from
 individual clients rename helpers._remove_file_failed to
 helpers.remove_file_failed (access to a protected member)

---
 sickbeard/helpers.py                   | 16 +++++----
 sickbeard/providers/__init__.py        |  6 ++--
 sickbeard/providers/alpharatio.py      |  5 +--
 sickbeard/providers/animenzb.py        |  3 --
 sickbeard/providers/binsearch.py       | 14 ++++----
 sickbeard/providers/bitcannon.py       |  3 --
 sickbeard/providers/bitsoup.py         |  5 +--
 sickbeard/providers/bluetigers.py      |  3 --
 sickbeard/providers/btdigg.py          |  3 --
 sickbeard/providers/btn.py             |  3 --
 sickbeard/providers/cpasbien.py        |  3 --
 sickbeard/providers/extratorrent.py    |  3 --
 sickbeard/providers/fnt.py             |  3 --
 sickbeard/providers/frenchtorrentdb.py |  3 --
 sickbeard/providers/freshontv.py       |  5 +--
 sickbeard/providers/generic.py         | 49 +++++++++++++++-----------
 sickbeard/providers/gftracker.py       |  3 --
 sickbeard/providers/hdbits.py          |  3 --
 sickbeard/providers/hdspace.py         |  3 --
 sickbeard/providers/hdtorrents.py      |  4 ---
 sickbeard/providers/hounddawgs.py      |  3 --
 sickbeard/providers/iptorrents.py      |  3 --
 sickbeard/providers/kat.py             |  3 --
 sickbeard/providers/libertalia.py      |  3 --
 sickbeard/providers/morethantv.py      |  3 --
 sickbeard/providers/newpct.py          |  4 ---
 sickbeard/providers/newznab.py         |  3 --
 sickbeard/providers/nextgen.py         |  7 ++--
 sickbeard/providers/nyaatorrents.py    |  3 --
 sickbeard/providers/omgwtfnzbs.py      |  4 ---
 sickbeard/providers/pretome.py         |  3 --
 sickbeard/providers/rarbg.py           |  3 --
 sickbeard/providers/rsstorrent.py      | 48 ++++++++++++-------------
 sickbeard/providers/scc.py             |  3 --
 sickbeard/providers/scenetime.py       |  3 --
 sickbeard/providers/shazbat.py         |  3 --
 sickbeard/providers/speedcd.py         |  3 --
 sickbeard/providers/strike.py          |  3 --
 sickbeard/providers/t411.py            |  5 +--
 sickbeard/providers/thepiratebay.py    |  3 --
 sickbeard/providers/titansoftv.py      | 21 +++++------
 sickbeard/providers/tntvillage.py      |  4 ---
 sickbeard/providers/tokyotoshokan.py   |  3 --
 sickbeard/providers/torrentbytes.py    |  3 --
 sickbeard/providers/torrentday.py      |  3 --
 sickbeard/providers/torrentleech.py    |  3 --
 sickbeard/providers/torrentproject.py  |  3 --
 sickbeard/providers/torrentz.py        |  3 --
 sickbeard/providers/transmitthenet.py  |  3 --
 sickbeard/providers/tvchaosuk.py       |  3 --
 sickbeard/providers/womble.py          |  3 --
 sickbeard/providers/xthor.py           |  3 --
 52 files changed, 84 insertions(+), 224 deletions(-)

diff --git a/sickbeard/helpers.py b/sickbeard/helpers.py
index afbcbd5b4..b9e11c1e8 100644
--- a/sickbeard/helpers.py
+++ b/sickbeard/helpers.py
@@ -81,6 +81,8 @@ import shutil_custom
 
 shutil.copyfile = shutil_custom.copyfile_custom
 
+# pylint: disable=W0212
+# Access to a protected member of a client class
 urllib._urlopener = classes.SickBeardURLopener()
 
 
@@ -317,7 +319,7 @@ def sanitizeFileName(name):
     return name
 
 
-def _remove_file_failed(failed_file):
+def remove_file_failed(failed_file):
     """
     Remove file from filesystem
 
@@ -1686,27 +1688,27 @@ def download_file(url, filename, session=None, headers=None):
                 logger.log(u"Problem setting permissions or writing file to: %s" % filename, logger.WARNING)
 
     except (SocketTimeout, TypeError) as e:
-        _remove_file_failed(filename)
+        remove_file_failed(filename)
         logger.log(u"Connection timed out (sockets) while loading download URL %s Error: %r" % (url, ex(e)), logger.WARNING)
         return None
     except requests.exceptions.HTTPError as e:
-        _remove_file_failed(filename)
+        remove_file_failed(filename)
         logger.log(u"HTTP error %r while loading download URL %s " % (ex(e), url), logger.WARNING)
         return False
     except requests.exceptions.ConnectionError as e:
-        _remove_file_failed(filename)
+        remove_file_failed(filename)
         logger.log(u"Connection error %r while loading download URL %s " % (ex(e), url), logger.WARNING)
         return False
     except requests.exceptions.Timeout as e:
-        _remove_file_failed(filename)
+        remove_file_failed(filename)
         logger.log(u"Connection timed out %r while loading download URL %s " % (ex(e), url), logger.WARNING)
         return False
     except EnvironmentError as e:
-        _remove_file_failed(filename)
+        remove_file_failed(filename)
         logger.log(u"Unable to save the file: %r " % ex(e), logger.WARNING)
         return False
     except Exception:
-        _remove_file_failed(filename)
+        remove_file_failed(filename)
         logger.log(u"Unknown exception while loading download URL %s : %r" % (url, traceback.format_exc()), logger.WARNING)
         return False
 
diff --git a/sickbeard/providers/__init__.py b/sickbeard/providers/__init__.py
index 8770dd8b4..933cdf5d7 100644
--- a/sickbeard/providers/__init__.py
+++ b/sickbeard/providers/__init__.py
@@ -217,7 +217,7 @@ def makeTorrentRssProvider(configString):
 
     try:
         torrentRss = sys.modules['sickbeard.providers.rsstorrent']
-    except:
+    except Exception:
         return
 
     newProvider = torrentRss.TorrentRssProvider(name, url, cookies, titleTAG, search_mode, search_fallback, enable_daily,
@@ -243,10 +243,10 @@ def getProviderModule(name):
         raise Exception("Can't find " + prefix + name + " in " + "Providers")
 
 
-def getProviderClass(id):
+def getProviderClass(provider_id):
     providerMatch = [x for x in
                      sickbeard.providerList + sickbeard.newznabProviderList + sickbeard.torrentRssProviderList if
-                     x.getID() == id]
+                     x.getID() == provider_id]
 
     if len(providerMatch) != 1:
         return None
diff --git a/sickbeard/providers/alpharatio.py b/sickbeard/providers/alpharatio.py
index 529bc5f74..9d73f9ee9 100644
--- a/sickbeard/providers/alpharatio.py
+++ b/sickbeard/providers/alpharatio.py
@@ -53,9 +53,6 @@ class AlphaRatioProvider(generic.TorrentProvider):
 
         self.cache = AlphaRatioCache(self)
 
-    def isEnabled(self):
-        return self.enabled
-
     def _doLogin(self):
         login_params = {'username': self.username,
                         'password': self.password,
@@ -136,7 +133,7 @@ class AlphaRatioProvider(generic.TorrentProvider):
 
                             items[mode].append(item)
 
-                except Exception, e:
+                except Exception:
                     logger.log(u"Failed parsing provider. Traceback: %s" % traceback.format_exc(), logger.WARNING)
 
             # For each search mode sort all the items by seeders if available
diff --git a/sickbeard/providers/animenzb.py b/sickbeard/providers/animenzb.py
index dfeece3eb..ae122eeb9 100644
--- a/sickbeard/providers/animenzb.py
+++ b/sickbeard/providers/animenzb.py
@@ -46,9 +46,6 @@ class animenzb(generic.NZBProvider):
 
         self.url = self.urls['base_url']
 
-    def isEnabled(self):
-        return self.enabled
-
     def _get_season_search_strings(self, ep_obj):
         return [x for x in show_name_helpers.makeSceneSeasonSearchString(self.show, ep_obj)]
 
diff --git a/sickbeard/providers/binsearch.py b/sickbeard/providers/binsearch.py
index f320fc6b6..c71d6e312 100644
--- a/sickbeard/providers/binsearch.py
+++ b/sickbeard/providers/binsearch.py
@@ -18,7 +18,7 @@ import urllib
 import re
 
 
-import generic
+from sickbeard.providers import generic
 
 from sickbeard import logger
 from sickbeard import tvcache
@@ -32,8 +32,6 @@ class BinSearchProvider(generic.NZBProvider):
         self.urls = {'base_url': 'https://www.binsearch.info/'}
         self.url = self.urls['base_url']
 
-    def isEnabled(self):
-        return self.enabled
 
 class BinSearchCache(tvcache.TVCache):
     def __init__(self, provider_obj):
@@ -44,13 +42,13 @@ class BinSearchCache(tvcache.TVCache):
         # compile and save our regular expressions
 
         # this pulls the title from the URL in the description
-        self.descTitleStart = re.compile('^.*https?://www\.binsearch\.info/.b=')
+        self.descTitleStart = re.compile(r'^.*https?://www\.binsearch\.info/.b=')
         self.descTitleEnd = re.compile('&amp;.*$')
 
         # these clean up the horrible mess of a title if the above fail
         self.titleCleaners = [
-            re.compile('.?yEnc.?\(\d+/\d+\)$'),
-            re.compile(' \[\d+/\d+\] '),
+            re.compile(r'.?yEnc.?\(\d+/\d+\)$'),
+            re.compile(r' \[\d+/\d+\] '),
         ]
 
     def _get_title_and_url(self, item):
@@ -94,9 +92,9 @@ class BinSearchCache(tvcache.TVCache):
         self.setLastUpdate()
 
         cl = []
-        for group in ['alt.binaries.boneless','alt.binaries.misc','alt.binaries.hdtv','alt.binaries.hdtv.x264','alt.binaries.tv','alt.binaries.tvseries','alt.binaries.teevee']:
+        for group in ['alt.binaries.hdtv', 'alt.binaries.hdtv.x264', 'alt.binaries.tv', 'alt.binaries.tvseries', 'alt.binaries.teevee']:
             url = self.provider.url + 'rss.php?'
-            urlArgs = {'max': 1000,'g': group}
+            urlArgs = {'max': 1000, 'g': group}
 
             url += urllib.urlencode(urlArgs)
 
diff --git a/sickbeard/providers/bitcannon.py b/sickbeard/providers/bitcannon.py
index e6744d056..2de19044c 100644
--- a/sickbeard/providers/bitcannon.py
+++ b/sickbeard/providers/bitcannon.py
@@ -44,9 +44,6 @@ class BitCannonProvider(generic.TorrentProvider):
             'trackers': self.url + 'stats',
         }
 
-    def isEnabled(self):
-        return self.enabled
-
     def _doSearch(self, search_strings, search_mode='eponly', epcount=0, age=0, epObj=None):
         results = []
         items = {'Season': [], 'Episode': [], 'RSS': []}
diff --git a/sickbeard/providers/bitsoup.py b/sickbeard/providers/bitsoup.py
index c49849025..e25855c9d 100644
--- a/sickbeard/providers/bitsoup.py
+++ b/sickbeard/providers/bitsoup.py
@@ -52,9 +52,6 @@ class BitSoupProvider(generic.TorrentProvider):
             "c42": 1, "c45": 1, "c49": 1, "c7": 1
         }
 
-    def isEnabled(self):
-        return self.enabled
-
     def _checkAuth(self):
         if not self.username or not self.password:
             logger.log(u"Invalid username or password. Check your settings", logger.WARNING)
@@ -141,7 +138,7 @@ class BitSoupProvider(generic.TorrentProvider):
 
                             items[mode].append(item)
 
-                except Exception, e:
+                except Exception:
                     logger.log(u"Failed parsing provider. Traceback: %s" % traceback.format_exc(), logger.WARNING)
 
             # For each search mode sort all the items by seeders if available
diff --git a/sickbeard/providers/bluetigers.py b/sickbeard/providers/bluetigers.py
index e28361ffd..a3416f3a7 100644
--- a/sickbeard/providers/bluetigers.py
+++ b/sickbeard/providers/bluetigers.py
@@ -56,9 +56,6 @@ class BLUETIGERSProvider(generic.TorrentProvider):
 
         self.url = self.urls['base_url']
 
-    def isEnabled(self):
-        return self.enabled
-
     def _doLogin(self):
         if any(requests.utils.dict_from_cookiejar(self.session.cookies).values()):
             return True
diff --git a/sickbeard/providers/btdigg.py b/sickbeard/providers/btdigg.py
index 21b7bab46..fc97662bd 100644
--- a/sickbeard/providers/btdigg.py
+++ b/sickbeard/providers/btdigg.py
@@ -38,9 +38,6 @@ class BTDIGGProvider(generic.TorrentProvider):
 
         self.cache = BTDiggCache(self)
 
-    def isEnabled(self):
-        return self.enabled
-
     def _doSearch(self, search_strings, search_mode='eponly', epcount=0, age=0, epObj=None):
 
         results = []
diff --git a/sickbeard/providers/btn.py b/sickbeard/providers/btn.py
index e055388d1..c3eb82621 100644
--- a/sickbeard/providers/btn.py
+++ b/sickbeard/providers/btn.py
@@ -52,9 +52,6 @@ class BTNProvider(generic.TorrentProvider):
 
         self.url = self.urls['website']
 
-    def isEnabled(self):
-        return self.enabled
-
     def _checkAuth(self):
         if not self.api_key:
             logger.log(u"Invalid api key. Check your settings", logger.WARNING)
diff --git a/sickbeard/providers/cpasbien.py b/sickbeard/providers/cpasbien.py
index 794430e74..e91160f8d 100644
--- a/sickbeard/providers/cpasbien.py
+++ b/sickbeard/providers/cpasbien.py
@@ -40,9 +40,6 @@ class CpasbienProvider(generic.TorrentProvider):
 
         self.cache = CpasbienCache(self)
 
-    def isEnabled(self):
-        return self.enabled
-
     def _doSearch(self, search_params, search_mode='eponly', epcount=0, age=0, epObj=None):
 
         results = []
diff --git a/sickbeard/providers/extratorrent.py b/sickbeard/providers/extratorrent.py
index 746df6eae..3578d58c3 100644
--- a/sickbeard/providers/extratorrent.py
+++ b/sickbeard/providers/extratorrent.py
@@ -50,9 +50,6 @@ class ExtraTorrentProvider(generic.TorrentProvider):
         self.headers.update({'User-Agent': USER_AGENT})
         self.search_params = {'cid': 8}
 
-    def isEnabled(self):
-        return self.enabled
-
     def _doSearch(self, search_strings, search_mode='eponly', epcount=0, age=0, epObj=None):
 
         results = []
diff --git a/sickbeard/providers/fnt.py b/sickbeard/providers/fnt.py
index ab676c581..78bc2d1ea 100644
--- a/sickbeard/providers/fnt.py
+++ b/sickbeard/providers/fnt.py
@@ -54,9 +54,6 @@ class FNTProvider(generic.TorrentProvider):
             "visible": 1, "freeleech": 0, "nuke": 1, "3D": 0, "sort": "size", "order": "desc"
             }
 
-    def isEnabled(self):
-        return self.enabled
-
     def _doLogin(self):
 
         if any(requests.utils.dict_from_cookiejar(self.session.cookies).values()):
diff --git a/sickbeard/providers/frenchtorrentdb.py b/sickbeard/providers/frenchtorrentdb.py
index 9cf7c5882..8e69b6179 100644
--- a/sickbeard/providers/frenchtorrentdb.py
+++ b/sickbeard/providers/frenchtorrentdb.py
@@ -58,9 +58,6 @@ class FrenchTorrentDBProvider(generic.TorrentProvider):
         self.minseed = None
         self.minleech = None
 
-    def isEnabled(self):
-        return self.enabled
-
     def _doLogin(self):
 
         params = {
diff --git a/sickbeard/providers/freshontv.py b/sickbeard/providers/freshontv.py
index c84907986..720064de9 100644
--- a/sickbeard/providers/freshontv.py
+++ b/sickbeard/providers/freshontv.py
@@ -57,9 +57,6 @@ class FreshOnTVProvider(generic.TorrentProvider):
 
         self.cookies = None
 
-    def isEnabled(self):
-        return self.enabled
-
     def _checkAuth(self):
 
         if not self.username or not self.password:
@@ -156,7 +153,7 @@ class FreshOnTVProvider(generic.TorrentProvider):
                         # limit RSS search
                         if max_page_number > 3 and mode is 'RSS':
                             max_page_number = 3
-                except:
+                except Exception:
                     logger.log(u"Failed parsing provider. Traceback: %s" % traceback.format_exc(), logger.ERROR)
                     continue
 
diff --git a/sickbeard/providers/generic.py b/sickbeard/providers/generic.py
index 6d511e064..7d6d5811d 100644
--- a/sickbeard/providers/generic.py
+++ b/sickbeard/providers/generic.py
@@ -22,7 +22,6 @@ import datetime
 import os
 import re
 import itertools
-import urllib
 from random import shuffle
 from base64 import b16encode, b32decode
 
@@ -40,7 +39,7 @@ from sickrage.helper.encoding import ek
 from sickrage.helper.exceptions import ex
 from sickbeard import show_name_helpers
 
-class GenericProvider:
+class GenericProvider(object):
     NZB = "nzb"
     TORRENT = "torrent"
 
@@ -97,6 +96,8 @@ class GenericProvider:
     def imageName(self):
         return self.getID() + '.png'
 
+    # pylint: disable=R0201,W0612
+    # Method could be a function, Unused variable
     def _checkAuth(self):
         return True
 
@@ -104,18 +105,10 @@ class GenericProvider:
         return True
 
     def isActive(self):
-        if self.providerType == GenericProvider.NZB and sickbeard.USE_NZBS:
-            return self.isEnabled()
-        elif self.providerType == GenericProvider.TORRENT and sickbeard.USE_TORRENTS:
-            return self.isEnabled()
-        else:
-            return False
+        return False
 
     def isEnabled(self):
-        """
-        This should be overridden and should return the config setting eg. sickbeard.MYPROVIDER
-        """
-        return False
+        return self.enabled
 
     def getResult(self, episodes):
         """
@@ -152,7 +145,7 @@ class GenericProvider:
 
                 try:
                     torrent_name = re.findall('dn=([^&]+)', result.url)[0]
-                except:
+                except Exception:
                     torrent_name = 'NO_DOWNLOAD_NAME'
 
                 if len(torrent_hash) == 32:
@@ -163,7 +156,7 @@ class GenericProvider:
                     return urls, filename
 
                 urls = [x.format(torrent_hash=torrent_hash, torrent_name=torrent_name) for x in self.btCacheURLS]
-            except:
+            except Exception:
                 logger.log("Unable to extract torrent hash or name from magnet: " + ex(result.url), logger.ERROR)
                 return urls, filename
         else:
@@ -209,7 +202,7 @@ class GenericProvider:
                     return True
                 else:
                     logger.log(u"Could not download %s" % url, logger.WARNING)
-                    helpers._remove_file_failed(filename)
+                    helpers.remove_file_failed(filename)
 
         if len(urls):
             logger.log(u"Failed to download any results", logger.WARNING)
@@ -226,10 +219,12 @@ class GenericProvider:
             try:
                 parser = createParser(file_name)
                 if parser:
+                    # pylint: disable=W0212
+                    # Access to a protected member of a client class
                     mime_type = parser._getMimeType()
                     try:
                         parser.stream._input.close()
-                    except:
+                    except Exception:
                         pass
                     if mime_type == 'application/x-bittorrent':
                         return True
@@ -256,6 +251,8 @@ class GenericProvider:
         quality = Quality.sceneQuality(title, anime)
         return quality
 
+    # pylint: disable=R0201,W0613
+    # Method could be a function, Unused argument
     def _doSearch(self, search_params, search_mode='eponly', epcount=0, age=0, epObj=None):
         return []
 
@@ -389,9 +386,8 @@ class GenericProvider:
                             u"This is supposed to be a season pack search but the result " + title + " is not a valid season pack, skipping it",
                             logger.DEBUG)
                         addCacheEntry = True
-                    if len(parse_result.episode_numbers) and (
-                                    parse_result.season_number not in set([ep.season for ep in episodes]) or not [ep for ep in episodes if
-                                                                                 ep.scene_episode in parse_result.episode_numbers]):
+                    if len(parse_result.episode_numbers) and (parse_result.season_number not in set([ep.season for ep in episodes])
+                                                              or not [ep for ep in episodes if ep.scene_episode in parse_result.episode_numbers]):
                         logger.log(
                             u"The result " + title + " doesn't seem to be a valid episode that we are trying to snatch, ignoring",
                             logger.DEBUG)
@@ -441,6 +437,8 @@ class GenericProvider:
             # add parsed result to cache for usage later on
             if addCacheEntry:
                 logger.log(u"Adding item from search to cache: " + title, logger.DEBUG)
+                # pylint: disable=W0212
+                # Access to a protected member of a client class
                 ci = self.cache._addCacheEntry(title, url, parse_result=parse_result)
                 if ci is not None:
                     cl.append(ci)
@@ -496,6 +494,8 @@ class GenericProvider:
 
         # check if we have items to add to cache
         if len(cl) > 0:
+            # pylint: disable=W0212
+            # Access to a protected member of a client class
             myDB = self.cache._getDB()
             myDB.mass_action(cl)
 
@@ -522,6 +522,9 @@ class NZBProvider(GenericProvider):
 
         self.providerType = GenericProvider.NZB
 
+    def isActive(self):
+        return sickbeard.USE_NZBS and self.isEnabled()
+
     def _get_size(self, item):
         try:
             size = item.get('links')[1].get('length', -1)
@@ -540,6 +543,9 @@ class TorrentProvider(GenericProvider):
 
         self.providerType = GenericProvider.TORRENT
 
+    def isActive(self):
+        return sickbeard.USE_TORRENTS and self.isEnabled()
+
     def _get_title_and_url(self, item):
         from feedparser.util import FeedParserDict
         if isinstance(item, (dict, FeedParserDict)):
@@ -611,7 +617,7 @@ class TorrentProvider(GenericProvider):
                 ep_string += "%02d" % int(ep_obj.scene_absolute_number)
             else:
                 ep_string += sickbeard.config.naming_ep_type[2] % {'seasonnumber': ep_obj.scene_season,
-                                                              'episodenumber': ep_obj.scene_episode}
+                                                                   'episodenumber': ep_obj.scene_episode}
             if add_string:
                 ep_string = ep_string + ' %s' % add_string
 
@@ -619,7 +625,8 @@ class TorrentProvider(GenericProvider):
 
         return [search_string]
 
-    def _clean_title_from_provider(self, title):
+    @staticmethod
+    def _clean_title_from_provider(title):
         return (title or '').replace(' ', '.')
 
     def findPropers(self, search_date=datetime.datetime.today()):
diff --git a/sickbeard/providers/gftracker.py b/sickbeard/providers/gftracker.py
index 58c7be006..14d6656cd 100644
--- a/sickbeard/providers/gftracker.py
+++ b/sickbeard/providers/gftracker.py
@@ -56,9 +56,6 @@ class GFTrackerProvider(generic.TorrentProvider):
 
         self.cache = GFTrackerCache(self)
 
-    def isEnabled(self):
-        return self.enabled
-
     def _checkAuth(self):
 
         if not self.username or not self.password:
diff --git a/sickbeard/providers/hdbits.py b/sickbeard/providers/hdbits.py
index bbbdb2a80..fe2f6b91f 100644
--- a/sickbeard/providers/hdbits.py
+++ b/sickbeard/providers/hdbits.py
@@ -49,9 +49,6 @@ class HDBitsProvider(generic.TorrentProvider):
 
         self.url = self.urls['base_url']
 
-    def isEnabled(self):
-        return self.enabled
-
     def _checkAuth(self):
 
         if not self.username or not self.passkey:
diff --git a/sickbeard/providers/hdspace.py b/sickbeard/providers/hdspace.py
index d7da35202..2e1fde63f 100644
--- a/sickbeard/providers/hdspace.py
+++ b/sickbeard/providers/hdspace.py
@@ -56,9 +56,6 @@ class HDSpaceProvider(generic.TorrentProvider):
 
         self.url = self.urls['base_url']
 
-    def isEnabled(self):
-        return self.enabled
-
     def _checkAuth(self):
 
         if not self.username or not self.password:
diff --git a/sickbeard/providers/hdtorrents.py b/sickbeard/providers/hdtorrents.py
index 7eb9af279..d8f53f097 100644
--- a/sickbeard/providers/hdtorrents.py
+++ b/sickbeard/providers/hdtorrents.py
@@ -53,10 +53,6 @@ class HDTorrentsProvider(generic.TorrentProvider):
 
         self.cache = HDTorrentsCache(self)
 
-
-    def isEnabled(self):
-        return self.enabled
-
     def _checkAuth(self):
 
         if not self.username or not self.password:
diff --git a/sickbeard/providers/hounddawgs.py b/sickbeard/providers/hounddawgs.py
index 24d0a1acb..704320e3e 100644
--- a/sickbeard/providers/hounddawgs.py
+++ b/sickbeard/providers/hounddawgs.py
@@ -62,9 +62,6 @@ class HoundDawgsProvider(generic.TorrentProvider):
             "searchtags": ''
         }
 
-    def isEnabled(self):
-        return self.enabled
-
     def _doLogin(self):
 
         login_params = {'username': self.username,
diff --git a/sickbeard/providers/iptorrents.py b/sickbeard/providers/iptorrents.py
index b644a230e..b441fbdd5 100644
--- a/sickbeard/providers/iptorrents.py
+++ b/sickbeard/providers/iptorrents.py
@@ -48,9 +48,6 @@ class IPTorrentsProvider(generic.TorrentProvider):
 
         self.categories = '73=&60='
 
-    def isEnabled(self):
-        return self.enabled
-
     def _checkAuth(self):
 
         if not self.username or not self.password:
diff --git a/sickbeard/providers/kat.py b/sickbeard/providers/kat.py
index e6cd39f9c..2614558d3 100755
--- a/sickbeard/providers/kat.py
+++ b/sickbeard/providers/kat.py
@@ -63,9 +63,6 @@ class KATProvider(generic.TorrentProvider):
             'category': 'tv'
         }
 
-    def isEnabled(self):
-        return self.enabled
-
     def _doSearch(self, search_strings, search_mode='eponly', epcount=0, age=0, epObj=None):
         results = []
         items = {'Season': [], 'Episode': [], 'RSS': []}
diff --git a/sickbeard/providers/libertalia.py b/sickbeard/providers/libertalia.py
index 549523a0f..e9d364f17 100644
--- a/sickbeard/providers/libertalia.py
+++ b/sickbeard/providers/libertalia.py
@@ -52,9 +52,6 @@ class LibertaliaProvider(generic.TorrentProvider):
 
         self.cache = LibertaliaCache(self)
 
-    def isEnabled(self):
-        return self.enabled
-
     def _doLogin(self):
 
         if any(requests.utils.dict_from_cookiejar(self.session.cookies).values()):
diff --git a/sickbeard/providers/morethantv.py b/sickbeard/providers/morethantv.py
index d6034c8ef..e815b4146 100644
--- a/sickbeard/providers/morethantv.py
+++ b/sickbeard/providers/morethantv.py
@@ -62,9 +62,6 @@ class MoreThanTVProvider(generic.TorrentProvider):
 
         self.cache = MoreThanTVCache(self)
 
-    def isEnabled(self):
-        return self.enabled
-
     def _checkAuth(self):
 
         if not self.username or not self.password:
diff --git a/sickbeard/providers/newpct.py b/sickbeard/providers/newpct.py
index dbc410f91..ad1dd5412 100644
--- a/sickbeard/providers/newpct.py
+++ b/sickbeard/providers/newpct.py
@@ -71,10 +71,6 @@ class newpctProvider(generic.TorrentProvider):
             'q': ''
         }
 
-
-    def isEnabled(self):
-        return self.enabled
-
     def _doSearch(self, search_strings, search_mode='eponly', epcount=0, age=0, epObj=None):
 
         results = []
diff --git a/sickbeard/providers/newznab.py b/sickbeard/providers/newznab.py
index feaf5e860..b3e960a64 100644
--- a/sickbeard/providers/newznab.py
+++ b/sickbeard/providers/newznab.py
@@ -88,9 +88,6 @@ class NewznabProvider(generic.NZBProvider):
             return self.getID() + '.png'
         return 'newznab.png'
 
-    def isEnabled(self):
-        return self.enabled
-
     def _getURL(self, url, post_data=None, params=None, timeout=30, json=False):
         return self.getURL(url, post_data=post_data, params=params, timeout=timeout, json=json)
 
diff --git a/sickbeard/providers/nextgen.py b/sickbeard/providers/nextgen.py
index b9707cac4..5915ff6a5 100644
--- a/sickbeard/providers/nextgen.py
+++ b/sickbeard/providers/nextgen.py
@@ -57,9 +57,6 @@ class NextGenProvider(generic.TorrentProvider):
         self.minleech = 0
         self.freeleech = True
 
-    def isEnabled(self):
-        return self.enabled
-
     def getLoginParams(self):
         return {
             'username': self.username,
@@ -83,7 +80,7 @@ class NextGenProvider(generic.TorrentProvider):
                     return True
                 else:
                     self.login_opener = None
-            except:
+            except Exception:
                 self.login_opener = None
 
         if self.login_opener:
@@ -105,7 +102,7 @@ class NextGenProvider(generic.TorrentProvider):
                     return True
 
                 error = 'unknown'
-        except:
+        except Exception:
             error = traceback.format_exc()
             self.login_opener = None
 
diff --git a/sickbeard/providers/nyaatorrents.py b/sickbeard/providers/nyaatorrents.py
index ea6190849..1b58081c1 100644
--- a/sickbeard/providers/nyaatorrents.py
+++ b/sickbeard/providers/nyaatorrents.py
@@ -45,9 +45,6 @@ class NyaaProvider(generic.TorrentProvider):
         self.minleech = 0
         self.confirmed = False
 
-    def isEnabled(self):
-        return self.enabled
-
     def _doSearch(self, search_strings, search_mode='eponly', epcount=0, age=0, epObj=None):
         if self.show and not self.show.is_anime:
             return []
diff --git a/sickbeard/providers/omgwtfnzbs.py b/sickbeard/providers/omgwtfnzbs.py
index 90f0b362b..775061259 100644
--- a/sickbeard/providers/omgwtfnzbs.py
+++ b/sickbeard/providers/omgwtfnzbs.py
@@ -40,10 +40,6 @@ class OmgwtfnzbsProvider(generic.NZBProvider):
 
         self.supportsBacklog = True
 
-
-    def isEnabled(self):
-        return self.enabled
-
     def _checkAuth(self):
 
         if not self.username or not self.api_key:
diff --git a/sickbeard/providers/pretome.py b/sickbeard/providers/pretome.py
index 1ee425f28..30dbac2d2 100644
--- a/sickbeard/providers/pretome.py
+++ b/sickbeard/providers/pretome.py
@@ -55,9 +55,6 @@ class PretomeProvider(generic.TorrentProvider):
 
         self.cache = PretomeCache(self)
 
-    def isEnabled(self):
-        return self.enabled
-
     def _checkAuth(self):
 
         if not self.username or not self.password or not self.pin:
diff --git a/sickbeard/providers/rarbg.py b/sickbeard/providers/rarbg.py
index 1e7042653..62e60956e 100644
--- a/sickbeard/providers/rarbg.py
+++ b/sickbeard/providers/rarbg.py
@@ -79,9 +79,6 @@ class RarbgProvider(generic.TorrentProvider):
 
         self.cache = RarbgCache(self)
 
-    def isEnabled(self):
-        return self.enabled
-
     def _doLogin(self):
         if self.token and self.tokenExpireDate and datetime.datetime.now() < self.tokenExpireDate:
             return True
diff --git a/sickbeard/providers/rsstorrent.py b/sickbeard/providers/rsstorrent.py
index 436e91c3f..070705eb3 100644
--- a/sickbeard/providers/rsstorrent.py
+++ b/sickbeard/providers/rsstorrent.py
@@ -17,19 +17,17 @@
 
 import os
 import re
+import requests
+from bencode import bdecode
 
 import sickbeard
-import generic
-
+from sickbeard.providers import generic
 from sickbeard import helpers
 from sickbeard import logger
 from sickbeard import tvcache
 from sickrage.helper.encoding import ek
 from sickrage.helper.exceptions import ex
 
-import requests
-from bencode import bdecode
-
 
 class TorrentRssProvider(generic.TorrentProvider):
     def __init__(self, name, url, cookies='', titleTAG='title', search_mode='eponly', search_fallback=False, enable_daily=False,
@@ -52,26 +50,23 @@ class TorrentRssProvider(generic.TorrentProvider):
         self.titleTAG = titleTAG
 
     def configStr(self):
-        return "%s|%s|%s|%s|%d|%s|%d|%d|%d" % (self.name or '',
-                                            self.url or '',
-                                            self.cookies or '',
-                                            self.titleTAG or '',
-                                            self.enabled,
-                                            self.search_mode or '',
-                                            self.search_fallback,
-                                            self.enable_daily,
-                                            self.enable_backlog)
+        return "%s|%s|%s|%s|%d|%s|%d|%d|%d" % (
+            self.name or '',
+            self.url or '',
+            self.cookies or '',
+            self.titleTAG or '',
+            self.enabled,
+            self.search_mode or '',
+            self.search_fallback,
+            self.enable_daily,
+            self.enable_backlog
+        )
 
     def imageName(self):
-        if ek(os.path.isfile,
-                 ek(os.path.join, sickbeard.PROG_DIR, 'gui', sickbeard.GUI_NAME, 'images', 'providers',
-                       self.getID() + '.png')):
+        if os.path.isfile(ek(os.path.join, sickbeard.PROG_DIR, 'gui', sickbeard.GUI_NAME, 'images', 'providers', self.getID() + '.png')):
             return self.getID() + '.png'
         return 'torrentrss.png'
 
-    def isEnabled(self):
-        return self.enabled
-
     def _get_title_and_url(self, item):
 
         title = item.get(self.titleTAG)
@@ -88,7 +83,7 @@ class TorrentRssProvider(generic.TorrentProvider):
         for cur_attempt in attempt_list:
             try:
                 url = cur_attempt()
-            except:
+            except Exception:
                 continue
 
             if title and url:
@@ -100,10 +95,12 @@ class TorrentRssProvider(generic.TorrentProvider):
 
         try:
             if self.cookies:
-                cookie_validator = re.compile("^(\w+=\w+)(;\w+=\w+)*$")
+                cookie_validator = re.compile(r"^(\w+=\w+)(;\w+=\w+)*$")
                 if not cookie_validator.match(self.cookies):
                     return (False, 'Cookie is not correctly formatted: ' + self.cookies)
 
+            # pylint: disable=W0212
+            # Access to a protected member of a client class
             data = self.cache._getRSSData()['entries']
             if not data:
                 return (False, 'No items found in the RSS feed ' + self.url)
@@ -116,12 +113,12 @@ class TorrentRssProvider(generic.TorrentProvider):
             if not url:
                 return (False, 'Unable to get torrent url from first item')
 
-            if url.startswith('magnet:') and re.search('urn:btih:([\w]{32,40})', url):
+            if url.startswith('magnet:') and re.search(r'urn:btih:([\w]{32,40})', url):
                 return (True, 'RSS feed Parsed correctly')
             else:
                 if self.cookies:
                     requests.utils.add_dict_to_cookiejar(self.session.cookies,
-                                                         dict(x.rsplit('=', 1) for x in (self.cookies.split(';'))))
+                                                         dict(x.rsplit('=', 1) for x in self.cookies.split(';')))
                 torrent_file = self.getURL(url)
                 try:
                     bdecode(torrent_file)
@@ -134,7 +131,8 @@ class TorrentRssProvider(generic.TorrentProvider):
         except Exception, e:
             return (False, 'Error when trying to load RSS: ' + ex(e))
 
-    def dumpHTML(self, data):
+    @staticmethod
+    def dumpHTML(data):
         dumpName = ek(os.path.join, sickbeard.CACHE_DIR, 'custom_torrent.html')
 
         try:
diff --git a/sickbeard/providers/scc.py b/sickbeard/providers/scc.py
index 2b0f4cda3..c02ac02d5 100644
--- a/sickbeard/providers/scc.py
+++ b/sickbeard/providers/scc.py
@@ -56,9 +56,6 @@ class SCCProvider(generic.TorrentProvider):
         self.categories = { 'sponly': 'c26=26&c44=44&c45=45', # Archive, non-scene HD, non-scene SD; need to include non-scene because WEB-DL packs get added to those categories
                             'eponly': 'c27=27&c17=17&c44=44&c45=45&c33=33&c34=34'} # TV HD, TV SD, non-scene HD, non-scene SD, foreign XviD, foreign x264
 
-    def isEnabled(self):
-        return self.enabled
-
     def _doLogin(self):
 
         login_params = {'username': self.username,
diff --git a/sickbeard/providers/scenetime.py b/sickbeard/providers/scenetime.py
index 2e89e7ee1..c4136a07c 100644
--- a/sickbeard/providers/scenetime.py
+++ b/sickbeard/providers/scenetime.py
@@ -53,9 +53,6 @@ class SceneTimeProvider(generic.TorrentProvider):
 
         self.categories = "&c2=1&c43=13&c9=1&c63=1&c77=1&c79=1&c100=1&c101=1"
 
-    def isEnabled(self):
-        return self.enabled
-
     def _doLogin(self):
 
         login_params = {'username': self.username,
diff --git a/sickbeard/providers/shazbat.py b/sickbeard/providers/shazbat.py
index 4e0b5bfab..95eb68edb 100644
--- a/sickbeard/providers/shazbat.py
+++ b/sickbeard/providers/shazbat.py
@@ -40,9 +40,6 @@ class ShazbatProvider(generic.TorrentProvider):
                      'website': u'http://www.shazbat.tv/login',}
         self.url = self.urls['website']
 
-    def isEnabled(self):
-        return self.enabled
-
     def _checkAuth(self):
         if not self.passkey:
             raise AuthException("Your authentication credentials for " + self.name + " are missing, check your config.")
diff --git a/sickbeard/providers/speedcd.py b/sickbeard/providers/speedcd.py
index 2483b2af4..b5fe4feab 100644
--- a/sickbeard/providers/speedcd.py
+++ b/sickbeard/providers/speedcd.py
@@ -52,9 +52,6 @@ class SpeedCDProvider(generic.TorrentProvider):
 
         self.cache = SpeedCDCache(self)
 
-    def isEnabled(self):
-        return self.enabled
-
     def _doLogin(self):
 
         login_params = {'username': self.username,
diff --git a/sickbeard/providers/strike.py b/sickbeard/providers/strike.py
index c22442b47..704b23d88 100644
--- a/sickbeard/providers/strike.py
+++ b/sickbeard/providers/strike.py
@@ -32,9 +32,6 @@ class STRIKEProvider(generic.TorrentProvider):
         self.cache = StrikeCache(self)
         self.minseed, self.minleech = 2 * [None]
 
-    def isEnabled(self):
-        return self.enabled
-
     def _doSearch(self, search_strings, search_mode='eponly', epcount=0, age=0, epObj=None):
 
         results = []
diff --git a/sickbeard/providers/t411.py b/sickbeard/providers/t411.py
index 030f46279..e96f1de5e 100644
--- a/sickbeard/providers/t411.py
+++ b/sickbeard/providers/t411.py
@@ -54,9 +54,6 @@ class T411Provider(generic.TorrentProvider):
         self.minleech = 0
         self.confirmed = False
 
-    def isEnabled(self):
-        return self.enabled
-
     def _doLogin(self):
 
         if self.token is not None:
@@ -151,7 +148,7 @@ class T411Provider(generic.TorrentProvider):
                                 logger.log(u"Failed parsing provider. Traceback: %s" % traceback.format_exc(), logger.DEBUG)
                                 continue
 
-                    except Exception, e:
+                    except Exception:
                         logger.log(u"Failed parsing provider. Traceback: %s" % traceback.format_exc(), logger.ERROR)
 
             # For each search mode sort all the items by seeders if available if available
diff --git a/sickbeard/providers/thepiratebay.py b/sickbeard/providers/thepiratebay.py
index bd85cb814..cf5eb3d57 100644
--- a/sickbeard/providers/thepiratebay.py
+++ b/sickbeard/providers/thepiratebay.py
@@ -64,9 +64,6 @@ class ThePirateBayProvider(generic.TorrentProvider):
 
         self.re_title_url = r'/torrent/(?P<id>\d+)/(?P<title>.*?)".+?(?P<url>magnet.*?)".+?Size (?P<size>[\d\.]*&nbsp;[TGKMiB]{2,3}).+?(?P<seeders>\d+)</td>.+?(?P<leechers>\d+)</td>'
 
-    def isEnabled(self):
-        return self.enabled
-
     def _doSearch(self, search_strings, search_mode='eponly', epcount=0, age=0, epObj=None):
 
         results = []
diff --git a/sickbeard/providers/titansoftv.py b/sickbeard/providers/titansoftv.py
index 1ce3bd3a2..13b3b8a39 100644
--- a/sickbeard/providers/titansoftv.py
+++ b/sickbeard/providers/titansoftv.py
@@ -2,7 +2,7 @@
 # URL: http://code.google.com/p/sickbeard
 # Originally written for SickGear
 #
-# This file is part of SickRage. 
+# This file is part of SickRage.
 #
 # SickRage is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -19,7 +19,7 @@
 
 import urllib
 
-import generic
+from sickbeard.providers import generic
 from sickbeard import logger
 from sickbeard import tvcache
 from sickbeard.helpers import mapIndexersToShow
@@ -38,9 +38,6 @@ class TitansOfTVProvider(generic.TorrentProvider):
         self.url = 'http://titansof.tv/api/torrents'
         self.download_url = 'http://titansof.tv/api/torrents/%s/download?apikey=%s'
 
-    def isEnabled(self):
-        return self.enabled
-
     def seedRatio(self):
         return self.ratio
 
@@ -69,7 +66,7 @@ class TitansOfTVProvider(generic.TorrentProvider):
 
         searchURL = self.url + '?' + urllib.urlencode(params)
         logger.log(u"Search string: %s " % search_params, logger.DEBUG)
-        logger.log(u"Search URL: %s" %  searchURL, logger.DEBUG) 
+        logger.log(u"Search URL: %s" %  searchURL, logger.DEBUG)
 
         parsedJSON = self.getURL(searchURL, json=True)  # do search
 
@@ -81,14 +78,14 @@ class TitansOfTVProvider(generic.TorrentProvider):
 
             try:
                 found_torrents = parsedJSON['results']
-            except:
+            except Exception:
                 found_torrents = {}
 
             for result in found_torrents:
-                title = parsedJSON['release_name']
-                id = parsedJSON['id']
-                download_url = self.download_url % (id, self.api_key)
-                # FIXME
+                title = result.get('release_name', '')
+                tid = result.get('id', '')
+                download_url = self.download_url % (tid, self.api_key)
+                # FIXME size, seeders, leechers
                 size = -1
                 seeders = 1
                 leechers = 0
@@ -105,7 +102,7 @@ class TitansOfTVProvider(generic.TorrentProvider):
                 item = title, download_url, size, seeders, leechers
 
                 logger.log(u"Found result: %s " % title, logger.DEBUG)
-                results.append(result)
+                results.append(item)
 
         # FIXME SORTING
 
diff --git a/sickbeard/providers/tntvillage.py b/sickbeard/providers/tntvillage.py
index 9400508d0..95d3f765a 100644
--- a/sickbeard/providers/tntvillage.py
+++ b/sickbeard/providers/tntvillage.py
@@ -112,10 +112,6 @@ class TNTVillageProvider(generic.TorrentProvider):
 
         self.cache = TNTVillageCache(self)
 
-
-    def isEnabled(self):
-        return self.enabled
-
     def _checkAuth(self):
 
         if not self.username or not self.password:
diff --git a/sickbeard/providers/tokyotoshokan.py b/sickbeard/providers/tokyotoshokan.py
index 2f53b6941..6a078faa8 100644
--- a/sickbeard/providers/tokyotoshokan.py
+++ b/sickbeard/providers/tokyotoshokan.py
@@ -42,9 +42,6 @@ class TokyoToshokanProvider(generic.TorrentProvider):
         self.urls = {'base_url': 'http://tokyotosho.info/'}
         self.url = self.urls['base_url']
 
-    def isEnabled(self):
-        return self.enabled
-
     def seedRatio(self):
         return self.ratio
 
diff --git a/sickbeard/providers/torrentbytes.py b/sickbeard/providers/torrentbytes.py
index 2bc38e29a..0a0d3a68a 100644
--- a/sickbeard/providers/torrentbytes.py
+++ b/sickbeard/providers/torrentbytes.py
@@ -55,9 +55,6 @@ class TorrentBytesProvider(generic.TorrentProvider):
 
         self.cache = TorrentBytesCache(self)
 
-    def isEnabled(self):
-        return self.enabled
-
     def _doLogin(self):
 
         login_params = {'username': self.username,
diff --git a/sickbeard/providers/torrentday.py b/sickbeard/providers/torrentday.py
index 353f0673d..5e8b150a7 100644
--- a/sickbeard/providers/torrentday.py
+++ b/sickbeard/providers/torrentday.py
@@ -53,9 +53,6 @@ class TorrentDayProvider(generic.TorrentProvider):
         self.categories = {'Season': {'c14': 1}, 'Episode': {'c2': 1, 'c26': 1, 'c7': 1, 'c24': 1},
                            'RSS': {'c2': 1, 'c26': 1, 'c7': 1, 'c24': 1, 'c14': 1}}
 
-    def isEnabled(self):
-        return self.enabled
-
     def _doLogin(self):
 
         if any(requests.utils.dict_from_cookiejar(self.session.cookies).values()):
diff --git a/sickbeard/providers/torrentleech.py b/sickbeard/providers/torrentleech.py
index 11d6dcaa1..566c6b83f 100644
--- a/sickbeard/providers/torrentleech.py
+++ b/sickbeard/providers/torrentleech.py
@@ -55,9 +55,6 @@ class TorrentLeechProvider(generic.TorrentProvider):
 
         self.cache = TorrentLeechCache(self)
 
-    def isEnabled(self):
-        return self.enabled
-
     def _doLogin(self):
 
         login_params = {'username': self.username,
diff --git a/sickbeard/providers/torrentproject.py b/sickbeard/providers/torrentproject.py
index 184e23c27..a06513479 100644
--- a/sickbeard/providers/torrentproject.py
+++ b/sickbeard/providers/torrentproject.py
@@ -39,9 +39,6 @@ class TORRENTPROJECTProvider(generic.TorrentProvider):
         self.minleech = None
         self.cache = TORRENTPROJECTCache(self)
 
-    def isEnabled(self):
-        return self.enabled
-
     def _doSearch(self, search_strings, search_mode='eponly', epcount=0, age=0, epObj=None):
 
         results = []
diff --git a/sickbeard/providers/torrentz.py b/sickbeard/providers/torrentz.py
index d36ece382..2e12a02fc 100644
--- a/sickbeard/providers/torrentz.py
+++ b/sickbeard/providers/torrentz.py
@@ -48,9 +48,6 @@ class TORRENTZProvider(generic.TorrentProvider):
                      'base': 'https://torrentz.eu/'}
         self.url = self.urls['base']
 
-    def isEnabled(self):
-        return self.enabled
-
     def seedRatio(self):
         return self.ratio
 
diff --git a/sickbeard/providers/transmitthenet.py b/sickbeard/providers/transmitthenet.py
index f021f2b0b..52dcefb66 100644
--- a/sickbeard/providers/transmitthenet.py
+++ b/sickbeard/providers/transmitthenet.py
@@ -52,9 +52,6 @@ class TransmitTheNetProvider(generic.TorrentProvider):
             "active": 1
         }
 
-    def isEnabled(self):
-        return self.enabled
-
     def _checkAuth(self):
 
         if not self.username or not self.password:
diff --git a/sickbeard/providers/tvchaosuk.py b/sickbeard/providers/tvchaosuk.py
index 69de245fa..c7f9bd919 100644
--- a/sickbeard/providers/tvchaosuk.py
+++ b/sickbeard/providers/tvchaosuk.py
@@ -55,9 +55,6 @@ class TVChaosUKProvider(generic.TorrentProvider):
             'include_dead_torrents': 'no',
         }
 
-    def isEnabled(self):
-        return self.enabled
-
     def _checkAuth(self):
         if self.username and self.password:
             return True
diff --git a/sickbeard/providers/womble.py b/sickbeard/providers/womble.py
index 89728b8a1..136d649fc 100644
--- a/sickbeard/providers/womble.py
+++ b/sickbeard/providers/womble.py
@@ -30,9 +30,6 @@ class WombleProvider(generic.NZBProvider):
         self.urls = {'base_url': 'http://newshost.co.za/'}
         self.url = self.urls['base_url']
 
-    def isEnabled(self):
-        return self.enabled
-
 
 class WombleCache(tvcache.TVCache):
     def __init__(self, provider_obj):
diff --git a/sickbeard/providers/xthor.py b/sickbeard/providers/xthor.py
index a5f2dddc7..2805fbe5b 100644
--- a/sickbeard/providers/xthor.py
+++ b/sickbeard/providers/xthor.py
@@ -45,9 +45,6 @@ class XthorProvider(generic.TorrentProvider):
         self.password = None
         self.ratio = None
 
-    def isEnabled(self):
-        return self.enabled
-
     def _doLogin(self):
 
         if any(requests.utils.dict_from_cookiejar(self.session.cookies).values()):
-- 
GitLab


From 56b7f573cc1736fe31e4fd9aff6c053bdf43af0d Mon Sep 17 00:00:00 2001
From: Dustyn Gibson <miigotu@gmail.com>
Date: Fri, 6 Nov 2015 11:08:33 -0800
Subject: [PATCH 058/215] Remove proxy setting from r/w of config, and in
 gui/webserve

---
 gui/slick/views/config_providers.mako | 27 ---------------------------
 sickbeard/__init__.py                 | 11 -----------
 sickbeard/helpers.py                  |  2 +-
 sickbeard/tvcache.py                  |  2 +-
 sickbeard/webserve.py                 | 13 -------------
 5 files changed, 2 insertions(+), 53 deletions(-)

diff --git a/gui/slick/views/config_providers.mako b/gui/slick/views/config_providers.mako
index 6836522a7..d5478b073 100644
--- a/gui/slick/views/config_providers.mako
+++ b/gui/slick/views/config_providers.mako
@@ -482,33 +482,6 @@ $('#config-components').tabs();
                         </div>
                         % endif
 
-                        % if hasattr(curTorrentProvider, 'proxy'):
-                        <div class="field-pair">
-                            <label for="${curTorrentProvider.getID()}_proxy">
-                                <span class="component-title">Access provider via proxy</span>
-                                <span class="component-desc">
-                                    <input type="checkbox" class="enabler" name="${curTorrentProvider.getID()}_proxy" id="${curTorrentProvider.getID()}_proxy" ${('', 'checked="checked"')[bool(curTorrentProvider.proxy.enabled)]}/>
-                                    <p>to bypass country blocking mechanisms</p>
-                                </span>
-                            </label>
-                        </div>
-
-                        % if hasattr(curTorrentProvider.proxy, 'url'):
-                        <div class="field-pair content_${curTorrentProvider.getID()}_proxy" id="content_${curTorrentProvider.getID()}_proxy">
-                            <label for="${curTorrentProvider.getID()}_proxy_url">
-                                <span class="component-title">Proxy URL:</span>
-                                <span class="component-desc">
-                                  <select name="${curTorrentProvider.getID()}_proxy_url" id="${curTorrentProvider.getID()}_proxy_url" class="form-control input-sm">
-                                    % for i in curTorrentProvider.proxy.urls.keys():
-                                    <option value="${curTorrentProvider.proxy.urls[i]}" ${('', 'selected="selected"')[curTorrentProvider.proxy.urls[i] == curTorrentProvider.proxy.url]}>${i}</option>
-                                    % endfor
-                                    </select>
-                                </span>
-                            </label>
-                        </div>
-                        % endif
-                        % endif
-
                         % if hasattr(curTorrentProvider, 'freeleech'):
                         <div class="field-pair">
                             <label for="${curTorrentProvider.getID()}_freeleech">
diff --git a/sickbeard/__init__.py b/sickbeard/__init__.py
index 73b06fd4c..74ceceea3 100644
--- a/sickbeard/__init__.py
+++ b/sickbeard/__init__.py
@@ -1248,11 +1248,6 @@ def initialize(consoleLogging=True):
             if hasattr(curTorrentProvider, 'pin'):
                 curTorrentProvider.pin = check_setting_str(CFG, curTorrentProvider.getID().upper(),
                                                            curTorrentProvider.getID() + '_pin', '', censor_log=True)
-            if hasattr(curTorrentProvider, 'proxy'):
-                curTorrentProvider.proxy.enabled = bool(check_setting_int(CFG, curTorrentProvider.getID().upper(), curTorrentProvider.getID() + '_proxy', 0))
-                if hasattr(curTorrentProvider.proxy, 'url'):
-                    curTorrentProvider.proxy.url = check_setting_str(CFG, curTorrentProvider.getID().upper(),
-                                                                     curTorrentProvider.getID() + '_proxy_url', '')
             if hasattr(curTorrentProvider, 'confirmed'):
                 curTorrentProvider.confirmed = bool(check_setting_int(CFG, curTorrentProvider.getID().upper(),
                                                                       curTorrentProvider.getID() + '_confirmed', 1))
@@ -1837,12 +1832,6 @@ def save_config():
         if hasattr(curTorrentProvider, 'options'):
             new_config[curTorrentProvider.getID().upper()][
                 curTorrentProvider.getID() + '_options'] = curTorrentProvider.options
-        if hasattr(curTorrentProvider, 'proxy'):
-            new_config[curTorrentProvider.getID().upper()][curTorrentProvider.getID() + '_proxy'] = int(
-                curTorrentProvider.proxy.enabled)
-            if hasattr(curTorrentProvider.proxy, 'url'):
-                new_config[curTorrentProvider.getID().upper()][
-                    curTorrentProvider.getID() + '_proxy_url'] = curTorrentProvider.proxy.url
         if hasattr(curTorrentProvider, 'freeleech'):
             new_config[curTorrentProvider.getID().upper()][curTorrentProvider.getID() + '_freeleech'] = int(
                 curTorrentProvider.freeleech)
diff --git a/sickbeard/helpers.py b/sickbeard/helpers.py
index b9e11c1e8..567999849 100644
--- a/sickbeard/helpers.py
+++ b/sickbeard/helpers.py
@@ -1579,7 +1579,7 @@ def _setUpSession(session, headers):
 
     # request session proxies
     if 'Referer' not in session.headers and sickbeard.PROXY_SETTING:
-        logger.log("Using proxy: " + sickbeard.PROXY_SETTING, logger.DEBUG)
+        logger.log("Using global proxy: " + sickbeard.PROXY_SETTING, logger.DEBUG)
         scheme, address = urllib2.splittype(sickbeard.PROXY_SETTING)
         address = sickbeard.PROXY_SETTING if scheme else 'http://' + sickbeard.PROXY_SETTING
         session.proxies = {
diff --git a/sickbeard/tvcache.py b/sickbeard/tvcache.py
index 3c99eb36e..a7380f1ef 100644
--- a/sickbeard/tvcache.py
+++ b/sickbeard/tvcache.py
@@ -137,7 +137,7 @@ class TVCache(object):
         handlers = []
 
         if sickbeard.PROXY_SETTING:
-            logger.log("Using proxy for url: " + url, logger.DEBUG)
+            logger.log("Using global proxy for url: " + url, logger.DEBUG)
             scheme, address = urllib2.splittype(sickbeard.PROXY_SETTING)
             address = sickbeard.PROXY_SETTING if scheme else 'http://' + sickbeard.PROXY_SETTING
             handlers = [urllib2.ProxyHandler({'http': address, 'https': address})]
diff --git a/sickbeard/webserve.py b/sickbeard/webserve.py
index 7a4fe2baa..75829966c 100644
--- a/sickbeard/webserve.py
+++ b/sickbeard/webserve.py
@@ -4482,19 +4482,6 @@ class ConfigProviders(Config):
                 except Exception:
                     curTorrentProvider.sorting = 'seeders'
 
-            if hasattr(curTorrentProvider, 'proxy'):
-                try:
-                    curTorrentProvider.proxy.enabled = config.checkbox_to_value(
-                        kwargs[curTorrentProvider.getID() + '_proxy'])
-                except Exception:
-                    curTorrentProvider.proxy.enabled = 0
-
-                if hasattr(curTorrentProvider.proxy, 'url'):
-                    try:
-                        curTorrentProvider.proxy.url = str(kwargs[curTorrentProvider.getID() + '_proxy_url']).strip()
-                    except Exception:
-                        curTorrentProvider.proxy.url = None
-
             if hasattr(curTorrentProvider, 'freeleech'):
                 try:
                     curTorrentProvider.freeleech = config.checkbox_to_value(
-- 
GitLab


From 7b289dacd04c9247eecfc10e4b08cdfd58310f46 Mon Sep 17 00:00:00 2001
From: Dustyn Gibson <miigotu@gmail.com>
Date: Fri, 6 Nov 2015 11:30:44 -0800
Subject: [PATCH 059/215] Remove unused lib/futures

---
 lib/feedparser/sgmllib3.py | 547 +++++++++++++++++++++++++++++++++++++
 lib/futures/__init__.py    |  24 --
 lib/futures/process.py     |   1 -
 lib/futures/thread.py      |   1 -
 sickbeard/helpers.py       |   2 +
 5 files changed, 549 insertions(+), 26 deletions(-)
 create mode 100644 lib/feedparser/sgmllib3.py
 delete mode 100644 lib/futures/__init__.py
 delete mode 100644 lib/futures/process.py
 delete mode 100644 lib/futures/thread.py

diff --git a/lib/feedparser/sgmllib3.py b/lib/feedparser/sgmllib3.py
new file mode 100644
index 000000000..88a02a307
--- /dev/null
+++ b/lib/feedparser/sgmllib3.py
@@ -0,0 +1,547 @@
+"""A parser for SGML, using the derived class as a static DTD."""
+
+# XXX This only supports those SGML features used by HTML.
+
+# XXX There should be a way to distinguish between PCDATA (parsed
+# character data -- the normal case), RCDATA (replaceable character
+# data -- only char and entity references and end tags are special)
+# and CDATA (character data -- only end tags are special).  RCDATA is
+# not supported at all.
+
+import _markupbase
+import re
+
+__all__ = ["SGMLParser", "SGMLParseError"]
+
+# Regular expressions used for parsing
+
+interesting = re.compile('[&<]')
+incomplete = re.compile('&([a-zA-Z][a-zA-Z0-9]*|#[0-9]*)?|'
+                           '<([a-zA-Z][^<>]*|'
+                              '/([a-zA-Z][^<>]*)?|'
+                              '![^<>]*)?')
+
+entityref = re.compile('&([a-zA-Z][-.a-zA-Z0-9]*)[^a-zA-Z0-9]')
+charref = re.compile('&#([0-9]+)[^0-9]')
+
+starttagopen = re.compile('<[>a-zA-Z]')
+shorttagopen = re.compile('<[a-zA-Z][-.a-zA-Z0-9]*/')
+shorttag = re.compile('<([a-zA-Z][-.a-zA-Z0-9]*)/([^/]*)/')
+piclose = re.compile('>')
+endbracket = re.compile('[<>]')
+tagfind = re.compile('[a-zA-Z][-_.a-zA-Z0-9]*')
+attrfind = re.compile(
+    r'\s*([a-zA-Z_][-:.a-zA-Z_0-9]*)(\s*=\s*'
+    r'(\'[^\']*\'|"[^"]*"|[][\-a-zA-Z0-9./,:;+*%?!&$\(\)_#=~\'"@]*))?')
+
+
+class SGMLParseError(RuntimeError):
+    """Exception raised for all parse errors."""
+    pass
+
+
+# SGML parser base class -- find tags and call handler functions.
+# Usage: p = SGMLParser(); p.feed(data); ...; p.close().
+# The dtd is defined by deriving a class which defines methods
+# with special names to handle tags: start_foo and end_foo to handle
+# <foo> and </foo>, respectively, or do_foo to handle <foo> by itself.
+# (Tags are converted to lower case for this purpose.)  The data
+# between tags is passed to the parser by calling self.handle_data()
+# with some data as argument (the data may be split up in arbitrary
+# chunks).  Entity references are passed by calling
+# self.handle_entityref() with the entity reference as argument.
+
+class SGMLParser(_markupbase.ParserBase):
+    # Definition of entities -- derived classes may override
+    entity_or_charref = re.compile('&(?:'
+      '([a-zA-Z][-.a-zA-Z0-9]*)|#([0-9]+)'
+      ')(;?)')
+
+    def __init__(self, verbose=0):
+        """Initialize and reset this instance."""
+        self.verbose = verbose
+        self.reset()
+
+    def reset(self):
+        """Reset this instance. Loses all unprocessed data."""
+        self.__starttag_text = None
+        self.rawdata = ''
+        self.stack = []
+        self.lasttag = '???'
+        self.nomoretags = 0
+        self.literal = 0
+        _markupbase.ParserBase.reset(self)
+
+    def setnomoretags(self):
+        """Enter literal mode (CDATA) till EOF.
+
+        Intended for derived classes only.
+        """
+        self.nomoretags = self.literal = 1
+
+    def setliteral(self, *args):
+        """Enter literal mode (CDATA).
+
+        Intended for derived classes only.
+        """
+        self.literal = 1
+
+    def feed(self, data):
+        """Feed some data to the parser.
+
+        Call this as often as you want, with as little or as much text
+        as you want (may include '\n').  (This just saves the text,
+        all the processing is done by goahead().)
+        """
+
+        self.rawdata = self.rawdata + data
+        self.goahead(0)
+
+    def close(self):
+        """Handle the remaining data."""
+        self.goahead(1)
+
+    def error(self, message):
+        raise SGMLParseError(message)
+
+    # Internal -- handle data as far as reasonable.  May leave state
+    # and data to be processed by a subsequent call.  If 'end' is
+    # true, force handling all data as if followed by EOF marker.
+    def goahead(self, end):
+        rawdata = self.rawdata
+        i = 0
+        n = len(rawdata)
+        while i < n:
+            if self.nomoretags:
+                self.handle_data(rawdata[i:n])
+                i = n
+                break
+            match = interesting.search(rawdata, i)
+            if match: j = match.start()
+            else: j = n
+            if i < j:
+                self.handle_data(rawdata[i:j])
+            i = j
+            if i == n: break
+            if rawdata[i] == '<':
+                if starttagopen.match(rawdata, i):
+                    if self.literal:
+                        self.handle_data(rawdata[i])
+                        i = i+1
+                        continue
+                    k = self.parse_starttag(i)
+                    if k < 0: break
+                    i = k
+                    continue
+                if rawdata.startswith("</", i):
+                    k = self.parse_endtag(i)
+                    if k < 0: break
+                    i = k
+                    self.literal = 0
+                    continue
+                if self.literal:
+                    if n > (i + 1):
+                        self.handle_data("<")
+                        i = i+1
+                    else:
+                        # incomplete
+                        break
+                    continue
+                if rawdata.startswith("<!--", i):
+                        # Strictly speaking, a comment is --.*--
+                        # within a declaration tag <!...>.
+                        # This should be removed,
+                        # and comments handled only in parse_declaration.
+                    k = self.parse_comment(i)
+                    if k < 0: break
+                    i = k
+                    continue
+                if rawdata.startswith("<?", i):
+                    k = self.parse_pi(i)
+                    if k < 0: break
+                    i = i+k
+                    continue
+                if rawdata.startswith("<!", i):
+                    # This is some sort of declaration; in "HTML as
+                    # deployed," this should only be the document type
+                    # declaration ("<!DOCTYPE html...>").
+                    k = self.parse_declaration(i)
+                    if k < 0: break
+                    i = k
+                    continue
+            elif rawdata[i] == '&':
+                if self.literal:
+                    self.handle_data(rawdata[i])
+                    i = i+1
+                    continue
+                match = charref.match(rawdata, i)
+                if match:
+                    name = match.group(1)
+                    self.handle_charref(name)
+                    i = match.end(0)
+                    if rawdata[i-1] != ';': i = i-1
+                    continue
+                match = entityref.match(rawdata, i)
+                if match:
+                    name = match.group(1)
+                    self.handle_entityref(name)
+                    i = match.end(0)
+                    if rawdata[i-1] != ';': i = i-1
+                    continue
+            else:
+                self.error('neither < nor & ??')
+            # We get here only if incomplete matches but
+            # nothing else
+            match = incomplete.match(rawdata, i)
+            if not match:
+                self.handle_data(rawdata[i])
+                i = i+1
+                continue
+            j = match.end(0)
+            if j == n:
+                break # Really incomplete
+            self.handle_data(rawdata[i:j])
+            i = j
+        # end while
+        if end and i < n:
+            self.handle_data(rawdata[i:n])
+            i = n
+        self.rawdata = rawdata[i:]
+        # XXX if end: check for empty stack
+
+    # Extensions for the DOCTYPE scanner:
+    _decl_otherchars = '='
+
+    # Internal -- parse processing instr, return length or -1 if not terminated
+    def parse_pi(self, i):
+        rawdata = self.rawdata
+        if rawdata[i:i+2] != '<?':
+            self.error('unexpected call to parse_pi()')
+        match = piclose.search(rawdata, i+2)
+        if not match:
+            return -1
+        j = match.start(0)
+        self.handle_pi(rawdata[i+2: j])
+        j = match.end(0)
+        return j-i
+
+    def get_starttag_text(self):
+        return self.__starttag_text
+
+    # Internal -- handle starttag, return length or -1 if not terminated
+    def parse_starttag(self, i):
+        self.__starttag_text = None
+        start_pos = i
+        rawdata = self.rawdata
+        if shorttagopen.match(rawdata, i):
+            # SGML shorthand: <tag/data/ == <tag>data</tag>
+            # XXX Can data contain &... (entity or char refs)?
+            # XXX Can data contain < or > (tag characters)?
+            # XXX Can there be whitespace before the first /?
+            match = shorttag.match(rawdata, i)
+            if not match:
+                return -1
+            tag, data = match.group(1, 2)
+            self.__starttag_text = '<%s/' % tag
+            tag = tag.lower()
+            k = match.end(0)
+            self.finish_shorttag(tag, data)
+            self.__starttag_text = rawdata[start_pos:match.end(1) + 1]
+            return k
+        # XXX The following should skip matching quotes (' or ")
+        # As a shortcut way to exit, this isn't so bad, but shouldn't
+        # be used to locate the actual end of the start tag since the
+        # < or > characters may be embedded in an attribute value.
+        match = endbracket.search(rawdata, i+1)
+        if not match:
+            return -1
+        j = match.start(0)
+        # Now parse the data between i+1 and j into a tag and attrs
+        attrs = []
+        if rawdata[i:i+2] == '<>':
+            # SGML shorthand: <> == <last open tag seen>
+            k = j
+            tag = self.lasttag
+        else:
+            match = tagfind.match(rawdata, i+1)
+            if not match:
+                self.error('unexpected call to parse_starttag')
+            k = match.end(0)
+            tag = rawdata[i+1:k].lower()
+            self.lasttag = tag
+        while k < j:
+            match = attrfind.match(rawdata, k)
+            if not match: break
+            attrname, rest, attrvalue = match.group(1, 2, 3)
+            if not rest:
+                attrvalue = attrname
+            else:
+                if (attrvalue[:1] == "'" == attrvalue[-1:] or
+                    attrvalue[:1] == '"' == attrvalue[-1:]):
+                    # strip quotes
+                    attrvalue = attrvalue[1:-1]
+                attrvalue = self.entity_or_charref.sub(
+                    self._convert_ref, attrvalue)
+            attrs.append((attrname.lower(), attrvalue))
+            k = match.end(0)
+        if rawdata[j] == '>':
+            j = j+1
+        self.__starttag_text = rawdata[start_pos:j]
+        self.finish_starttag(tag, attrs)
+        return j
+
+    # Internal -- convert entity or character reference
+    def _convert_ref(self, match):
+        if match.group(2):
+            return self.convert_charref(match.group(2)) or \
+                '&#%s%s' % match.groups()[1:]
+        elif match.group(3):
+            return self.convert_entityref(match.group(1)) or \
+                '&%s;' % match.group(1)
+        else:
+            return '&%s' % match.group(1)
+
+    # Internal -- parse endtag
+    def parse_endtag(self, i):
+        rawdata = self.rawdata
+        match = endbracket.search(rawdata, i+1)
+        if not match:
+            return -1
+        j = match.start(0)
+        tag = rawdata[i+2:j].strip().lower()
+        if rawdata[j] == '>':
+            j = j+1
+        self.finish_endtag(tag)
+        return j
+
+    # Internal -- finish parsing of <tag/data/ (same as <tag>data</tag>)
+    def finish_shorttag(self, tag, data):
+        self.finish_starttag(tag, [])
+        self.handle_data(data)
+        self.finish_endtag(tag)
+
+    # Internal -- finish processing of start tag
+    # Return -1 for unknown tag, 0 for open-only tag, 1 for balanced tag
+    def finish_starttag(self, tag, attrs):
+        try:
+            method = getattr(self, 'start_' + tag)
+        except AttributeError:
+            try:
+                method = getattr(self, 'do_' + tag)
+            except AttributeError:
+                self.unknown_starttag(tag, attrs)
+                return -1
+            else:
+                self.handle_starttag(tag, method, attrs)
+                return 0
+        else:
+            self.stack.append(tag)
+            self.handle_starttag(tag, method, attrs)
+            return 1
+
+    # Internal -- finish processing of end tag
+    def finish_endtag(self, tag):
+        if not tag:
+            found = len(self.stack) - 1
+            if found < 0:
+                self.unknown_endtag(tag)
+                return
+        else:
+            if tag not in self.stack:
+                try:
+                    method = getattr(self, 'end_' + tag)
+                except AttributeError:
+                    self.unknown_endtag(tag)
+                else:
+                    self.report_unbalanced(tag)
+                return
+            found = len(self.stack)
+            for i in range(found):
+                if self.stack[i] == tag: found = i
+        while len(self.stack) > found:
+            tag = self.stack[-1]
+            try:
+                method = getattr(self, 'end_' + tag)
+            except AttributeError:
+                method = None
+            if method:
+                self.handle_endtag(tag, method)
+            else:
+                self.unknown_endtag(tag)
+            del self.stack[-1]
+
+    # Overridable -- handle start tag
+    def handle_starttag(self, tag, method, attrs):
+        method(attrs)
+
+    # Overridable -- handle end tag
+    def handle_endtag(self, tag, method):
+        method()
+
+    # Example -- report an unbalanced </...> tag.
+    def report_unbalanced(self, tag):
+        if self.verbose:
+            print('*** Unbalanced </' + tag + '>')
+            print('*** Stack:', self.stack)
+
+    def convert_charref(self, name):
+        """Convert character reference, may be overridden."""
+        try:
+            n = int(name)
+        except ValueError:
+            return
+        if not 0 <= n <= 127:
+            return
+        return self.convert_codepoint(n)
+
+    def convert_codepoint(self, codepoint):
+        return chr(codepoint)
+
+    def handle_charref(self, name):
+        """Handle character reference, no need to override."""
+        replacement = self.convert_charref(name)
+        if replacement is None:
+            self.unknown_charref(name)
+        else:
+            self.handle_data(replacement)
+
+    # Definition of entities -- derived classes may override
+    entitydefs = \
+            {'lt': '<', 'gt': '>', 'amp': '&', 'quot': '"', 'apos': '\''}
+
+    def convert_entityref(self, name):
+        """Convert entity references.
+
+        As an alternative to overriding this method; one can tailor the
+        results by setting up the self.entitydefs mapping appropriately.
+        """
+        table = self.entitydefs
+        if name in table:
+            return table[name]
+        else:
+            return
+
+    def handle_entityref(self, name):
+        """Handle entity references, no need to override."""
+        replacement = self.convert_entityref(name)
+        if replacement is None:
+            self.unknown_entityref(name)
+        else:
+            self.handle_data(replacement)
+
+    # Example -- handle data, should be overridden
+    def handle_data(self, data):
+        pass
+
+    # Example -- handle comment, could be overridden
+    def handle_comment(self, data):
+        pass
+
+    # Example -- handle declaration, could be overridden
+    def handle_decl(self, decl):
+        pass
+
+    # Example -- handle processing instruction, could be overridden
+    def handle_pi(self, data):
+        pass
+
+    # To be overridden -- handlers for unknown objects
+    def unknown_starttag(self, tag, attrs): pass
+    def unknown_endtag(self, tag): pass
+    def unknown_charref(self, ref): pass
+    def unknown_entityref(self, ref): pass
+
+
+class TestSGMLParser(SGMLParser):
+
+    def __init__(self, verbose=0):
+        self.testdata = ""
+        SGMLParser.__init__(self, verbose)
+
+    def handle_data(self, data):
+        self.testdata = self.testdata + data
+        if len(repr(self.testdata)) >= 70:
+            self.flush()
+
+    def flush(self):
+        data = self.testdata
+        if data:
+            self.testdata = ""
+            print('data:', repr(data))
+
+    def handle_comment(self, data):
+        self.flush()
+        r = repr(data)
+        if len(r) > 68:
+            r = r[:32] + '...' + r[-32:]
+        print('comment:', r)
+
+    def unknown_starttag(self, tag, attrs):
+        self.flush()
+        if not attrs:
+            print('start tag: <' + tag + '>')
+        else:
+            print('start tag: <' + tag, end=' ')
+            for name, value in attrs:
+                print(name + '=' + '"' + value + '"', end=' ')
+            print('>')
+
+    def unknown_endtag(self, tag):
+        self.flush()
+        print('end tag: </' + tag + '>')
+
+    def unknown_entityref(self, ref):
+        self.flush()
+        print('*** unknown entity ref: &' + ref + ';')
+
+    def unknown_charref(self, ref):
+        self.flush()
+        print('*** unknown char ref: &#' + ref + ';')
+
+    def unknown_decl(self, data):
+        self.flush()
+        print('*** unknown decl: [' + data + ']')
+
+    def close(self):
+        SGMLParser.close(self)
+        self.flush()
+
+
+def test(args = None):
+    import sys
+
+    if args is None:
+        args = sys.argv[1:]
+
+    if args and args[0] == '-s':
+        args = args[1:]
+        klass = SGMLParser
+    else:
+        klass = TestSGMLParser
+
+    if args:
+        file = args[0]
+    else:
+        file = 'test.html'
+
+    if file == '-':
+        f = sys.stdin
+    else:
+        try:
+            f = open(file, 'r')
+        except IOError as msg:
+            print(file, ":", msg)
+            sys.exit(1)
+
+    data = f.read()
+    if f is not sys.stdin:
+        f.close()
+
+    x = klass()
+    for c in data:
+        x.feed(c)
+    x.close()
+
+
+if __name__ == '__main__':
+    test()
diff --git a/lib/futures/__init__.py b/lib/futures/__init__.py
deleted file mode 100644
index 8f8b23481..000000000
--- a/lib/futures/__init__.py
+++ /dev/null
@@ -1,24 +0,0 @@
-# Copyright 2009 Brian Quinlan. All Rights Reserved.
-# Licensed to PSF under a Contributor Agreement.
-
-"""Execute computations asynchronously using threads or processes."""
-
-import warnings
-
-from concurrent.futures import (FIRST_COMPLETED,
-                                FIRST_EXCEPTION,
-                                ALL_COMPLETED,
-                                CancelledError,
-                                TimeoutError,
-                                Future,
-                                Executor,
-                                wait,
-                                as_completed,
-                                ProcessPoolExecutor,
-                                ThreadPoolExecutor)
-
-__author__ = 'Brian Quinlan (brian@sweetapp.com)'
-
-warnings.warn('The futures package has been deprecated. '
-              'Use the concurrent.futures package instead.',
-              DeprecationWarning)
diff --git a/lib/futures/process.py b/lib/futures/process.py
deleted file mode 100644
index e9d37b16c..000000000
--- a/lib/futures/process.py
+++ /dev/null
@@ -1 +0,0 @@
-from concurrent.futures import ProcessPoolExecutor
diff --git a/lib/futures/thread.py b/lib/futures/thread.py
deleted file mode 100644
index f6bd05de6..000000000
--- a/lib/futures/thread.py
+++ /dev/null
@@ -1 +0,0 @@
-from concurrent.futures import ThreadPoolExecutor
diff --git a/sickbeard/helpers.py b/sickbeard/helpers.py
index 567999849..640c6269d 100644
--- a/sickbeard/helpers.py
+++ b/sickbeard/helpers.py
@@ -982,6 +982,8 @@ def create_https_certificates(ssl_cert, ssl_key):
 
     # Save the key and certificate to disk
     try:
+        # pylint: disable=E1101
+        # Module has no member
         open(ssl_key, 'w').write(crypto.dump_privatekey(crypto.FILETYPE_PEM, pkey))
         open(ssl_cert, 'w').write(crypto.dump_certificate(crypto.FILETYPE_PEM, cert))
     except Exception:
-- 
GitLab


From 73833be106d55a1f7ac89deb07c3d03e632b8129 Mon Sep 17 00:00:00 2001
From: supergonkas <duramato@users.noreply.github.com>
Date: Sat, 7 Nov 2015 00:06:03 +0000
Subject: [PATCH 060/215] Fixes
 https://github.com/SiCKRAGETV/sickrage-issues/issues/3580

---
 sickbeard/sab.py | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/sickbeard/sab.py b/sickbeard/sab.py
index f1c1d2194..70ee848d6 100644
--- a/sickbeard/sab.py
+++ b/sickbeard/sab.py
@@ -57,9 +57,9 @@ def sendNZB(nzb):
     # if it aired more than 7 days ago, override with the backlog category IDs
     for curEp in nzb.episodes:
         if datetime.date.today() - curEp.airdate > datetime.timedelta(days=7):
-            category = sickbeard.NZBGET_CATEGORY_BACKLOG
+            category = sickbeard.SAB_CATEGORY_BACKLOG
             if nzb.show.is_anime:
-                category = sickbeard.NZBGET_CATEGORY_ANIME_BACKLOG
+                category = sickbeard.SAB_CATEGORY_ANIME_BACKLOG
 
     if category != None:
         params['cat'] = category
-- 
GitLab


From 99d4707478e31c11d84dfea6baded9e525499f7c Mon Sep 17 00:00:00 2001
From: Dustyn Gibson <miigotu@gmail.com>
Date: Mon, 2 Nov 2015 22:22:50 -0800
Subject: [PATCH 061/215] Remove the reload of sys and setdefaultencoding hack
 that is frowned upon and unpythonic Will probably cause encoding issues
 throughout SR that will need to be addressed as they arise (unless we are
 really lucky!)

---
 SickBeard.py                          | 43 ++++++-------------
 sickbeard/__init__.py                 |  2 +-
 sickbeard/blackandwhitelist.py        | 12 +++---
 sickbeard/clients/deluged_client.py   |  2 +-
 sickbeard/clients/generic.py          |  8 ++--
 sickbeard/config.py                   | 60 ++++++++++++++-------------
 sickbeard/databases/mainDB.py         |  8 ++--
 sickbeard/helpers.py                  | 20 ++++-----
 sickbeard/logger.py                   | 46 ++++++++++----------
 sickbeard/name_parser/parser.py       |  2 +-
 sickbeard/naming.py                   |  2 +-
 sickbeard/notifiers/boxcar.py         | 20 ++++-----
 sickbeard/notifiers/boxcar2.py        | 14 +++----
 sickbeard/notifiers/emailnotify.py    | 30 +++++++-------
 sickbeard/notifiers/freemobile.py     |  6 +--
 sickbeard/notifiers/kodi.py           |  2 +-
 sickbeard/notifiers/nma.py            |  2 +-
 sickbeard/notifiers/nmj.py            |  2 +-
 sickbeard/notifiers/nmjv2.py          |  2 +-
 sickbeard/notifiers/prowl.py          |  2 +-
 sickbeard/notifiers/pushover.py       | 22 +++++-----
 sickbeard/notifiers/tweet.py          | 22 +++++-----
 sickbeard/postProcessor.py            |  2 +-
 sickbeard/properFinder.py             |  4 +-
 sickbeard/providers/btdigg.py         |  2 +-
 sickbeard/providers/btn.py            |  2 +-
 sickbeard/providers/extratorrent.py   |  2 +-
 sickbeard/providers/freshontv.py      |  2 +-
 sickbeard/providers/generic.py        |  4 +-
 sickbeard/providers/hdspace.py        |  4 +-
 sickbeard/providers/hdtorrents.py     |  4 +-
 sickbeard/providers/iptorrents.py     |  2 +-
 sickbeard/providers/kat.py            |  2 +-
 sickbeard/providers/newznab.py        |  4 +-
 sickbeard/providers/rarbg.py          |  2 +-
 sickbeard/providers/rsstorrent.py     |  2 +-
 sickbeard/providers/strike.py         |  2 +-
 sickbeard/providers/titansoftv.py     |  2 +-
 sickbeard/providers/tntvillage.py     |  2 +-
 sickbeard/providers/torrentday.py     |  2 +-
 sickbeard/providers/torrentproject.py | 30 +++++---------
 sickbeard/providers/torrentz.py       |  4 +-
 sickbeard/providers/transmitthenet.py |  2 +-
 sickbeard/providers/tvchaosuk.py      |  2 +-
 sickbeard/sab.py                      |  2 +-
 sickbeard/search.py                   |  2 +-
 sickbeard/search_queue.py             | 16 +++----
 sickbeard/showUpdater.py              |  2 +-
 sickbeard/subtitles.py                | 22 +++++-----
 sickbeard/tv.py                       | 20 ++++-----
 sickbeard/tvcache.py                  |  2 +-
 sickbeard/versionChecker.py           |  2 +-
 sickbeard/webapi.py                   |  2 +-
 sickbeard/webserve.py                 | 18 ++++----
 tests/issue_submitter_tests.py        |  3 +-
 tests/test_lib.py                     |  1 -
 tests/torrent_tests.py                |  1 -
 tests/xem_tests.py                    |  1 -
 58 files changed, 240 insertions(+), 267 deletions(-)

diff --git a/SickBeard.py b/SickBeard.py
index a72addfdd..ef0c9b552 100755
--- a/SickBeard.py
+++ b/SickBeard.py
@@ -23,8 +23,6 @@
 # pylint: disable=W0703
 # Catching too general exception
 
-from __future__ import with_statement
-
 import codecs
 
 codecs.register(lambda name: codecs.lookup('utf-8') if name == 'cp65001' else None)
@@ -47,6 +45,7 @@ if sys.version_info < (2, 7):
     print "Sorry, requires Python 2.7.x"
     sys.exit(1)
 
+# https://mail.python.org/pipermail/python-dev/2014-September/136300.html
 if sys.version_info >= (2, 7, 9):
     import ssl
     # pylint: disable=W0212
@@ -66,6 +65,7 @@ from sickbeard.event_queue import Events
 from configobj import ConfigObj
 from sickrage.helper.encoding import ek
 
+# http://bugs.python.org/issue7980#msg221094
 throwaway = datetime.datetime.strptime('20110101', '%Y%m%d')
 
 signal.signal(signal.SIGINT, sickbeard.sig_handler)
@@ -165,48 +165,29 @@ class SickRage(object):
         sickbeard.PROG_DIR = os.path.dirname(sickbeard.MY_FULLNAME)
         sickbeard.DATA_DIR = sickbeard.PROG_DIR
         sickbeard.MY_ARGS = sys.argv[1:]
-        sickbeard.SYS_ENCODING = None
 
         try:
             locale.setlocale(locale.LC_ALL, "")
             sickbeard.SYS_ENCODING = locale.getpreferredencoding()
         except (locale.Error, IOError):
-            pass
-
-        # For OSes that are poorly configured I'll just randomly force UTF-8
-        if not sickbeard.SYS_ENCODING or sickbeard.SYS_ENCODING in ('ANSI_X3.4-1968', 'US-ASCII', 'ASCII'):
             sickbeard.SYS_ENCODING = 'UTF-8'
 
-        if not hasattr(sys, "setdefaultencoding"):
-            reload(sys)
-
-        if sys.platform == 'win32':
-            # pylint: disable=E1101
-            # An object is accessed for a non-existent member.
-            if sys.getwindowsversion()[0] >= 6 and sys.stdout.encoding == 'cp65001':
-                sickbeard.SYS_ENCODING = 'UTF-8'
-
-        try:
-            # pylint: disable=E1101
-            # An object is accessed for a non-existent member.
-            # On non-unicode builds this will raise an AttributeError, if encoding type is not valid it throws a LookupError
-            sys.setdefaultencoding(sickbeard.SYS_ENCODING)
-        except Exception:
-            sys.exit("Sorry, you MUST add the SickRage folder to the PYTHONPATH environment variable\n" +
-                     "or find another way to force Python to use " + sickbeard.SYS_ENCODING + " for string encoding.")
+        # pylint: disable=E1101
+        if not sickbeard.SYS_ENCODING or sickbeard.SYS_ENCODING.lower() in ('ansi_x3.4-1968', 'us-ascii', 'ascii', 'charmap') or \
+            (sys.platform.startswith('win') and sys.getwindowsversion()[0] >= 6 and str(sys.stdout.encoding).lower() in ('cp65001', 'charmap')):
+            sickbeard.SYS_ENCODING = 'UTF-8'
 
         # Need console logging for SickBeard.py and SickBeard-console.exe
         self.consoleLogging = (not hasattr(sys, "frozen")) or (sickbeard.MY_NAME.lower().find('-console') > 0)
 
         # Rename the main thread
-        threading.currentThread().name = "MAIN"
+        threading.currentThread().name = u"MAIN"
 
         try:
-            # pylint: disable=W0612
-            # Unused variable
-            opts, args = getopt.getopt(sys.argv[1:], "hqdp::",
-                                       ['help', 'quiet', 'nolaunch', 'daemon', 'pidfile=', 'port=',
-                                        'datadir=', 'config=', 'noresize'])  # @UnusedVariable
+            opts, _ = getopt.getopt(
+                sys.argv[1:], "hqdp::",
+                ['help', 'quiet', 'nolaunch', 'daemon', 'pidfile=', 'port=', 'datadir=', 'config=', 'noresize']
+            )
         except getopt.GetoptError:
             sys.exit(self.help_message())
 
@@ -524,7 +505,7 @@ class SickRage(object):
 
             # shutdown web server
             if self.webserver:
-                logger.log("Shutting down Tornado")
+                logger.log(u"Shutting down Tornado")
                 self.webserver.shutDown()
 
                 try:
diff --git a/sickbeard/__init__.py b/sickbeard/__init__.py
index ed9d3b3e0..a8b83ec1e 100644
--- a/sickbeard/__init__.py
+++ b/sickbeard/__init__.py
@@ -683,7 +683,7 @@ def initialize(consoleLogging=True):
             gh = Github(user_agent="SiCKRAGE").get_organization(GIT_ORG).get_repo(GIT_REPO)
         except Exception as e:
             gh = None
-            logger.log('Unable to setup GitHub properly. GitHub will not be available. Error: %s' % ex(e), logger.WARNING)
+            logger.log(u'Unable to setup GitHub properly. GitHub will not be available. Error: %s' % ex(e), logger.WARNING)
 
         # git reset on update
         GIT_RESET = bool(check_setting_int(CFG, 'General', 'git_reset', 1))
diff --git a/sickbeard/blackandwhitelist.py b/sickbeard/blackandwhitelist.py
index cc4efcd74..b6210797e 100644
--- a/sickbeard/blackandwhitelist.py
+++ b/sickbeard/blackandwhitelist.py
@@ -61,7 +61,7 @@ class BlackAndWhiteList(object):
         self._del_all_keywords('blacklist')
         self._add_keywords('blacklist', values)
         self.blacklist = values
-        logger.log('Blacklist set to: %s' % self.blacklist, logger.DEBUG)
+        logger.log(u'Blacklist set to: %s' % self.blacklist, logger.DEBUG)
 
     def set_white_keywords(self, values):
         """
@@ -72,7 +72,7 @@ class BlackAndWhiteList(object):
         self._del_all_keywords('whitelist')
         self._add_keywords('whitelist', values)
         self.whitelist = values
-        logger.log('Whitelist set to: %s' % self.whitelist, logger.DEBUG)
+        logger.log(u'Whitelist set to: %s' % self.whitelist, logger.DEBUG)
 
     def _del_all_keywords(self, table):
         """
@@ -99,7 +99,8 @@ class BlackAndWhiteList(object):
         for result in sqlResults:
             groups.append(result["keyword"])
 
-        logger.log('BWL: ' + str(self.show_id) + ' loaded keywords from ' + table + ': ' + str(groups), logger.DEBUG)
+        logger.log(u'BWL: ' + str(self.show_id) + ' loaded keywords from ' + table + ': ' + str(groups), logger.DEBUG)
+
         return groups
 
     def is_valid(self, result):
@@ -109,6 +110,7 @@ class BlackAndWhiteList(object):
         :param result: Result to analyse
         :return: False if result is not allowed in white/blacklist, True if it is
         """
+
         if self.whitelist or self.blacklist:
             if not result.release_group:
                 logger.log('Failed to detect release group, invalid result', logger.DEBUG)
@@ -125,14 +127,14 @@ class BlackAndWhiteList(object):
             else:
                 black_result = True
 
-            logger.log('Whitelist check passed: %s. Blacklist check passed: %s' % (white_result, black_result), logger.DEBUG)
+            logger.log(u'Whitelist check passed: %s. Blacklist check passed: %s' % (white_result, black_result), logger.DEBUG)
 
             if white_result and black_result:
                 return True
             else:
                 return False
         else:
-            logger.log('No Whitelist and  Blacklist defined, check passed.', logger.DEBUG)
+            logger.log(u'No Whitelist and  Blacklist defined, check passed.', logger.DEBUG)
             return True
 
 
diff --git a/sickbeard/clients/deluged_client.py b/sickbeard/clients/deluged_client.py
index 39b9a07dd..81c627382 100644
--- a/sickbeard/clients/deluged_client.py
+++ b/sickbeard/clients/deluged_client.py
@@ -238,7 +238,7 @@ class DelugeRPC(object):
     def _check_torrent(self, torrent_hash):
         torrent_id = self.client.core.get_torrent_status(torrent_hash, {}).get()
         if torrent_id['hash']:
-            logger.log('DelugeD: Torrent already exists in Deluge', logger.DEBUG)
+            logger.log(u'DelugeD: Torrent already exists in Deluge', logger.DEBUG)
             return torrent_hash
         return False
 
diff --git a/sickbeard/clients/generic.py b/sickbeard/clients/generic.py
index 18c066900..125400b50 100644
--- a/sickbeard/clients/generic.py
+++ b/sickbeard/clients/generic.py
@@ -148,19 +148,19 @@ class GenericClient(object):
                 result.hash = b16encode(b32decode(result.hash)).lower()
         else:
             if not result.content:
-                logger.log('Torrent without content', logger.ERROR)
+                logger.log(u'Torrent without content', logger.ERROR)
                 raise Exception('Torrent without content')
 
             try:
                 torrent_bdecode = bdecode(result.content)
             except BTFailure as e:
-                logger.log('Unable to bdecode torrent', logger.ERROR)
-                logger.log('Torrent bencoded data: {0}'.format(str(result.content)), logger.DEBUG)
+                logger.log(u'Unable to bdecode torrent', logger.ERROR)
+                logger.log(u'Torrent bencoded data: {0}'.format(str(result.content)), logger.DEBUG)
                 raise
             try:
                 info = torrent_bdecode["info"]
             except Exception as e:
-                logger.log('Unable to find info field in torrent', logger.ERROR)
+                logger.log(u'Unable to find info field in torrent', logger.ERROR)
                 raise
             result.hash = sha1(bencode(info)).hexdigest()
 
diff --git a/sickbeard/config.py b/sickbeard/config.py
index e956f9e50..78cdf8a3f 100644
--- a/sickbeard/config.py
+++ b/sickbeard/config.py
@@ -265,7 +265,7 @@ def change_SUBTITLES_FINDER_FREQUENCY(subtitles_finder_frequency):
     :param subtitles_finder_frequency: New frequency
     """
     if subtitles_finder_frequency == '' or subtitles_finder_frequency is None:
-            subtitles_finder_frequency = 1
+        subtitles_finder_frequency = 1
 
     sickbeard.SUBTITLES_FINDER_FREQUENCY = to_int(subtitles_finder_frequency, 1)
 
@@ -388,12 +388,12 @@ def change_PROCESS_AUTOMATICALLY(process_automatically):
 
 def CheckSection(CFG, sec):
     """ Check if INI section exists, if not create it """
-    try:
-        CFG[sec]
+
+    if sec in CFG:
         return True
-    except:
-        CFG[sec] = {}
-        return False
+
+    CFG[sec] = {}
+    return False
 
 
 def checkbox_to_value(option, value_on=1, value_off=0):
@@ -402,7 +402,7 @@ def checkbox_to_value(option, value_on=1, value_off=0):
     any other value returns value_off (0)
     """
 
-    if type(option) is list:
+    if isinstance(option, list):
         option = option[-1]
 
     if option == 'on' or option == 'true':
@@ -499,7 +499,7 @@ def to_int(val, default=0):
 
     try:
         val = int(val)
-    except:
+    except Exception:
         val = default
 
     return val
@@ -536,11 +536,11 @@ def check_setting_int(config, cfg_name, item_name, def_val, silent=True):
 
         if str(my_val) == str(None):
             raise
-    except:
+    except Exception:
         my_val = def_val
         try:
             config[cfg_name][item_name] = my_val
-        except:
+        except Exception:
             config[cfg_name] = {}
             config[cfg_name][item_name] = my_val
 
@@ -558,11 +558,11 @@ def check_setting_float(config, cfg_name, item_name, def_val, silent=True):
         my_val = float(config[cfg_name][item_name])
         if str(my_val) == str(None):
             raise
-    except:
+    except Exception:
         my_val = def_val
         try:
             config[cfg_name][item_name] = my_val
-        except:
+        except Exception:
             config[cfg_name] = {}
             config[cfg_name][item_name] = my_val
 
@@ -587,11 +587,11 @@ def check_setting_str(config, cfg_name, item_name, def_val, silent=True, censor_
         my_val = helpers.decrypt(config[cfg_name][item_name], encryption_version)
         if str(my_val) == str(None):
             raise
-    except:
+    except Exception:
         my_val = def_val
         try:
             config[cfg_name][item_name] = helpers.encrypt(my_val, encryption_version)
-        except:
+        except Exception:
             config[cfg_name] = {}
             config[cfg_name][item_name] = helpers.encrypt(my_val, encryption_version)
 
@@ -599,7 +599,7 @@ def check_setting_str(config, cfg_name, item_name, def_val, silent=True, censor_
         logger.censoredItems[cfg_name, item_name] = my_val
 
     if not silent:
-        logger.log(item_name + " -> " + str(my_val), logger.DEBUG)
+        logger.log(item_name + " -> " + my_val, logger.DEBUG)
 
     return my_val
 
@@ -615,13 +615,14 @@ class ConfigMigrator():
         # check the version of the config
         self.config_version = check_setting_int(config_obj, 'General', 'config_version', sickbeard.CONFIG_VERSION)
         self.expected_config_version = sickbeard.CONFIG_VERSION
-        self.migration_names = {1: 'Custom naming',
-                                2: 'Sync backup number with version number',
-                                3: 'Rename omgwtfnzb variables',
-                                4: 'Add newznab catIDs',
-                                5: 'Metadata update',
-                                6: 'Convert from XBMC to new KODI variables',
-                                7: 'Use version 2 for password encryption'
+        self.migration_names = {
+            1: 'Custom naming',
+            2: 'Sync backup number with version number',
+            3: 'Rename omgwtfnzb variables',
+            4: 'Add newznab catIDs',
+            5: 'Metadata update',
+            6: 'Convert from XBMC to new KODI variables',
+            7: 'Use version 2 for password encryption'
         }
 
     def migrate_config(self):
@@ -630,10 +631,11 @@ class ConfigMigrator():
         """
 
         if self.config_version > self.expected_config_version:
-            logger.log_error_and_exit(u"Your config version (" + str(
-                self.config_version) + ") has been incremented past what this version of SickRage supports (" + str(
-                self.expected_config_version) + ").\n" + \
-                                      "If you have used other forks or a newer version of SickRage, your config file may be unusable due to their modifications.")
+            logger.log_error_and_exit(
+                u"""Your config version (%i) has been incremented past what this version of SickRage supports (%i).
+                If you have used other forks or a newer version of SickRage, your config file may be unusable due to their modifications.""" %
+                (self.config_version, self.expected_config_version)
+            )
 
         sickbeard.CONFIG_VERSION = self.config_version
 
@@ -668,13 +670,13 @@ class ConfigMigrator():
         """
 
         sickbeard.NAMING_PATTERN = self._name_to_pattern()
-        logger.log("Based on your old settings I'm setting your new naming pattern to: " + sickbeard.NAMING_PATTERN)
+        logger.log(u"Based on your old settings I'm setting your new naming pattern to: " + sickbeard.NAMING_PATTERN)
 
         sickbeard.NAMING_CUSTOM_ABD = bool(check_setting_int(self.config_obj, 'General', 'naming_dates', 0))
 
         if sickbeard.NAMING_CUSTOM_ABD:
             sickbeard.NAMING_ABD_PATTERN = self._name_to_pattern(True)
-            logger.log("Adding a custom air-by-date naming pattern to your config: " + sickbeard.NAMING_ABD_PATTERN)
+            logger.log(u"Adding a custom air-by-date naming pattern to your config: " + sickbeard.NAMING_ABD_PATTERN)
         else:
             sickbeard.NAMING_ABD_PATTERN = naming.name_abd_presets[0]
 
@@ -765,7 +767,7 @@ class ConfigMigrator():
             finalName += naming_sep_type[sep_type] + ep_quality
 
         if use_periods:
-            finalName = re.sub("\s+", ".", finalName)
+            finalName = re.sub(r"\s+", ".", finalName)
 
         return finalName
 
diff --git a/sickbeard/databases/mainDB.py b/sickbeard/databases/mainDB.py
index d405d30ce..7641677cc 100644
--- a/sickbeard/databases/mainDB.py
+++ b/sickbeard/databases/mainDB.py
@@ -111,7 +111,7 @@ class MainSanityCheck(db.DBSanityCheck):
                     (tvrage_show['location'], duplicate[0]['location'], tvrage_show['location'], duplicate[0]['show_name']), logger.WARNING)
                 continue
 
-            logger.log('Mapping %s to tvdb id %i' % (tvrage_show['show_name'], mapping[0]['mindexer_id']))
+            logger.log(u'Mapping %s to tvdb id %i' % (tvrage_show['show_name'], mapping[0]['mindexer_id']))
 
             self.connection.action(
                 "UPDATE tv_shows SET indexer=%i, indexer_id=%i WHERE indexer_id=%i" %
@@ -124,7 +124,7 @@ class MainSanityCheck(db.DBSanityCheck):
                     (INDEXER_TVDB, mapping[0]['mindexer_id'], tvrage_show['indexer_id'])
                 )
 
-            logger.log('Please perform a full update on %s' % tvrage_show['show_name'], logger.WARNING)
+            logger.log(u'Please perform a full update on %s' % tvrage_show['show_name'], logger.WARNING)
 
 
     def fix_duplicate_shows(self, column='indexer_id'):
@@ -275,12 +275,12 @@ class MainSanityCheck(db.DBSanityCheck):
         for sqlResult in sqlResults:
             langs = []
 
-            logger.log("Checking subtitle codes for episode_id: %s, codes: %s" %
+            logger.log(u"Checking subtitle codes for episode_id: %s, codes: %s" %
                 (sqlResult['episode_id'], sqlResult['subtitles']), logger.DEBUG)
 
             for subcode in sqlResult['subtitles'].split(','):
                 if not len(subcode) is 3 or not subcode in validLanguages:
-                    logger.log("Fixing subtitle codes for episode_id: %s, invalid code: %s" %
+                    logger.log(u"Fixing subtitle codes for episode_id: %s, invalid code: %s" %
                         (sqlResult['episode_id'], subcode), logger.DEBUG)
                     continue
 
diff --git a/sickbeard/helpers.py b/sickbeard/helpers.py
index 640c6269d..c9de23eb6 100644
--- a/sickbeard/helpers.py
+++ b/sickbeard/helpers.py
@@ -867,9 +867,9 @@ def get_absolute_number_from_season_and_episode(show, season, episode):
 
         if len(sqlResults) == 1:
             absolute_number = int(sqlResults[0]["absolute_number"])
-            logger.log("Found absolute number %s for show %s S%02dE%02d" % (absolute_number, show.name, season, episode), logger.DEBUG)
+            logger.log(u"Found absolute number %s for show %s S%02dE%02d" % (absolute_number, show.name, season, episode), logger.DEBUG)
         else:
-            logger.log("No entries for absolute number for show %s S%02dE%02d" % (show.name, season, episode), logger.DEBUG)
+            logger.log(u"No entries for absolute number for show %s S%02dE%02d" % (show.name, season, episode), logger.DEBUG)
 
     return absolute_number
 
@@ -1319,7 +1319,7 @@ def set_up_anidb_connection():
 
     if not sickbeard.ADBA_CONNECTION:
         def anidb_logger(msg):
-            return logger.log("anidb: %s " % msg, logger.DEBUG)
+            return logger.log(u"anidb: %s " % msg, logger.DEBUG)
 
         try:
             sickbeard.ADBA_CONNECTION = adba.Connection(keepAlive=True, log=anidb_logger)
@@ -1581,7 +1581,7 @@ def _setUpSession(session, headers):
 
     # request session proxies
     if 'Referer' not in session.headers and sickbeard.PROXY_SETTING:
-        logger.log("Using global proxy: " + sickbeard.PROXY_SETTING, logger.DEBUG)
+        logger.log(u"Using global proxy: " + sickbeard.PROXY_SETTING, logger.DEBUG)
         scheme, address = urllib2.splittype(sickbeard.PROXY_SETTING)
         address = sickbeard.PROXY_SETTING if scheme else 'http://' + sickbeard.PROXY_SETTING
         session.proxies = {
@@ -1800,7 +1800,7 @@ def verify_freespace(src, dest, oldfile=None):
     if not isinstance(oldfile, list):
         oldfile = [oldfile]
 
-    logger.log("Trying to determine free space on destination drive", logger.DEBUG)
+    logger.log(u"Trying to determine free space on destination drive", logger.DEBUG)
 
     if hasattr(os, 'statvfs'):  # POSIX
         def disk_usage(path):
@@ -1819,21 +1819,21 @@ def verify_freespace(src, dest, oldfile=None):
                 fun = ctypes.windll.kernel32.GetDiskFreeSpaceExA
             ret = fun(path, ctypes.byref(_), ctypes.byref(total), ctypes.byref(free))
             if ret == 0:
-                logger.log("Unable to determine free space, something went wrong", logger.WARNING)
+                logger.log(u"Unable to determine free space, something went wrong", logger.WARNING)
                 raise ctypes.WinError()
             return free.value
     else:
-        logger.log("Unable to determine free space on your OS")
+        logger.log(u"Unable to determine free space on your OS")
         return True
 
     if not ek(os.path.isfile, src):
-        logger.log("A path to a file is required for the source. " + src + " is not a file.", logger.WARNING)
+        logger.log(u"A path to a file is required for the source. " + src + " is not a file.", logger.WARNING)
         return True
 
     try:
         diskfree = disk_usage(dest)
     except Exception:
-        logger.log("Unable to determine free space, so I will assume there is enough.", logger.WARNING)
+        logger.log(u"Unable to determine free space, so I will assume there is enough.", logger.WARNING)
         return True
 
     neededspace = ek(os.path.getsize, src)
@@ -1846,7 +1846,7 @@ def verify_freespace(src, dest, oldfile=None):
     if diskfree > neededspace:
         return True
     else:
-        logger.log("Not enough free space: Needed: %s bytes ( %s ), found: %s bytes ( %s )"
+        logger.log(u"Not enough free space: Needed: %s bytes ( %s ), found: %s bytes ( %s )"
                    % (neededspace, pretty_filesize(neededspace), diskfree, pretty_filesize(diskfree)), logger.WARNING)
         return False
 
diff --git a/sickbeard/logger.py b/sickbeard/logger.py
index 5cac491c4..c322c5ade 100644
--- a/sickbeard/logger.py
+++ b/sickbeard/logger.py
@@ -60,18 +60,24 @@ class NullHandler(logging.Handler):
 
 
 class CensoredFormatter(logging.Formatter, object):
-    def __init__(self, *args, **kwargs):
-        super(CensoredFormatter, self).__init__(*args, **kwargs)
+    def __init__(self, fmt=None, datefmt=None, encoding='utf-8'):
+        super(CensoredFormatter, self).__init__(fmt, datefmt)
+        self.encoding = encoding
 
     def format(self, record):
         """Strips censored items from string"""
         msg = super(CensoredFormatter, self).format(record)
-        # pylint: disable=W0612
-        for k, v in censoredItems.iteritems():
-            if v and len(v) > 0 and v in msg:
-                msg = msg.replace(v, len(v) * '*')
+
+        if not isinstance(msg, unicode):
+            msg = msg.decode(self.encoding, 'replace') # Convert to unicode
+
+        for _, v in censoredItems.iteritems():
+            if not isinstance(v, unicode):
+                v = v.decode(self.encoding, 'replace') # Convert to unicode
+            msg = msg.replace(v, len(v) * u'*')
+
         # Needed because Newznab apikey isn't stored as key=value in a section.
-        msg = re.sub(r'([&?]r|[&?]apikey|[&?]api_key)=[^&]*([&\w]?)', r'\1=**********\2', msg)
+        msg = re.sub(ur'([&?]r|[&?]apikey|[&?]api_key)=[^&]*([&\w]?)', ur'\1=**********\2', msg)
         return msg
 
 
@@ -118,7 +124,7 @@ class Logger(object):
         # console log handler
         if self.consoleLogging:
             console = logging.StreamHandler()
-            console.setFormatter(CensoredFormatter(u'%(asctime)s %(levelname)s::%(message)s', '%H:%M:%S'))
+            console.setFormatter(CensoredFormatter(u'%(asctime)s %(levelname)s::%(message)s', '%H:%M:%S', encoding='utf-8'))
             console.setLevel(INFO if not self.debugLogging else DEBUG)
 
             for logger in self.loggers:
@@ -127,8 +133,8 @@ class Logger(object):
         # rotating log file handler
         if self.fileLogging:
             rfh = logging.handlers.RotatingFileHandler(self.logFile, maxBytes=sickbeard.LOG_SIZE, backupCount=sickbeard.LOG_NR, encoding='utf-8')
-            rfh.setFormatter(CensoredFormatter(u'%(asctime)s %(levelname)-8s %(message)s', dateTimeFormat))
-            rfh.setLevel(DEBUG)
+            rfh.setFormatter(CensoredFormatter(u'%(asctime)s %(levelname)-8s %(message)s', dateTimeFormat, encoding='utf-8'))
+            rfh.setLevel(INFO if not self.debugLogging else DEBUG)
 
             for logger in self.loggers:
                 logger.addHandler(rfh)
@@ -142,24 +148,17 @@ class Logger(object):
         message = meThread + u" :: " + msg
 
         # Change the SSL error to a warning with a link to information about how to fix it.
-        check = re.sub(r'error \[Errno 1\] _ssl.c:\d{3}: error:\d{8}:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert internal error', 'See: http://git.io/vJrkM', message)
+        check = re.sub(ur'error \[Errno 1\] _ssl.c:\d{3}: error:\d{8}:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert internal error', 'See: http://git.io/vJrkM', message)
         if check is not message:
             message = check
             level = WARNING
-        
-        # Avoid open issues when user only need to clear cache to fix issue
-        if re.search(r"_mako\'$",message):
-            # 'C__SickRage_gui_slick_views_schedule_mako'
-            # '_usr_local_sickrage_var_SickRage_gui_slick_views_schedule_mako'
-            # '_volume1___plugins_AppCentral_sickbeard_tvrage_SickBeard_TVRage_gui_slick_views_schedule_mako'
-            message = 'Please stop SickRage and delete \SickRage\cache\mako folder. You can see cache folder location in SickRage Help&Info menu'
-            level = WARNING            
 
-        if level == ERROR:
+        if level in (ERROR, WARNING):
             self.logger.exception(message, *args, **kwargs)
+
+        if level == ERROR:
             classes.ErrorViewer.add(classes.UIError(message))
         elif level == WARNING:
-            self.logger.exception(message, *args, **kwargs)
             classes.WarningViewer.add(classes.UIError(message))
 
             # if sickbeard.GIT_AUTOISSUES:
@@ -288,7 +287,7 @@ class Logger(object):
 
                 def is_malformed_error(title):
                     # [APP SUBMITTED]: not well-formed (invalid token): line 0, column 0
-                    re.search(r".* not well-formed \(invalid token\): line .* column .*", title) is not None
+                    return re.search(r".* not well-formed \(invalid token\): line .* column .*", title) is not None
 
                 mako_error = is_mako_error(title_Error)
                 ascii_error = is_ascii_error(title_Error)
@@ -331,7 +330,8 @@ class Logger(object):
             issue_id = None
         finally:
             self.submitter_running = False
-            return submitter_result, issue_id
+
+        return submitter_result, issue_id
 
 # pylint: disable=R0903
 class Wrapper(object):
diff --git a/sickbeard/name_parser/parser.py b/sickbeard/name_parser/parser.py
index 6c1a503a9..cd5bc886d 100644
--- a/sickbeard/name_parser/parser.py
+++ b/sickbeard/name_parser/parser.py
@@ -595,7 +595,7 @@ class NameParserCache(object):
 
     def get(self, name):
         if name in self._previous_parsed:
-            logger.log("Using cached parse result for: " + name, logger.DEBUG)
+            logger.log(u"Using cached parse result for: " + name, logger.DEBUG)
             return self._previous_parsed[name]
 
 
diff --git a/sickbeard/naming.py b/sickbeard/naming.py
index 35bec1afc..3e64f17cc 100644
--- a/sickbeard/naming.py
+++ b/sickbeard/naming.py
@@ -222,7 +222,7 @@ def validate_name(pattern, multi=None, anime_type=None, file_only=False, abd=Fal
         logger.log(u"Unable to parse " + new_name + ", not valid", logger.DEBUG)
         return False
 
-    logger.log("The name " + new_name + " parsed into " + str(result), logger.DEBUG)
+    logger.log(u"The name " + new_name + " parsed into " + str(result), logger.DEBUG)
 
     if abd or sports:
         if result.air_date != ep.airdate:
diff --git a/sickbeard/notifiers/boxcar.py b/sickbeard/notifiers/boxcar.py
index 6de1752fb..90252e00a 100644
--- a/sickbeard/notifiers/boxcar.py
+++ b/sickbeard/notifiers/boxcar.py
@@ -73,14 +73,14 @@ class BoxcarNotifier:
         except urllib2.HTTPError, e:
             # if we get an error back that doesn't have an error code then who knows what's really happening
             if not hasattr(e, 'code'):
-                logger.log("Boxcar notification failed. Error code: " + ex(e), logger.ERROR)
+                logger.log(u"Boxcar notification failed. Error code: " + ex(e), logger.ERROR)
                 return False
             else:
-                logger.log("Boxcar notification failed. Error code: " + str(e.code), logger.WARNING)
+                logger.log(u"Boxcar notification failed. Error code: " + str(e.code), logger.WARNING)
 
             # HTTP status 404 if the provided email address isn't a Boxcar user.
             if e.code == 404:
-                logger.log("Username is wrong/not a boxcar email. Boxcar will send an email to it", logger.WARNING)
+                logger.log(u"Username is wrong/not a boxcar email. Boxcar will send an email to it", logger.WARNING)
                 return False
 
             # For HTTP status code 401's, it is because you are passing in either an invalid token, or the user has not added your service.
@@ -88,7 +88,7 @@ class BoxcarNotifier:
 
                 # If the user has already added your service, we'll return an HTTP status code of 401.
                 if subscribe:
-                    logger.log("Already subscribed to service", logger.ERROR)
+                    logger.log(u"Already subscribed to service", logger.ERROR)
                     # i dont know if this is true or false ... its neither but i also dont know how we got here in the first place
                     return False
 
@@ -96,18 +96,18 @@ class BoxcarNotifier:
                 else:
                     subscribeNote = self._sendBoxcar(msg, title, email, True)
                     if subscribeNote:
-                        logger.log("Subscription send", logger.DEBUG)
+                        logger.log(u"Subscription send", logger.DEBUG)
                         return True
                     else:
-                        logger.log("Subscription could not be send", logger.ERROR)
+                        logger.log(u"Subscription could not be send", logger.ERROR)
                         return False
 
             # If you receive an HTTP status code of 400, it is because you failed to send the proper parameters
             elif e.code == 400:
-                logger.log("Wrong data sent to boxcar", logger.ERROR)
+                logger.log(u"Wrong data sent to boxcar", logger.ERROR)
                 return False
 
-        logger.log("Boxcar notification successful.", logger.INFO)
+        logger.log(u"Boxcar notification successful.", logger.INFO)
         return True
 
     def notify_snatch(self, ep_name, title=notifyStrings[NOTIFY_SNATCH]):
@@ -140,14 +140,14 @@ class BoxcarNotifier:
         """
 
         if not sickbeard.USE_BOXCAR and not force:
-            logger.log("Notification for Boxcar not enabled, skipping this notification", logger.DEBUG)
+            logger.log(u"Notification for Boxcar not enabled, skipping this notification", logger.DEBUG)
             return False
 
         # if no username was given then use the one from the config
         if not username:
             username = sickbeard.BOXCAR_USERNAME
 
-        logger.log("Sending notification for " + message, logger.DEBUG)
+        logger.log(u"Sending notification for " + message, logger.DEBUG)
 
         return self._sendBoxcar(message, title, username)
 
diff --git a/sickbeard/notifiers/boxcar2.py b/sickbeard/notifiers/boxcar2.py
index 9cb6dd88d..3dd4a9a5a 100644
--- a/sickbeard/notifiers/boxcar2.py
+++ b/sickbeard/notifiers/boxcar2.py
@@ -65,22 +65,22 @@ class Boxcar2Notifier:
         except Exception as e:
             # if we get an error back that doesn't have an error code then who knows what's really happening
             if not hasattr(e, 'code'):
-                logger.log("Boxcar2 notification failed." + ex(e), logger.ERROR)
+                logger.log(u"Boxcar2 notification failed." + ex(e), logger.ERROR)
                 return False
             else:
-                logger.log("Boxcar2 notification failed. Error code: " + str(e.code), logger.WARNING)
+                logger.log(u"Boxcar2 notification failed. Error code: " + str(e.code), logger.WARNING)
 
             # HTTP status 404
             if e.code == 404:
-                logger.log("Access token is invalid. Check it.", logger.WARNING)
+                logger.log(u"Access token is invalid. Check it.", logger.WARNING)
                 return False
 
             # If you receive an HTTP status code of 400, it is because you failed to send the proper parameters
             elif e.code == 400:
-                logger.log("Wrong data send to boxcar2", logger.ERROR)
+                logger.log(u"Wrong data send to boxcar2", logger.ERROR)
                 return False
 
-        logger.log("Boxcar2 notification successful.", logger.DEBUG)
+        logger.log(u"Boxcar2 notification successful.", logger.DEBUG)
         return True
 
     def notify_snatch(self, ep_name, title=notifyStrings[NOTIFY_SNATCH]):
@@ -112,14 +112,14 @@ class Boxcar2Notifier:
         """
 
         if not sickbeard.USE_BOXCAR2:
-            logger.log("Notification for Boxcar2 not enabled, skipping this notification", logger.DEBUG)
+            logger.log(u"Notification for Boxcar2 not enabled, skipping this notification", logger.DEBUG)
             return False
 
         # if no username was given then use the one from the config
         if not accesstoken:
             accesstoken = sickbeard.BOXCAR2_ACCESSTOKEN
 
-        logger.log("Sending notification for " + message, logger.DEBUG)
+        logger.log(u"Sending notification for " + message, logger.DEBUG)
 
         self._sendBoxcar2(message, title, accesstoken)
         return True
diff --git a/sickbeard/notifiers/emailnotify.py b/sickbeard/notifiers/emailnotify.py
index f6c963359..c63b03670 100644
--- a/sickbeard/notifiers/emailnotify.py
+++ b/sickbeard/notifiers/emailnotify.py
@@ -59,7 +59,7 @@ class EmailNotifier:
             show = self._parseEp(ep_name)
             to = self._generate_recipients(show)
             if len(to) == 0:
-                logger.log('Skipping email notify because there are no configured recipients', logger.WARNING)
+                logger.log(u'Skipping email notify because there are no configured recipients', logger.WARNING)
             else:
                 try:
                     msg = MIMEMultipart('alternative')
@@ -81,9 +81,9 @@ class EmailNotifier:
                 msg['Date'] = formatdate(localtime=True)
                 if self._sendmail(sickbeard.EMAIL_HOST, sickbeard.EMAIL_PORT, sickbeard.EMAIL_FROM, sickbeard.EMAIL_TLS,
                                   sickbeard.EMAIL_USER, sickbeard.EMAIL_PASSWORD, to, msg):
-                    logger.log("Snatch notification sent to [%s] for '%s'" % (to, ep_name), logger.DEBUG)
+                    logger.log(u"Snatch notification sent to [%s] for '%s'" % (to, ep_name), logger.DEBUG)
                 else:
-                    logger.log("Snatch notification ERROR: %s" % self.last_err, logger.ERROR)
+                    logger.log(u"Snatch notification ERROR: %s" % self.last_err, logger.ERROR)
 
     def notify_download(self, ep_name, title="Completed:"):
         """
@@ -98,7 +98,7 @@ class EmailNotifier:
             show = self._parseEp(ep_name)
             to = self._generate_recipients(show)
             if len(to) == 0:
-                logger.log('Skipping email notify because there are no configured recipients', logger.WARNING)
+                logger.log(u'Skipping email notify because there are no configured recipients', logger.WARNING)
             else:
                 try:
                     msg = MIMEMultipart('alternative')
@@ -120,9 +120,9 @@ class EmailNotifier:
                 msg['Date'] = formatdate(localtime=True)
                 if self._sendmail(sickbeard.EMAIL_HOST, sickbeard.EMAIL_PORT, sickbeard.EMAIL_FROM, sickbeard.EMAIL_TLS,
                                   sickbeard.EMAIL_USER, sickbeard.EMAIL_PASSWORD, to, msg):
-                    logger.log("Download notification sent to [%s] for '%s'" % (to, ep_name), logger.DEBUG)
+                    logger.log(u"Download notification sent to [%s] for '%s'" % (to, ep_name), logger.DEBUG)
                 else:
-                    logger.log("Download notification ERROR: %s" % self.last_err, logger.ERROR)
+                    logger.log(u"Download notification ERROR: %s" % self.last_err, logger.ERROR)
 
     def notify_subtitle_download(self, ep_name, lang, title="Downloaded subtitle:"):
         """
@@ -137,7 +137,7 @@ class EmailNotifier:
             show = self._parseEp(ep_name)
             to = self._generate_recipients(show)
             if len(to) == 0:
-                logger.log('Skipping email notify because there are no configured recipients', logger.WARNING)
+                logger.log(u'Skipping email notify because there are no configured recipients', logger.WARNING)
             else:
                 try:
                     msg = MIMEMultipart('alternative')
@@ -158,9 +158,9 @@ class EmailNotifier:
                 msg['To'] = ','.join(to)
                 if self._sendmail(sickbeard.EMAIL_HOST, sickbeard.EMAIL_PORT, sickbeard.EMAIL_FROM, sickbeard.EMAIL_TLS,
                                   sickbeard.EMAIL_USER, sickbeard.EMAIL_PASSWORD, to, msg):
-                    logger.log("Download notification sent to [%s] for '%s'" % (to, ep_name), logger.DEBUG)
+                    logger.log(u"Download notification sent to [%s] for '%s'" % (to, ep_name), logger.DEBUG)
                 else:
-                    logger.log("Download notification ERROR: %s" % self.last_err, logger.ERROR)
+                    logger.log(u"Download notification ERROR: %s" % self.last_err, logger.ERROR)
 
 
     def notify_git_update(self, new_version="??"):
@@ -184,11 +184,11 @@ class EmailNotifier:
                             addrs.append(addr)
 
         addrs = set(addrs)
-        logger.log('Notification recipients: %s' % addrs, logger.DEBUG)
+        logger.log(u'Notification recipients: %s' % addrs, logger.DEBUG)
         return addrs
 
     def _sendmail(self, host, port, smtp_from, use_tls, user, pwd, to, msg, smtpDebug=False):
-        logger.log('HOST: %s; PORT: %s; FROM: %s, TLS: %s, USER: %s, PWD: %s, TO: %s' % (
+        logger.log(u'HOST: %s; PORT: %s; FROM: %s, TLS: %s, USER: %s, PWD: %s, TO: %s' % (
             host, port, smtp_from, use_tls, user, pwd, to), logger.DEBUG)
         try:
             srv = smtplib.SMTP(host, int(port))
@@ -202,13 +202,13 @@ class EmailNotifier:
         try:
             if (use_tls == '1' or use_tls == True) or (len(user) > 0 and len(pwd) > 0):
                 srv.ehlo()
-                logger.log('Sent initial EHLO command!', logger.DEBUG)
+                logger.log(u'Sent initial EHLO command!', logger.DEBUG)
             if use_tls == '1' or use_tls == True:
                 srv.starttls()
-                logger.log('Sent STARTTLS command!', logger.DEBUG)
+                logger.log(u'Sent STARTTLS command!', logger.DEBUG)
             if len(user) > 0 and len(pwd) > 0:
                 srv.login(user, pwd)
-                logger.log('Sent LOGIN command!', logger.DEBUG)
+                logger.log(u'Sent LOGIN command!', logger.DEBUG)
             srv.sendmail(smtp_from, to, msg.as_string())
             srv.quit()
             return True
@@ -222,7 +222,7 @@ class EmailNotifier:
         sep = " - "
         titles = ep_name.split(sep)
         titles.sort(key=len, reverse=True)
-        logger.log("TITLES: %s" % titles, logger.DEBUG)
+        logger.log(u"TITLES: %s" % titles, logger.DEBUG)
         return titles
 
 
diff --git a/sickbeard/notifiers/freemobile.py b/sickbeard/notifiers/freemobile.py
index e4dba3732..6d3c75b7d 100644
--- a/sickbeard/notifiers/freemobile.py
+++ b/sickbeard/notifiers/freemobile.py
@@ -43,7 +43,7 @@ class FreeMobileNotifier:
         if apiKey == None:
             apiKey = sickbeard.FREEMOBILE_APIKEY
 
-        logger.log("Free Mobile in use with API KEY: " + apiKey, logger.DEBUG)
+        logger.log(u"Free Mobile in use with API KEY: " + apiKey, logger.DEBUG)
 
         # build up the URL and parameters
         msg = msg.strip()
@@ -115,10 +115,10 @@ class FreeMobileNotifier:
         """
 
         if not sickbeard.USE_FREEMOBILE and not force:
-            logger.log("Notification for Free Mobile not enabled, skipping this notification", logger.DEBUG)
+            logger.log(u"Notification for Free Mobile not enabled, skipping this notification", logger.DEBUG)
             return False, "Disabled"
 
-        logger.log("Sending a SMS for " + message, logger.DEBUG)
+        logger.log(u"Sending a SMS for " + message, logger.DEBUG)
 
         return self._sendFreeMobileSMS(title, message, id, apiKey)
 
diff --git a/sickbeard/notifiers/kodi.py b/sickbeard/notifiers/kodi.py
index c3a875ccf..6466c9a3a 100644
--- a/sickbeard/notifiers/kodi.py
+++ b/sickbeard/notifiers/kodi.py
@@ -121,7 +121,7 @@ class KODINotifier:
 
         # suppress notifications if the notifier is disabled but the notify options are checked
         if not sickbeard.USE_KODI and not force:
-            logger.log("Notification for KODI not enabled, skipping this notification", logger.DEBUG)
+            logger.log(u"Notification for KODI not enabled, skipping this notification", logger.DEBUG)
             return False
 
         result = ''
diff --git a/sickbeard/notifiers/nma.py b/sickbeard/notifiers/nma.py
index f1dffcbe7..c0cb173f2 100644
--- a/sickbeard/notifiers/nma.py
+++ b/sickbeard/notifiers/nma.py
@@ -51,7 +51,7 @@ class NMA_Notifier:
 
         if len(keys) > 1: batch = True
 
-        logger.log("NMA: Sending notice with details: event=\"%s\", message=\"%s\", priority=%s, batch=%s" % (event, message, nma_priority, batch), logger.DEBUG)
+        logger.log(u"NMA: Sending notice with details: event=\"%s\", message=\"%s\", priority=%s, batch=%s" % (event, message, nma_priority, batch), logger.DEBUG)
         response = p.push(application=title, event=event, description=message, priority=nma_priority, batch_mode=batch)
 
         if not response[nma_api][u'code'] == u'200':
diff --git a/sickbeard/notifiers/nmj.py b/sickbeard/notifiers/nmj.py
index 63a8b3625..313998de3 100644
--- a/sickbeard/notifiers/nmj.py
+++ b/sickbeard/notifiers/nmj.py
@@ -184,7 +184,7 @@ class NMJNotifier:
         force: If True then the notification will be sent even if NMJ is disabled in the config
         """
         if not sickbeard.USE_NMJ and not force:
-            logger.log("Notification for NMJ scan update not enabled, skipping this notification", logger.DEBUG)
+            logger.log(u"Notification for NMJ scan update not enabled, skipping this notification", logger.DEBUG)
             return False
 
         # fill in omitted parameters
diff --git a/sickbeard/notifiers/nmjv2.py b/sickbeard/notifiers/nmjv2.py
index c138580cd..24464b039 100644
--- a/sickbeard/notifiers/nmjv2.py
+++ b/sickbeard/notifiers/nmjv2.py
@@ -165,7 +165,7 @@ class NMJv2Notifier:
         force: If True then the notification will be sent even if NMJ is disabled in the config
         """
         if not sickbeard.USE_NMJv2 and not force:
-            logger.log("Notification for NMJ scan update not enabled, skipping this notification", logger.DEBUG)
+            logger.log(u"Notification for NMJ scan update not enabled, skipping this notification", logger.DEBUG)
             return False
 
         # fill in omitted parameters
diff --git a/sickbeard/notifiers/prowl.py b/sickbeard/notifiers/prowl.py
index 93400e532..195631498 100644
--- a/sickbeard/notifiers/prowl.py
+++ b/sickbeard/notifiers/prowl.py
@@ -73,7 +73,7 @@ class ProwlNotifier:
 
         title = "SickRage"
 
-        logger.log("PROWL: Sending notice with details: event=\"%s\", message=\"%s\", priority=%s, api=%s" % (event, message, prowl_priority, prowl_api), logger.DEBUG)
+        logger.log(u"PROWL: Sending notice with details: event=\"%s\", message=\"%s\", priority=%s, api=%s" % (event, message, prowl_priority, prowl_api), logger.DEBUG)
 
         http_handler = HTTPSConnection("api.prowlapp.com")
 
diff --git a/sickbeard/notifiers/pushover.py b/sickbeard/notifiers/pushover.py
index 44ce1614e..dbc422877 100644
--- a/sickbeard/notifiers/pushover.py
+++ b/sickbeard/notifiers/pushover.py
@@ -55,7 +55,7 @@ class PushoverNotifier:
         if sound == None:
             sound = sickbeard.PUSHOVER_SOUND
 
-        logger.log("Pushover API KEY in use: " + apiKey, logger.DEBUG)
+        logger.log(u"Pushover API KEY in use: " + apiKey, logger.DEBUG)
 
         # build up the URL and parameters
         msg = msg.strip()
@@ -93,14 +93,14 @@ class PushoverNotifier:
         except urllib2.HTTPError, e:
             # if we get an error back that doesn't have an error code then who knows what's really happening
             if not hasattr(e, 'code'):
-                logger.log("Pushover notification failed." + ex(e), logger.ERROR)
+                logger.log(u"Pushover notification failed." + ex(e), logger.ERROR)
                 return False
             else:
-                logger.log("Pushover notification failed. Error code: " + str(e.code), logger.ERROR)
+                logger.log(u"Pushover notification failed. Error code: " + str(e.code), logger.ERROR)
 
             # HTTP status 404 if the provided email address isn't a Pushover user.
             if e.code == 404:
-                logger.log("Username is wrong/not a pushover email. Pushover will send an email to it", logger.WARNING)
+                logger.log(u"Username is wrong/not a pushover email. Pushover will send an email to it", logger.WARNING)
                 return False
 
             # For HTTP status code 401's, it is because you are passing in either an invalid token, or the user has not added your service.
@@ -109,23 +109,23 @@ class PushoverNotifier:
                 # HTTP status 401 if the user doesn't have the service added
                 subscribeNote = self._sendPushover(msg, title, sound=sound, userKey=userKey, apiKey=apiKey)
                 if subscribeNote:
-                    logger.log("Subscription sent", logger.DEBUG)
+                    logger.log(u"Subscription sent", logger.DEBUG)
                     return True
                 else:
-                    logger.log("Subscription could not be sent", logger.ERROR)
+                    logger.log(u"Subscription could not be sent", logger.ERROR)
                     return False
 
             # If you receive an HTTP status code of 400, it is because you failed to send the proper parameters
             elif e.code == 400:
-                logger.log("Wrong data sent to pushover", logger.ERROR)
+                logger.log(u"Wrong data sent to pushover", logger.ERROR)
                 return False
 
             # If you receive a HTTP status code of 429, it is because the message limit has been reached (free limit is 7,500)
             elif e.code == 429:
-                logger.log("Pushover API message limit reached - try a different API key", logger.ERROR)
+                logger.log(u"Pushover API message limit reached - try a different API key", logger.ERROR)
                 return False
 
-        logger.log("Pushover notification successful.", logger.INFO)
+        logger.log(u"Pushover notification successful.", logger.INFO)
         return True
 
     def notify_snatch(self, ep_name, title=notifyStrings[NOTIFY_SNATCH]):
@@ -160,10 +160,10 @@ class PushoverNotifier:
         """
 
         if not sickbeard.USE_PUSHOVER and not force:
-            logger.log("Notification for Pushover not enabled, skipping this notification", logger.DEBUG)
+            logger.log(u"Notification for Pushover not enabled, skipping this notification", logger.DEBUG)
             return False
 
-        logger.log("Sending notification for " + message, logger.DEBUG)
+        logger.log(u"Sending notification for " + message, logger.DEBUG)
 
         return self._sendPushover(message, title, sound=sound, userKey=userKey, apiKey=apiKey)
 
diff --git a/sickbeard/notifiers/tweet.py b/sickbeard/notifiers/tweet.py
index 76cb64efd..de7aabbdc 100644
--- a/sickbeard/notifiers/tweet.py
+++ b/sickbeard/notifiers/tweet.py
@@ -67,12 +67,12 @@ class TwitterNotifier:
         oauth_consumer = oauth.Consumer(key=self.consumer_key, secret=self.consumer_secret)
         oauth_client = oauth.Client(oauth_consumer)
 
-        logger.log('Requesting temp token from Twitter', logger.DEBUG)
+        logger.log(u'Requesting temp token from Twitter', logger.DEBUG)
 
         resp, content = oauth_client.request(self.REQUEST_TOKEN_URL, 'GET')
 
         if resp['status'] != '200':
-            logger.log('Invalid response from Twitter requesting temp token: %s' % resp['status'], logger.ERROR)
+            logger.log(u'Invalid response from Twitter requesting temp token: %s' % resp['status'], logger.ERROR)
         else:
             request_token = dict(parse_qsl(content))
 
@@ -91,26 +91,26 @@ class TwitterNotifier:
         token = oauth.Token(request_token['oauth_token'], request_token['oauth_token_secret'])
         token.set_verifier(key)
 
-        logger.log('Generating and signing request for an access token using key ' + key, logger.DEBUG)
+        logger.log(u'Generating and signing request for an access token using key ' + key, logger.DEBUG)
 
         signature_method_hmac_sha1 = oauth.SignatureMethod_HMAC_SHA1()  # @UnusedVariable
         oauth_consumer = oauth.Consumer(key=self.consumer_key, secret=self.consumer_secret)
-        logger.log('oauth_consumer: ' + str(oauth_consumer), logger.DEBUG)
+        logger.log(u'oauth_consumer: ' + str(oauth_consumer), logger.DEBUG)
         oauth_client = oauth.Client(oauth_consumer, token)
-        logger.log('oauth_client: ' + str(oauth_client), logger.DEBUG)
+        logger.log(u'oauth_client: ' + str(oauth_client), logger.DEBUG)
         resp, content = oauth_client.request(self.ACCESS_TOKEN_URL, method='POST', body='oauth_verifier=%s' % key)
-        logger.log('resp, content: ' + str(resp) + ',' + str(content), logger.DEBUG)
+        logger.log(u'resp, content: ' + str(resp) + ',' + str(content), logger.DEBUG)
 
         access_token = dict(parse_qsl(content))
-        logger.log('access_token: ' + str(access_token), logger.DEBUG)
+        logger.log(u'access_token: ' + str(access_token), logger.DEBUG)
 
-        logger.log('resp[status] = ' + str(resp['status']), logger.DEBUG)
+        logger.log(u'resp[status] = ' + str(resp['status']), logger.DEBUG)
         if resp['status'] != '200':
-            logger.log('The request for a token with did not succeed: ' + str(resp['status']), logger.ERROR)
+            logger.log(u'The request for a token with did not succeed: ' + str(resp['status']), logger.ERROR)
             return False
         else:
-            logger.log('Your Twitter Access Token key: %s' % access_token['oauth_token'], logger.DEBUG)
-            logger.log('Access Token secret: %s' % access_token['oauth_token_secret'], logger.DEBUG)
+            logger.log(u'Your Twitter Access Token key: %s' % access_token['oauth_token'], logger.DEBUG)
+            logger.log(u'Access Token secret: %s' % access_token['oauth_token_secret'], logger.DEBUG)
             sickbeard.TWITTER_USERNAME = access_token['oauth_token']
             sickbeard.TWITTER_PASSWORD = access_token['oauth_token_secret']
             return True
diff --git a/sickbeard/postProcessor.py b/sickbeard/postProcessor.py
index 34175cdac..ce47b847b 100644
--- a/sickbeard/postProcessor.py
+++ b/sickbeard/postProcessor.py
@@ -366,7 +366,7 @@ class PostProcessor(object):
                 helpers.copyFile(cur_file_path, new_file_path)
                 helpers.chmodAsParent(new_file_path)
             except (IOError, OSError), e:
-                logger.log("Unable to copy file " + cur_file_path + " to " + new_file_path + ": " + ex(e), logger.ERROR)
+                logger.log(u"Unable to copy file " + cur_file_path + " to " + new_file_path + ": " + ex(e), logger.ERROR)
                 raise
 
         self._combined_file_operation(file_path, new_path, new_base_name, associated_files, action=_int_copy,
diff --git a/sickbeard/properFinder.py b/sickbeard/properFinder.py
index b12940d2a..6c1c06fe1 100644
--- a/sickbeard/properFinder.py
+++ b/sickbeard/properFinder.py
@@ -189,12 +189,12 @@ class ProperFinder:
                 oldRelease_group = (sqlResults[0]["release_group"])
 
                 if oldVersion > -1 and oldVersion < bestResult.version:
-                    logger.log("Found new anime v" + str(bestResult.version) + " to replace existing v" + str(oldVersion))
+                    logger.log(u"Found new anime v" + str(bestResult.version) + " to replace existing v" + str(oldVersion))
                 else:
                     continue
 
                 if oldRelease_group != bestResult.release_group:
-                    logger.log("Skipping proper from release group: " + bestResult.release_group + ", does not match existing release group: " + oldRelease_group)
+                    logger.log(u"Skipping proper from release group: " + bestResult.release_group + ", does not match existing release group: " + oldRelease_group)
                     continue
 
             # if the show is in our list and there hasn't been a proper already added for that particular episode then add it to our list of propers
diff --git a/sickbeard/providers/btdigg.py b/sickbeard/providers/btdigg.py
index fc97662bd..19f2f12ba 100644
--- a/sickbeard/providers/btdigg.py
+++ b/sickbeard/providers/btdigg.py
@@ -55,7 +55,7 @@ class BTDIGGProvider(generic.TorrentProvider):
 
                 jdata = self.getURL(searchURL, json=True)
                 if not jdata:
-                    logger.log("No data returned to be parsed!!!")
+                    logger.log(u"No data returned to be parsed!!!")
                     return []
 
                 for torrent in jdata:
diff --git a/sickbeard/providers/btn.py b/sickbeard/providers/btn.py
index c3eb82621..6b3b76728 100644
--- a/sickbeard/providers/btn.py
+++ b/sickbeard/providers/btn.py
@@ -88,7 +88,7 @@ class BTNProvider(generic.TorrentProvider):
 
         parsedJSON = self._api_call(apikey, params)
         if not parsedJSON:
-            logger.log("No data returned from provider", logger.DEBUG)
+            logger.log(u"No data returned from provider", logger.DEBUG)
             return results
 
         if self._checkAuthFromData(parsedJSON):
diff --git a/sickbeard/providers/extratorrent.py b/sickbeard/providers/extratorrent.py
index 3578d58c3..7f3faec90 100644
--- a/sickbeard/providers/extratorrent.py
+++ b/sickbeard/providers/extratorrent.py
@@ -66,7 +66,7 @@ class ExtraTorrentProvider(generic.TorrentProvider):
                     self.search_params.update({'type': ('search', 'rss')[mode == 'RSS'], 'search': search_string})
                     data = self.getURL(self.urls['rss'], params=self.search_params)
                     if not data:
-                        logger.log("No data returned from provider", logger.DEBUG)
+                        logger.log(u"No data returned from provider", logger.DEBUG)
                         continue
 
                     if not data.startswith('<?xml'):
diff --git a/sickbeard/providers/freshontv.py b/sickbeard/providers/freshontv.py
index 720064de9..3ff1cf74b 100644
--- a/sickbeard/providers/freshontv.py
+++ b/sickbeard/providers/freshontv.py
@@ -126,7 +126,7 @@ class FreshOnTVProvider(generic.TorrentProvider):
                 max_page_number = 0
 
                 if not init_html:
-                    logger.log("No data returned from provider", logger.DEBUG)
+                    logger.log(u"No data returned from provider", logger.DEBUG)
                     continue
 
                 try:
diff --git a/sickbeard/providers/generic.py b/sickbeard/providers/generic.py
index 7d6d5811d..c3fb3f7d2 100644
--- a/sickbeard/providers/generic.py
+++ b/sickbeard/providers/generic.py
@@ -152,12 +152,12 @@ class GenericProvider(object):
                     torrent_hash = b16encode(b32decode(torrent_hash)).upper()
 
                 if not torrent_hash:
-                    logger.log("Unable to extract torrent hash from magnet: " + ex(result.url), logger.ERROR)
+                    logger.log(u"Unable to extract torrent hash from magnet: " + ex(result.url), logger.ERROR)
                     return urls, filename
 
                 urls = [x.format(torrent_hash=torrent_hash, torrent_name=torrent_name) for x in self.btCacheURLS]
             except Exception:
-                logger.log("Unable to extract torrent hash or name from magnet: " + ex(result.url), logger.ERROR)
+                logger.log(u"Unable to extract torrent hash or name from magnet: " + ex(result.url), logger.ERROR)
                 return urls, filename
         else:
             urls = [result.url]
diff --git a/sickbeard/providers/hdspace.py b/sickbeard/providers/hdspace.py
index 2e1fde63f..a4b7e7369 100644
--- a/sickbeard/providers/hdspace.py
+++ b/sickbeard/providers/hdspace.py
@@ -105,7 +105,7 @@ class HDSpaceProvider(generic.TorrentProvider):
 
                 data = self.getURL(searchURL)
                 if not data or 'please try later' in data:
-                    logger.log("No data returned from provider", logger.DEBUG)
+                    logger.log(u"No data returned from provider", logger.DEBUG)
                     continue
 
                 # Search result page contains some invalid html that prevents html parser from returning all data.
@@ -120,7 +120,7 @@ class HDSpaceProvider(generic.TorrentProvider):
 
                 html = BeautifulSoup(data[index:], 'html5lib')
                 if not html:
-                    logger.log("No html data parsed from provider", logger.DEBUG)
+                    logger.log(u"No html data parsed from provider", logger.DEBUG)
                     continue
 
                 torrents = html.findAll('tr')
diff --git a/sickbeard/providers/hdtorrents.py b/sickbeard/providers/hdtorrents.py
index d8f53f097..4183f7026 100644
--- a/sickbeard/providers/hdtorrents.py
+++ b/sickbeard/providers/hdtorrents.py
@@ -103,7 +103,7 @@ class HDTorrentsProvider(generic.TorrentProvider):
 
                 data = self.getURL(searchURL)
                 if not data or 'please try later' in data:
-                    logger.log("No data returned from provider", logger.DEBUG)
+                    logger.log(u"No data returned from provider", logger.DEBUG)
                     continue
 
                 # Search result page contains some invalid html that prevents html parser from returning all data.
@@ -119,7 +119,7 @@ class HDTorrentsProvider(generic.TorrentProvider):
 
                 with BS4Parser(data, features=["html5lib", "permissive"]) as html:
                     if not html:
-                        logger.log("No html data parsed from provider", logger.DEBUG)
+                        logger.log(u"No html data parsed from provider", logger.DEBUG)
                         continue
 
                     empty = html.find('No torrents here')
diff --git a/sickbeard/providers/iptorrents.py b/sickbeard/providers/iptorrents.py
index b441fbdd5..bb0ffb90a 100644
--- a/sickbeard/providers/iptorrents.py
+++ b/sickbeard/providers/iptorrents.py
@@ -106,7 +106,7 @@ class IPTorrentsProvider(generic.TorrentProvider):
                     data = re.sub(r'(?im)<button.+?<[\/]button>', '', data, 0)
                     with BS4Parser(data, features=["html5lib", "permissive"]) as html:
                         if not html:
-                            logger.log("No data returned from provider", logger.DEBUG)
+                            logger.log(u"No data returned from provider", logger.DEBUG)
                             continue
 
                         if html.find(text='No Torrents Found!'):
diff --git a/sickbeard/providers/kat.py b/sickbeard/providers/kat.py
index 2614558d3..72c65f5fd 100755
--- a/sickbeard/providers/kat.py
+++ b/sickbeard/providers/kat.py
@@ -88,7 +88,7 @@ class KATProvider(generic.TorrentProvider):
                     data = self.getURL(searchURL)
                     # data = self.getURL(self.urls[('search', 'rss')[mode == 'RSS']], params=self.search_params)
                     if not data:
-                        logger.log("No data returned from provider", logger.DEBUG)
+                        logger.log(u"No data returned from provider", logger.DEBUG)
                         continue
 
                     if not data.startswith('<?xml'):
diff --git a/sickbeard/providers/newznab.py b/sickbeard/providers/newznab.py
index b3e960a64..40d447e5b 100644
--- a/sickbeard/providers/newznab.py
+++ b/sickbeard/providers/newznab.py
@@ -297,7 +297,7 @@ class NewznabProvider(generic.NZBProvider):
                 break
 
             if offset != params['offset']:
-                logger.log("Tell your newznab provider to fix their bloody newznab responses")
+                logger.log(u"Tell your newznab provider to fix their bloody newznab responses")
                 break
 
             params['offset'] += params['limit']
@@ -368,7 +368,7 @@ class NewznabCache(tvcache.TVCache):
         while (datetime.datetime.now() - self.last_search).seconds < 5:
             time.sleep(1)
 
-        logger.log("Cache update URL: %s " % rss_url, logger.DEBUG)
+        logger.log(u"Cache update URL: %s " % rss_url, logger.DEBUG)
         data = self.getRSSFeed(rss_url)
 
         self.last_search = datetime.datetime.now()
diff --git a/sickbeard/providers/rarbg.py b/sickbeard/providers/rarbg.py
index 62e60956e..384412561 100644
--- a/sickbeard/providers/rarbg.py
+++ b/sickbeard/providers/rarbg.py
@@ -165,7 +165,7 @@ class RarbgProvider(generic.TorrentProvider):
                         self.next_request = datetime.datetime.now() + datetime.timedelta(seconds=10)
 
                         if not data:
-                            logger.log("No data returned from provider", logger.DEBUG)
+                            logger.log(u"No data returned from provider", logger.DEBUG)
                             raise GetOutOfLoop
                         if re.search('ERROR', data):
                             logger.log(u"Error returned from provider", logger.DEBUG)
diff --git a/sickbeard/providers/rsstorrent.py b/sickbeard/providers/rsstorrent.py
index 070705eb3..2bdaad283 100644
--- a/sickbeard/providers/rsstorrent.py
+++ b/sickbeard/providers/rsstorrent.py
@@ -141,7 +141,7 @@ class TorrentRssProvider(generic.TorrentProvider):
             fileOut.close()
             helpers.chmodAsParent(dumpName)
         except IOError, e:
-            logger.log("Unable to save the file: %s " % repr(e), logger.ERROR)
+            logger.log(u"Unable to save the file: %s " % repr(e), logger.ERROR)
             return False
         logger.log(u"Saved custom_torrent html dump %s " % dumpName, logger.INFO)
         return True
diff --git a/sickbeard/providers/strike.py b/sickbeard/providers/strike.py
index 704b23d88..977433603 100644
--- a/sickbeard/providers/strike.py
+++ b/sickbeard/providers/strike.py
@@ -48,7 +48,7 @@ class STRIKEProvider(generic.TorrentProvider):
                 logger.log(u"Search URL: %s" %  searchURL, logger.DEBUG)
                 jdata = self.getURL(searchURL, json=True)
                 if not jdata:
-                    logger.log("No data returned from provider", logger.DEBUG)
+                    logger.log(u"No data returned from provider", logger.DEBUG)
                     return []
 
                 results = []
diff --git a/sickbeard/providers/titansoftv.py b/sickbeard/providers/titansoftv.py
index 13b3b8a39..2f160ab29 100644
--- a/sickbeard/providers/titansoftv.py
+++ b/sickbeard/providers/titansoftv.py
@@ -71,7 +71,7 @@ class TitansOfTVProvider(generic.TorrentProvider):
         parsedJSON = self.getURL(searchURL, json=True)  # do search
 
         if not parsedJSON:
-            logger.log("No data returned from provider", logger.DEBUG)
+            logger.log(u"No data returned from provider", logger.DEBUG)
             return results
 
         if self._checkAuthFromData(parsedJSON):
diff --git a/sickbeard/providers/tntvillage.py b/sickbeard/providers/tntvillage.py
index 95d3f765a..1213a1cf8 100644
--- a/sickbeard/providers/tntvillage.py
+++ b/sickbeard/providers/tntvillage.py
@@ -310,7 +310,7 @@ class TNTVillageProvider(generic.TorrentProvider):
                     logger.log(u"Search URL: %s" %  searchURL, logger.DEBUG)
                     data = self.getURL(searchURL)
                     if not data:
-                        logger.log("No data returned from provider", logger.DEBUG)
+                        logger.log(u"No data returned from provider", logger.DEBUG)
                         continue
 
                     try:
diff --git a/sickbeard/providers/torrentday.py b/sickbeard/providers/torrentday.py
index 5e8b150a7..62550dab1 100644
--- a/sickbeard/providers/torrentday.py
+++ b/sickbeard/providers/torrentday.py
@@ -115,7 +115,7 @@ class TorrentDayProvider(generic.TorrentProvider):
 
                 parsedJSON = self.getURL(self.urls['search'], post_data=post_data, json=True)
                 if not parsedJSON:
-                    logger.log("No data returned from provider", logger.DEBUG)
+                    logger.log(u"No data returned from provider", logger.DEBUG)
                     continue
 
                 try:
diff --git a/sickbeard/providers/torrentproject.py b/sickbeard/providers/torrentproject.py
index a06513479..4ae53d802 100644
--- a/sickbeard/providers/torrentproject.py
+++ b/sickbeard/providers/torrentproject.py
@@ -68,31 +68,23 @@ class TORRENTPROJECTProvider(generic.TorrentProvider):
                     leechers = helpers.tryInt(torrents[i]["leechs"], 0)
                     if seeders < self.minseed or leechers < self.minleech:
                         if mode != 'RSS':
-                            logger.log("Torrent doesn't meet minimum seeds & leechers not selecting : %s" % title, logger.DEBUG)
+                            logger.log(u"Torrent doesn't meet minimum seeds & leechers not selecting : %s" % title, logger.DEBUG)
                         continue
 
                     t_hash = torrents[i]["torrent_hash"]
                     size = int(torrents[i]["torrent_size"])
 
-                    if seeders < 10:
-                        if mode != 'RSS':
-                            logger.log("Torrent has less than 10 seeds getting dyn trackers: " + title, logger.DEBUG)
-                            trackerUrl = self.urls['api'] + "" + t_hash + "/trackers_json"
-                            jdata = self.getURL(trackerUrl, json=True)
-                            if jdata == "maintenance":
-                                download_url = "magnet:?xt=urn:btih:" + t_hash + "&dn=" + title + "&tr=udp://tracker.openbittorrent.com:80&tr=udp://tracker.coppersurfer.tk:6969&tr=udp://open.demonii.com:1337&tr=udp://tracker.leechers-paradise.org:6969&tr=udp://exodus.desync.com:6969"
-                                logger.log("Tracker url is in " + jdata + " mode, using hardcoded one" , logger.INFO)
-                            else:
-                                download_url = "magnet:?xt=urn:btih:" + t_hash + "&dn=" + title + "".join(["&tr=" + s for s in jdata])
-                                logger.log("Dyn Magnet: " + download_url, logger.DEBUG)
-                        else:
-                            download_url = "magnet:?xt=urn:btih:" + t_hash + "&dn=" + title + "&tr=udp://tracker.openbittorrent.com:80&tr=udp://tracker.coppersurfer.tk:6969&tr=udp://open.demonii.com:1337&tr=udp://tracker.leechers-paradise.org:6969&tr=udp://exodus.desync.com:6969"
-                            logger.log("Result has less than 10 seeds but not using Dyn Magnet becouse its from RSS" + title, logger.DEBUG)
-                    else:
-                        # logger.log("Torrent has more than 10 seeds using hard coded trackers", logger.DEBUG)
+                    try:
+                        assert seeders < 10
+                        assert mode is not 'RSS'
+                        logger.log(u"Torrent has less than 10 seeds getting dyn trackers: " + title, logger.DEBUG)
+                        trackerUrl = self.urls['api'] + "" + t_hash + "/trackers_json"
+                        jdata = self.getURL(trackerUrl, json=True)
+                        assert jdata is not "maintenance"
+                        download_url = "magnet:?xt=urn:btih:" + t_hash + "&dn=" + title + "".join(["&tr=" + s for s in jdata])
+                    except (Exception, AssertionError):
                         download_url = "magnet:?xt=urn:btih:" + t_hash + "&dn=" + title + "&tr=udp://tracker.openbittorrent.com:80&tr=udp://tracker.coppersurfer.tk:6969&tr=udp://open.demonii.com:1337&tr=udp://tracker.leechers-paradise.org:6969&tr=udp://exodus.desync.com:6969"
 
-
                     if not all([title, download_url]):
                         continue
 
@@ -122,7 +114,7 @@ class TORRENTPROJECTCache(tvcache.TVCache):
         self.minTime = 20
 
     def _getRSSData(self):
-        
+
         search_params = {'RSS': ['0day']}
         return {'entries': self.provider._doSearch(search_params)}
 
diff --git a/sickbeard/providers/torrentz.py b/sickbeard/providers/torrentz.py
index 2e12a02fc..ee3e7e587 100644
--- a/sickbeard/providers/torrentz.py
+++ b/sickbeard/providers/torrentz.py
@@ -69,11 +69,11 @@ class TORRENTZProvider(generic.TorrentProvider):
                 logger.log(search_url)
                 data = self.getURL(search_url)
                 if not data:
-                    logger.log('Seems to be down right now!')
+                    logger.log(u'Seems to be down right now!')
                     continue
 
                 if not data.startswith("<?xml"):
-                    logger.log('Wrong data returned from: ' + search_url, logger.DEBUG)
+                    logger.log(u'Wrong data returned from: ' + search_url, logger.DEBUG)
                     continue
 
                 if not data.startswith('<?xml'):
diff --git a/sickbeard/providers/transmitthenet.py b/sickbeard/providers/transmitthenet.py
index 52dcefb66..2049b638d 100644
--- a/sickbeard/providers/transmitthenet.py
+++ b/sickbeard/providers/transmitthenet.py
@@ -98,7 +98,7 @@ class TransmitTheNetProvider(generic.TorrentProvider):
                 logger.log(u"Search URL: %s" %  searchURL, logger.DEBUG)
 
                 if not data:
-                    logger.log("No data returned from provider", logger.DEBUG)
+                    logger.log(u"No data returned from provider", logger.DEBUG)
                     continue
 
                 try:
diff --git a/sickbeard/providers/tvchaosuk.py b/sickbeard/providers/tvchaosuk.py
index c7f9bd919..dee2176c4 100644
--- a/sickbeard/providers/tvchaosuk.py
+++ b/sickbeard/providers/tvchaosuk.py
@@ -139,7 +139,7 @@ class TVChaosUKProvider(generic.TorrentProvider):
                 # url_searched = self.urls['search'] + '?' + urlencode(self.search_params)
 
                 if not data:
-                    logger.log("No data returned from provider", logger.DEBUG)
+                    logger.log(u"No data returned from provider", logger.DEBUG)
                     continue
 
                 with BS4Parser(data) as html:
diff --git a/sickbeard/sab.py b/sickbeard/sab.py
index 70ee848d6..3c3067ddd 100644
--- a/sickbeard/sab.py
+++ b/sickbeard/sab.py
@@ -77,7 +77,7 @@ def sendNZB(nzb):
         if nzb.provider.getID() == 'newzbin':
             id = nzb.provider.getIDFromURL(nzb.url)
             if not id:
-                logger.log("Unable to send NZB to sab, can't find ID in URL " + str(nzb.url), logger.ERROR)
+                logger.log(u"Unable to send NZB to sab, can't find ID in URL " + str(nzb.url), logger.ERROR)
                 return False
             params['mode'] = 'addid'
             params['name'] = id
diff --git a/sickbeard/search.py b/sickbeard/search.py
index 1eba3b0b7..8149563f2 100644
--- a/sickbeard/search.py
+++ b/sickbeard/search.py
@@ -215,7 +215,7 @@ def pickBestResult(results, show):
             if not show.release_groups.is_valid(cur_result):
                 continue
 
-        logger.log("Quality of " + cur_result.name + " is " + Quality.qualityStrings[cur_result.quality])
+        logger.log(u"Quality of " + cur_result.name + " is " + Quality.qualityStrings[cur_result.quality])
 
         anyQualities, bestQualities = Quality.splitQuality(show.quality)
 
diff --git a/sickbeard/search_queue.py b/sickbeard/search_queue.py
index 48777c2e8..32738b930 100644
--- a/sickbeard/search_queue.py
+++ b/sickbeard/search_queue.py
@@ -126,13 +126,13 @@ class SearchQueue(generic_queue.GenericQueue):
 class DailySearchQueueItem(generic_queue.QueueItem):
     def __init__(self):
         self.success = None
-        generic_queue.QueueItem.__init__(self, 'Daily Search', DAILY_SEARCH)
+        generic_queue.QueueItem.__init__(self, u'Daily Search', DAILY_SEARCH)
 
     def run(self):
         generic_queue.QueueItem.run(self)
 
         try:
-            logger.log("Beginning daily search for new episodes")
+            logger.log(u"Beginning daily search for new episodes")
             foundResults = search.searchForNeededEpisodes()
 
             if not len(foundResults):
@@ -158,7 +158,7 @@ class DailySearchQueueItem(generic_queue.QueueItem):
 
 class ManualSearchQueueItem(generic_queue.QueueItem):
     def __init__(self, show, segment, downCurQuality=False):
-        generic_queue.QueueItem.__init__(self, 'Manual Search', MANUAL_SEARCH)
+        generic_queue.QueueItem.__init__(self, u'Manual Search', MANUAL_SEARCH)
         self.priority = generic_queue.QueuePriorities.HIGH
         self.name = 'MANUAL-' + str(show.indexerid)
         self.success = None
@@ -171,7 +171,7 @@ class ManualSearchQueueItem(generic_queue.QueueItem):
         generic_queue.QueueItem.run(self)
 
         try:
-            logger.log("Beginning manual search for: [" + self.segment.prettyName() + "]")
+            logger.log(u"Beginning manual search for: [" + self.segment.prettyName() + "]")
             self.started = True
 
             searchResult = search.searchProviders(self.show, [self.segment], True, self.downCurQuality)
@@ -204,7 +204,7 @@ class ManualSearchQueueItem(generic_queue.QueueItem):
 
 class BacklogQueueItem(generic_queue.QueueItem):
     def __init__(self, show, segment):
-        generic_queue.QueueItem.__init__(self, 'Backlog', BACKLOG_SEARCH)
+        generic_queue.QueueItem.__init__(self, u'Backlog', BACKLOG_SEARCH)
         self.priority = generic_queue.QueuePriorities.LOW
         self.name = 'BACKLOG-' + str(show.indexerid)
         self.success = None
@@ -216,7 +216,7 @@ class BacklogQueueItem(generic_queue.QueueItem):
 
         if not self.show.paused:
             try:
-                logger.log("Beginning backlog search for: [" + self.show.name + "]")
+                logger.log(u"Beginning backlog search for: [" + self.show.name + "]")
                 searchResult = search.searchProviders(self.show, self.segment, False)
 
                 if searchResult:
@@ -237,7 +237,7 @@ class BacklogQueueItem(generic_queue.QueueItem):
 
 class FailedQueueItem(generic_queue.QueueItem):
     def __init__(self, show, segment, downCurQuality=False):
-        generic_queue.QueueItem.__init__(self, 'Retry', FAILED_SEARCH)
+        generic_queue.QueueItem.__init__(self, u'Retry', FAILED_SEARCH)
         self.priority = generic_queue.QueuePriorities.HIGH
         self.name = 'RETRY-' + str(show.indexerid)
         self.show = show
@@ -263,7 +263,7 @@ class FailedQueueItem(generic_queue.QueueItem):
                     history.logFailed(epObj, release, provider)
 
                 failed_history.revertEpisode(epObj)
-                logger.log("Beginning failed download search for: [" + epObj.prettyName() + "]")
+                logger.log(u"Beginning failed download search for: [" + epObj.prettyName() + "]")
 
             # If it is wanted, self.downCurQuality doesnt matter
             # if it isnt wanted, we need to make sure to not overwrite the existing ep that we reverted to!
diff --git a/sickbeard/showUpdater.py b/sickbeard/showUpdater.py
index b55ab3dde..d6befb61a 100644
--- a/sickbeard/showUpdater.py
+++ b/sickbeard/showUpdater.py
@@ -75,7 +75,7 @@ class ShowUpdater:
                     try:
                         piList.append(sickbeard.showQueueScheduler.action.updateShow(curShow, True))  # @UndefinedVariable
                     except CantUpdateShowException as e:
-                        logger.log("Unable to update show: {0}".format(str(e)),logger.DEBUG)
+                        logger.log(u"Unable to update show: {0}".format(str(e)),logger.DEBUG)
                 else:
                     logger.log(
                         u"Not updating episodes for show " + curShow.name + " because it's marked as ended and last/next episode is not within the grace period.",
diff --git a/sickbeard/subtitles.py b/sickbeard/subtitles.py
index 06b708427..248d63326 100644
--- a/sickbeard/subtitles.py
+++ b/sickbeard/subtitles.py
@@ -158,7 +158,7 @@ def downloadSubtitles(subtitles_info):
         new_subtitles = frozenset(current_subtitles).difference(existing_subtitles)
 
     except Exception:
-        logger.log("Error occurred when downloading subtitles for: %s" % video_path)
+        logger.log(u"Error occurred when downloading subtitles for: %s" % video_path)
         logger.log(traceback.format_exc(), logger.ERROR)
         return (existing_subtitles, None)
 
@@ -174,12 +174,12 @@ def save_subtitles(video, subtitles, single=False, directory=None):
     for subtitle in subtitles:
         # check content
         if subtitle.content is None:
-            logger.log("Skipping subtitle for %s: no content" % video.name, logger.DEBUG)
+            logger.log(u"Skipping subtitle for %s: no content" % video.name, logger.DEBUG)
             continue
 
         # check language
         if subtitle.language in set(s.language for s in saved_subtitles):
-            logger.log("Skipping subtitle for %s: language already saved" % video.name, logger.DEBUG)
+            logger.log(u"Skipping subtitle for %s: language already saved" % video.name, logger.DEBUG)
             continue
 
         # create subtitle path
@@ -188,7 +188,7 @@ def save_subtitles(video, subtitles, single=False, directory=None):
             subtitle_path = os.path.join(directory, os.path.split(subtitle_path)[1])
 
         # save content as is or in the specified encoding
-        logger.log("Saving subtitle for %s to %s" % (video.name, subtitle_path), logger.DEBUG)
+        logger.log(u"Saving subtitle for %s to %s" % (video.name, subtitle_path), logger.DEBUG)
         if subtitle.encoding:
             with io.open(subtitle_path, 'w', encoding=subtitle.encoding) as f:
                 f.write(subtitle.text)
@@ -300,20 +300,20 @@ def getEmbeddedLanguages(video_path):
                         try:
                             embedded_subtitle_languages.add(Language.fromalpha3b(st.language))
                         except BabelfishError:
-                            logger.log('Embedded subtitle track is not a valid language', logger.DEBUG)
+                            logger.log(u'Embedded subtitle track is not a valid language', logger.DEBUG)
                             embedded_subtitle_languages.add(Language('und'))
                     elif st.name:
                         try:
                             embedded_subtitle_languages.add(Language.fromname(st.name))
                         except BabelfishError:
-                            logger.log('Embedded subtitle track is not a valid language', logger.DEBUG)
+                            logger.log(u'Embedded subtitle track is not a valid language', logger.DEBUG)
                             embedded_subtitle_languages.add(Language('und'))
                     else:
                         embedded_subtitle_languages.add(Language('und'))
             else:
-                logger.log('MKV has no subtitle track', logger.DEBUG)
+                logger.log(u'MKV has no subtitle track', logger.DEBUG)
     except MalformedMKVError:
-        logger.log('MKV seems to be malformed ( %s ), ignoring embedded subtitles' % video_path, logger.INFO)
+        logger.log(u'MKV seems to be malformed ( %s ), ignoring embedded subtitles' % video_path, logger.INFO)
 
     return embedded_subtitle_languages
 
@@ -381,7 +381,7 @@ class SubtitlesFinder():
             'AND e.location != ""', [today, wantedLanguages(True)])
 
         if len(sqlResults) == 0:
-            logger.log('No subtitles to download', logger.INFO)
+            logger.log(u'No subtitles to download', logger.INFO)
             return
 
         rules = self._getRules()
@@ -389,7 +389,7 @@ class SubtitlesFinder():
         for epToSub in sqlResults:
 
             if not ek(os.path.isfile, epToSub['location']):
-                logger.log('Episode file does not exist, cannot download subtitles for episode %dx%d of show %s' % (epToSub['season'], epToSub['episode'], epToSub['show_name']), logger.DEBUG)
+                logger.log(u'Episode file does not exist, cannot download subtitles for episode %dx%d of show %s' % (epToSub['season'], epToSub['episode'], epToSub['show_name']), logger.DEBUG)
                 continue
 
             # Old shows rule
@@ -398,7 +398,7 @@ class SubtitlesFinder():
                 # Recent shows rule
                     (epToSub['airdate_daydiff'] <= 7 and epToSub['searchcount'] < 7 and now - datetime.datetime.strptime(epToSub['lastsearch'], dateTimeFormat) > datetime.timedelta(hours=rules['new'][epToSub['searchcount']]))):
 
-                logger.log('Downloading subtitles for episode %dx%d of show %s' % (epToSub['season'], epToSub['episode'], epToSub['show_name']), logger.DEBUG)
+                logger.log(u'Downloading subtitles for episode %dx%d of show %s' % (epToSub['season'], epToSub['episode'], epToSub['show_name']), logger.DEBUG)
 
                 showObj = sickbeard.helpers.findCertainShow(sickbeard.showList, int(epToSub['showid']))
                 if not showObj:
diff --git a/sickbeard/tv.py b/sickbeard/tv.py
index be0e3b2ee..e7339448f 100644
--- a/sickbeard/tv.py
+++ b/sickbeard/tv.py
@@ -261,7 +261,7 @@ class TVShow(object):
                 logger.log(
                     "Found episode by absolute_number %s which is S%02dE%02d" % (absolute_number, season or 0, episode or 0), logger.DEBUG)
             elif len(sqlResults) > 1:
-                logger.log("Multiple entries for absolute number: " + str(
+                logger.log(u"Multiple entries for absolute number: " + str(
                     absolute_number) + " in show: " + self.name + " found ", logger.ERROR)
                 return None
             else:
@@ -453,7 +453,7 @@ class TVShow(object):
                     try:
                         curEpisode.refreshSubtitles()
                     except Exception:
-                        logger.log("%s: Could not refresh subtitles" % self.indexerid, logger.ERROR)
+                        logger.log(u"%s: Could not refresh subtitles" % self.indexerid, logger.ERROR)
                         logger.log(traceback.format_exc(), logger.DEBUG)
 
                 sql_l.append(curEpisode.get_sql())
@@ -573,7 +573,7 @@ class TVShow(object):
                     if not ep:
                         raise EpisodeNotFoundException
                 except EpisodeNotFoundException:
-                    logger.log("%s: %s object for S%02dE%02d is incomplete, skipping this episode" % (self.indexerid, sickbeard.indexerApi(self.indexer).name, season or 0, episode or 0))
+                    logger.log(u"%s: %s object for S%02dE%02d is incomplete, skipping this episode" % (self.indexerid, sickbeard.indexerApi(self.indexer).name, season or 0, episode or 0))
                     continue
                 else:
                     try:
@@ -583,7 +583,7 @@ class TVShow(object):
                         continue
 
                 with ep.lock:
-                    logger.log("%s: Loading info from %s for episode S%02dE%02d" % (self.indexerid, sickbeard.indexerApi(self.indexer).name, season or 0, episode or 0), logger.DEBUG)
+                    logger.log(u"%s: Loading info from %s for episode S%02dE%02d" % (self.indexerid, sickbeard.indexerApi(self.indexer).name, season or 0, episode or 0), logger.DEBUG)
                     ep.loadFromIndexer(season, episode, tvapi=t)
 
                     sql_l.append(ep.get_sql())
@@ -640,7 +640,7 @@ class TVShow(object):
             return None
 
         if not len(parse_result.episode_numbers):
-            logger.log("parse_result: " + str(parse_result))
+            logger.log(u"parse_result: " + str(parse_result))
             logger.log(u"No episode number found in " + file + ", ignoring it", logger.WARNING)
             return None
 
@@ -654,7 +654,7 @@ class TVShow(object):
 
             episode = int(curEpNum)
 
-            logger.log("%s: %s parsed to %s S%02dE%02d" % (self.indexerid, file, self.name, season or 0, episode or 0), logger.DEBUG)
+            logger.log(u"%s: %s parsed to %s S%02dE%02d" % (self.indexerid, file, self.name, season or 0, episode or 0), logger.DEBUG)
 
             checkQualityAgain = False
             same_file = False
@@ -1021,7 +1021,7 @@ class TVShow(object):
                 file_attribute = ek(os.stat, self.location)[0]
                 if not file_attribute & stat.S_IWRITE:
                     # File is read-only, so make it writeable
-                    logger.log('Attempting to make writeable the read only folder %s' % self._location, logger.DEBUG)
+                    logger.log(u'Attempting to make writeable the read only folder %s' % self._location, logger.DEBUG)
                     try:
                         ek(os.chmod, self.location, stat.S_IWRITE)
                     except Exception:
@@ -1125,19 +1125,19 @@ class TVShow(object):
             logger.log(str(self.indexerid) + ": Show dir doesn't exist, can't download subtitles", logger.DEBUG)
             return
 
-        logger.log("%s: Downloading subtitles" % self.indexerid, logger.DEBUG)
+        logger.log(u"%s: Downloading subtitles" % self.indexerid, logger.DEBUG)
 
         try:
             episodes = self.getAllEpisodes(has_location=True)
             if not episodes:
-                logger.log("%s: No episodes to download subtitles for %s" % (self.indexerid, self.name), logger.DEBUG)
+                logger.log(u"%s: No episodes to download subtitles for %s" % (self.indexerid, self.name), logger.DEBUG)
                 return
 
             for episode in episodes:
                 episode.downloadSubtitles(force=force)
 
         except Exception:
-            logger.log("%s: Error occurred when downloading subtitles for %s" % (self.indexerid, self.name), logger.DEBUG)
+            logger.log(u"%s: Error occurred when downloading subtitles for %s" % (self.indexerid, self.name), logger.DEBUG)
             logger.log(traceback.format_exc(), logger.ERROR)
 
     def saveToDB(self, forceSave=False):
diff --git a/sickbeard/tvcache.py b/sickbeard/tvcache.py
index a7380f1ef..6c6ce5677 100644
--- a/sickbeard/tvcache.py
+++ b/sickbeard/tvcache.py
@@ -137,7 +137,7 @@ class TVCache(object):
         handlers = []
 
         if sickbeard.PROXY_SETTING:
-            logger.log("Using global proxy for url: " + url, logger.DEBUG)
+            logger.log(u"Using global proxy for url: " + url, logger.DEBUG)
             scheme, address = urllib2.splittype(sickbeard.PROXY_SETTING)
             address = sickbeard.PROXY_SETTING if scheme else 'http://' + sickbeard.PROXY_SETTING
             handlers = [urllib2.ProxyHandler({'http': address, 'https': address})]
diff --git a/sickbeard/versionChecker.py b/sickbeard/versionChecker.py
index 257525eed..b3dbf50cd 100644
--- a/sickbeard/versionChecker.py
+++ b/sickbeard/versionChecker.py
@@ -105,7 +105,7 @@ class CheckVersion(object):
                 ui.notifications.message('Backup', 'Config backup failed, aborting update')
                 return False
         except Exception as e:
-            logger.log('Update: Config backup failed. Error: %s' % ex(e), logger.ERROR)
+            logger.log(u'Update: Config backup failed. Error: %s' % ex(e), logger.ERROR)
             ui.notifications.message('Backup', 'Config backup failed, aborting update')
             return False
 
diff --git a/sickbeard/webapi.py b/sickbeard/webapi.py
index 0023fe487..96a3c1259 100644
--- a/sickbeard/webapi.py
+++ b/sickbeard/webapi.py
@@ -2777,7 +2777,7 @@ class CMD_ShowUpdate(ApiCall):
             sickbeard.showQueueScheduler.action.updateShow(showObj, True)  # @UndefinedVariable
             return _responds(RESULT_SUCCESS, msg=str(showObj.name) + " has queued to be updated")
         except CantUpdateShowException as e:
-            logger.log("API::Unable to update show: {0}".format(str(e)), logger.DEBUG)
+            logger.log(u"API::Unable to update show: {0}".format(str(e)), logger.DEBUG)
             return _responds(RESULT_FAILURE, msg="Unable to update " + str(showObj.name))
 
 
diff --git a/sickbeard/webserve.py b/sickbeard/webserve.py
index 75829966c..782c460ea 100644
--- a/sickbeard/webserve.py
+++ b/sickbeard/webserve.py
@@ -247,7 +247,7 @@ class WebHandler(BaseHandler):
             self.finish(results)
 
         except Exception:
-            logger.log('Failed doing webui request "%s": %s' % (route, traceback.format_exc()), logger.DEBUG)
+            logger.log(u'Failed doing webui request "%s": %s' % (route, traceback.format_exc()), logger.DEBUG)
             raise HTTPError(404)
 
     @run_on_executor
@@ -261,7 +261,7 @@ class WebHandler(BaseHandler):
             result = function(**kwargs)
             return result
         except Exception:
-            logger.log('Failed doing webui callback: %s' % (traceback.format_exc()), logger.ERROR)
+            logger.log(u'Failed doing webui callback: %s' % (traceback.format_exc()), logger.ERROR)
             raise
 
     # post uses get method
@@ -291,9 +291,9 @@ class LoginHandler(BaseHandler):
         if api_key:
             remember_me = int(self.get_argument('remember_me', default=0) or 0)
             self.set_secure_cookie('sickrage_user', api_key, expires_days=30 if remember_me > 0 else None)
-            logger.log('User logged into the SickRage web interface', logger.INFO)
+            logger.log(u'User logged into the SickRage web interface', logger.INFO)
         else:
-            logger.log('User attempted a failed login to the SickRage web interface from IP: ' + self.request.remote_ip, logger.WARNING)
+            logger.log(u'User attempted a failed login to the SickRage web interface from IP: ' + self.request.remote_ip, logger.WARNING)
 
         self.redirect('/' + sickbeard.DEFAULT_PAGE +'/')
 
@@ -321,7 +321,7 @@ class KeyHandler(RequestHandler):
 
             self.finish({'success': api_key is not None, 'api_key': api_key})
         except Exception:
-            logger.log('Failed doing key request: %s' % (traceback.format_exc()), logger.ERROR)
+            logger.log(u'Failed doing key request: %s' % (traceback.format_exc()), logger.ERROR)
             self.finish({'success': False, 'error': 'Failed returning results'})
 
 
@@ -1354,7 +1354,7 @@ class Home(WebRoot):
                     except Exception as e:
                         anidb_failed = True
                         ui.notifications.error('Unable to retreive Fansub Groups from AniDB.')
-                        logger.log('Unable to retreive Fansub Groups from AniDB. Error is {0}'.format(str(e)), logger.DEBUG)
+                        logger.log(u'Unable to retreive Fansub Groups from AniDB. Error is {0}'.format(str(e)), logger.DEBUG)
 
             with showObj.lock:
                 show = showObj
@@ -1906,7 +1906,7 @@ class Home(WebRoot):
             showObj = sickbeard.helpers.findCertainShow(sickbeard.showList, int(searchThread.show.indexerid))
 
             if not showObj:
-                logger.log('No Show Object found for show with indexerID: ' + str(searchThread.show.indexerid), logger.ERROR)
+                logger.log(u'No Show Object found for show with indexerID: ' + str(searchThread.show.indexerid), logger.ERROR)
                 return results
 
             if isinstance(searchThread, sickbeard.search_queue.ManualSearchQueueItem):
@@ -2240,7 +2240,7 @@ class HomeAddShows(Home):
             lINDEXER_API_PARMS['custom_ui'] = classes.AllShowsListUI
             t = sickbeard.indexerApi(indexer).indexer(**lINDEXER_API_PARMS)
 
-            logger.log("Searching for Show with searchterm: %s on Indexer: %s" % (
+            logger.log(u"Searching for Show with searchterm: %s on Indexer: %s" % (
                 search_term, sickbeard.indexerApi(indexer).name), logger.DEBUG)
             try:
                 # add search results
@@ -2601,7 +2601,7 @@ class HomeAddShows(Home):
         series_pieces = whichSeries.split('|')
         if (whichSeries and rootDir) or (whichSeries and fullShowPath and len(series_pieces) > 1):
             if len(series_pieces) < 6:
-                logger.log("Unable to add show due to show selection. Not anough arguments: %s" % (repr(series_pieces)),
+                logger.log(u"Unable to add show due to show selection. Not anough arguments: %s" % (repr(series_pieces)),
                            logger.ERROR)
                 ui.notifications.error("Unknown error. Unable to add show due to problem with show selection.")
                 return self.redirect('/home/addShows/existingShows/')
diff --git a/tests/issue_submitter_tests.py b/tests/issue_submitter_tests.py
index cd318f404..ea8a7a495 100644
--- a/tests/issue_submitter_tests.py
+++ b/tests/issue_submitter_tests.py
@@ -17,7 +17,6 @@
 # You should have received a copy of the GNU General Public License
 # along with SickRage.  If not, see <http://www.gnu.org/licenses/>.
 
-from __future__ import with_statement
 
 import sys, os.path
 
@@ -33,7 +32,7 @@ def error():
     try:
         raise Exception('FAKE EXCEPTION')
     except Exception as e:
-        logger.log("FAKE ERROR: " + ex(e), logger.ERROR)
+        logger.log(u"FAKE ERROR: " + ex(e), logger.ERROR)
         logger.submit_errors()
         raise
 
diff --git a/tests/test_lib.py b/tests/test_lib.py
index 0fc43d5b8..dd28942dc 100644
--- a/tests/test_lib.py
+++ b/tests/test_lib.py
@@ -17,7 +17,6 @@
 # You should have received a copy of the GNU General Public License
 # along with SickRage.  If not, see <http://www.gnu.org/licenses/>.
 
-from __future__ import with_statement
 
 import sys, os.path
 sys.path.insert(1, os.path.abspath(os.path.join(os.path.dirname(__file__), '../lib')))
diff --git a/tests/torrent_tests.py b/tests/torrent_tests.py
index 73b6ff289..23a60edd6 100644
--- a/tests/torrent_tests.py
+++ b/tests/torrent_tests.py
@@ -17,7 +17,6 @@
 # You should have received a copy of the GNU General Public License
 # along with SickRage.  If not, see <http://www.gnu.org/licenses/>.
 
-from __future__ import with_statement
 
 import sys, os.path
 sys.path.insert(1, os.path.abspath(os.path.join(os.path.dirname(__file__), '../lib')))
diff --git a/tests/xem_tests.py b/tests/xem_tests.py
index 0aa22c1b4..97fa2d425 100644
--- a/tests/xem_tests.py
+++ b/tests/xem_tests.py
@@ -17,7 +17,6 @@
 # You should have received a copy of the GNU General Public License
 # along with SickRage.  If not, see <http://www.gnu.org/licenses/>.
 
-from __future__ import with_statement
 
 import sys, os.path
 sys.path.insert(1, os.path.abspath(os.path.join(os.path.dirname(__file__), '../lib')))
-- 
GitLab


From 86f0c80f3e92df1aedbbbc2e1983d594aa5dfc92 Mon Sep 17 00:00:00 2001
From: Dustyn Gibson <miigotu@gmail.com>
Date: Fri, 6 Nov 2015 22:34:33 -0800
Subject: [PATCH 062/215] Replace all mode != 'RSS' with mode is not 'RSS', etc
 now getURL returns the unicode instead of content Remove hacky escaping in
 kat, ettv, torrentz Remove post request gunzipping (since glype is gone)

---
 sickbeard/helpers.py                   | 21 +--------------------
 sickbeard/network_timezones.py         |  2 +-
 sickbeard/providers/alpharatio.py      |  6 +++---
 sickbeard/providers/bitcannon.py       |  4 ++--
 sickbeard/providers/bitsoup.py         |  6 +++---
 sickbeard/providers/bluetigers.py      |  6 +++---
 sickbeard/providers/btdigg.py          |  6 +++---
 sickbeard/providers/cpasbien.py        |  4 ++--
 sickbeard/providers/extratorrent.py    | 10 +++++-----
 sickbeard/providers/fnt.py             |  6 +++---
 sickbeard/providers/frenchtorrentdb.py |  6 +++---
 sickbeard/providers/freshontv.py       |  6 +++---
 sickbeard/providers/gftracker.py       |  6 +++---
 sickbeard/providers/hdspace.py         |  8 ++++----
 sickbeard/providers/hdtorrents.py      |  8 ++++----
 sickbeard/providers/hounddawgs.py      |  6 +++---
 sickbeard/providers/iptorrents.py      |  8 ++++----
 sickbeard/providers/kat.py             | 23 +++++++++++------------
 sickbeard/providers/libertalia.py      |  6 +++---
 sickbeard/providers/morethantv.py      |  6 +++---
 sickbeard/providers/nextgen.py         |  6 +++---
 sickbeard/providers/nyaatorrents.py    | 10 +++++-----
 sickbeard/providers/pretome.py         |  6 +++---
 sickbeard/providers/rarbg.py           |  6 +++---
 sickbeard/providers/scc.py             |  8 ++++----
 sickbeard/providers/scenetime.py       |  6 +++---
 sickbeard/providers/speedcd.py         |  6 +++---
 sickbeard/providers/strike.py          |  6 +++---
 sickbeard/providers/t411.py            | 16 ++++++++--------
 sickbeard/providers/thepiratebay.py    | 12 ++++++------
 sickbeard/providers/titansoftv.py      |  2 +-
 sickbeard/providers/tntvillage.py      | 10 +++++-----
 sickbeard/providers/tokyotoshokan.py   |  2 +-
 sickbeard/providers/torrentbytes.py    |  6 +++---
 sickbeard/providers/torrentday.py      |  6 +++---
 sickbeard/providers/torrentleech.py    |  6 +++---
 sickbeard/providers/torrentproject.py  |  6 +++---
 sickbeard/providers/torrentz.py        |  6 +++---
 sickbeard/providers/transmitthenet.py  |  6 +++---
 sickbeard/providers/tvchaosuk.py       |  6 +++---
 sickbeard/providers/xthor.py           |  6 +++---
 41 files changed, 139 insertions(+), 159 deletions(-)

diff --git a/sickbeard/helpers.py b/sickbeard/helpers.py
index c9de23eb6..e29c7ecca 100644
--- a/sickbeard/helpers.py
+++ b/sickbeard/helpers.py
@@ -48,20 +48,6 @@ import certifi
 from contextlib import closing
 from socket import timeout as SocketTimeout
 
-
-try:
-    from io import BytesIO as _StringIO
-except ImportError:
-    try:
-        from cStringIO import StringIO as _StringIO
-    except ImportError:
-        from StringIO import StringIO as _StringIO
-
-try:
-    import gzip
-except ImportError:
-    gzip = None
-
 from sickbeard import logger, classes
 from sickbeard.common import USER_AGENT
 from sickbeard.common import mediaExtensions
@@ -1649,12 +1635,7 @@ def getURL(url, post_data=None, params=None, headers=None, timeout=30, session=N
         logger.log(traceback.format_exc(), logger.WARNING)
         return None
 
-    attempts = 0
-    while gzip and len(resp.content) > 1 and resp.content[0] == '\x1f' and resp.content[1] == '\x8b' and attempts < 3:
-        attempts += 1
-        resp._content = gzip.GzipFile(fileobj=_StringIO(resp.content)).read()
-
-    return resp.content if not json else resp.json()
+    return resp.text if not json else resp.json()
 
 
 def download_file(url, filename, session=None, headers=None):
diff --git a/sickbeard/network_timezones.py b/sickbeard/network_timezones.py
index 78511be8d..312ea3127 100644
--- a/sickbeard/network_timezones.py
+++ b/sickbeard/network_timezones.py
@@ -53,7 +53,7 @@ def update_network_dict():
     d = {}
     try:
         for line in url_data.splitlines():
-            (key, val) = line.decode('utf-8').strip().rsplit(u':', 1)
+            (key, val) = line.strip().rsplit(u':', 1)
             if key is None or val is None:
                 continue
             d[key] = val
diff --git a/sickbeard/providers/alpharatio.py b/sickbeard/providers/alpharatio.py
index 9d73f9ee9..cd67e4c9e 100644
--- a/sickbeard/providers/alpharatio.py
+++ b/sickbeard/providers/alpharatio.py
@@ -83,7 +83,7 @@ class AlphaRatioProvider(generic.TorrentProvider):
             logger.log(u"Search Mode: %s" % mode, logger.DEBUG)
             for search_string in search_strings[mode]:
 
-                if mode != 'RSS':
+                if mode is not 'RSS':
                     logger.log(u"Search string: %s " % search_string, logger.DEBUG)
 
                 searchURL = self.urls['search'] % (search_string, self.catagories)
@@ -123,12 +123,12 @@ class AlphaRatioProvider(generic.TorrentProvider):
 
                             # Filter unseeded torrent
                             if seeders < self.minseed or leechers < self.minleech:
-                                if mode != 'RSS':
+                                if mode is not 'RSS':
                                     logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG)
                                 continue
 
                             item = title, download_url, size, seeders, leechers
-                            if mode != 'RSS':
+                            if mode is not 'RSS':
                                 logger.log(u"Found result: %s " % title, logger.DEBUG)
 
                             items[mode].append(item)
diff --git a/sickbeard/providers/bitcannon.py b/sickbeard/providers/bitcannon.py
index 2de19044c..29f4c0525 100644
--- a/sickbeard/providers/bitcannon.py
+++ b/sickbeard/providers/bitcannon.py
@@ -75,7 +75,7 @@ class BitCannonProvider(generic.TorrentProvider):
 
                     # Filter unseeded torrent
                     if seeders < self.minseed or leechers < self.minleech:
-                        if mode != 'RSS':
+                        if mode is not 'RSS':
                             logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG)
                         continue
 
@@ -83,7 +83,7 @@ class BitCannonProvider(generic.TorrentProvider):
                     download_url = 'magnet:?xt=urn:btih:%s&dn=%s&tr=%s' % (info_hash, quote_plus(title.encode('utf-8')), u'&tr='.join([quote_plus(x.encode('utf-8')) for x in trackers]))
 
                     item = title, download_url, size, seeders, leechers
-                    if mode != 'RSS':
+                    if mode is not 'RSS':
                         logger.log(u"Found result: %s " % title, logger.DEBUG)
 
                     items[mode].append(item)
diff --git a/sickbeard/providers/bitsoup.py b/sickbeard/providers/bitsoup.py
index e25855c9d..162f7b3bc 100644
--- a/sickbeard/providers/bitsoup.py
+++ b/sickbeard/providers/bitsoup.py
@@ -89,7 +89,7 @@ class BitSoupProvider(generic.TorrentProvider):
             logger.log(u"Search Mode: %s" % mode, logger.DEBUG)
             for search_string in search_strings[mode]:
 
-                if mode != 'RSS':
+                if mode is not 'RSS':
                     logger.log(u"Search string: %s " % search_string, logger.DEBUG)
 
                 self.search_params['search'] = search_string
@@ -128,12 +128,12 @@ class BitSoupProvider(generic.TorrentProvider):
 
                                 # Filter unseeded torrent
                             if seeders < self.minseed or leechers < self.minleech:
-                                if mode != 'RSS':
+                                if mode is not 'RSS':
                                     logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG)
                                 continue
 
                             item = title, download_url, size, seeders, leechers
-                            if mode != 'RSS':
+                            if mode is not 'RSS':
                                 logger.log(u"Found result: %s " % title, logger.DEBUG)
 
                             items[mode].append(item)
diff --git a/sickbeard/providers/bluetigers.py b/sickbeard/providers/bluetigers.py
index a3416f3a7..4c431edac 100644
--- a/sickbeard/providers/bluetigers.py
+++ b/sickbeard/providers/bluetigers.py
@@ -88,7 +88,7 @@ class BLUETIGERSProvider(generic.TorrentProvider):
             logger.log(u"Search Mode: %s" % mode, logger.DEBUG)
             for search_string in search_strings[mode]:
 
-                if mode != 'RSS':
+                if mode is not 'RSS':
                     logger.log(u"Search string: %s " % search_string, logger.DEBUG)
 
                 self.search_params['search'] = search_string
@@ -120,12 +120,12 @@ class BLUETIGERSProvider(generic.TorrentProvider):
 
                                 # Filter unseeded torrent
                                 # if seeders < self.minseed or leechers < self.minleech:
-                                #    if mode != 'RSS':
+                                #    if mode is not 'RSS':
                                 #        logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG)
                                 #    continue
 
                                 item = title, download_url, size, seeders, leechers
-                                if mode != 'RSS':
+                                if mode is not 'RSS':
                                     logger.log(u"Found result: %s " % title, logger.DEBUG)
 
                                 items[mode].append(item)
diff --git a/sickbeard/providers/btdigg.py b/sickbeard/providers/btdigg.py
index 19f2f12ba..70ee530ed 100644
--- a/sickbeard/providers/btdigg.py
+++ b/sickbeard/providers/btdigg.py
@@ -47,7 +47,7 @@ class BTDIGGProvider(generic.TorrentProvider):
             logger.log(u"Search Mode: %s" % mode, logger.DEBUG)
             for search_string in search_strings[mode]:
 
-                if mode != 'RSS':
+                if mode is not 'RSS':
                     logger.log(u"Search string: %s" % search_string, logger.DEBUG)
 
                 searchURL = self.urls['api'] + "api/private-341ada3245790954/s02?q=" + search_string + "&p=0&order=1"
@@ -72,12 +72,12 @@ class BTDIGGProvider(generic.TorrentProvider):
 
                         # Filter unseeded torrent
                         # if seeders < self.minseed or leechers < self.minleech:
-                        #    if mode != 'RSS':
+                        #    if mode is not 'RSS':
                         #        logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG)
                         #    continue
 
                         item = title, download_url, size, seeders, leechers
-                        if mode != 'RSS':
+                        if mode is not 'RSS':
                             logger.log(u"Found result: %s" % title, logger.DEBUG)
 
                         items[mode].append(item)
diff --git a/sickbeard/providers/cpasbien.py b/sickbeard/providers/cpasbien.py
index e91160f8d..67641af00 100644
--- a/sickbeard/providers/cpasbien.py
+++ b/sickbeard/providers/cpasbien.py
@@ -49,7 +49,7 @@ class CpasbienProvider(generic.TorrentProvider):
             logger.log(u"Search Mode: %s" % mode, logger.DEBUG)
             for search_string in search_params[mode]:
 
-                if mode != 'RSS':
+                if mode is not 'RSS':
                     logger.log(u"Search string: %s " % search_string, logger.DEBUG)
 
                 searchURL = self.url + '/recherche/'+search_string.replace('.', '-') + '.html'
@@ -101,7 +101,7 @@ class CpasbienProvider(generic.TorrentProvider):
                                 continue
 
                             item = title, download_url, size, seeders, leechers
-                            if mode != 'RSS':
+                            if mode is not 'RSS':
                                 logger.log(u"Found result: %s " % title, logger.DEBUG)
 
                             items[mode].append(item)
diff --git a/sickbeard/providers/extratorrent.py b/sickbeard/providers/extratorrent.py
index 7f3faec90..dff4f2baf 100644
--- a/sickbeard/providers/extratorrent.py
+++ b/sickbeard/providers/extratorrent.py
@@ -59,11 +59,11 @@ class ExtraTorrentProvider(generic.TorrentProvider):
             logger.log(u"Search Mode: %s" % mode, logger.DEBUG)
             for search_string in search_strings[mode]:
 
-                if mode != 'RSS':
+                if mode is not 'RSS':
                     logger.log(u"Search string: %s " % search_string, logger.DEBUG)
 
                 try:
-                    self.search_params.update({'type': ('search', 'rss')[mode == 'RSS'], 'search': search_string})
+                    self.search_params.update({'type': ('search', 'rss')[mode is 'RSS'], 'search': search_string})
                     data = self.getURL(self.urls['rss'], params=self.search_params)
                     if not data:
                         logger.log(u"No data returned from provider", logger.DEBUG)
@@ -74,7 +74,7 @@ class ExtraTorrentProvider(generic.TorrentProvider):
                         continue
 
                     try:
-                        data = xmltodict.parse(HTMLParser.HTMLParser().unescape(data.encode('utf-8')).decode('utf-8').replace('&', '&amp;'))
+                        data = xmltodict.parse(data)
                     except ExpatError:
                         logger.log(u"Failed parsing provider. Traceback: %r\n%r" % (traceback.format_exc(), data), logger.ERROR)
                         continue
@@ -100,12 +100,12 @@ class ExtraTorrentProvider(generic.TorrentProvider):
 
                             # Filter unseeded torrent
                         if seeders < self.minseed or leechers < self.minleech:
-                            if mode != 'RSS':
+                            if mode is not 'RSS':
                                 logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG)
                             continue
 
                         item = title, download_url, size, seeders, leechers
-                        if mode != 'RSS':
+                        if mode is not 'RSS':
                             logger.log(u"Found result: %s " % title, logger.DEBUG)
 
                         items[mode].append(item)
diff --git a/sickbeard/providers/fnt.py b/sickbeard/providers/fnt.py
index 78bc2d1ea..52f83e8a3 100644
--- a/sickbeard/providers/fnt.py
+++ b/sickbeard/providers/fnt.py
@@ -90,7 +90,7 @@ class FNTProvider(generic.TorrentProvider):
             logger.log(u"Search Mode: %s" % mode, logger.DEBUG)
             for search_string in search_strings[mode]:
 
-                if mode != 'RSS':
+                if mode is not 'RSS':
                     logger.log(u"Search string: %s " % search_string, logger.DEBUG)
 
                 self.search_params['recherche'] = search_string
@@ -135,12 +135,12 @@ class FNTProvider(generic.TorrentProvider):
 
                                     # Filter unseeded torrent
                                     if seeders < self.minseed or leechers < self.minleech:
-                                        if mode != 'RSS':
+                                        if mode is not 'RSS':
                                             logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG)
                                         continue
 
                                     item = title, download_url, size, seeders, leechers
-                                    if mode != 'RSS':
+                                    if mode is not 'RSS':
                                         logger.log(u"Found result: %s " % title, logger.DEBUG)
 
                                     items[mode].append(item)
diff --git a/sickbeard/providers/frenchtorrentdb.py b/sickbeard/providers/frenchtorrentdb.py
index 8e69b6179..0f120b54f 100644
--- a/sickbeard/providers/frenchtorrentdb.py
+++ b/sickbeard/providers/frenchtorrentdb.py
@@ -134,7 +134,7 @@ class FrenchTorrentDBProvider(generic.TorrentProvider):
             logger.log(u"Search Mode: %s" % mode, logger.DEBUG)
             for search_string in search_strings[mode]:
 
-                if mode != 'RSS':
+                if mode is not 'RSS':
                     logger.log(u"Search string: %s " % search_string, logger.DEBUG)
 
                 self.search_params['name'] = search_string
@@ -165,12 +165,12 @@ class FrenchTorrentDBProvider(generic.TorrentProvider):
 
                                 # Filter unseeded torrent
                                 # if seeders < self.minseed or leechers < self.minleech:
-                                #    if mode != 'RSS':
+                                #    if mode is not 'RSS':
                                 #        logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG)
                                 #    continue
 
                                 item = title, download_url, size, seeders, leechers
-                                if mode != 'RSS':
+                                if mode is not 'RSS':
                                     logger.log(u"Found result: %s " % title, logger.DEBUG)
 
                                 items[mode].append(item)
diff --git a/sickbeard/providers/freshontv.py b/sickbeard/providers/freshontv.py
index 3ff1cf74b..611d5c66a 100644
--- a/sickbeard/providers/freshontv.py
+++ b/sickbeard/providers/freshontv.py
@@ -117,7 +117,7 @@ class FreshOnTVProvider(generic.TorrentProvider):
             logger.log(u"Search Mode: %s" % mode, logger.DEBUG)
             for search_string in search_params[mode]:
 
-                if mode != 'RSS':
+                if mode is not 'RSS':
                     logger.log(u"Search string: %s " % search_string, logger.DEBUG)
 
                 searchURL = self.urls['search'] % (freeleech, search_string)
@@ -215,12 +215,12 @@ class FreshOnTVProvider(generic.TorrentProvider):
 
                                 # Filter unseeded torrent
                                 if seeders < self.minseed or leechers < self.minleech:
-                                    if mode != 'RSS':
+                                    if mode is not 'RSS':
                                         logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG)
                                     continue
 
                                 item = title, download_url, size, seeders, leechers
-                                if mode != 'RSS':
+                                if mode is not 'RSS':
                                     logger.log(u"Found result: %s " % title, logger.DEBUG)
 
                                 items[mode].append(item)
diff --git a/sickbeard/providers/gftracker.py b/sickbeard/providers/gftracker.py
index 14d6656cd..826e42ccf 100644
--- a/sickbeard/providers/gftracker.py
+++ b/sickbeard/providers/gftracker.py
@@ -94,7 +94,7 @@ class GFTrackerProvider(generic.TorrentProvider):
             logger.log(u"Search Mode: %s" % mode, logger.DEBUG)
             for search_string in search_params[mode]:
 
-                if mode != 'RSS':
+                if mode is not 'RSS':
                     logger.log(u"Search string: %s " % search_string, logger.DEBUG)
 
                 searchURL = self.urls['search'] % (self.categories, search_string)
@@ -146,12 +146,12 @@ class GFTrackerProvider(generic.TorrentProvider):
 
                             # Filter unseeded torrent
                             if seeders < self.minseed or leechers < self.minleech:
-                                if mode != 'RSS':
+                                if mode is not 'RSS':
                                     logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG)
                                 continue
 
                             item = title, download_url, size, seeders, leechers
-                            if mode != 'RSS':
+                            if mode is not 'RSS':
                                 logger.log(u"Found result: %s " % title, logger.DEBUG)
 
                             items[mode].append(item)
diff --git a/sickbeard/providers/hdspace.py b/sickbeard/providers/hdspace.py
index a4b7e7369..a06c291ee 100644
--- a/sickbeard/providers/hdspace.py
+++ b/sickbeard/providers/hdspace.py
@@ -94,13 +94,13 @@ class HDSpaceProvider(generic.TorrentProvider):
             logger.log(u"Search Mode: %s" % mode, logger.DEBUG)
             for search_string in search_strings[mode]:
 
-                if mode != 'RSS':
+                if mode is not 'RSS':
                     searchURL = self.urls['search'] % (urllib.quote_plus(search_string.replace('.', ' ')),)
                 else:
                     searchURL = self.urls['search'] % ''
 
                 logger.log(u"Search URL: %s" %  searchURL, logger.DEBUG)
-                if mode != 'RSS':
+                if mode is not 'RSS':
                     logger.log(u"Search string: %s" %  search_string, logger.DEBUG)
 
                 data = self.getURL(searchURL)
@@ -146,12 +146,12 @@ class HDSpaceProvider(generic.TorrentProvider):
 
                         # Filter unseeded torrent
                         if seeders < self.minseed or leechers < self.minleech:
-                            if mode != 'RSS':
+                            if mode is not 'RSS':
                                 logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG)
                             continue
 
                         item = title, download_url, size, seeders, leechers
-                        if mode != 'RSS':
+                        if mode is not 'RSS':
                             logger.log(u"Found result: %s " % title, logger.DEBUG)
 
                         items[mode].append(item)
diff --git a/sickbeard/providers/hdtorrents.py b/sickbeard/providers/hdtorrents.py
index 4183f7026..e2708f3cd 100644
--- a/sickbeard/providers/hdtorrents.py
+++ b/sickbeard/providers/hdtorrents.py
@@ -92,13 +92,13 @@ class HDTorrentsProvider(generic.TorrentProvider):
             logger.log(u"Search Mode: %s" % mode, logger.DEBUG)
             for search_string in search_strings[mode]:
 
-                if mode != 'RSS':
+                if mode is not 'RSS':
                     searchURL = self.urls['search'] % (urllib.quote_plus(search_string), self.categories)
                 else:
                     searchURL = self.urls['rss'] % self.categories
 
                 logger.log(u"Search URL: %s" %  searchURL, logger.DEBUG)
-                if mode != 'RSS':
+                if mode is not 'RSS':
                     logger.log(u"Search string: %s" %  search_string, logger.DEBUG)
 
                 data = self.getURL(searchURL)
@@ -177,12 +177,12 @@ class HDTorrentsProvider(generic.TorrentProvider):
 
                             # Filter unseeded torrent
                             if seeders < self.minseed or leechers < self.minleech:
-                                if mode != 'RSS':
+                                if mode is not 'RSS':
                                     logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG)
                                 continue
 
                             item = title, download_url, size, seeders, leechers
-                            if mode != 'RSS':
+                            if mode is not 'RSS':
                                 logger.log(u"Found result: %s " % title, logger.DEBUG)
 
                             items[mode].append(item)
diff --git a/sickbeard/providers/hounddawgs.py b/sickbeard/providers/hounddawgs.py
index 704320e3e..3736bfcb4 100644
--- a/sickbeard/providers/hounddawgs.py
+++ b/sickbeard/providers/hounddawgs.py
@@ -95,7 +95,7 @@ class HoundDawgsProvider(generic.TorrentProvider):
             logger.log(u"Search Mode: %s" % mode, logger.DEBUG)
             for search_string in search_strings[mode]:
 
-                if mode != 'RSS':
+                if mode is not 'RSS':
                     logger.log(u"Search string: %s " % search_string, logger.DEBUG)
 
                 self.search_params['searchstr'] = search_string
@@ -157,12 +157,12 @@ class HoundDawgsProvider(generic.TorrentProvider):
 
                             # Filter unseeded torrent
                             # if seeders < self.minseed or leechers < self.minleech:
-                            #    if mode != 'RSS':
+                            #    if mode is not 'RSS':
                             #        logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG)
                             #    continue
 
                             item = title, download_url, size, seeders, leechers
-                            if mode != 'RSS':
+                            if mode is not 'RSS':
                                 logger.log(u"Found result: %s " % title, logger.DEBUG)
 
                             items[mode].append(item)
diff --git a/sickbeard/providers/iptorrents.py b/sickbeard/providers/iptorrents.py
index bb0ffb90a..1fd44e609 100644
--- a/sickbeard/providers/iptorrents.py
+++ b/sickbeard/providers/iptorrents.py
@@ -90,12 +90,12 @@ class IPTorrentsProvider(generic.TorrentProvider):
             logger.log(u"Search Mode: %s" % mode, logger.DEBUG)
             for search_string in search_params[mode]:
 
-                if mode != 'RSS':
+                if mode is not 'RSS':
                     logger.log(u"Search string: %s " % search_string, logger.DEBUG)
 
                 # URL with 50 tv-show results, or max 150 if adjusted in IPTorrents profile
                 searchURL = self.urls['search'] % (self.categories, freeleech, search_string)
-                searchURL += ';o=seeders' if mode != 'RSS' else ''
+                searchURL += ';o=seeders' if mode is not 'RSS' else ''
                 logger.log(u"Search URL: %s" %  searchURL, logger.DEBUG)
 
                 data = self.getURL(searchURL)
@@ -136,12 +136,12 @@ class IPTorrentsProvider(generic.TorrentProvider):
 
                             # Filter unseeded torrent
                             if seeders < self.minseed or leechers < self.minleech:
-                                if mode != 'RSS':
+                                if mode is not 'RSS':
                                     logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG)
                                 continue
 
                             item = title, download_url, size, seeders, leechers
-                            if mode != 'RSS':
+                            if mode is not 'RSS':
                                 logger.log(u"Found result: %s " % title, logger.DEBUG)
 
                             items[mode].append(item)
diff --git a/sickbeard/providers/kat.py b/sickbeard/providers/kat.py
index 72c65f5fd..0168c1322 100755
--- a/sickbeard/providers/kat.py
+++ b/sickbeard/providers/kat.py
@@ -23,7 +23,6 @@ import traceback
 from urllib import urlencode
 
 import xmltodict
-import HTMLParser
 
 import sickbeard
 from sickbeard import logger
@@ -75,18 +74,18 @@ class KATProvider(generic.TorrentProvider):
             logger.log(u"Search Mode: %s" % mode, logger.DEBUG)
             for search_string in search_strings[mode]:
 
-                self.search_params['q'] = search_string.encode('utf-8') if mode != 'RSS' else ''
-                self.search_params['field'] = 'seeders' if mode != 'RSS' else 'time_add'
+                self.search_params['q'] = search_string.encode('utf-8') if mode is not 'RSS' else ''
+                self.search_params['field'] = 'seeders' if mode is not 'RSS' else 'time_add'
 
-                if mode != 'RSS':
+                if mode is not 'RSS':
                     logger.log(u"Search string: %s" % search_string, logger.DEBUG)
 
-                url_fmt_string = 'usearch' if mode != 'RSS' else search_string
+                url_fmt_string = 'usearch' if mode is not 'RSS' else search_string
                 try:
                     searchURL = self.urls['search'] % url_fmt_string + '?' + urlencode(self.search_params)
                     logger.log(u"Search URL: %s" % searchURL, logger.DEBUG)
                     data = self.getURL(searchURL)
-                    # data = self.getURL(self.urls[('search', 'rss')[mode == 'RSS']], params=self.search_params)
+                    # data = self.getURL(self.urls[('search', 'rss')[mode is 'RSS']], params=self.search_params)
                     if not data:
                         logger.log(u"No data returned from provider", logger.DEBUG)
                         continue
@@ -96,7 +95,7 @@ class KATProvider(generic.TorrentProvider):
                         continue
 
                     try:
-                        data = xmltodict.parse(HTMLParser.HTMLParser().unescape(data.encode('utf-8')).decode('utf-8').replace('&', '&amp;'))
+                        data = xmltodict.parse(data)
                     except ExpatError:
                         logger.log(u"Failed parsing provider. Traceback: %r\n%r" % (traceback.format_exc(), data), logger.ERROR)
                         continue
@@ -111,8 +110,8 @@ class KATProvider(generic.TorrentProvider):
 
                     for item in entries:
                         try:
-                            title = item['title'].decode('utf-8')
-
+                            title = item['title']
+                            assert isinstance(title, unicode)
                             # Use the torcache link kat provides,
                             # unless it is not torcache or we are not using blackhole
                             # because we want to use magnets if connecting direct to client
@@ -137,17 +136,17 @@ class KATProvider(generic.TorrentProvider):
 
                         # Filter unseeded torrent
                         if seeders < self.minseed or leechers < self.minleech:
-                            if mode != 'RSS':
+                            if mode is not 'RSS':
                                 logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG)
                             continue
 
                         if self.confirmed and not verified:
-                            if mode != 'RSS':
+                            if mode is not 'RSS':
                                 logger.log(u"Found result " + title + " but that doesn't seem like a verified result so I'm ignoring it", logger.DEBUG)
                             continue
 
                         item = title, download_url, size, seeders, leechers, info_hash
-                        if mode != 'RSS':
+                        if mode is not 'RSS':
                             logger.log(u"Found result: %s " % title, logger.DEBUG)
 
                         items[mode].append(item)
diff --git a/sickbeard/providers/libertalia.py b/sickbeard/providers/libertalia.py
index e9d364f17..4a4b9b6b4 100644
--- a/sickbeard/providers/libertalia.py
+++ b/sickbeard/providers/libertalia.py
@@ -87,7 +87,7 @@ class LibertaliaProvider(generic.TorrentProvider):
             logger.log(u"Search Mode: %s" % mode, logger.DEBUG)
             for search_string in search_params[mode]:
 
-                if mode != 'RSS':
+                if mode is not 'RSS':
                     logger.log(u"Search string: %s " % search_string, logger.DEBUG)
 
                 searchURL = self.urlsearch % (urllib.quote(search_string), self.categories)
@@ -121,12 +121,12 @@ class LibertaliaProvider(generic.TorrentProvider):
 
                                 # Filter unseeded torrent
                                 # if seeders < self.minseed or leechers < self.minleech:
-                                #    if mode != 'RSS':
+                                #    if mode is not 'RSS':
                                 #        logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG)
                                 #    continue
 
                                 item = title, download_url, size, seeders, leechers
-                                if mode != 'RSS':
+                                if mode is not 'RSS':
                                     logger.log(u"Found result: %s " % title, logger.DEBUG)
 
                                 items[mode].append(item)
diff --git a/sickbeard/providers/morethantv.py b/sickbeard/providers/morethantv.py
index e815b4146..c89b22540 100644
--- a/sickbeard/providers/morethantv.py
+++ b/sickbeard/providers/morethantv.py
@@ -106,7 +106,7 @@ class MoreThanTVProvider(generic.TorrentProvider):
             logger.log(u"Search Mode: %s" % mode, logger.DEBUG)
             for search_string in search_params[mode]:
 
-                if mode != 'RSS':
+                if mode is not 'RSS':
                     logger.log(u"Search string: %s " % search_string, logger.DEBUG)
 
                 searchURL = self.urls['search'] % (search_string.replace('(', '').replace(')', ''))
@@ -162,12 +162,12 @@ class MoreThanTVProvider(generic.TorrentProvider):
 
                             # Filter unseeded torrent
                             if seeders < self.minseed or leechers < self.minleech:
-                                if mode != 'RSS':
+                                if mode is not 'RSS':
                                     logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG)
                                 continue
 
                             item = title, download_url, size, seeders, leechers
-                            if mode != 'RSS':
+                            if mode is not 'RSS':
                                 logger.log(u"Found result: %s " % title, logger.DEBUG)
 
                             items[mode].append(item)
diff --git a/sickbeard/providers/nextgen.py b/sickbeard/providers/nextgen.py
index 5915ff6a5..08e575da4 100644
--- a/sickbeard/providers/nextgen.py
+++ b/sickbeard/providers/nextgen.py
@@ -122,7 +122,7 @@ class NextGenProvider(generic.TorrentProvider):
             logger.log(u"Search Mode: %s" % mode, logger.DEBUG)
             for search_string in search_params[mode]:
 
-                if mode != 'RSS':
+                if mode is not 'RSS':
                     logger.log(u"Search string: %s " % search_string, logger.DEBUG)
 
                 searchURL = self.urls['search'] % (urllib.quote(search_string.encode('utf-8')), self.categories)
@@ -171,12 +171,12 @@ class NextGenProvider(generic.TorrentProvider):
 
                             # Filter unseeded torrent
                             if seeders < self.minseed or leechers < self.minleech:
-                                if mode != 'RSS':
+                                if mode is not 'RSS':
                                     logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG)
                                 continue
 
                             item = title, download_url, size, seeders, leechers
-                            if mode != 'RSS':
+                            if mode is not 'RSS':
                                 logger.log(u"Found result: %s " % title, logger.DEBUG)
 
                             items[mode].append(item)
diff --git a/sickbeard/providers/nyaatorrents.py b/sickbeard/providers/nyaatorrents.py
index 1b58081c1..ee7ef5634 100644
--- a/sickbeard/providers/nyaatorrents.py
+++ b/sickbeard/providers/nyaatorrents.py
@@ -55,7 +55,7 @@ class NyaaProvider(generic.TorrentProvider):
         for mode in search_strings.keys():
             logger.log(u"Search Mode: %s" % mode, logger.DEBUG)
             for search_string in search_strings[mode]:
-                if mode != 'RSS':
+                if mode is not 'RSS':
                     logger.log(u"Search string: %s" % search_string, logger.DEBUG)
 
                 params = {
@@ -64,7 +64,7 @@ class NyaaProvider(generic.TorrentProvider):
                     "sort": 2,     # Sort Descending By Seeders
                     "order": 1
                 }
-                if mode != 'RSS':
+                if mode is not 'RSS':
                     params["term"] = search_string.encode('utf-8')
 
                 searchURL = self.url + '?' + urllib.urlencode(params)
@@ -85,16 +85,16 @@ class NyaaProvider(generic.TorrentProvider):
 
                     # Filter unseeded torrent
                     if seeders < self.minseed or leechers < self.minleech:
-                        if mode != 'RSS':
+                        if mode is not 'RSS':
                             logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG)
                         continue
 
-                    if self.confirmed and not verified and mode != 'RSS':
+                    if self.confirmed and not verified and mode is not 'RSS':
                         logger.log(u"Found result " + title + " but that doesn't seem like a verified result so I'm ignoring it", logger.DEBUG)
                         continue
 
                     item = title, download_url, size, seeders, leechers
-                    if mode != 'RSS':
+                    if mode is not 'RSS':
                         logger.log(u"Found result: %s " % title, logger.DEBUG)
 
                     items[mode].append(item)
diff --git a/sickbeard/providers/pretome.py b/sickbeard/providers/pretome.py
index 30dbac2d2..f165135dd 100644
--- a/sickbeard/providers/pretome.py
+++ b/sickbeard/providers/pretome.py
@@ -91,7 +91,7 @@ class PretomeProvider(generic.TorrentProvider):
             logger.log(u"Search Mode: %s" % mode, logger.DEBUG)
             for search_string in search_params[mode]:
 
-                if mode != 'RSS':
+                if mode is not 'RSS':
                     logger.log(u"Search string: %s " % search_string, logger.DEBUG)
 
                 searchURL = self.urls['search'] % (urllib.quote(search_string.encode('utf-8')), self.categories)
@@ -148,12 +148,12 @@ class PretomeProvider(generic.TorrentProvider):
 
                             # Filter unseeded torrent
                             if seeders < self.minseed or leechers < self.minleech:
-                                if mode != 'RSS':
+                                if mode is not 'RSS':
                                     logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG)
                                 continue
 
                             item = title, download_url, size, seeders, leechers
-                            if mode != 'RSS':
+                            if mode is not 'RSS':
                                 logger.log(u"Found result: %s " % title, logger.DEBUG)
 
                             items[mode].append(item)
diff --git a/sickbeard/providers/rarbg.py b/sickbeard/providers/rarbg.py
index 384412561..dbf2c95b3 100644
--- a/sickbeard/providers/rarbg.py
+++ b/sickbeard/providers/rarbg.py
@@ -120,10 +120,10 @@ class RarbgProvider(generic.TorrentProvider):
             logger.log(u"Search Mode: %s" % mode, logger.DEBUG)
             for search_string in search_params[mode]:
 
-                if mode != 'RSS':
+                if mode is not 'RSS':
                     logger.log(u"Search string: %s " % search_string, logger.DEBUG)
 
-                if mode == 'RSS':
+                if mode is 'RSS':
                     searchURL = self.urls['listing'] + self.defaultOptions
                 elif mode == 'Season':
                     if ep_indexer == INDEXER_TVDB:
@@ -228,7 +228,7 @@ class RarbgProvider(generic.TorrentProvider):
                                 continue
 
                             item = title, download_url, size, seeders, leechers
-                            if mode != 'RSS':
+                            if mode is not 'RSS':
                                 logger.log(u"Found result: %s " % title, logger.DEBUG)
                             items[mode].append(item)
 
diff --git a/sickbeard/providers/scc.py b/sickbeard/providers/scc.py
index c02ac02d5..67159e3e5 100644
--- a/sickbeard/providers/scc.py
+++ b/sickbeard/providers/scc.py
@@ -89,10 +89,10 @@ class SCCProvider(generic.TorrentProvider):
         items = {'Season': [], 'Episode': [], 'RSS': []}
 
         for mode in search_strings.keys():
-            if mode != 'RSS':
+            if mode is not 'RSS':
                 logger.log(u"Search Mode: %s" % mode, logger.DEBUG)
             for search_string in search_strings[mode]:
-                if mode != 'RSS':
+                if mode is not 'RSS':
                     logger.log(u"Search string: %s " % search_string, logger.DEBUG)
 
                 searchURL = self.urls['search'] % (urllib.quote(search_string), self.categories[search_mode])
@@ -140,12 +140,12 @@ class SCCProvider(generic.TorrentProvider):
 
                         # Filter unseeded torrent
                         if seeders < self.minseed or leechers < self.minleech:
-                            if mode != 'RSS':
+                            if mode is not 'RSS':
                                 logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG)
                             continue
 
                         item = title, download_url, size, seeders, leechers
-                        if mode != 'RSS':
+                        if mode is not 'RSS':
                             logger.log(u"Found result: %s " % title, logger.DEBUG)
 
                         items[mode].append(item)
diff --git a/sickbeard/providers/scenetime.py b/sickbeard/providers/scenetime.py
index c4136a07c..92dabe2a0 100644
--- a/sickbeard/providers/scenetime.py
+++ b/sickbeard/providers/scenetime.py
@@ -81,7 +81,7 @@ class SceneTimeProvider(generic.TorrentProvider):
             logger.log(u"Search Mode: %s" % mode, logger.DEBUG)
             for search_string in search_params[mode]:
 
-                if mode != 'RSS':
+                if mode is not 'RSS':
                     logger.log(u"Search string: %s " % search_string, logger.DEBUG)
 
                 searchURL = self.urls['search'] % (urllib.quote(search_string), self.categories)
@@ -132,12 +132,12 @@ class SceneTimeProvider(generic.TorrentProvider):
 
                             # Filter unseeded torrent
                             if seeders < self.minseed or leechers < self.minleech:
-                                if mode != 'RSS':
+                                if mode is not 'RSS':
                                     logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG)
                                 continue
 
                             item = title, download_url, size, seeders, leechers
-                            if mode != 'RSS':
+                            if mode is not 'RSS':
                                 logger.log(u"Found result: %s " % title, logger.DEBUG)
 
                             items[mode].append(item)
diff --git a/sickbeard/providers/speedcd.py b/sickbeard/providers/speedcd.py
index b5fe4feab..a3c5377a8 100644
--- a/sickbeard/providers/speedcd.py
+++ b/sickbeard/providers/speedcd.py
@@ -80,7 +80,7 @@ class SpeedCDProvider(generic.TorrentProvider):
             logger.log(u"Search Mode: %s" % mode, logger.DEBUG)
             for search_string in search_params[mode]:
 
-                if mode != 'RSS':
+                if mode is not 'RSS':
                     logger.log(u"Search string: %s " % search_string, logger.DEBUG)
 
                 search_string = '+'.join(search_string.split())
@@ -114,12 +114,12 @@ class SpeedCDProvider(generic.TorrentProvider):
 
                     # Filter unseeded torrent
                     if seeders < self.minseed or leechers < self.minleech:
-                        if mode != 'RSS':
+                        if mode is not 'RSS':
                             logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG)
                         continue
 
                     item = title, download_url, size, seeders, leechers
-                    if mode != 'RSS':
+                    if mode is not 'RSS':
                         logger.log(u"Found result: %s " % title, logger.DEBUG)
 
                     items[mode].append(item)
diff --git a/sickbeard/providers/strike.py b/sickbeard/providers/strike.py
index 977433603..b585bec71 100644
--- a/sickbeard/providers/strike.py
+++ b/sickbeard/providers/strike.py
@@ -41,7 +41,7 @@ class STRIKEProvider(generic.TorrentProvider):
             logger.log(u"Search Mode: %s" % mode, logger.DEBUG)
             for search_string in search_strings[mode]:
 
-                if mode != 'RSS':
+                if mode is not 'RSS':
                     logger.log(u"Search string: " + search_string.strip(), logger.DEBUG)
 
                 searchURL = self.url + "api/v2/torrents/search/?category=TV&phrase=" + search_string
@@ -65,11 +65,11 @@ class STRIKEProvider(generic.TorrentProvider):
 
                     # Filter unseeded torrent
                     if seeders < self.minseed or leechers < self.minleech:
-                        if mode != 'RSS':
+                        if mode is not 'RSS':
                             logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG)
                         continue
 
-                    if mode != 'RSS':
+                    if mode is not 'RSS':
                         logger.log(u"Found result: %s " % title, logger.DEBUG)
 
                     item = title, download_url, size, seeders, leechers
diff --git a/sickbeard/providers/t411.py b/sickbeard/providers/t411.py
index e96f1de5e..bdb946703 100644
--- a/sickbeard/providers/t411.py
+++ b/sickbeard/providers/t411.py
@@ -90,10 +90,10 @@ class T411Provider(generic.TorrentProvider):
             logger.log(u"Search Mode: %s" % mode, logger.DEBUG)
             for search_string in search_params[mode]:
 
-                if mode != 'RSS':
+                if mode is not 'RSS':
                     logger.log(u"Search string: %s " % search_string, logger.DEBUG)
 
-                searchURLS = ([self.urls['search'] % (search_string, u) for u in self.subcategories], [self.urls['rss']])[mode == 'RSS']
+                searchURLS = ([self.urls['search'] % (search_string, u) for u in self.subcategories], [self.urls['rss']])[mode is 'RSS']
                 for searchURL in searchURLS:
                     logger.log(u"Search URL: %s" %  searchURL, logger.DEBUG)
                     data = self.getURL(searchURL, json=True)
@@ -101,18 +101,18 @@ class T411Provider(generic.TorrentProvider):
                         continue
 
                     try:
-                        if 'torrents' not in data and mode != 'RSS':
+                        if 'torrents' not in data and mode is not 'RSS':
                             logger.log(u"Data returned from provider does not contain any torrents", logger.DEBUG)
                             continue
 
-                        torrents = data['torrents'] if mode != 'RSS' else data
+                        torrents = data['torrents'] if mode is not 'RSS' else data
 
                         if not torrents:
                             logger.log(u"Data returned from provider does not contain any torrents", logger.DEBUG)
                             continue
 
                         for torrent in torrents:
-                            if mode == 'RSS' and int(torrent['category']) not in self.subcategories:
+                            if mode is 'RSS' and int(torrent['category']) not in self.subcategories:
                                 continue
 
                             try:
@@ -129,16 +129,16 @@ class T411Provider(generic.TorrentProvider):
 
                                 # Filter unseeded torrent
                                 if seeders < self.minseed or leechers < self.minleech:
-                                    if mode != 'RSS':
+                                    if mode is not 'RSS':
                                         logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG)
                                     continue
 
-                                if self.confirmed and not verified and mode != 'RSS':
+                                if self.confirmed and not verified and mode is not 'RSS':
                                     logger.log(u"Found result " + title + " but that doesn't seem like a verified result so I'm ignoring it", logger.DEBUG)
                                     continue
 
                                 item = title, download_url, size, seeders, leechers
-                                if mode != 'RSS':
+                                if mode is not 'RSS':
                                     logger.log(u"Found result: %s " % title, logger.DEBUG)
 
                                 items[mode].append(item)
diff --git a/sickbeard/providers/thepiratebay.py b/sickbeard/providers/thepiratebay.py
index cf5eb3d57..c9dd88e03 100644
--- a/sickbeard/providers/thepiratebay.py
+++ b/sickbeard/providers/thepiratebay.py
@@ -75,13 +75,13 @@ class ThePirateBayProvider(generic.TorrentProvider):
 
                 self.search_params.update({'q': search_string.strip()})
 
-                if mode != 'RSS':
+                if mode is not 'RSS':
                     logger.log(u"Search string: " + search_string, logger.DEBUG)
 
-                searchURL = self.urls[('search', 'rss')[mode == 'RSS']] + '?' + urlencode(self.search_params)
+                searchURL = self.urls[('search', 'rss')[mode is 'RSS']] + '?' + urlencode(self.search_params)
                 logger.log(u"Search URL: %s" % searchURL, logger.DEBUG)
                 data = self.getURL(searchURL)
-                # data = self.getURL(self.urls[('search', 'rss')[mode == 'RSS']], params=self.search_params)
+                # data = self.getURL(self.urls[('search', 'rss')[mode is 'RSS']], params=self.search_params)
                 if not data:
                     continue
 
@@ -99,18 +99,18 @@ class ThePirateBayProvider(generic.TorrentProvider):
 
                     # Filter unseeded torrent
                     if seeders < self.minseed or leechers < self.minleech:
-                        if mode != 'RSS':
+                        if mode is not 'RSS':
                             logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG)
                         continue
 
                     # Accept Torrent only from Good People for every Episode Search
                     if self.confirmed and re.search(r'(VIP|Trusted|Helper|Moderator)', torrent.group(0)) is None:
-                        if mode != 'RSS':
+                        if mode is not 'RSS':
                             logger.log(u"Found result %s but that doesn't seem like a trusted result so I'm ignoring it" % title, logger.DEBUG)
                         continue
 
                     item = title, download_url, size, seeders, leechers
-                    if mode != 'RSS':
+                    if mode is not 'RSS':
                         logger.log(u"Found result: %s " % title, logger.DEBUG)
 
                     items[mode].append(item)
diff --git a/sickbeard/providers/titansoftv.py b/sickbeard/providers/titansoftv.py
index 2f160ab29..c94ba6ef5 100644
--- a/sickbeard/providers/titansoftv.py
+++ b/sickbeard/providers/titansoftv.py
@@ -95,7 +95,7 @@ class TitansOfTVProvider(generic.TorrentProvider):
 
                 # Filter unseeded torrent
                 # if seeders < self.minseed or leechers < self.minleech:
-                #    if mode != 'RSS':
+                #    if mode is not 'RSS':
                 #        logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG)
                 #    continue
 
diff --git a/sickbeard/providers/tntvillage.py b/sickbeard/providers/tntvillage.py
index 1213a1cf8..a41cd093b 100644
--- a/sickbeard/providers/tntvillage.py
+++ b/sickbeard/providers/tntvillage.py
@@ -283,7 +283,7 @@ class TNTVillageProvider(generic.TorrentProvider):
             logger.log(u"Search Mode: %s" % mode, logger.DEBUG)
             for search_string in search_params[mode]:
 
-                if mode == 'RSS':
+                if mode is 'RSS':
                     self.page = 2
 
                 last_page = 0
@@ -299,12 +299,12 @@ class TNTVillageProvider(generic.TorrentProvider):
                     if last_page:
                         break
 
-                    if mode != 'RSS':
+                    if mode is not 'RSS':
                         searchURL = (self.urls['search_page'] + '&filter={2}').format(z, self.categories, search_string)
                     else:
                         searchURL = self.urls['search_page'].format(z, self.categories)
 
-                    if mode != 'RSS':
+                    if mode is not 'RSS':
                         logger.log(u"Search string: %s " % search_string, logger.DEBUG)
 
                     logger.log(u"Search URL: %s" %  searchURL, logger.DEBUG)
@@ -378,12 +378,12 @@ class TNTVillageProvider(generic.TorrentProvider):
 
                                 # Filter unseeded torrent
                                 if seeders < self.minseed or leechers < self.minleech:
-                                    if mode != 'RSS':
+                                    if mode is not 'RSS':
                                         logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG)
                                     continue
 
                                 item = title, download_url, size, seeders, leechers
-                                if mode != 'RSS':
+                                if mode is not 'RSS':
                                     logger.log(u"Found result: %s " % title, logger.DEBUG)
 
                                 items[mode].append(item)
diff --git a/sickbeard/providers/tokyotoshokan.py b/sickbeard/providers/tokyotoshokan.py
index 6a078faa8..ed7acce2a 100644
--- a/sickbeard/providers/tokyotoshokan.py
+++ b/sickbeard/providers/tokyotoshokan.py
@@ -95,7 +95,7 @@ class TokyoToshokanProvider(generic.TorrentProvider):
 
                         # Filter unseeded torrent
                         # if seeders < self.minseed or leechers < self.minleech:
-                        #    if mode != 'RSS':
+                        #    if mode is not 'RSS':
                         #        logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG)
                         #    continue
 
diff --git a/sickbeard/providers/torrentbytes.py b/sickbeard/providers/torrentbytes.py
index 0a0d3a68a..30711eda2 100644
--- a/sickbeard/providers/torrentbytes.py
+++ b/sickbeard/providers/torrentbytes.py
@@ -84,7 +84,7 @@ class TorrentBytesProvider(generic.TorrentProvider):
             logger.log(u"Search Mode: %s" % mode, logger.DEBUG)
             for search_string in search_params[mode]:
 
-                if mode != 'RSS':
+                if mode is not 'RSS':
                     logger.log(u"Search string: %s " % search_string, logger.DEBUG)
 
                 searchURL = self.urls['search'] % (urllib.quote(search_string.encode('utf-8')), self.categories)
@@ -147,12 +147,12 @@ class TorrentBytesProvider(generic.TorrentProvider):
 
                             # Filter unseeded torrent
                             if seeders < self.minseed or leechers < self.minleech:
-                                if mode != 'RSS':
+                                if mode is not 'RSS':
                                     logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG)
                                 continue
 
                             item = title, download_url, size, seeders, leechers
-                            if mode != 'RSS':
+                            if mode is not 'RSS':
                                 logger.log(u"Found result: %s " % title, logger.DEBUG)
 
                             items[mode].append(item)
diff --git a/sickbeard/providers/torrentday.py b/sickbeard/providers/torrentday.py
index 62550dab1..1d8444538 100644
--- a/sickbeard/providers/torrentday.py
+++ b/sickbeard/providers/torrentday.py
@@ -102,7 +102,7 @@ class TorrentDayProvider(generic.TorrentProvider):
             logger.log(u"Search Mode: %s" % mode, logger.DEBUG)
             for search_string in search_params[mode]:
 
-                if mode != 'RSS':
+                if mode is not 'RSS':
                     logger.log(u"Search string: %s " % search_string, logger.DEBUG)
 
                 search_string = '+'.join(search_string.split())
@@ -138,12 +138,12 @@ class TorrentDayProvider(generic.TorrentProvider):
 
                     # Filter unseeded torrent
                     if seeders < self.minseed or leechers < self.minleech:
-                        if mode != 'RSS':
+                        if mode is not 'RSS':
                             logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG)
                         continue
 
                     item = title, download_url, size, seeders, leechers
-                    if mode != 'RSS':
+                    if mode is not 'RSS':
                         logger.log(u"Found result: %s " % title, logger.DEBUG)
 
                     items[mode].append(item)
diff --git a/sickbeard/providers/torrentleech.py b/sickbeard/providers/torrentleech.py
index 566c6b83f..2ab8987dc 100644
--- a/sickbeard/providers/torrentleech.py
+++ b/sickbeard/providers/torrentleech.py
@@ -85,7 +85,7 @@ class TorrentLeechProvider(generic.TorrentProvider):
             logger.log(u"Search Mode: %s" % mode, logger.DEBUG)
             for search_string in search_params[mode]:
 
-                if mode == 'RSS':
+                if mode is 'RSS':
                     searchURL = self.urls['index'] % self.categories
                 else:
                     searchURL = self.urls['search'] % (urllib.quote_plus(search_string.encode('utf-8')), self.categories)
@@ -125,12 +125,12 @@ class TorrentLeechProvider(generic.TorrentProvider):
 
                             # Filter unseeded torrent
                             if seeders < self.minseed or leechers < self.minleech:
-                                if mode != 'RSS':
+                                if mode is not 'RSS':
                                     logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG)
                                 continue
 
                             item = title, download_url, size, seeders, leechers
-                            if mode != 'RSS':
+                            if mode is not 'RSS':
                                 logger.log(u"Found result: %s " % title, logger.DEBUG)
 
                             items[mode].append(item)
diff --git a/sickbeard/providers/torrentproject.py b/sickbeard/providers/torrentproject.py
index 4ae53d802..d4dbd1c12 100644
--- a/sickbeard/providers/torrentproject.py
+++ b/sickbeard/providers/torrentproject.py
@@ -47,7 +47,7 @@ class TORRENTPROJECTProvider(generic.TorrentProvider):
         for mode in search_strings.keys():  # Mode = RSS, Season, Episode
             logger.log(u"Search Mode: %s" % mode, logger.DEBUG)
             for search_string in search_strings[mode]:
-                if mode != 'RSS':
+                if mode is not 'RSS':
                     logger.log(u"Search string: %s " % search_string, logger.DEBUG)
 
 
@@ -67,7 +67,7 @@ class TORRENTPROJECTProvider(generic.TorrentProvider):
                     seeders = helpers.tryInt(torrents[i]["seeds"], 1)
                     leechers = helpers.tryInt(torrents[i]["leechs"], 0)
                     if seeders < self.minseed or leechers < self.minleech:
-                        if mode != 'RSS':
+                        if mode is not 'RSS':
                             logger.log(u"Torrent doesn't meet minimum seeds & leechers not selecting : %s" % title, logger.DEBUG)
                         continue
 
@@ -90,7 +90,7 @@ class TORRENTPROJECTProvider(generic.TorrentProvider):
 
                     item = title, download_url, size, seeders, leechers
 
-                    if mode != 'RSS':
+                    if mode is not 'RSS':
                         logger.log(u"Found result: %s" % title, logger.DEBUG)
 
                     items[mode].append(item)
diff --git a/sickbeard/providers/torrentz.py b/sickbeard/providers/torrentz.py
index ee3e7e587..15c172b14 100644
--- a/sickbeard/providers/torrentz.py
+++ b/sickbeard/providers/torrentz.py
@@ -63,7 +63,7 @@ class TORRENTZProvider(generic.TorrentProvider):
         for mode in search_strings:
             for search_string in search_strings[mode]:
                 search_url = self.urls['verified'] if self.confirmed else self.urls['feed']
-                if mode != 'RSS':
+                if mode is not 'RSS':
                     search_url += '?q=' + urllib.parse.quote_plus(search_string)
 
                 logger.log(search_url)
@@ -81,7 +81,7 @@ class TORRENTZProvider(generic.TorrentProvider):
                     continue
 
                 try:
-                    data = xmltodict.parse(HTMLParser.HTMLParser().unescape(data.encode('utf-8')).decode('utf-8').replace('&', '&amp;'))
+                    data = xmltodict.parse(data)
                 except ExpatError:
                     logger.log(u"Failed parsing provider. Traceback: %r\n%r" % (traceback.format_exc(), data), logger.ERROR)
                     continue
@@ -112,7 +112,7 @@ class TORRENTZProvider(generic.TorrentProvider):
 
                     # Filter unseeded torrent
                     if seeders < self.minseed or leechers < self.minleech:
-                        if mode != 'RSS':
+                        if mode is not 'RSS':
                             logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG)
                         continue
 
diff --git a/sickbeard/providers/transmitthenet.py b/sickbeard/providers/transmitthenet.py
index 2049b638d..e4e5b30e7 100644
--- a/sickbeard/providers/transmitthenet.py
+++ b/sickbeard/providers/transmitthenet.py
@@ -90,7 +90,7 @@ class TransmitTheNetProvider(generic.TorrentProvider):
         for mode in search_strings.keys():
             for search_string in search_strings[mode]:
 
-                if mode != 'RSS':
+                if mode is not 'RSS':
                     logger.log(u"Search string: %s " % search_string, logger.DEBUG)
 
                 data = self.getURL(self.urls['index'], params=self.search_params)
@@ -133,12 +133,12 @@ class TransmitTheNetProvider(generic.TorrentProvider):
 
                             # Filter unseeded torrent
                             if seeders < self.minseed or leechers < self.minleech:
-                                if mode != 'RSS':
+                                if mode is not 'RSS':
                                     logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG)
                                 continue
 
                             item = title, download_url, size, seeders, leechers
-                            if mode != 'RSS':
+                            if mode is not 'RSS':
                                 logger.log(u"Found result: %s " % title, logger.DEBUG)
 
                             items[mode].append(item)
diff --git a/sickbeard/providers/tvchaosuk.py b/sickbeard/providers/tvchaosuk.py
index dee2176c4..49aab0007 100644
--- a/sickbeard/providers/tvchaosuk.py
+++ b/sickbeard/providers/tvchaosuk.py
@@ -131,7 +131,7 @@ class TVChaosUKProvider(generic.TorrentProvider):
             logger.log(u"Search Mode: %s" % mode, logger.DEBUG)
             for search_string in search_strings[mode]:
 
-                if mode != 'RSS':
+                if mode is not 'RSS':
                     logger.log(u"Search string: %s " % search_string, logger.DEBUG)
 
                 self.search_params['keywords'] = search_string.strip()
@@ -156,7 +156,7 @@ class TVChaosUKProvider(generic.TorrentProvider):
 
                             # Filter unseeded torrent
                             if seeders < self.minseed or leechers < self.minleech:
-                                if mode != 'RSS':
+                                if mode is not 'RSS':
                                     logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG)
                                 continue
 
@@ -176,7 +176,7 @@ class TVChaosUKProvider(generic.TorrentProvider):
                             size = -1
 
                             item = title, download_url, size, seeders, leechers
-                            if mode != 'RSS':
+                            if mode is not 'RSS':
                                 logger.log(u"Found result: %s " % title, logger.DEBUG)
 
                             items[mode].append(item)
diff --git a/sickbeard/providers/xthor.py b/sickbeard/providers/xthor.py
index 2805fbe5b..71cf973b5 100644
--- a/sickbeard/providers/xthor.py
+++ b/sickbeard/providers/xthor.py
@@ -80,7 +80,7 @@ class XthorProvider(generic.TorrentProvider):
             logger.log(u"Search Mode: %s" % mode, logger.DEBUG)
             for search_string in search_params[mode]:
 
-                if mode != 'RSS':
+                if mode is not 'RSS':
                     logger.log(u"Search string: %s " % search_string, logger.DEBUG)
 
                 searchURL = self.urlsearch % (urllib.quote(search_string), self.categories)
@@ -109,12 +109,12 @@ class XthorProvider(generic.TorrentProvider):
 
                                 # Filter unseeded torrent
                                 # if seeders < self.minseed or leechers < self.minleech:
-                                #    if mode != 'RSS':
+                                #    if mode is not 'RSS':
                                 #        logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG)
                                 #    continue
 
                                 item = title, download_url, size, seeders, leechers
-                                if mode != 'RSS':
+                                if mode is not 'RSS':
                                     logger.log(u"Found result: %s " % title, logger.DEBUG)
 
                                 items[mode].append(item)
-- 
GitLab


From 5acef4058934adbd3456dcf9a729fbe72ae3c5e7 Mon Sep 17 00:00:00 2001
From: Dustyn Gibson <miigotu@gmail.com>
Date: Fri, 6 Nov 2015 23:33:28 -0800
Subject: [PATCH 063/215] Flake sickbeard module, lint clients

---
 sickbeard/__init__.py                        |  4 +-
 sickbeard/clients/deluge_client.py           | 74 ++++++++++----------
 sickbeard/clients/deluged_client.py          | 32 ++++-----
 sickbeard/clients/download_station_client.py | 32 +++++----
 sickbeard/clients/generic.py                 | 23 +++---
 sickbeard/clients/mlnet_client.py            |  7 +-
 sickbeard/clients/qbittorrent_client.py      |  8 +--
 sickbeard/clients/rtorrent_client.py         |  8 +--
 sickbeard/clients/transmission_client.py     | 45 ++++++------
 sickbeard/clients/utorrent_client.py         | 38 +++++-----
 sickbeard/config.py                          |  1 -
 sickbeard/dailysearcher.py                   |  2 +-
 sickbeard/db.py                              |  4 +-
 sickbeard/notifiers/freemobile.py            |  2 +-
 sickbeard/providers/extratorrent.py          |  1 -
 sickbeard/providers/freshontv.py             |  2 +-
 sickbeard/providers/hdspace.py               |  1 -
 sickbeard/providers/rarbg.py                 |  5 +-
 sickbeard/providers/t411.py                  |  2 +-
 sickbeard/providers/torrentz.py              |  1 -
 sickbeard/show_queue.py                      |  2 +-
 sickbeard/subtitles.py                       | 23 +++---
 sickbeard/traktChecker.py                    |  1 -
 sickbeard/tv.py                              |  1 -
 sickbeard/webserve.py                        |  1 -
 25 files changed, 155 insertions(+), 165 deletions(-)

diff --git a/sickbeard/__init__.py b/sickbeard/__init__.py
index a8b83ec1e..888de22b0 100644
--- a/sickbeard/__init__.py
+++ b/sickbeard/__init__.py
@@ -48,7 +48,7 @@ from sickbeard import show_queue
 from sickbeard import logger
 from sickbeard import naming
 from sickbeard import dailysearcher
-from sickbeard.indexers.indexer_api import indexerApi
+from sickbeard.indexers import indexer_api
 from sickbeard.indexers.indexer_exceptions import indexer_shownotfound, indexer_showincomplete, indexer_exception, indexer_error, \
     indexer_episodenotfound, indexer_attributenotfound, indexer_seasonnotfound, indexer_userabort, indexerExcepts
 from sickbeard.common import SD
@@ -63,6 +63,8 @@ from configobj import ConfigObj
 import requests
 requests.packages.urllib3.disable_warnings()
 
+indexerApi = indexer_api.indexerApi
+
 PID = None
 
 CFG = None
diff --git a/sickbeard/clients/deluge_client.py b/sickbeard/clients/deluge_client.py
index 3303ce896..5b338c50f 100644
--- a/sickbeard/clients/deluge_client.py
+++ b/sickbeard/clients/deluge_client.py
@@ -21,7 +21,7 @@ from base64 import b64encode
 
 import sickbeard
 from sickbeard import logger
-from .generic import GenericClient
+from sickbeard.clients.generic import GenericClient
 
 
 class DelugeAPI(GenericClient):
@@ -35,22 +35,22 @@ class DelugeAPI(GenericClient):
 
         post_data = json.dumps({"method": "auth.login",
                                 "params": [self.password],
-                                "id": 1
-        })
+                                "id": 1})
+
         try:
             self.response = self.session.post(self.url, data=post_data.encode('utf-8'), verify=sickbeard.TORRENT_VERIFY_CERT)
-        except:
+        except Exception:
             return None
 
         self.auth = self.response.json()["result"]
 
         post_data = json.dumps({"method": "web.connected",
                                 "params": [],
-                                "id": 10
-        })
+                                "id": 10})
+
         try:
             self.response = self.session.post(self.url, data=post_data.encode('utf-8'), verify=sickbeard.TORRENT_VERIFY_CERT)
-        except:
+        except Exception:
             return None
 
         connected = self.response.json()['result']
@@ -58,12 +58,12 @@ class DelugeAPI(GenericClient):
         if not connected:
             post_data = json.dumps({"method": "web.get_hosts",
                                     "params": [],
-                                    "id": 11
-            })
+                                    "id": 11})
             try:
                 self.response = self.session.post(self.url, data=post_data.encode('utf-8'), verify=sickbeard.TORRENT_VERIFY_CERT)
-            except:
+            except Exception:
                 return None
+
             hosts = self.response.json()['result']
             if len(hosts) == 0:
                 logger.log(self.name + u': WebUI does not contain daemons', logger.ERROR)
@@ -71,20 +71,20 @@ class DelugeAPI(GenericClient):
 
             post_data = json.dumps({"method": "web.connect",
                                     "params": [hosts[0][0]],
-                                    "id": 11
-            })
+                                    "id": 11})
+
             try:
                 self.response = self.session.post(self.url, data=post_data.encode('utf-8'), verify=sickbeard.TORRENT_VERIFY_CERT)
-            except:
+            except Exception:
                 return None
 
             post_data = json.dumps({"method": "web.connected",
                                     "params": [],
-                                    "id": 10
-            })
+                                    "id": 10})
+
             try:
                 self.response = self.session.post(self.url, data=post_data.encode('utf-8'), verify=sickbeard.TORRENT_VERIFY_CERT)
-            except:
+            except Exception:
                 return None
 
             connected = self.response.json()['result']
@@ -98,8 +98,8 @@ class DelugeAPI(GenericClient):
 
         post_data = json.dumps({"method": "core.add_torrent_magnet",
                                 "params": [result.url, {}],
-                                "id": 2
-        })
+                                "id": 2})
+
         self._request(method='post', data=post_data)
 
         result.hash = self.response.json()['result']
@@ -110,8 +110,8 @@ class DelugeAPI(GenericClient):
 
         post_data = json.dumps({"method": "core.add_torrent_file",
                                 "params": [result.name + '.torrent', b64encode(result.content), {}],
-                                "id": 2
-        })
+                                "id": 2})
+
         self._request(method='post', data=post_data)
 
         result.hash = self.response.json()['result']
@@ -131,8 +131,8 @@ class DelugeAPI(GenericClient):
             # check if label already exists and create it if not
             post_data = json.dumps({"method": 'label.get_labels',
                                     "params": [],
-                                    "id": 3
-            })
+                                    "id": 3})
+
             self._request(method='post', data=post_data)
             labels = self.response.json()['result']
 
@@ -142,16 +142,16 @@ class DelugeAPI(GenericClient):
                                logger.DEBUG)
                     post_data = json.dumps({"method": 'label.add',
                                             "params": [label],
-                                            "id": 4
-                    })
+                                            "id": 4})
+
                     self._request(method='post', data=post_data)
                     logger.log(self.name + ': ' + label + u" label added to Deluge", logger.DEBUG)
 
-                # add label to torrent    
+                # add label to torrent
                 post_data = json.dumps({"method": 'label.set_torrent',
                                         "params": [result.hash, label],
-                                        "id": 5
-                })
+                                        "id": 5})
+
                 self._request(method='post', data=post_data)
                 logger.log(self.name + ': ' + label + u" label added to torrent", logger.DEBUG)
             else:
@@ -170,14 +170,14 @@ class DelugeAPI(GenericClient):
         if ratio:
             post_data = json.dumps({"method": "core.set_torrent_stop_at_ratio",
                                     "params": [result.hash, True],
-                                    "id": 5
-            })
+                                    "id": 5})
+
             self._request(method='post', data=post_data)
 
             post_data = json.dumps({"method": "core.set_torrent_stop_ratio",
                                     "params": [result.hash, float(ratio)],
-                                    "id": 6
-            })
+                                    "id": 6})
+
             self._request(method='post', data=post_data)
 
             return not self.response.json()['error']
@@ -189,14 +189,14 @@ class DelugeAPI(GenericClient):
         if sickbeard.TORRENT_PATH:
             post_data = json.dumps({"method": "core.set_torrent_move_completed",
                                     "params": [result.hash, True],
-                                    "id": 7
-            })
+                                    "id": 7})
+
             self._request(method='post', data=post_data)
 
             post_data = json.dumps({"method": "core.set_torrent_move_completed_path",
                                     "params": [result.hash, sickbeard.TORRENT_PATH],
-                                    "id": 8
-            })
+                                    "id": 8})
+
             self._request(method='post', data=post_data)
 
             return not self.response.json()['error']
@@ -208,8 +208,8 @@ class DelugeAPI(GenericClient):
         if sickbeard.TORRENT_PAUSED:
             post_data = json.dumps({"method": "core.pause_torrent",
                                     "params": [[result.hash]],
-                                    "id": 9
-            })
+                                    "id": 9})
+
             self._request(method='post', data=post_data)
 
             return not self.response.json()['error']
diff --git a/sickbeard/clients/deluged_client.py b/sickbeard/clients/deluged_client.py
index 81c627382..e2ade8041 100644
--- a/sickbeard/clients/deluged_client.py
+++ b/sickbeard/clients/deluged_client.py
@@ -8,7 +8,7 @@ from base64 import b64encode
 
 import sickbeard
 from sickbeard import logger
-from .generic import GenericClient
+from sickbeard.clients.generic import GenericClient
 from synchronousdeluge import DelugeClient
 
 class DelugeDAPI(GenericClient):
@@ -24,18 +24,18 @@ class DelugeDAPI(GenericClient):
 
         return True
 
-    def connect(self, reconnect = False):
+    def connect(self, reconnect=False):
         hostname = self.host.replace("/", "").split(':')
 
         if not self.drpc or reconnect:
-            self.drpc = DelugeRPC(hostname[1], port = hostname[2], username = self.username, password = self.password)
+            self.drpc = DelugeRPC(hostname[1], port=hostname[2], username=self.username, password=self.password)
 
         return self.drpc
 
     def _add_torrent_uri(self, result):
-        label = sickbeard.TORRENT_LABEL
-        if result.show.is_anime:
-            label = sickbeard.TORRENT_LABEL_ANIME
+        # label = sickbeard.TORRENT_LABEL
+        # if result.show.is_anime:
+        #     label = sickbeard.TORRENT_LABEL_ANIME
 
         options = {
             'add_paused': sickbeard.TORRENT_PAUSED
@@ -51,9 +51,9 @@ class DelugeDAPI(GenericClient):
         return remote_torrent
 
     def _add_torrent_file(self, result):
-        label = sickbeard.TORRENT_LABEL
-        if result.show.is_anime:
-            label = sickbeard.TORRENT_LABEL_ANIME
+        # label = sickbeard.TORRENT_LABEL
+        # if result.show.is_anime:
+        #     label = sickbeard.TORRENT_LABEL_ANIME
 
         if not result.content: result.content = {}
 
@@ -125,7 +125,7 @@ class DelugeRPC(object):
     password = None
     client = None
 
-    def __init__(self, host = 'localhost', port = 58846, username = None, password = None):
+    def __init__(self, host='localhost', port=58846, username=None, password=None):
         super(DelugeRPC, self).__init__()
 
         self.host = host
@@ -140,7 +140,7 @@ class DelugeRPC(object):
     def test(self):
         try:
             self.connect()
-        except:
+        except Exception:
             return False
         return True
 
@@ -151,7 +151,7 @@ class DelugeRPC(object):
             torrent_id = self.client.core.add_torrent_magnet(torrent, options).get()
             if not torrent_id:
                 torrent_id = self._check_torrent(torrent_hash)
-        except Exception as err:
+        except Exception:
             return False
         finally:
             if self.client:
@@ -166,7 +166,7 @@ class DelugeRPC(object):
             torrent_id = self.client.core.add_torrent_file(filename, b64encode(torrent), options).get()
             if not torrent_id:
                 torrent_id = self._check_torrent(torrent_hash)
-        except Exception as err:
+        except Exception:
             return False
         finally:
             if self.client:
@@ -178,7 +178,7 @@ class DelugeRPC(object):
         try:
             self.connect()
             self.client.label.set_torrent(torrent_id, label).get()
-        except Exception as err:
+        except Exception:
             return False
         finally:
             if self.client:
@@ -190,7 +190,7 @@ class DelugeRPC(object):
             self.connect()
             self.client.core.set_torrent_move_completed_path(torrent_id, path).get()
             self.client.core.set_torrent_move_completed(torrent_id, 1).get()
-        except Exception as err:
+        except Exception:
             return False
         finally:
             if self.client:
@@ -225,7 +225,7 @@ class DelugeRPC(object):
         try:
             self.connect()
             self.client.core.pause_torrent(torrent_ids).get()
-        except Exception as err:
+        except Exception:
             return False
         finally:
             if self.client:
diff --git a/sickbeard/clients/download_station_client.py b/sickbeard/clients/download_station_client.py
index bbbd4e86f..5db4dc2e6 100644
--- a/sickbeard/clients/download_station_client.py
+++ b/sickbeard/clients/download_station_client.py
@@ -21,7 +21,7 @@
 # Uses the Synology Download Station API: http://download.synology.com/download/Document/DeveloperGuide/Synology_Download_Station_Web_API.pdf
 
 import sickbeard
-from .generic import GenericClient
+from sickbeard.clients.generic import GenericClient
 
 class DownloadStationAPI(GenericClient):
 
@@ -38,19 +38,21 @@ class DownloadStationAPI(GenericClient):
         try:
             self.response = self.session.get(auth_url, verify=False)
             self.auth = self.response.json()['data']['sid']
-        except:
+        except Exception:
             return None
 
         return self.auth
 
     def _add_torrent_uri(self, result):
 
-        data = {'api':'SYNO.DownloadStation.Task',
-                'version':'1', 'method':'create',
-                'session':'DownloadStation',
-                '_sid':self.auth,
-                'uri':result.url
-                }
+        data = {
+            'api':'SYNO.DownloadStation.Task',
+            'version':'1', 'method':'create',
+            'session':'DownloadStation',
+            '_sid':self.auth,
+            'uri':result.url
+        }
+
         if sickbeard.TORRENT_PATH:
             data['destination'] = sickbeard.TORRENT_PATH
         self._request(method='post', data=data)
@@ -59,12 +61,14 @@ class DownloadStationAPI(GenericClient):
 
     def _add_torrent_file(self, result):
 
-        data = {'api':'SYNO.DownloadStation.Task',
-                'version':'1',
-                'method':'create',
-                'session':'DownloadStation',
-                '_sid':self.auth
-                }
+        data = {
+            'api':'SYNO.DownloadStation.Task',
+            'version':'1',
+            'method':'create',
+            'session':'DownloadStation',
+            '_sid':self.auth
+        }
+
         if sickbeard.TORRENT_PATH:
             data['destination'] = sickbeard.TORRENT_PATH
         files = {'file':(result.name + '.torrent', result.content)}
diff --git a/sickbeard/clients/generic.py b/sickbeard/clients/generic.py
index 125400b50..4603d3ba2 100644
--- a/sickbeard/clients/generic.py
+++ b/sickbeard/clients/generic.py
@@ -5,7 +5,7 @@ from base64 import b16encode, b32decode
 
 import sickbeard
 from sickbeard import logger
-from . import http_error_code
+from sickbeard.clients import http_error_code
 from bencode import bencode, bdecode
 import requests
 from bencode.BTL import BTFailure
@@ -26,22 +26,15 @@ class GenericClient(object):
         self.session = requests.Session()
         self.session.auth = (self.username, self.password)
 
-    def _request(self, method='get', params={}, data=None, files=None):
+    def _request(self, method='get', params=None, data=None, files=None):
 
         if time.time() > self.last_time + 1800 or not self.auth:
             self.last_time = time.time()
             self._get_auth()
 
         logger.log(
-            self.name + u': Requested a ' + method.upper() + ' connection to url ' + self.url + ' with Params= ' + str(
-                params) + ' Data=' + str(data if data else 'None')[0:99] + (
-            '...' if len(data if data else 'None') > 200 else ''), logger.DEBUG)
-
-        logger.log(
-            self.name + u': Requested a ' + method.upper() + ' connection to url ' + self.url + ' with Params= ' + str(
-                params) + (
-                (' Data=' + str(data)[0:100] + ('...' if len(data) > 100 else '')) if data is not None else ""),
-            logger.DEBUG)
+            self.name + u': Requested a ' + method.upper() + ' connection to url ' + self.url +
+            ' with Params: ' + str(params) + ' Data: ' + str(data)[0:99] + ('...' if len(str(data)) > 200 else ''), logger.DEBUG)
 
         if not self.auth:
             logger.log(self.name + u': Authentication Failed', logger.WARNING)
@@ -143,7 +136,7 @@ class GenericClient(object):
     def _get_torrent_hash(self, result):
 
         if result.url.startswith('magnet'):
-            result.hash = re.findall('urn:btih:([\w]{32,40})', result.url)[0]
+            result.hash = re.findall(r'urn:btih:([\w]{32,40})', result.url)[0]
             if len(result.hash) == 32:
                 result.hash = b16encode(b32decode(result.hash)).lower()
         else:
@@ -153,13 +146,13 @@ class GenericClient(object):
 
             try:
                 torrent_bdecode = bdecode(result.content)
-            except BTFailure as e:
+            except BTFailure:
                 logger.log(u'Unable to bdecode torrent', logger.ERROR)
                 logger.log(u'Torrent bencoded data: {0}'.format(str(result.content)), logger.DEBUG)
                 raise
             try:
                 info = torrent_bdecode["info"]
-            except Exception as e:
+            except Exception:
                 logger.log(u'Unable to find info field in torrent', logger.ERROR)
                 raise
             result.hash = sha1(bencode(info)).hexdigest()
@@ -221,7 +214,7 @@ class GenericClient(object):
 
         try:
             self.response = self.session.get(self.url, timeout=120, verify=False)
-        except requests.exceptions.ConnectionError, e:
+        except requests.exceptions.ConnectionError:
             return False, 'Error: ' + self.name + ' Connection Error'
         except (requests.exceptions.MissingSchema, requests.exceptions.InvalidURL):
             return False, 'Error: Invalid ' + self.name + ' host'
diff --git a/sickbeard/clients/mlnet_client.py b/sickbeard/clients/mlnet_client.py
index 3661ee5ca..4db6d0115 100644
--- a/sickbeard/clients/mlnet_client.py
+++ b/sickbeard/clients/mlnet_client.py
@@ -16,9 +16,7 @@
 # You should have received a copy of the GNU General Public License
 # along with SickRage.  If not, see <http://www.gnu.org/licenses/>.
 
-import sickbeard
-from .generic import GenericClient
-from requests.auth import HTTPDigestAuth
+from sickbeard.clients.generic import GenericClient
 
 class mlnetAPI(GenericClient):
     def __init__(self, host=None, username=None, password=None):
@@ -33,7 +31,7 @@ class mlnetAPI(GenericClient):
         try:
             self.response = self.session.get(self.host, verify=False)
             self.auth = self.response.content
-        except:
+        except Exception:
             return None
 
         return self.auth if not self.response.status_code == 404 else None
@@ -51,4 +49,3 @@ class mlnetAPI(GenericClient):
         return self._request(method='get', params=params)
 
 api = mlnetAPI()
-
diff --git a/sickbeard/clients/qbittorrent_client.py b/sickbeard/clients/qbittorrent_client.py
index 7b39a3f09..c78b6b6b0 100644
--- a/sickbeard/clients/qbittorrent_client.py
+++ b/sickbeard/clients/qbittorrent_client.py
@@ -17,7 +17,7 @@
 # along with SickRage.  If not, see <http://www.gnu.org/licenses/>.
 
 import sickbeard
-from .generic import GenericClient
+from sickbeard.clients.generic import GenericClient
 from requests.auth import HTTPDigestAuth
 
 class qbittorrentAPI(GenericClient):
@@ -26,14 +26,14 @@ class qbittorrentAPI(GenericClient):
         super(qbittorrentAPI, self).__init__('qbittorrent', host, username, password)
 
         self.url = self.host
-        self.session.auth = HTTPDigestAuth(self.username, self.password);
+        self.session.auth = HTTPDigestAuth(self.username, self.password)
 
     def _get_auth(self):
 
         try:
             self.response = self.session.get(self.host, verify=False)
             self.auth = self.response.content
-        except:
+        except Exception:
             return None
 
         return self.auth if not self.response.status_code == 404 else None
@@ -60,7 +60,7 @@ class qbittorrentAPI(GenericClient):
         return self._request(method='post', data=data)
 
     def _set_torrent_pause(self, result):
-        
+
         self.url = self.host+'command/resume'
         if sickbeard.TORRENT_PAUSED:
             self.url = self.host+'command/pause'
diff --git a/sickbeard/clients/rtorrent_client.py b/sickbeard/clients/rtorrent_client.py
index 867599cee..5e21e79b5 100644
--- a/sickbeard/clients/rtorrent_client.py
+++ b/sickbeard/clients/rtorrent_client.py
@@ -20,7 +20,7 @@ import traceback
 
 import sickbeard
 from sickbeard import logger
-from .generic import GenericClient
+from sickbeard.clients.generic import GenericClient
 from rtorrent import RTorrent
 
 
@@ -52,7 +52,6 @@ class rTorrentAPI(GenericClient):
         return self.auth
 
     def _add_torrent_uri(self, result):
-        filedata = None
 
         if not self.auth:
             return False
@@ -82,12 +81,11 @@ class rTorrentAPI(GenericClient):
 
             return True
 
-        except Exception as e:
+        except Exception:
             logger.log(traceback.format_exc(), logger.DEBUG)
             return False
 
     def _add_torrent_file(self, result):
-        filedata = None
 
         if not self.auth:
             return False
@@ -125,7 +123,7 @@ class rTorrentAPI(GenericClient):
 
             return True
 
-        except Exception as e:
+        except Exception:
             logger.log(traceback.format_exc(), logger.DEBUG)
             return False
 
diff --git a/sickbeard/clients/transmission_client.py b/sickbeard/clients/transmission_client.py
index 81e81b8a9..608eb479e 100644
--- a/sickbeard/clients/transmission_client.py
+++ b/sickbeard/clients/transmission_client.py
@@ -21,7 +21,7 @@ import json
 from base64 import b64encode
 
 import sickbeard
-from .generic import GenericClient
+from sickbeard.clients.generic import GenericClient
 
 
 class TransmissionAPI(GenericClient):
@@ -47,16 +47,16 @@ class TransmissionAPI(GenericClient):
         try:
             self.response = self.session.post(self.url, data=post_data.encode('utf-8'), timeout=120,
                                               verify=sickbeard.TORRENT_VERIFY_CERT)
-            self.auth = re.search('X-Transmission-Session-Id:\s*(\w+)', self.response.text).group(1)
-        except:
+            self.auth = re.search(r'X-Transmission-Session-Id:\s*(\w+)', self.response.text).group(1)
+        except Exception:
             return None
 
         self.session.headers.update({'x-transmission-session-id': self.auth})
 
         # Validating Transmission authorization
         post_data = json.dumps({'arguments': {},
-                                'method': 'session-get',
-        })
+                                'method': 'session-get'})
+
         self._request(method='post', data=post_data)
 
         return self.auth
@@ -65,11 +65,11 @@ class TransmissionAPI(GenericClient):
 
         arguments = {'filename': result.url,
                      'paused': 1 if sickbeard.TORRENT_PAUSED else 0,
-                     'download-dir': sickbeard.TORRENT_PATH
-        }
+                     'download-dir': sickbeard.TORRENT_PATH}
+
         post_data = json.dumps({'arguments': arguments,
-                                'method': 'torrent-add',
-        })
+                                'method': 'torrent-add'})
+
         self._request(method='post', data=post_data)
 
         return self.response.json()['result'] == "success"
@@ -78,11 +78,11 @@ class TransmissionAPI(GenericClient):
 
         arguments = {'metainfo': b64encode(result.content),
                      'paused': 1 if sickbeard.TORRENT_PAUSED else 0,
-                     'download-dir': sickbeard.TORRENT_PATH
-        }
+                     'download-dir': sickbeard.TORRENT_PATH}
+
         post_data = json.dumps({'arguments': arguments,
-                                'method': 'torrent-add',
-        })
+                                'method': 'torrent-add'})
+
         self._request(method='post', data=post_data)
 
         return self.response.json()['result'] == "success"
@@ -104,11 +104,11 @@ class TransmissionAPI(GenericClient):
 
         arguments = {'ids': [result.hash],
                      'seedRatioLimit': ratio,
-                     'seedRatioMode': mode
-        }
+                     'seedRatioMode': mode}
+
         post_data = json.dumps({'arguments': arguments,
-                                'method': 'torrent-set',
-        })
+                                'method': 'torrent-set'})
+
         self._request(method='post', data=post_data)
 
         return self.response.json()['result'] == "success"
@@ -119,12 +119,11 @@ class TransmissionAPI(GenericClient):
             time = int(60 * float(sickbeard.TORRENT_SEED_TIME))
             arguments = {'ids': [result.hash],
                          'seedIdleLimit': time,
-                         'seedIdleMode': 1
-            }
+                         'seedIdleMode': 1}
 
             post_data = json.dumps({'arguments': arguments,
-                                'method': 'torrent-set',
-            })
+                                    'method': 'torrent-set'})
+
             self._request(method='post', data=post_data)
 
             return self.response.json()['result'] == "success"
@@ -148,8 +147,8 @@ class TransmissionAPI(GenericClient):
             arguments['priority-normal'] = []
 
         post_data = json.dumps({'arguments': arguments,
-                                'method': 'torrent-set',
-        })
+                                'method': 'torrent-set'})
+
         self._request(method='post', data=post_data)
 
         return self.response.json()['result'] == "success"
diff --git a/sickbeard/clients/utorrent_client.py b/sickbeard/clients/utorrent_client.py
index 6a466b445..5bc010aed 100644
--- a/sickbeard/clients/utorrent_client.py
+++ b/sickbeard/clients/utorrent_client.py
@@ -19,7 +19,7 @@
 import re
 
 import sickbeard
-from .generic import GenericClient
+from sickbeard.clients.generic import GenericClient
 
 
 class uTorrentAPI(GenericClient):
@@ -29,23 +29,23 @@ class uTorrentAPI(GenericClient):
 
         self.url = self.host + 'gui/'
 
-    def _request(self, method='get', params={}, files=None):
+    def _request(self, method='get', params=None, data=None, files=None):
 
         # Workaround for uTorrent 2.2.1
         # Need a odict but only supported in 2.7+ and sickrage is 2.6+
         ordered_params = {'token': self.auth}
 
-        for k,v in params.iteritems():
+        for k, v in params.iteritems() or {}:
             ordered_params.update({k: v})
 
-        return super(uTorrentAPI, self)._request(method=method, params=ordered_params, files=files)
+        return super(uTorrentAPI, self)._request(method=method, params=ordered_params, data=data, files=files)
 
     def _get_auth(self):
 
         try:
             self.response = self.session.get(self.url + 'token.html', verify=False)
             self.auth = re.findall("<div.*?>(.*?)</", self.response.text)[0]
-        except:
+        except Exception:
             return None
 
         return self.auth if not self.response.status_code == 404 else None
@@ -70,8 +70,8 @@ class uTorrentAPI(GenericClient):
         params = {'action': 'setprops',
                   'hash': result.hash,
                   's': 'label',
-                  'v': label
-        }
+                  'v': label}
+
         return self._request(params=params)
 
     def _set_torrent_ratio(self, result):
@@ -84,14 +84,14 @@ class uTorrentAPI(GenericClient):
             params = {'action': 'setprops',
                       'hash': result.hash,
                       's': 'seed_override',
-                      'v': '1'
-            }
+                      'v': '1'}
+
             if self._request(params=params):
                 params = {'action': 'setprops',
                           'hash': result.hash,
                           's': 'seed_ratio',
-                          'v': float(ratio) * 10
-                }
+                          'v': float(ratio) * 10}
+
                 return self._request(params=params)
             else:
                 return False
@@ -105,27 +105,27 @@ class uTorrentAPI(GenericClient):
             params = {'action': 'setprops',
                       'hash': result.hash,
                       's': 'seed_override',
-                      'v': '1'
-            }
+                      'v': '1'}
+
             if self._request(params=params):
                 params = {'action': 'setprops',
                           'hash': result.hash,
                           's': 'seed_time',
-                          'v': time
-                }
+                          'v': time}
+
                 return self._request(params=params)
             else:
                 return False
         else:
-            return True         
-        
+            return True
+
     def _set_torrent_priority(self, result):
 
         if result.priority == 1:
             params = {'action': 'queuetop', 'hash': result.hash}
             return self._request(params=params)
         else:
-            return True            
+            return True
 
     def _set_torrent_pause(self, result):
 
@@ -137,4 +137,4 @@ class uTorrentAPI(GenericClient):
         return self._request(params=params)
 
 
-api = uTorrentAPI()       
+api = uTorrentAPI()
diff --git a/sickbeard/config.py b/sickbeard/config.py
index 78cdf8a3f..b8c0ec6aa 100644
--- a/sickbeard/config.py
+++ b/sickbeard/config.py
@@ -578,7 +578,6 @@ def check_setting_float(config, cfg_name, item_name, def_val, silent=True):
 def check_setting_str(config, cfg_name, item_name, def_val, silent=True, censor_log=False):
     # For passwords you must include the word `password` in the item_name and add `helpers.encrypt(ITEM_NAME, ENCRYPTION_VERSION)` in save_config()
     if bool(item_name.find('password') + 1):
-        log = False
         encryption_version = sickbeard.ENCRYPTION_VERSION
     else:
         encryption_version = 0
diff --git a/sickbeard/dailysearcher.py b/sickbeard/dailysearcher.py
index 02c7950d0..55e7bc8f8 100644
--- a/sickbeard/dailysearcher.py
+++ b/sickbeard/dailysearcher.py
@@ -26,7 +26,7 @@ from sickbeard import logger
 from sickbeard import db
 from sickbeard import common
 from sickbeard import helpers
-from sickbeard import sbdatetime, network_timezones
+from sickbeard import network_timezones
 from sickrage.helper.exceptions import MultipleShowObjectsException
 
 
diff --git a/sickbeard/db.py b/sickbeard/db.py
index a82b8991b..9d525fa4a 100644
--- a/sickbeard/db.py
+++ b/sickbeard/db.py
@@ -77,7 +77,7 @@ class DBConnection(object):
             if not args:
                 return self.connection.cursor().execute(query)
             return self.connection.cursor().execute(query, args)
-        except Exception as e:
+        except Exception:
             raise
 
     def execute(self, query, args=None, fetchall=False, fetchone=False):
@@ -97,7 +97,7 @@ class DBConnection(object):
                 return self._execute(query, args).fetchone()
             else:
                 return self._execute(query, args)
-        except Exception as e:
+        except Exception:
             raise
 
     def checkDBVersion(self):
diff --git a/sickbeard/notifiers/freemobile.py b/sickbeard/notifiers/freemobile.py
index 6d3c75b7d..ab203bcba 100644
--- a/sickbeard/notifiers/freemobile.py
+++ b/sickbeard/notifiers/freemobile.py
@@ -53,7 +53,7 @@ class FreeMobileNotifier:
         req = urllib2.Request(URL)
         # send the request to Free Mobile
         try:
-            reponse = urllib2.urlopen(req)
+            urllib2.urlopen(req)
         except IOError, e:
             if hasattr(e,'code'):
                 if e.code == 400:
diff --git a/sickbeard/providers/extratorrent.py b/sickbeard/providers/extratorrent.py
index dff4f2baf..543736f00 100644
--- a/sickbeard/providers/extratorrent.py
+++ b/sickbeard/providers/extratorrent.py
@@ -19,7 +19,6 @@
 import re
 import traceback
 import xmltodict
-import HTMLParser
 from xml.parsers.expat import ExpatError
 
 from sickbeard import logger
diff --git a/sickbeard/providers/freshontv.py b/sickbeard/providers/freshontv.py
index 611d5c66a..3c5b7688d 100644
--- a/sickbeard/providers/freshontv.py
+++ b/sickbeard/providers/freshontv.py
@@ -225,7 +225,7 @@ class FreshOnTVProvider(generic.TorrentProvider):
 
                                 items[mode].append(item)
 
-                except Exception as e:
+                except Exception:
                     logger.log(u"Failed parsing provider. Traceback: %s" % traceback.format_exc(), logger.ERROR)
 
             # For each search mode sort all the items by seeders if available
diff --git a/sickbeard/providers/hdspace.py b/sickbeard/providers/hdspace.py
index a06c291ee..48eec48a7 100644
--- a/sickbeard/providers/hdspace.py
+++ b/sickbeard/providers/hdspace.py
@@ -21,7 +21,6 @@
 import re
 import urllib
 import requests
-import traceback
 from bs4 import BeautifulSoup
 
 from sickbeard import logger
diff --git a/sickbeard/providers/rarbg.py b/sickbeard/providers/rarbg.py
index dbf2c95b3..cfd171f83 100644
--- a/sickbeard/providers/rarbg.py
+++ b/sickbeard/providers/rarbg.py
@@ -83,7 +83,6 @@ class RarbgProvider(generic.TorrentProvider):
         if self.token and self.tokenExpireDate and datetime.datetime.now() < self.tokenExpireDate:
             return True
 
-        resp_json = None
 
         response = self.getURL(self.urls['token'], timeout=30, json=True)
         if not response:
@@ -209,7 +208,7 @@ class RarbgProvider(generic.TorrentProvider):
                         data_json = json.loads(data.group())
                     else:
                         data_json = {}
-                except Exception as e:
+                except Exception:
                     logger.log(u"JSON load failed: %s" % traceback.format_exc(), logger.ERROR)
                     logger.log(u"JSON load failed. Data dump: %s" % data, logger.DEBUG)
                     continue
@@ -222,7 +221,7 @@ class RarbgProvider(generic.TorrentProvider):
                             size = item['size']
                             seeders = item['seeders']
                             leechers = item['leechers']
-                            pubdate = item['pubdate']
+                            # pubdate = item['pubdate']
 
                             if not all([title, download_url]):
                                 continue
diff --git a/sickbeard/providers/t411.py b/sickbeard/providers/t411.py
index bdb946703..4a1d4d2f9 100644
--- a/sickbeard/providers/t411.py
+++ b/sickbeard/providers/t411.py
@@ -143,7 +143,7 @@ class T411Provider(generic.TorrentProvider):
 
                                 items[mode].append(item)
 
-                            except Exception as e:
+                            except Exception:
                                 logger.log(u"Invalid torrent data, skipping result: %s" % torrent, logger.DEBUG)
                                 logger.log(u"Failed parsing provider. Traceback: %s" % traceback.format_exc(), logger.DEBUG)
                                 continue
diff --git a/sickbeard/providers/torrentz.py b/sickbeard/providers/torrentz.py
index 15c172b14..2741708db 100644
--- a/sickbeard/providers/torrentz.py
+++ b/sickbeard/providers/torrentz.py
@@ -21,7 +21,6 @@ import re
 import time
 import traceback
 import xmltodict
-import HTMLParser
 from six.moves import urllib
 from xml.parsers.expat import ExpatError
 
diff --git a/sickbeard/show_queue.py b/sickbeard/show_queue.py
index 359a6210a..b8342b151 100644
--- a/sickbeard/show_queue.py
+++ b/sickbeard/show_queue.py
@@ -516,7 +516,7 @@ class QueueItemRename(ShowQueueItem):
         logger.log(u"Performing rename on " + self.show.name)
 
         try:
-            show_loc = self.show.location
+            self.show.location
         except ShowDirectoryNotFoundException:
             logger.log(u"Can't perform rename on " + self.show.name + " when the show dir is missing.", logger.WARNING)
             return
diff --git a/sickbeard/subtitles.py b/sickbeard/subtitles.py
index 248d63326..ab84da88b 100644
--- a/sickbeard/subtitles.py
+++ b/sickbeard/subtitles.py
@@ -57,6 +57,8 @@ entry_points = {
     ]
 }
 
+# pylint: disable=W0212
+# Access to a protected member of a client class
 distribution._ep_map = pkg_resources.EntryPoint.parse_map(entry_points, distribution)
 pkg_resources.working_set.add(distribution)
 
@@ -341,7 +343,7 @@ def subtitleLanguageFilter():
 def subtitleCodeFilter():
     return [Language.fromopensubtitles(language).opensubtitles for language in language_converters['opensubtitles'].codes if len(language) == 3]
 
-class SubtitlesFinder():
+class SubtitlesFinder(object):
     """
     The SubtitlesFinder will be executed every hour but will not necessarly search
     and download subtitles. Only if the defined rule is true
@@ -373,7 +375,8 @@ class SubtitlesFinder():
         # you have 5 minutes to understand that one. Good luck
         myDB = db.DBConnection()
 
-        sqlResults = myDB.select('SELECT s.show_name, e.showid, e.season, e.episode, e.status, e.subtitles, ' +
+        sqlResults = myDB.select(
+            'SELECT s.show_name, e.showid, e.season, e.episode, e.status, e.subtitles, ' +
             'e.subtitles_searchcount AS searchcount, e.subtitles_lastsearch AS lastsearch, e.location, (? - e.airdate) AS airdate_daydiff ' +
             'FROM tv_episodes AS e INNER JOIN tv_shows AS s ON (e.showid = s.indexer_id) ' +
             'WHERE s.subtitles = 1 AND e.subtitles NOT LIKE (?) ' +
@@ -392,11 +395,12 @@ class SubtitlesFinder():
                 logger.log(u'Episode file does not exist, cannot download subtitles for episode %dx%d of show %s' % (epToSub['season'], epToSub['episode'], epToSub['show_name']), logger.DEBUG)
                 continue
 
-            # Old shows rule
-            throwaway = datetime.datetime.strptime('20110101', '%Y%m%d')
+            # http://bugs.python.org/issue7980#msg221094
+            # I dont think this needs done here, but keeping to be safe
+            datetime.datetime.strptime('20110101', '%Y%m%d')
             if ((epToSub['airdate_daydiff'] > 7 and epToSub['searchcount'] < 2 and now - datetime.datetime.strptime(epToSub['lastsearch'], dateTimeFormat) > datetime.timedelta(hours=rules['old'][epToSub['searchcount']])) or
                 # Recent shows rule
-                    (epToSub['airdate_daydiff'] <= 7 and epToSub['searchcount'] < 7 and now - datetime.datetime.strptime(epToSub['lastsearch'], dateTimeFormat) > datetime.timedelta(hours=rules['new'][epToSub['searchcount']]))):
+                (epToSub['airdate_daydiff'] <= 7 and epToSub['searchcount'] < 7 and now - datetime.datetime.strptime(epToSub['lastsearch'], dateTimeFormat) > datetime.timedelta(hours=rules['new'][epToSub['searchcount']]))):
 
                 logger.log(u'Downloading subtitles for episode %dx%d of show %s' % (epToSub['season'], epToSub['episode'], epToSub['show_name']), logger.DEBUG)
 
@@ -425,7 +429,8 @@ class SubtitlesFinder():
 
         self.amActive = False
 
-    def _getRules(self):
+    @staticmethod
+    def _getRules():
         """
         Define the hours to wait between 2 subtitles search depending on:
         - the episode: new or old
@@ -450,14 +455,14 @@ def run_subs_extra_scripts(epObj, foundSubs):
                     subpath = ek(os.path.join, ek(os.path.dirname, subpath), sickbeard.SUBTITLES_DIR, ek(os.path.basename, subpath))
 
                 inner_cmd = script_cmd + [video.name, subpath, sub.language.opensubtitles, epObj['show.name'],
-                                str(epObj['season']), str(epObj['episode']), epObj['name'], str(epObj['show.indexerid'])]
+                                          str(epObj['season']), str(epObj['episode']), epObj['name'], str(epObj['show.indexerid'])]
 
                 # use subprocess to run the command and capture output
                 logger.log(u"Executing command: %s" % inner_cmd)
                 try:
                     p = subprocess.Popen(inner_cmd, stdin=subprocess.PIPE, stdout=subprocess.PIPE,
-                            stderr=subprocess.STDOUT, cwd=sickbeard.PROG_DIR)
-                    out, err = p.communicate()  # @UnusedVariable
+                                         stderr=subprocess.STDOUT, cwd=sickbeard.PROG_DIR)
+                    out, _ = p.communicate()  # @UnusedVariable
                     logger.log(u"Script result: %s" % out, logger.DEBUG)
 
                 except Exception as e:
diff --git a/sickbeard/traktChecker.py b/sickbeard/traktChecker.py
index 5f81ed3ad..42efb9394 100644
--- a/sickbeard/traktChecker.py
+++ b/sickbeard/traktChecker.py
@@ -31,7 +31,6 @@ from sickbeard.common import SKIPPED
 from sickbeard.common import UNKNOWN
 from sickbeard.common import WANTED
 from sickrage.helper.encoding import ek
-from sickrage.helper.exceptions import ex
 from common import Quality
 from libtrakt import *
 from libtrakt.exceptions import traktException
diff --git a/sickbeard/tv.py b/sickbeard/tv.py
index e7339448f..d668f76d5 100644
--- a/sickbeard/tv.py
+++ b/sickbeard/tv.py
@@ -45,7 +45,6 @@ from sickbeard import notifiers
 from sickbeard import postProcessor
 from sickbeard import subtitles
 from sickbeard.blackandwhitelist import BlackAndWhiteList
-from sickbeard import sbdatetime
 from sickbeard import network_timezones
 from sickbeard.indexers.indexer_config import INDEXER_TVRAGE
 from sickbeard.name_parser.parser import NameParser, InvalidNameException, InvalidShowException
diff --git a/sickbeard/webserve.py b/sickbeard/webserve.py
index 782c460ea..a00506ddd 100644
--- a/sickbeard/webserve.py
+++ b/sickbeard/webserve.py
@@ -3697,7 +3697,6 @@ class ConfigGeneral(Config):
 
         if date_preset:
             sickbeard.DATE_PRESET = date_preset
-            discarded_na_data = date_preset_na
 
         if indexer_default:
             sickbeard.INDEXER_DEFAULT = config.to_int(indexer_default)
-- 
GitLab


From 73e32034fe9746089aafac917308d539ca3d8605 Mon Sep 17 00:00:00 2001
From: labrys <labrys@useres.noreply.github.com>
Date: Sat, 7 Nov 2015 10:56:15 -0500
Subject: [PATCH 064/215] PEP 263: Add encoding declaration

---
 sickbeard/providers/tntvillage.py | 1 +
 1 file changed, 1 insertion(+)

diff --git a/sickbeard/providers/tntvillage.py b/sickbeard/providers/tntvillage.py
index a41cd093b..6d00619ec 100644
--- a/sickbeard/providers/tntvillage.py
+++ b/sickbeard/providers/tntvillage.py
@@ -1,3 +1,4 @@
+# coding=utf-8
 # Author: Giovanni Borri
 # Modified by gborri, https://github.com/gborri for TNTVillage
 #
-- 
GitLab


From ea44a79e618e68a71f71c91b57c1c8345517c005 Mon Sep 17 00:00:00 2001
From: labrys <labrys@useres.noreply.github.com>
Date: Sat, 7 Nov 2015 10:37:07 -0500
Subject: [PATCH 065/215] PEP 8: Add and remove whitespace and blank lines

---
 sickbeard/providers/tntvillage.py | 89 +++++++++++++++----------------
 1 file changed, 44 insertions(+), 45 deletions(-)

diff --git a/sickbeard/providers/tntvillage.py b/sickbeard/providers/tntvillage.py
index 6d00619ec..1483df349 100644
--- a/sickbeard/providers/tntvillage.py
+++ b/sickbeard/providers/tntvillage.py
@@ -29,35 +29,35 @@ from sickbeard.bs4_parser import BS4Parser
 from sickbeard.name_parser.parser import NameParser, InvalidNameException, InvalidShowException
 from sickrage.helper.exceptions import AuthException
 
-category_excluded = {'Sport' : 22,
-                     'Teatro' : 23,
-                     'Video Musicali' : 21,
-                     'Film' : 4,
-                     'Musica' : 2,
-                     'Students Releases' : 13,
-                     'E Books' : 3,
-                     'Linux' : 6,
-                     'Macintosh' : 9,
-                     'Windows Software' : 10,
-                     'Pc Game' : 11,
-                     'Playstation 2' : 12,
-                     'Wrestling' : 24,
-                     'Varie' : 25,
-                     'Xbox' : 26,
-                     'Immagini sfondi' : 27,
-                     'Altri Giochi' : 28,
-                     'Fumetteria' : 30,
-                     'Trash' : 31,
-                     'PlayStation 1' : 32,
-                     'PSP Portable' : 33,
-                     'A Book' : 34,
-                     'Podcast' : 35,
-                     'Edicola' : 36,
-                     'Mobile' : 37}
+category_excluded = {'Sport': 22,
+                     'Teatro': 23,
+                     'Video Musicali': 21,
+                     'Film': 4,
+                     'Musica': 2,
+                     'Students Releases': 13,
+                     'E Books': 3,
+                     'Linux': 6,
+                     'Macintosh': 9,
+                     'Windows Software': 10,
+                     'Pc Game': 11,
+                     'Playstation 2': 12,
+                     'Wrestling': 24,
+                     'Varie': 25,
+                     'Xbox': 26,
+                     'Immagini sfondi': 27,
+                     'Altri Giochi': 28,
+                     'Fumetteria': 30,
+                     'Trash': 31,
+                     'PlayStation 1': 32,
+                     'PSP Portable': 33,
+                     'A Book': 34,
+                     'Podcast': 35,
+                     'Edicola': 36,
+                     'Mobile': 37}
+
 
 class TNTVillageProvider(generic.TorrentProvider):
     def __init__(self):
-
         generic.TorrentProvider.__init__(self, "TNTVillage")
 
         self.supportsBacklog = True
@@ -87,19 +87,19 @@ class TNTVillageProvider(generic.TorrentProvider):
                        ' 720p HEVC',
                        ' 720p']
 
-        self.category_dict = {'Serie TV' : 29,
-                              'Cartoni' : 8,
-                              'Anime' : 7,
-                              'Programmi e Film TV' : 1,
-                              'Documentari' : 14,
-                              'All' : 0}
+        self.category_dict = {'Serie TV': 29,
+                              'Cartoni': 8,
+                              'Anime': 7,
+                              'Programmi e Film TV': 1,
+                              'Documentari': 14,
+                              'All': 0}
 
-        self.urls = {'base_url' : 'http://forum.tntvillage.scambioetico.org',
-                     'login' : 'http://forum.tntvillage.scambioetico.org/index.php?act=Login&CODE=01',
-                     'detail' : 'http://forum.tntvillage.scambioetico.org/index.php?showtopic=%s',
-                     'search' : 'http://forum.tntvillage.scambioetico.org/?act=allreleases&%s',
-                     'search_page' : 'http://forum.tntvillage.scambioetico.org/?act=allreleases&st={0}&{1}',
-                     'download' : 'http://forum.tntvillage.scambioetico.org/index.php?act=Attach&type=post&id=%s'}
+        self.urls = {'base_url': 'http://forum.tntvillage.scambioetico.org',
+                     'login': 'http://forum.tntvillage.scambioetico.org/index.php?act=Login&CODE=01',
+                     'detail': 'http://forum.tntvillage.scambioetico.org/index.php?showtopic=%s',
+                     'search': 'http://forum.tntvillage.scambioetico.org/?act=allreleases&%s',
+                     'search_page': 'http://forum.tntvillage.scambioetico.org/?act=allreleases&st={0}&{1}',
+                     'download': 'http://forum.tntvillage.scambioetico.org/index.php?act=Attach&type=post&id=%s'}
 
         self.url = self.urls['base_url']
 
@@ -132,8 +132,7 @@ class TNTVillageProvider(generic.TorrentProvider):
             logger.log(u"Unable to connect to provider", logger.WARNING)
             return False
 
-        if re.search('Sono stati riscontrati i seguenti errori', response) \
-        or re.search('<title>Connettiti</title>', response):
+        if re.search('Sono stati riscontrati i seguenti errori', response) or re.search('<title>Connettiti</title>', response):
             logger.log(u"Invalid username or password. Check your settings", logger.WARNING)
             return False
 
@@ -296,7 +295,7 @@ class TNTVillageProvider(generic.TorrentProvider):
                 search_string = str(search_string).replace('.', ' ')
 
                 for x in range(0, y):
-                    z = x*20
+                    z = x * 20
                     if last_page:
                         break
 
@@ -308,7 +307,7 @@ class TNTVillageProvider(generic.TorrentProvider):
                     if mode is not 'RSS':
                         logger.log(u"Search string: %s " % search_string, logger.DEBUG)
 
-                    logger.log(u"Search URL: %s" %  searchURL, logger.DEBUG)
+                    logger.log(u"Search URL: %s" % searchURL, logger.DEBUG)
                     data = self.getURL(searchURL)
                     if not data:
                         logger.log(u"No data returned from provider", logger.DEBUG)
@@ -316,7 +315,7 @@ class TNTVillageProvider(generic.TorrentProvider):
 
                     try:
                         with BS4Parser(data, features=["html5lib", "permissive"]) as html:
-                            torrent_table = html.find('table', attrs={'class' : 'copyright'})
+                            torrent_table = html.find('table', attrs={'class': 'copyright'})
                             torrent_rows = torrent_table.find_all('tr') if torrent_table else []
 
                             # Continue only if one Release is found
@@ -354,11 +353,11 @@ class TNTVillageProvider(generic.TorrentProvider):
                                     title += filename_qt
 
                                 if not self._is_italian(result) and not self.subtitle:
-                                    logger.log(u"Torrent is subtitled, skipping: %s "  % title, logger.DEBUG)
+                                    logger.log(u"Torrent is subtitled, skipping: %s " % title, logger.DEBUG)
                                     continue
 
                                 if self.engrelease and not self._is_english(result):
-                                    logger.log(u"Torrent isnt english audio/subtitled , skipping: %s "  % title, logger.DEBUG)
+                                    logger.log(u"Torrent isnt english audio/subtitled , skipping: %s " % title, logger.DEBUG)
                                     continue
 
                                 search_show = re.split(r'([Ss][\d{1,2}]+)', search_string)[0]
-- 
GitLab


From f273b45e5673fa3adefccb504d9739852d4fcc99 Mon Sep 17 00:00:00 2001
From: labrys <labrys@useres.noreply.github.com>
Date: Sat, 7 Nov 2015 10:54:32 -0500
Subject: [PATCH 066/215] PEP 8: Convert lambda expression to a def

---
 sickbeard/providers/tntvillage.py | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/sickbeard/providers/tntvillage.py b/sickbeard/providers/tntvillage.py
index 1483df349..5b4fc5d4f 100644
--- a/sickbeard/providers/tntvillage.py
+++ b/sickbeard/providers/tntvillage.py
@@ -182,7 +182,8 @@ class TNTVillageProvider(generic.TorrentProvider):
             file_quality = (torrent_rows.find_all('td'))[1].get_text()
             logger.log(u"Episode quality: %s" % file_quality, logger.DEBUG)
 
-        checkName = lambda list, func: func([re.search(x, file_quality, re.I) for x in list])
+        def checkName(options, func):
+            return func([re.search(option, file_quality, re.I) for option in options])
 
         dvdOptions = checkName(["dvd", "dvdrip", "dvdmux", "DVD9", "DVD5"], any)
         bluRayOptions = checkName(["BD", "BDmux", "BDrip", "BRrip", "Bluray"], any)
-- 
GitLab


From b0ba95e57d7565badb033c245021e3d95bbbf5a3 Mon Sep 17 00:00:00 2001
From: labrys <labrys@useres.noreply.github.com>
Date: Sat, 7 Nov 2015 12:02:53 -0500
Subject: [PATCH 067/215] PEP 8: Fix indentation and remove excess blank lines

---
 sickbeard/clients/__init__.py | 36 +++++++++++++++++------------------
 1 file changed, 18 insertions(+), 18 deletions(-)

diff --git a/sickbeard/clients/__init__.py b/sickbeard/clients/__init__.py
index be0201d36..2c67dff7f 100644
--- a/sickbeard/clients/__init__.py
+++ b/sickbeard/clients/__init__.py
@@ -16,18 +16,17 @@
 # You should have received a copy of the GNU General Public License
 # along with SickRage.  If not, see <http://www.gnu.org/licenses/>.
 
-__all__ = ['utorrent',
-           'transmission',
-           'deluge',
-           'deluged',
-           'download_station',
-           'rtorrent',
-           'qbittorrent',
-           'mlnet'
+__all__ = [
+    'utorrent',
+    'transmission',
+    'deluge',
+    'deluged',
+    'download_station',
+    'rtorrent',
+    'qbittorrent',
+    'mlnet'
 ]
 
-
-
 # Mapping error status codes to official W3C names
 http_error_code = {
     300: 'Multiple Choices',
@@ -103,14 +102,15 @@ http_error_code = {
     599: 'Network connect timeout error '
 }
 
-default_host = {'utorrent': 'http://localhost:8000',
-                'transmission': 'http://localhost:9091',
-                'deluge': 'http://localhost:8112',
-                'deluged': 'scgi://localhost:58846',
-                'download_station': 'http://localhost:5000',
-                'rtorrent': 'scgi://localhost:5000',
-                'qbittorrent': 'http://localhost:8080',
-                'mlnet': 'http://localhost:4080'
+default_host = {
+    'utorrent': 'http://localhost:8000',
+    'transmission': 'http://localhost:9091',
+    'deluge': 'http://localhost:8112',
+    'deluged': 'scgi://localhost:58846',
+    'download_station': 'http://localhost:5000',
+    'rtorrent': 'scgi://localhost:5000',
+    'qbittorrent': 'http://localhost:8080',
+    'mlnet': 'http://localhost:4080'
 }
 
 
-- 
GitLab


From 9f88c26cec1e841e2487eb1c9291a547d6354944 Mon Sep 17 00:00:00 2001
From: labrys <labrys@useres.noreply.github.com>
Date: Sat, 7 Nov 2015 12:03:08 -0500
Subject: [PATCH 068/215] PEP 263: Add encoding declaration

---
 sickbeard/clients/__init__.py | 1 +
 1 file changed, 1 insertion(+)

diff --git a/sickbeard/clients/__init__.py b/sickbeard/clients/__init__.py
index 2c67dff7f..094b2ec67 100644
--- a/sickbeard/clients/__init__.py
+++ b/sickbeard/clients/__init__.py
@@ -1,3 +1,4 @@
+# coding=utf-8
 # Author: Nic Wolfe <nic@wolfeden.ca>
 # URL: http://code.google.com/p/sickbeard/
 #
-- 
GitLab


From 93990f09aae60eb765093a179e69703ee7711b5f Mon Sep 17 00:00:00 2001
From: labrys <labrys@useres.noreply.github.com>
Date: Sat, 7 Nov 2015 12:15:58 -0500
Subject: [PATCH 069/215] Add a todo for handling duplicate http error codes in
 dict

---
 sickbeard/clients/__init__.py | 1 +
 1 file changed, 1 insertion(+)

diff --git a/sickbeard/clients/__init__.py b/sickbeard/clients/__init__.py
index 094b2ec67..ddc11114a 100644
--- a/sickbeard/clients/__init__.py
+++ b/sickbeard/clients/__init__.py
@@ -30,6 +30,7 @@ __all__ = [
 
 # Mapping error status codes to official W3C names
 http_error_code = {
+    # todo: Handle error codes with duplicates (e.g. 451, 499)
     300: 'Multiple Choices',
     301: 'Moved Permanently',
     302: 'Found',
-- 
GitLab


From 3fdb89e29ce8261c22af93958a15ba1d7970b116 Mon Sep 17 00:00:00 2001
From: labrys <labrys@useres.noreply.github.com>
Date: Sat, 7 Nov 2015 12:35:41 -0500
Subject: [PATCH 070/215] PEP 263: Add encoding declaration

---
 sickbeard/clients/deluge_client.py | 1 +
 1 file changed, 1 insertion(+)

diff --git a/sickbeard/clients/deluge_client.py b/sickbeard/clients/deluge_client.py
index 5b338c50f..1812c66c8 100644
--- a/sickbeard/clients/deluge_client.py
+++ b/sickbeard/clients/deluge_client.py
@@ -1,3 +1,4 @@
+# coding=utf-8
 # Author: Mr_Orange <mr_orange@hotmail.it>
 # URL: http://code.google.com/p/sickbeard/
 #
-- 
GitLab


From 13794b2edfa7060df2f3e7730cefa9edbf541209 Mon Sep 17 00:00:00 2001
From: labrys <labrys@useres.noreply.github.com>
Date: Sat, 7 Nov 2015 12:31:55 -0500
Subject: [PATCH 071/215] PEP 8: Remove blank lines for consistency

---
 sickbeard/clients/deluge_client.py | 1 -
 1 file changed, 1 deletion(-)

diff --git a/sickbeard/clients/deluge_client.py b/sickbeard/clients/deluge_client.py
index 1812c66c8..a42a41aa8 100644
--- a/sickbeard/clients/deluge_client.py
+++ b/sickbeard/clients/deluge_client.py
@@ -161,7 +161,6 @@ class DelugeAPI(GenericClient):
 
         return not self.response.json()['error']
 
-
     def _set_torrent_ratio(self, result):
 
         ratio = None
-- 
GitLab


From ca2b8a07a1ab92ea48cf11b2a400c4361b6074c0 Mon Sep 17 00:00:00 2001
From: labrys <labrys@useres.noreply.github.com>
Date: Sat, 7 Nov 2015 12:34:14 -0500
Subject: [PATCH 072/215] PEP 8: Convert None comparisons from operators to 'is
 / is not None'

---
 sickbeard/clients/deluge_client.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/sickbeard/clients/deluge_client.py b/sickbeard/clients/deluge_client.py
index a42a41aa8..6e6a92a14 100644
--- a/sickbeard/clients/deluge_client.py
+++ b/sickbeard/clients/deluge_client.py
@@ -137,7 +137,7 @@ class DelugeAPI(GenericClient):
             self._request(method='post', data=post_data)
             labels = self.response.json()['result']
 
-            if labels != None:
+            if labels is not None:
                 if label not in labels:
                     logger.log(self.name + ': ' + label + u" label does not exist in Deluge we must add it",
                                logger.DEBUG)
-- 
GitLab


From fc62243ff54e4320fd08e954028364ac83e0ce72 Mon Sep 17 00:00:00 2001
From: labrys <labrys@useres.noreply.github.com>
Date: Sat, 7 Nov 2015 12:56:58 -0500
Subject: [PATCH 073/215] Combine duplicate conditional check

---
 sickbeard/clients/deluged_client.py | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/sickbeard/clients/deluged_client.py b/sickbeard/clients/deluged_client.py
index e2ade8041..e252c91af 100644
--- a/sickbeard/clients/deluged_client.py
+++ b/sickbeard/clients/deluged_client.py
@@ -55,9 +55,8 @@ class DelugeDAPI(GenericClient):
         # if result.show.is_anime:
         #     label = sickbeard.TORRENT_LABEL_ANIME
 
-        if not result.content: result.content = {}
-
         if not result.content:
+            result.content = {}
             return None
 
         options = {
-- 
GitLab


From 306e128c6c526756669314183ce95c0b78acb313 Mon Sep 17 00:00:00 2001
From: labrys <labrys@useres.noreply.github.com>
Date: Sat, 7 Nov 2015 12:49:56 -0500
Subject: [PATCH 074/215] PEP 8: Add and remove blank lines for consistency

---
 sickbeard/clients/deluged_client.py | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/sickbeard/clients/deluged_client.py b/sickbeard/clients/deluged_client.py
index e252c91af..26a93931a 100644
--- a/sickbeard/clients/deluged_client.py
+++ b/sickbeard/clients/deluged_client.py
@@ -11,6 +11,7 @@ from sickbeard import logger
 from sickbeard.clients.generic import GenericClient
 from synchronousdeluge import DelugeClient
 
+
 class DelugeDAPI(GenericClient):
 
     drpc = None
@@ -85,7 +86,6 @@ class DelugeDAPI(GenericClient):
             return self.drpc.set_torrent_label(result.hash, label)
         return True
 
-
     def _set_torrent_ratio(self, result):
         if result.ratio:
             ratio = float(result.ratio)
@@ -116,6 +116,7 @@ class DelugeDAPI(GenericClient):
         else:
             return False, 'Error: Unable to Authenticate!  Please check your config!'
 
+
 class DelugeRPC(object):
 
     host = 'localhost'
-- 
GitLab


From 3020f6c285127089e6cfe2d9b52880650f2727f6 Mon Sep 17 00:00:00 2001
From: labrys <labrys@useres.noreply.github.com>
Date: Sat, 7 Nov 2015 12:57:28 -0500
Subject: [PATCH 075/215] PEP 263: Add encoding declaration

---
 sickbeard/clients/deluged_client.py | 1 +
 1 file changed, 1 insertion(+)

diff --git a/sickbeard/clients/deluged_client.py b/sickbeard/clients/deluged_client.py
index 26a93931a..1c956e867 100644
--- a/sickbeard/clients/deluged_client.py
+++ b/sickbeard/clients/deluged_client.py
@@ -1,3 +1,4 @@
+# coding=utf-8
 # Author: Paul Wollaston
 # Contributions: Luke Mullan
 #
-- 
GitLab


From 2984dc51f6d7e1c01187308899cdf2e3576a396f Mon Sep 17 00:00:00 2001
From: Alexis Tyler <xo@wvvw.me>
Date: Sun, 8 Nov 2015 04:42:49 +1030
Subject: [PATCH 076/215] add base .jshintrc for js linting

---
 .jshintrc | 30 ++++++++++++++++++++++++++++++
 1 file changed, 30 insertions(+)
 create mode 100644 .jshintrc

diff --git a/.jshintrc b/.jshintrc
new file mode 100644
index 000000000..a0611d71d
--- /dev/null
+++ b/.jshintrc
@@ -0,0 +1,30 @@
+{
+    "bitwise": true,
+    "browser": true,
+    "camelcase": true,
+    "curly": true,
+    "devel": true,
+    "eqeqeq": true,
+    "forin": true,
+    "freeze": true,
+    "indent": 4,
+    "jquery": true,
+    "latedef": true,
+    "maxerr": 2,
+    "noarg": true,
+    "noempty": true,
+    "nonbsp": true,
+    "undef": true,
+    "unused": true,
+    "node": true,
+    "globals": {
+        "srRoot": true,
+        "themeSpinner": true,
+        "metaToBool": true,
+        "getMeta": true,
+        "isMeta": true,
+        "generate_bwlist": true,
+        "_": true,
+        "bootbox": true
+    }
+}
-- 
GitLab


From ae5b8b5da3dbd8861969c1ce88f42f7d6aaaf03a Mon Sep 17 00:00:00 2001
From: Alexis Tyler <xo@wvvw.me>
Date: Sun, 8 Nov 2015 04:46:11 +1030
Subject: [PATCH 077/215] lint new/*.js

---
 gui/slick/js/new/config_general.js         | 113 +++++++++
 gui/slick/js/new/config_notifications.js   |   2 +-
 gui/slick/js/new/core.js                   |   4 +-
 gui/slick/js/new/displayShow.js            | 252 ++++++++++++++++++++-
 gui/slick/js/new/editShow.js               |  40 ++--
 gui/slick/js/new/home.js                   |  14 +-
 gui/slick/js/new/home_recommendedShows.js  |   4 +-
 gui/slick/js/new/home_trendingShows.js     |   2 +-
 gui/slick/js/new/manage_failedDownloads.js |   3 +-
 gui/slick/js/new/parsers.js                |  24 +-
 gui/slick/js/new/recommendedShows.js       |   4 +-
 gui/slick/js/new/trendingShows.js          |   2 +-
 gui/slick/js/new/viewlogs.js               |   2 +-
 13 files changed, 411 insertions(+), 55 deletions(-)

diff --git a/gui/slick/js/new/config_general.js b/gui/slick/js/new/config_general.js
index 98b5a603c..9e6c079ba 100644
--- a/gui/slick/js/new/config_general.js
+++ b/gui/slick/js/new/config_general.js
@@ -1,3 +1,18 @@
+function configSuccess(){
+    $('.config_submitter').each(function(){
+        $(this).removeAttr("disabled");
+        $(this).next().remove();
+        $(this).show();
+    });
+    $('.config_submitter_refresh').each(function(){
+        $(this).removeAttr("disabled");
+        $(this).next().remove();
+        $(this).show();
+        window.location.href = srRoot + '/config/providers/';
+    });
+    $('#email_show').trigger('notify');
+}
+
 $(document).ready(function(){
     if ($("input[name='proxy_setting']").val().length === 0) {
         $("input[id='proxy_indexers']").prop('checked', false);
@@ -15,4 +30,102 @@ $(document).ready(function(){
 
     $('#log_dir').fileBrowser({ title: 'Select log file folder location' });
     $('#config-components').tabs();
+
+    $(".enabler").each(function(){
+        if (!$(this).prop('checked')) { $('#content_'+$(this).attr('id')).hide(); }
+    });
+
+    $(".enabler").click(function() {
+        if ($(this).prop('checked')){
+            $('#content_'+$(this).attr('id')).fadeIn("fast", "linear");
+        } else {
+            $('#content_'+$(this).attr('id')).fadeOut("fast", "linear");
+        }
+    });
+
+    $(".viewIf").click(function() {
+        if ($(this).prop('checked')) {
+            $('.hide_if_'+$(this).attr('id')).css('display','none');
+            $('.show_if_'+$(this).attr('id')).fadeIn("fast", "linear");
+        } else {
+            $('.show_if_'+$(this).attr('id')).css('display','none');
+            $('.hide_if_'+$(this).attr('id')).fadeIn("fast", "linear");
+        }
+    });
+
+    $(".datePresets").click(function() {
+        var def = $('#date_presets').val();
+        if ($(this).prop('checked') && '%x' === def) {
+            def = '%a, %b %d, %Y';
+            $('#date_use_system_default').html('1');
+        } else if (!$(this).prop('checked') && '1' === $('#date_use_system_default').html()){
+            def = '%x';
+        }
+
+        $('#date_presets').attr('name', 'date_preset_old');
+        $('#date_presets').attr('id', 'date_presets_old');
+
+        $('#date_presets_na').attr('name', 'date_preset');
+        $('#date_presets_na').attr('id', 'date_presets');
+
+        $('#date_presets_old').attr('name', 'date_preset_na');
+        $('#date_presets_old').attr('id', 'date_presets_na');
+
+        if (def) { $('#date_presets').val(def); }
+    });
+
+    // bind 'myForm' and provide a simple callback function
+    $('#configForm').ajaxForm({
+        beforeSubmit: function(){
+            $('.config_submitter .config_submitter_refresh').each(function(){
+                $(this).attr("disabled", "disabled");
+                $(this).after('<span><img src="' + srRoot + '/images/loading16' + themeSpinner + '.gif"> Saving...</span>');
+                $(this).hide();
+            });
+        },
+        success: function(){
+            setTimeout(function () {
+                "use strict";
+                configSuccess();
+            }, 2000);
+        }
+    });
+
+    $('#api_key').click(function(){
+        $('#api_key').select();
+    });
+
+    $("#generate_new_apikey").click(function(){
+        $.get(srRoot + '/config/general/generateApiKey',
+            function(data){
+                if (data.error !== undefined) {
+                    alert(data.error);
+                    return;
+                }
+                $('#api_key').val(data);
+        });
+    });
+
+    $('#branchCheckout').click(function() {
+        var url = srRoot + '/home/branchCheckout?branch=' + $("#branchVersion").val();
+        var checkDBversion = srRoot + "/home/getDBcompare";
+        $.getJSON(checkDBversion, function(data){
+            if (data.status === "success") {
+                if (data.message === "equal") {
+                    //Checkout Branch
+                    window.location.href = url;
+                }
+                if (data.message === "upgrade") {
+                    if ( confirm("Changing branch will upgrade your database.\nYou won't be able to downgrade afterward.\nDo you want to continue?") ) {
+                        //Checkout Branch
+                        window.location.href = url;
+                    }
+                }
+                if (data.message === "downgrade") {
+                    alert("Can't switch branch as this will result in a database downgrade.");
+                }
+            }
+        });
+    });
+
 });
diff --git a/gui/slick/js/new/config_notifications.js b/gui/slick/js/new/config_notifications.js
index c9762b042..072fca9a2 100644
--- a/gui/slick/js/new/config_notifications.js
+++ b/gui/slick/js/new/config_notifications.js
@@ -1,3 +1,3 @@
-$(document).load(function(){
+$(document).ready(function(){
     $('#config-components').tabs();
 });
diff --git a/gui/slick/js/new/core.js b/gui/slick/js/new/core.js
index 69215279d..cb6889de6 100644
--- a/gui/slick/js/new/core.js
+++ b/gui/slick/js/new/core.js
@@ -9,9 +9,9 @@ $(document).ready(function () {
             var lastOpenedPanel = $(this).data("lastOpenedPanel"),
                 selected = $(this).tabs('option', 'selected');
 
-            if (!lastOpenedPanel) lastOpenedPanel = $(ui.oldPanel);
+            if (!lastOpenedPanel) { lastOpenedPanel = $(ui.oldPanel); }
 
-            if (!$(this).data("topPositionTab")) $(this).data("topPositionTab", $(ui.newPanel).position().top);
+            if (!$(this).data("topPositionTab")) { $(this).data("topPositionTab", $(ui.newPanel).position().top); }
 
             //Dont use the builtin fx effects. This will fade in/out both tabs, we dont want that
             //Fadein the new tab yourself
diff --git a/gui/slick/js/new/displayShow.js b/gui/slick/js/new/displayShow.js
index 17344f7c6..413404fcb 100644
--- a/gui/slick/js/new/displayShow.js
+++ b/gui/slick/js/new/displayShow.js
@@ -1,4 +1,246 @@
 $(document).ready(function(){
+
+    $('#srRoot').ajaxEpSearch({'colorRow': true});
+
+    $('#srRoot').ajaxEpSubtitlesSearch();
+
+    $('#seasonJump').on('change', function(){
+        var id = $('#seasonJump option:selected').val();
+        if (id && id !== 'jump') {
+            var season = $('#seasonJump option:selected').data('season');
+            $('html,body').animate({scrollTop: $('[name ="' + id.substring(1) + '"]').offset().top - 50}, 'slow');
+            $('#collapseSeason-' + season).collapse('show');
+            location.hash = id;
+        }
+        $(this).val('jump');
+    });
+
+    $("#prevShow").on('click', function(){
+        $('#pickShow option:selected').prev('option').prop('selected', 'selected');
+        $("#pickShow").change();
+    });
+
+    $("#nextShow").on('click', function(){
+        $('#pickShow option:selected').next('option').prop('selected', 'selected');
+        $("#pickShow").change();
+    });
+
+    $('#changeStatus').on('click', function(){
+        var srRoot = $('#srRoot').val();
+        var epArr = [];
+
+        $('.epCheck').each(function () {
+            if (this.checked === true) {
+                epArr.push($(this).attr('id'));
+            }
+        });
+
+        if (epArr.length === 0) { return false; }
+
+        window.location.href = srRoot + '/home/setStatus?show=' + $('#showID').attr('value') + '&eps=' + epArr.join('|') + '&status=' + $('#statusSelect').val();
+    });
+
+    $('.seasonCheck').on('click', function(){
+        var seasCheck = this;
+        var seasNo = $(seasCheck).attr('id');
+
+        $('#collapseSeason-' + seasNo).collapse('show');
+        $('.epCheck:visible').each(function () {
+            var epParts = $(this).attr('id').split('x');
+            if (epParts[0] === seasNo) {
+                this.checked = seasCheck.checked;
+            }
+        });
+    });
+
+    var lastCheck = null;
+    $('.epCheck').on('click', function (event) {
+
+        if (!lastCheck || !event.shiftKey) {
+            lastCheck = this;
+            return;
+        }
+
+        var check = this;
+        var found = 0;
+
+        $('.epCheck').each(function() {
+            switch (found) {
+                case 2:
+                    return false;
+                case 1:
+                    this.checked = lastCheck.checked;
+            }
+
+            if (this === check || this === lastCheck) {
+                found++;
+            }
+        });
+    });
+
+    // selects all visible episode checkboxes.
+    $('.seriesCheck').on('click', function () {
+        $('.epCheck:visible').each(function () {
+            this.checked = true;
+        });
+        $('.seasonCheck:visible').each(function () {
+            this.checked = true;
+        });
+    });
+
+    // clears all visible episode checkboxes and the season selectors
+    $('.clearAll').on('click', function () {
+        $('.epCheck:visible').each(function () {
+            this.checked = false;
+        });
+        $('.seasonCheck:visible').each(function () {
+            this.checked = false;
+        });
+    });
+
+    // handle the show selection dropbox
+    $('#pickShow').on('change', function () {
+        var srRoot = $('#srRoot').val();
+        var val = $(this).val();
+        if (val === 0) {
+            return;
+        }
+        window.location.href = srRoot + '/home/displayShow?show=' + val;
+    });
+
+    // show/hide different types of rows when the checkboxes are changed
+    $("#checkboxControls input").change(function () {
+        var whichClass = $(this).attr('id');
+        $(this).showHideRows(whichClass);
+    });
+
+    // initially show/hide all the rows according to the checkboxes
+    $("#checkboxControls input").each(function() {
+        $("tr." + $(this).attr('id')).each(function() {
+            if(this.checked) {
+                $(this).show();
+            } else {
+                $(this).hide();
+            }
+        });
+    });
+
+    $.fn.showHideRows = function(whichClass) {
+        var status = $('#checkboxControls > input, #' + whichClass).prop('checked');
+        $("tr." + whichClass).each(function() {
+            if (status) {
+                $(this).show();
+            } else {
+                $(this).hide();
+            }
+        });
+
+        // hide season headers with no episodes under them
+        $('tr.seasonheader').each(function () {
+            var numRows = 0;
+            var seasonNo = $(this).attr('id');
+            $('tr.' + seasonNo + ' :visible').each(function () {
+                numRows++;
+            });
+            if (numRows === 0) {
+                $(this).hide();
+                $('#' + seasonNo + '-cols').hide();
+            } else {
+                $(this).show();
+                $('#' + seasonNo + '-cols').show();
+            }
+        });
+    };
+
+    function setEpisodeSceneNumbering(forSeason, forEpisode, sceneSeason, sceneEpisode) {
+        var srRoot = $('#srRoot').val();
+        var showId = $('#showID').val();
+        var indexer = $('#indexer').val();
+
+        if (sceneSeason === '') { sceneSeason = null; }
+        if (sceneEpisode === '') { sceneEpisode = null; }
+
+        $.getJSON(srRoot + '/home/setSceneNumbering',{
+            'show': showId,
+            'indexer': indexer,
+            'forSeason': forSeason,
+            'forEpisode': forEpisode,
+            'sceneSeason': sceneSeason,
+            'sceneEpisode': sceneEpisode
+        }, function(data) {
+            //	Set the values we get back
+            if (data.sceneSeason === null || data.sceneEpisode === null) {
+                $('#sceneSeasonXEpisode_' + showId + '_' + forSeason + '_' + forEpisode).val('');
+            } else {
+                $('#sceneSeasonXEpisode_' + showId + '_' + forSeason + '_' + forEpisode).val(data.sceneSeason + 'x' + data.sceneEpisode);
+            }
+            if (!data.success) {
+                if (data.errorMessage) {
+                    alert(data.errorMessage);
+                } else {
+                    alert('Update failed.');
+                }
+            }
+        });
+    }
+
+    function setAbsoluteSceneNumbering(forAbsolute, sceneAbsolute) {
+        var srRoot = $('#srRoot').val();
+        var showId = $('#showID').val();
+        var indexer = $('#indexer').val();
+
+        if (sceneAbsolute === '') { sceneAbsolute = null; }
+
+        $.getJSON(srRoot + '/home/setSceneNumbering', {
+            'show': showId,
+            'indexer': indexer,
+            'forAbsolute': forAbsolute,
+            'sceneAbsolute': sceneAbsolute
+        },
+        function(data) {
+            //	Set the values we get back
+            if (data.sceneAbsolute === null) {
+                $('#sceneAbsolute_' + showId + '_' + forAbsolute).val('');
+            } else {
+                $('#sceneAbsolute_' + showId + '_' + forAbsolute).val(data.sceneAbsolute);
+            }
+            if (!data.success) {
+                if (data.errorMessage) {
+                    alert(data.errorMessage);
+                } else {
+                    alert('Update failed.');
+                }
+            }
+        });
+    }
+
+    $('.sceneSeasonXEpisode').on('change', function() {
+        //	Strip non-numeric characters
+        $(this).val($(this).val().replace(/[^0-9xX]*/g, ''));
+        var forSeason = $(this).attr('data-for-season');
+        var forEpisode = $(this).attr('data-for-episode');
+        var m = $(this).val().match(/^(\d+)x(\d+)$/i);
+        var sceneSeason = null, sceneEpisode = null;
+        if (m) {
+            sceneSeason = m[1];
+            sceneEpisode = m[2];
+        }
+        setEpisodeSceneNumbering(forSeason, forEpisode, sceneSeason, sceneEpisode);
+    });
+
+    $('.sceneAbsolute').on('change', function() {
+        //	Strip non-numeric characters
+        $(this).val($(this).val().replace(/[^0-9xX]*/g, ''));
+        var forAbsolute = $(this).attr('data-for-absolute');
+
+        var m = $(this).val().match(/^(\d{1,3})$/i);
+        var sceneAbsolute = null;
+        if (m) {
+            sceneAbsolute = m[1];
+        }
+        setAbsoluteSceneNumbering(forAbsolute, sceneAbsolute);
+    });
+
     $('.addQTip').each(function () {
         $(this).css({'cursor':'help', 'text-shadow':'0px 0px 0.5px #666'});
         $(this).qtip({
@@ -16,11 +258,11 @@ $(document).ready(function(){
     $("#showTable, #animeTable").tablesorter({
         widgets: ['saveSort', 'stickyHeaders', 'columnSelector'],
         widgetOptions : {
-            columnSelector_saveColumns: true,
-            columnSelector_layout : '<br/><label><input type="checkbox">{name}</label>',
-            columnSelector_mediaquery: false,
-            columnSelector_cssChecked : 'checked'
-        },
+            columnSelector_saveColumns: true, // jshint ignore:line
+            columnSelector_layout : '<br/><label><input type="checkbox">{name}</label>', // jshint ignore:line
+            columnSelector_mediaquery: false, // jshint ignore:line
+            columnSelector_cssChecked : 'checked' // jshint ignore:line
+        }
     });
 
     $('#popover').popover({
diff --git a/gui/slick/js/new/editShow.js b/gui/slick/js/new/editShow.js
index 3b5665479..73789ef0d 100644
--- a/gui/slick/js/new/editShow.js
+++ b/gui/slick/js/new/editShow.js
@@ -1,56 +1,56 @@
-var all_exceptions = [];
+var allExceptions = [];
 
 $('#location').fileBrowser({ title: 'Select Show Location' });
 
-$('#submit').click(function(){
-    all_exceptions = [];
+$('#submit').click(function() {
+    var allExceptions = [];
 
-    $("#exceptions_list option").each  ( function() {
-        all_exceptions.push( $(this).val() );
+    $("#exceptions_list option").each(function() {
+        allExceptions.push( $(this).val() );
     });
 
-    $("#exceptions_list").val(all_exceptions);
+    $("#exceptions_list").val(allExceptions);
 
-    if(metaToBool('show.is_anime')) generate_bwlist();
+    if(metaToBool('show.is_anime')) { generate_bwlist(); }
 });
 $('#addSceneName').click(function() {
-    var scene_ex = $('#SceneName').val();
+    var sceneEx = $('#SceneName').val();
     var option = $("<option>");
-    all_exceptions = [];
+    allExceptions = [];
 
-    $("#exceptions_list option").each  ( function() {
-       all_exceptions.push($(this).val());
+    $("#exceptions_list option").each(function() {
+       allExceptions.push($(this).val());
     });
 
     $('#SceneName').val('');
 
-    if ($.inArray(scene_ex, all_exceptions) > -1 || (scene_ex === '')) return;
+    if ($.inArray(sceneEx, allExceptions) > -1 || (sceneEx === '')) { return; }
 
     $("#SceneException").show();
 
-    option.attr("value",scene_ex);
-    option.html(scene_ex);
+    option.attr("value",sceneEx);
+    option.html(sceneEx);
     return option.appendTo('#exceptions_list');
 });
 
 $('#removeSceneName').click(function() {
     $('#exceptions_list option:selected').remove();
 
-    $(this).toggle_SceneException();
+    $(this).toggleSceneException();
 });
 
-$.fn.toggle_SceneException = function() {
-    all_exceptions = [];
+$.fn.toggleSceneException = function() {
+    allExceptions = [];
 
     $("#exceptions_list option").each  ( function() {
-        all_exceptions.push( $(this).val() );
+        allExceptions.push( $(this).val() );
     });
 
-    if (all_exceptions === ''){
+    if (allExceptions === ''){
         $("#SceneException").hide();
     } else {
         $("#SceneException").show();
     }
 };
 
-$(this).toggle_SceneException();
+$(this).toggleSceneException();
diff --git a/gui/slick/js/new/home.js b/gui/slick/js/new/home.js
index f4f09593a..1df0a5edb 100644
--- a/gui/slick/js/new/home.js
+++ b/gui/slick/js/new/home.js
@@ -8,9 +8,11 @@ $(document).ready(function(){
     $('.progressbar').each(function(progressbar){
         var showId = $(this).data('show-id');
         var percentage = $(this).data('progress-percentage');
-        var classToAdd = percentage == 100 ? 100 : percentage > 80 ? 80 : percentage > 60 ? 60 : percentage > 40 ? 40 : 20;
+        var classToAdd = percentage === 100 ? 100 : percentage > 80 ? 80 : percentage > 60 ? 60 : percentage > 40 ? 40 : 20;
         $(this).progressbar({ value:  percentage });
-        if($(this).data('progress-text')) $(this).append('<div class="progressbarText" title="' + $(this).data('progress-tip') + '">' + $(this).data('progress-text') + '</div>');
+        if($(this).data('progress-text')) {
+            $(this).append('<div class="progressbarText" title="' + $(this).data('progress-tip') + '">' + $(this).data('progress-text') + '</div>');
+        }
         $(this).find('.ui-progressbar-value').addClass('progress-' + classToAdd);
     });
 
@@ -53,10 +55,10 @@ $(document).ready(function(){
         widgetOptions: (function(){
             if(metaToBool('sickbeard.FILTER_ROW')){
                 return {
-                    filter_columnFilters: true,
-                    filter_hideFilters : true,
-                    filter_saveFilters : true,
-                    filter_functions : {
+                    filter_columnFilters: true, // jshint ignore:line
+                    filter_hideFilters : true, // jshint ignore:line
+                    filter_saveFilters : true, // jshint ignore:line
+                    filter_functions : { // jshint ignore:line
                        5:function(e, n, f, i, r, c) {
                             var test = false;
                             var pct = Math.floor((n % 1) * 1000);
diff --git a/gui/slick/js/new/home_recommendedShows.js b/gui/slick/js/new/home_recommendedShows.js
index 31d953523..fa82ab85c 100644
--- a/gui/slick/js/new/home_recommendedShows.js
+++ b/gui/slick/js/new/home_recommendedShows.js
@@ -9,7 +9,7 @@ $(document).ready(function(){
     $('#showsortdirection').val('asc');
 
     var $container = [$('#container')];
-    $.each($container, function (j) {
+    $.each($container, function() {
         this.isotope({
             itemSelector: '.trakt_show',
             sortBy: 'original-order',
@@ -52,6 +52,6 @@ $(document).ready(function(){
     });
 
     $('#showsortdirection').on( 'change', function() {
-        $('#container').isotope({sortAscending: ('asc' == this.value)});
+        $('#container').isotope({sortAscending: ('asc' === this.value)});
     });
 });
diff --git a/gui/slick/js/new/home_trendingShows.js b/gui/slick/js/new/home_trendingShows.js
index 51e1e49b1..3f21b696a 100644
--- a/gui/slick/js/new/home_trendingShows.js
+++ b/gui/slick/js/new/home_trendingShows.js
@@ -49,6 +49,6 @@ $(document).ready(function(){
     });
 
     $('#showsortdirection').on( 'change', function() {
-        $('#container').isotope({sortAscending: ('asc' == this.value)});
+        $('#container').isotope({sortAscending: ('asc' === this.value)});
     });
 });
diff --git a/gui/slick/js/new/manage_failedDownloads.js b/gui/slick/js/new/manage_failedDownloads.js
index 9186bac81..9184a54f8 100644
--- a/gui/slick/js/new/manage_failedDownloads.js
+++ b/gui/slick/js/new/manage_failedDownloads.js
@@ -5,7 +5,6 @@ $(document).ready(function(){
         headers: { 3: { sorter: false } }
     });
     $('#limit').change(function(){
-        url = srRoot + '/manage/failedDownloads/?limit='+$(this).val();
-        window.location.href = url;
+        window.location.href = srRoot + '/manage/failedDownloads/?limit='+$(this).val();;
     });
 });
diff --git a/gui/slick/js/new/parsers.js b/gui/slick/js/new/parsers.js
index 5c4646571..b7be826ea 100644
--- a/gui/slick/js/new/parsers.js
+++ b/gui/slick/js/new/parsers.js
@@ -1,6 +1,6 @@
 $.tablesorter.addParser({
     id: 'loadingNames',
-    is: function(s) {
+    is: function() {
         return false;
     },
     format: function(s) {
@@ -14,7 +14,7 @@ $.tablesorter.addParser({
 });
 $.tablesorter.addParser({
     id: 'quality',
-    is: function(s) {
+    is: function() {
         return false;
     },
     format: function(s) {
@@ -24,7 +24,7 @@ $.tablesorter.addParser({
 });
 $.tablesorter.addParser({
     id: 'realISODate',
-    is: function(s) {
+    is: function() {
         return false;
     },
     format: function(s) {
@@ -35,7 +35,7 @@ $.tablesorter.addParser({
 
 $.tablesorter.addParser({
     id: 'cDate',
-    is: function(s) {
+    is: function() {
         return false;
     },
     format: function(s) {
@@ -45,27 +45,27 @@ $.tablesorter.addParser({
 });
 $.tablesorter.addParser({
     id: 'eps',
-    is: function(s) {
+    is: function() {
         return false;
     },
     format: function(s) {
-        match = s.match(/^(.*)/);
+        var match = s.match(/^(.*)/);
 
-        if (match === null || match[1] == "?") return -10;
+        if (match === null || match[1] === "?") { return -10; }
 
         var nums = match[1].split(" / ");
-        if (nums[0].indexOf("+") != -1) {
-            var num_parts = nums[0].split("+");
-            nums[0] = num_parts[0];
+        if (nums[0].indexOf("+") !== -1) {
+            var numParts = nums[0].split("+");
+            nums[0] = numParts[0];
         }
 
         nums[0] = parseInt(nums[0]);
         nums[1] = parseInt(nums[1]);
 
-        if (nums[0] === 0) return nums[1];
+        if (nums[0] === 0) { return nums[1]; }
         var finalNum = parseInt((getMeta('max_download_count'))*nums[0]/nums[1]);
         var pct = Math.round((nums[0]/nums[1])*100) / 1000;
-        if (finalNum > 0) finalNum += nums[0];
+        if (finalNum > 0) { finalNum += nums[0]; }
 
         return finalNum + pct;
     },
diff --git a/gui/slick/js/new/recommendedShows.js b/gui/slick/js/new/recommendedShows.js
index 17a78a464..c64be8e6f 100644
--- a/gui/slick/js/new/recommendedShows.js
+++ b/gui/slick/js/new/recommendedShows.js
@@ -1,7 +1,7 @@
 $.fn.loadContent = function(path, loadingTxt, errorTxt) {
     $(this).html('<img id="searchingAnim" src="' + srRoot + '/images/loading32' + themeSpinner + '.gif" height="32" width="32" />&nbsp;' + loadingTxt);
-    $(this).load(srRoot + path + ' #container', function(response, status, xhr) {
-        if (status == "error") $(this).empty().html(errorTxt);
+    $(this).load(srRoot + path + ' #container', function(response, status) {
+        if (status === "error") { $(this).empty().html(errorTxt); }
     });
 };
 
diff --git a/gui/slick/js/new/trendingShows.js b/gui/slick/js/new/trendingShows.js
index b65df539d..b60a5068f 100644
--- a/gui/slick/js/new/trendingShows.js
+++ b/gui/slick/js/new/trendingShows.js
@@ -4,7 +4,7 @@ $(document).ready(function(){
     $('#showsortdirection').val('asc');
 
     var $container = [$('#container')];
-    $.each($container, function (j) {
+    $.each($container, function () {
         this.isotope({
             itemSelector: '.trakt_show',
             sortBy: 'original-order',
diff --git a/gui/slick/js/new/viewlogs.js b/gui/slick/js/new/viewlogs.js
index d0ed8eee1..d8437eebf 100644
--- a/gui/slick/js/new/viewlogs.js
+++ b/gui/slick/js/new/viewlogs.js
@@ -7,7 +7,7 @@ $(document).ready(function(){
         $('#minLevel').prop('disabled', true);
         $('#logFilter').prop('disabled', true);
         document.body.style.cursor='wait';
-        url = srRoot + '/errorlogs/viewlog/?minLevel='+$('select[name=minLevel]').val()+'&logFilter='+$('select[name=logFilter]').val()+'&logSearch='+$('#logSearch').val();
+        var url = srRoot + '/errorlogs/viewlog/?minLevel='+$('select[name=minLevel]').val()+'&logFilter='+$('select[name=logFilter]').val()+'&logSearch='+$('#logSearch').val();
         $.get(url, function(data){
             history.pushState('data', '', url);
             $('pre').html($(data).find('pre').html());
-- 
GitLab


From 32bad593424746caa92489a735b36845e16e8114 Mon Sep 17 00:00:00 2001
From: Alexis Tyler <xo@wvvw.me>
Date: Sun, 8 Nov 2015 04:46:34 +1030
Subject: [PATCH 078/215] lint old *.js && update views

---
 gui/slick/js/config.js                 | 115 ------------
 gui/slick/js/configSubtitles.js        |  11 +-
 gui/slick/js/displayShow.js            | 244 -------------------------
 gui/slick/js/failedDownloads.js        |   7 +-
 gui/slick/js/manageSubtitleMissed.js   |  24 +--
 gui/slick/js/massEdit.js               |  28 +--
 gui/slick/js/massUpdate.js             | 110 +++++------
 gui/slick/js/plotTooltip.js            |   4 +-
 gui/slick/js/qualityChooser.js         |   4 +-
 gui/slick/js/ratingTooltip.js          |   2 +-
 gui/slick/js/restart.js                |   6 +-
 gui/slick/js/rootDirs.js               |  84 +++++----
 gui/slick/js/sceneExceptionsTooltip.js |   4 +-
 gui/slick/js/testRename.js             |   7 +-
 gui/slick/views/config_anime.mako      |   1 -
 gui/slick/views/displayShow.mako       |   3 +-
 16 files changed, 143 insertions(+), 511 deletions(-)

diff --git a/gui/slick/js/config.js b/gui/slick/js/config.js
index 7c852360b..e69de29bb 100644
--- a/gui/slick/js/config.js
+++ b/gui/slick/js/config.js
@@ -1,115 +0,0 @@
-$(document).ready(function(){
-    $(".enabler").each(function(){
-        if (!$(this).prop('checked')) $('#content_'+$(this).attr('id')).hide();
-    });
-
-    $(".enabler").click(function() {
-        if ($(this).prop('checked')){
-            $('#content_'+$(this).attr('id')).fadeIn("fast", "linear");
-        } else {
-            $('#content_'+$(this).attr('id')).fadeOut("fast", "linear");
-        }
-    });
-
-    $(".viewIf").click(function() {
-        if ($(this).prop('checked')) {
-            $('.hide_if_'+$(this).attr('id')).css('display','none');
-            $('.show_if_'+$(this).attr('id')).fadeIn("fast", "linear");
-        } else {
-            $('.show_if_'+$(this).attr('id')).css('display','none');
-            $('.hide_if_'+$(this).attr('id')).fadeIn("fast", "linear");
-        }
-    });
-
-    $(".datePresets").click(function() {
-        var def = $('#date_presets').val();
-        if ($(this).prop('checked') && '%x' == def) {
-            def = '%a, %b %d, %Y';
-            $('#date_use_system_default').html('1');
-        } else if (!$(this).prop('checked') && '1' == $('#date_use_system_default').html()){
-            def = '%x';
-        }
-
-        $('#date_presets').attr('name', 'date_preset_old');
-        $('#date_presets').attr('id', 'date_presets_old');
-
-        $('#date_presets_na').attr('name', 'date_preset');
-        $('#date_presets_na').attr('id', 'date_presets');
-
-        $('#date_presets_old').attr('name', 'date_preset_na');
-        $('#date_presets_old').attr('id', 'date_presets_na');
-
-        if (def) $('#date_presets').val(def);
-    });
-
-    // bind 'myForm' and provide a simple callback function
-    $('#configForm').ajaxForm({
-        beforeSubmit: function(){
-            $('.config_submitter .config_submitter_refresh').each(function(){
-                $(this).attr("disabled", "disabled");
-                $(this).after('<span><img src="' + srRoot + '/images/loading16' + themeSpinner + '.gif"> Saving...</span>');
-                $(this).hide();
-            });
-        },
-        success: function(){
-            setTimeout(function () {
-                "use strict";
-                config_success();
-            }, 2000);
-        }
-    });
-
-    $('#api_key').click(function(){
-        $('#api_key').select();
-    });
-
-    $("#generate_new_apikey").click(function(){
-        $.get(srRoot + '/config/general/generateApiKey',
-            function(data){
-                if (data.error !== undefined) {
-                    alert(data.error);
-                    return;
-                }
-                $('#api_key').val(data);
-        });
-    });
-
-    $('#branchCheckout').click(function() {
-        var url = srRoot+'/home/branchCheckout?branch='+$("#branchVersion").val();
-        var  checkDBversion = srRoot + "/home/getDBcompare";
-        $.getJSON(checkDBversion, function(data){
-            if (data.status == "success") {
-                if (data.message == "equal") {
-                    //Checkout Branch
-                    window.location.href = url;
-                }
-                if (data.message == "upgrade") {
-                    if ( confirm("Changing branch will upgrade your database.\nYou won't be able to downgrade afterward.\nDo you want to continue?") ) {
-                        //Checkout Branch
-                        window.location.href = url;
-                    }
-                }
-                if (data.message == "downgrade") {
-                    alert("Can't switch branch as this will result in a database downgrade.");
-                }
-            }
-        });
-    });
-
-});
-
-function config_success(){
-    $('.config_submitter').each(function(){
-        $(this).removeAttr("disabled");
-        $(this).next().remove();
-        $(this).show();
-    });
-    $('.config_submitter_refresh').each(function(){
-        $(this).removeAttr("disabled");
-        $(this).next().remove();
-        $(this).show();
-        url = srRoot+'/config/providers/';
-        window.location.href = url;
-    });
-    $('#email_show').trigger('notify');
-}
diff --git a/gui/slick/js/configSubtitles.js b/gui/slick/js/configSubtitles.js
index 05974d6df..8414d8e9b 100644
--- a/gui/slick/js/configSubtitles.js
+++ b/gui/slick/js/configSubtitles.js
@@ -1,11 +1,10 @@
 $(document).ready(function(){
-
     $.fn.showHideServices = function() {
         $('.serviceDiv').each(function(){
             var serviceName = $(this).attr('id');
             var selectedService = $('#editAService :selected').val();
 
-            if (selectedService+'Div' == serviceName){
+            if (selectedService+'Div' === serviceName){
                 $(this).show();
             } else {
                 $(this).hide();
@@ -14,7 +13,7 @@ $(document).ready(function(){
     };
 
     $.fn.addService = function (id, name, url, key, isDefault, showService) {
-        if (url.match('/$') === null) url = url + '/';
+        if (url.match('/$') === null) { url = url + '/'; }
 
         var newData = [isDefault, [name, url, key]];
 
@@ -34,10 +33,9 @@ $(document).ready(function(){
         var idArr = $("#service_order_list").sortable('toArray');
         var finalArr = [];
         $.each(idArr, function(key, val) {
-                var checked = + $('#enable_'+val).prop('checked') ? '1' : '0';
-                finalArr.push(val + ':' + checked);
+            var checked = + $('#enable_'+val).prop('checked') ? '1' : '0';
+            finalArr.push(val + ':' + checked);
         });
-
         $("#service_order").val(finalArr.join(' '));
     };
 
@@ -51,7 +49,6 @@ $(document).ready(function(){
 
 
     // initialization stuff
-
     $(this).showHideServices();
 
     $("#service_order_list").sortable({
diff --git a/gui/slick/js/displayShow.js b/gui/slick/js/displayShow.js
index 138abad49..a01c02b14 100644
--- a/gui/slick/js/displayShow.js
+++ b/gui/slick/js/displayShow.js
@@ -1,247 +1,3 @@
 $(document).ready(function () {
 
-    $('#srRoot').ajaxEpSearch({'colorRow': true});
-
-    $('#srRoot').ajaxEpSubtitlesSearch();
-
-    $('#seasonJump').on('change', function(){
-        var id = $('#seasonJump option:selected').val();
-        if (id && id != 'jump') {
-            var season = $('#seasonJump option:selected').data('season');
-            $('html,body').animate({scrollTop: $('[name ="' + id.substring(1) + '"]').offset().top - 50}, 'slow');
-            $('#collapseSeason-' + season).collapse('show');
-            location.hash = id;
-        }
-        $(this).val('jump');
-    });
-
-    $("#prevShow").on('click', function(){
-        $('#pickShow option:selected').prev('option').prop('selected', 'selected');
-        $("#pickShow").change();
-    });
-
-    $("#nextShow").on('click', function(){
-        $('#pickShow option:selected').next('option').prop('selected', 'selected');
-        $("#pickShow").change();
-    });
-
-    $('#changeStatus').on('click', function(){
-        var srRoot = $('#srRoot').val();
-        var epArr = [];
-
-        $('.epCheck').each(function () {
-            if (this.checked === true) epArr.push($(this).attr('id'));
-        });
-
-        if (epArr.length === 0) return false;
-
-        url = srRoot + '/home/setStatus?show=' + $('#showID').attr('value') + '&eps=' + epArr.join('|') + '&status=' + $('#statusSelect').val();
-        window.location.href = url;
-    });
-
-    $('.seasonCheck').on('click', function(){
-        var seasCheck = this;
-        var seasNo = $(seasCheck).attr('id');
-
-        $('#collapseSeason-' + seasNo).collapse('show');
-        $('.epCheck:visible').each(function () {
-            var epParts = $(this).attr('id').split('x');
-            if (epParts[0] == seasNo) this.checked = seasCheck.checked;
-        });
-    });
-
-    var lastCheck = null;
-    $('.epCheck').on('click', function (event) {
-
-        if (!lastCheck || !event.shiftKey) {
-            lastCheck = this;
-            return;
-        }
-
-        var check = this;
-        var found = 0;
-
-        $('.epCheck').each(function() {
-            switch (found) {
-                case 2:
-                    return false;
-                case 1:
-                    this.checked = lastCheck.checked;
-            }
-
-            if (this == check || this == lastCheck)
-                found++;
-        });
-
-        lastClick = this;
-    });
-
-    // selects all visible episode checkboxes.
-    $('.seriesCheck').on('click', function () {
-        $('.epCheck:visible').each(function () {
-            this.checked = true;
-        });
-        $('.seasonCheck:visible').each(function () {
-            this.checked = true;
-        });
-    });
-
-    // clears all visible episode checkboxes and the season selectors
-    $('.clearAll').on('click', function () {
-        $('.epCheck:visible').each(function () {
-            this.checked = false;
-        });
-        $('.seasonCheck:visible').each(function () {
-            this.checked = false;
-        });
-    });
-
-    // handle the show selection dropbox
-    $('#pickShow').on('change', function () {
-        var srRoot = $('#srRoot').val();
-        var val = $(this).val();
-        if (val === 0) return;
-        url = srRoot + '/home/displayShow?show=' + val;
-        window.location.href = url;
-    });
-
-    // show/hide different types of rows when the checkboxes are changed
-    $("#checkboxControls input").change(function (e) {
-        var whichClass = $(this).attr('id');
-        $(this).showHideRows(whichClass);
-    });
-
-    // initially show/hide all the rows according to the checkboxes
-    $("#checkboxControls input").each(function (e) {
-        var status = this.checked;
-        $("tr." + $(this).attr('id')).each(function (e) {
-            if (status) {
-                $(this).show();
-            } else {
-                $(this).hide();
-            }
-        });
-    });
-
-    $.fn.showHideRows = function(whichClass) {
-        var status = $('#checkboxControls > input, #' + whichClass).prop('checked');
-        $("tr." + whichClass).each(function (e) {
-            if (status) {
-                $(this).show();
-            } else {
-                $(this).hide();
-            }
-        });
-
-        // hide season headers with no episodes under them
-        $('tr.seasonheader').each(function () {
-            var numRows = 0;
-            var seasonNo = $(this).attr('id');
-            $('tr.' + seasonNo + ' :visible').each(function () {
-                numRows++;
-            });
-            if (numRows === 0) {
-                $(this).hide();
-                $('#' + seasonNo + '-cols').hide();
-            } else {
-                $(this).show();
-                $('#' + seasonNo + '-cols').show();
-            }
-        });
-    };
-
-    function setEpisodeSceneNumbering(forSeason, forEpisode, sceneSeason, sceneEpisode) {
-        var srRoot = $('#srRoot').val();
-        var showId = $('#showID').val();
-        var indexer = $('#indexer').val();
-
-        if (sceneSeason === '') sceneSeason = null;
-        if (sceneEpisode === '') sceneEpisode = null;
-
-        $.getJSON(srRoot + '/home/setSceneNumbering',{
-            'show': showId,
-            'indexer': indexer,
-            'forSeason': forSeason,
-            'forEpisode': forEpisode,
-            'sceneSeason': sceneSeason,
-            'sceneEpisode': sceneEpisode
-        }, function(data) {
-            //	Set the values we get back
-            if (data.sceneSeason === null || data.sceneEpisode === null) {
-                $('#sceneSeasonXEpisode_' + showId + '_' + forSeason + '_' + forEpisode).val('');
-            } else {
-                $('#sceneSeasonXEpisode_' + showId + '_' + forSeason + '_' + forEpisode).val(data.sceneSeason + 'x' + data.sceneEpisode);
-            }
-            if (!data.success) {
-                if (data.errorMessage) {
-                    alert(data.errorMessage);
-                } else {
-                    alert('Update failed.');
-                }
-            }
-        });
-    }
-
-    function setAbsoluteSceneNumbering(forAbsolute, sceneAbsolute) {
-        var srRoot = $('#srRoot').val();
-        var showId = $('#showID').val();
-        var indexer = $('#indexer').val();
-
-        if (sceneAbsolute === '') sceneAbsolute = null;
-
-        $.getJSON(srRoot + '/home/setSceneNumbering', {
-            'show': showId,
-            'indexer': indexer,
-            'forAbsolute': forAbsolute,
-            'sceneAbsolute': sceneAbsolute
-        },
-        function(data) {
-            //	Set the values we get back
-            if (data.sceneAbsolute === null) {
-                $('#sceneAbsolute_' + showId + '_' + forAbsolute).val('');
-            } else {
-                $('#sceneAbsolute_' + showId + '_' + forAbsolute).val(data.sceneAbsolute);
-            }
-            if (!data.success) {
-                if (data.errorMessage) {
-                    alert(data.errorMessage);
-                } else {
-                    alert('Update failed.');
-                }
-            }
-        });
-    }
-
-    $('.sceneSeasonXEpisode').on('change', function() {
-        //	Strip non-numeric characters
-        $(this).val($(this).val().replace(/[^0-9xX]*/g, ''));
-        var forSeason = $(this).attr('data-for-season');
-        var forEpisode = $(this).attr('data-for-episode');
-        var showId = $('#showID').val();
-        var indexer = $('#indexer').val();
-
-        //var sceneEpisode = $('#sceneEpisode_' + showId + '_' + forSeason +'_' + forEpisode).val();
-        var m = $(this).val().match(/^(\d+)x(\d+)$/i);
-        var sceneSeason = null, sceneEpisode = null;
-        if (m) {
-            sceneSeason = m[1];
-            sceneEpisode = m[2];
-        }
-        setEpisodeSceneNumbering(forSeason, forEpisode, sceneSeason, sceneEpisode);
-    });
-
-    $('.sceneAbsolute').on('change', function() {
-        //	Strip non-numeric characters
-        $(this).val($(this).val().replace(/[^0-9xX]*/g, ''));
-        var forAbsolute = $(this).attr('data-for-absolute');
-        var showId = $('#showID').val();
-        var indexer = $('#indexer').val();
-
-        var m = $(this).val().match(/^(\d{1,3})$/i);
-        var sceneAbsolute = null;
-        if (m) {
-            sceneAbsolute = m[1];
-        }
-        setAbsoluteSceneNumbering(forAbsolute, sceneAbsolute);
-    });
 });
diff --git a/gui/slick/js/failedDownloads.js b/gui/slick/js/failedDownloads.js
index 62b2fea48..4b991fc2a 100644
--- a/gui/slick/js/failedDownloads.js
+++ b/gui/slick/js/failedDownloads.js
@@ -8,10 +8,9 @@ $(document).ready(function(){
             }
         });
 
-        if (removeArr.length === 0) return false;
+        if (removeArr.length === 0) { return false; }
 
-        url = srRoot + '/manage/failedDownloads?toRemove='+removeArr.join('|');
-        window.location.href = url;
+        window.location.href = srRoot + '/manage/failedDownloads?toRemove='+removeArr.join('|');
     });
 
     $('.bulkCheck').on('click', function(){
@@ -41,7 +40,7 @@ $(document).ready(function(){
                     this.checked = lastCheck.checked;
                 }
 
-                if (this == check || this == lastCheck) found++;
+                if (this === check || this === lastCheck) { found++; }
             });
         });
     });
diff --git a/gui/slick/js/manageSubtitleMissed.js b/gui/slick/js/manageSubtitleMissed.js
index 228b3f171..2f6d65c2b 100644
--- a/gui/slick/js/manageSubtitleMissed.js
+++ b/gui/slick/js/manageSubtitleMissed.js
@@ -1,11 +1,11 @@
 $(document).ready(function() {
 
-    function make_row(indexer_id, season, episode, name, subtitles, checked) {
+    function makeRow(indexerId, season, episode, name, subtitles, checked) {
         checked = checked ? ' checked' : '';
 
         var row = '';
-        row += ' <tr class="good show-' + indexer_id + '">';
-        row += '  <td align="center"><input type="checkbox" class="'+indexer_id+'-epcheck" name="'+indexer_id+'-'+season+'x'+episode+'"'+checked+'></td>';
+        row += ' <tr class="good show-' + indexerId + '">';
+        row += '  <td align="center"><input type="checkbox" class="'+indexerId+'-epcheck" name="'+indexerId+'-'+season+'x'+episode+'"'+checked+'></td>';
         row += '  <td style="width: 1%;">'+season+'x'+episode+'</td>';
         row += '  <td>'+name+'</td>';
         row += ' </tr>';
@@ -14,26 +14,26 @@ $(document).ready(function() {
     }
 
     $('.allCheck').click(function(){
-        var indexer_id = $(this).attr('id').split('-')[1];
-        $('.'+indexer_id+'-epcheck').prop('checked', $(this).prop('checked'));
+        var indexerId = $(this).attr('id').split('-')[1];
+        $('.'+indexerId+'-epcheck').prop('checked', $(this).prop('checked'));
     });
 
     $('.get_more_eps').click(function(){
-        var cur_indexer_id = $(this).attr('id');
-        var checked = $('#allCheck-'+cur_indexer_id).prop('checked');
-        var last_row = $('tr#'+cur_indexer_id);
+        var indexerId = $(this).attr('id');
+        var checked = $('#allCheck-'+indexerId).prop('checked');
+        var lastRow = $('tr#'+indexerId);
         var clicked = $(this).attr('data-clicked');
         var action = $(this).attr('value');
 
         if (!clicked) {
             $.getJSON(srRoot + '/manage/showSubtitleMissed', {
-                indexer_id: cur_indexer_id,
+                indexer_id: indexerId, // jshint ignore:line
                 whichSubs: $('#selectSubLang').val()
             }, function(data) {
                 $.each(data, function(season, eps) {
                     $.each(eps, function(episode, data) {
                         //alert(season+'x'+episode+': '+name);
-                        last_row.after(make_row(cur_indexer_id, season, episode, data.name, data.subtitles, checked));
+                        lastRow.after(makeRow(indexerId, season, episode, data.name, data.subtitles, checked));
                     });
                 });
             });
@@ -41,10 +41,10 @@ $(document).ready(function() {
             $(this).prop('value', 'Collapse');
         } else {
             if (action === 'Collapse') {
-                $('table tr').filter('.show-' + cur_indexer_id).hide();
+                $('table tr').filter('.show-' + indexerId).hide();
                 $(this).prop('value', 'Expand');
             } else if (action === 'Expand') {
-                $('table tr').filter('.show-' + cur_indexer_id).show();
+                $('table tr').filter('.show-' + indexerId).show();
                 $(this).prop('value', 'Collapse');
             }
         }
diff --git a/gui/slick/js/massEdit.js b/gui/slick/js/massEdit.js
index 116792887..1a8c7b334 100644
--- a/gui/slick/js/massEdit.js
+++ b/gui/slick/js/massEdit.js
@@ -1,28 +1,28 @@
 $(document).ready(function(){
-    function find_dir_index(which){
-        var dir_parts = which.split('_');
-        return dir_parts[dir_parts.length-1];
+    function findDirIndex(which){
+        var dirParts = which.split('_');
+        return dirParts[dirParts.length-1];
     }
 
-    function edit_root_dir(path, options){
-        $('#new_root_dir_'+options.which_id).val(path);
-        $('#new_root_dir_'+options.which_id).change();
+    function editRootDir(path, options){
+        $('#new_root_dir_'+options.whichId).val(path);
+        $('#new_root_dir_'+options.whichId).change();
     }
 
     $('.new_root_dir').change(function(){
-        var cur_index = find_dir_index($(this).attr('id'));
-        $('#display_new_root_dir_'+cur_index).html('<b>'+$(this).val()+'</b>');
+        var curIndex = findDirIndex($(this).attr('id'));
+        $('#display_new_root_dir_'+curIndex).html('<b>'+$(this).val()+'</b>');
     });
 
     $('.edit_root_dir').click(function(){
-        var cur_id = find_dir_index($(this).attr('id'));
-        var initial_dir = $("#new_root_dir_"+cur_id).val();
-        $(this).nFileBrowser(edit_root_dir, {initialDir: initial_dir, which_id: cur_id});
+        var curIndex = findDirIndex($(this).attr('id'));
+        var initialDir = $("#new_root_dir_"+curIndex).val();
+        $(this).nFileBrowser(editRootDir, {initialDir: initialDir, whichId: curIndex});
     });
 
     $('.delete_root_dir').click(function(){
-        var cur_id = find_dir_index($(this).attr('id'));
-        $('#new_root_dir_'+cur_id).val(null);
-        $('#display_new_root_dir_'+cur_id).html('<b>DELETED</b>');
+        var curIndex = findDirIndex($(this).attr('id'));
+        $('#new_root_dir_'+curIndex).val(null);
+        $('#display_new_root_dir_'+curIndex).html('<b>DELETED</b>');
     });
 });
diff --git a/gui/slick/js/massUpdate.js b/gui/slick/js/massUpdate.js
index 3d390c9cc..b539e1ef6 100644
--- a/gui/slick/js/massUpdate.js
+++ b/gui/slick/js/massUpdate.js
@@ -3,85 +3,74 @@ $(document).ready(function(){
         var editArr = [];
 
         $('.editCheck').each(function() {
-            if(this.checked === true) editArr.push($(this).attr('id').split('-')[1]);
+            if(this.checked === true) { editArr.push($(this).attr('id').split('-')[1]); }
         });
 
-        if(editArr.length === 0) return;
+        if(editArr.length === 0) { return; }
 
-        url = 'massEdit?toEdit='+editArr.join('|');
-        window.location.href = url;
+        window.location.href = 'massEdit?toEdit='+editArr.join('|');
     });
 
     $('#submitMassUpdate').on('click', function(){
+        var updateArr = [];
+        var refreshArr = [];
+        var renameArr = [];
+        var subtitleArr = [];
+        var deleteArr = [];
+        var removeArr = [];
+        var metadataArr = [];
+
+        $('.updateCheck').each(function() {
+            if(this.checked === true) { updateArr.push($(this).attr('id').split('-')[1]); }
+        });
 
-    var updateArr = [];
-    var refreshArr = [];
-    var renameArr = [];
-    var subtitleArr = [];
-    var deleteArr = [];
-    var removeArr = [];
-    var metadataArr = [];
-
-    $('.updateCheck').each(function() {
-        if(this.checked === true) updateArr.push($(this).attr('id').split('-')[1]);
-    });
+        $('.refreshCheck').each(function() {
+            if(this.checked === true) { refreshArr.push($(this).attr('id').split('-')[1]); }
+        });
 
-    $('.refreshCheck').each(function() {
-        if(this.checked === true) refreshArr.push($(this).attr('id').split('-')[1]);
-    });
+        $('.renameCheck').each(function() {
+            if(this.checked === true) { renameArr.push($(this).attr('id').split('-')[1]); }
+        });
 
-    $('.renameCheck').each(function() {
-        if(this.checked === true) renameArr.push($(this).attr('id').split('-')[1]);
-    });
+        $('.subtitleCheck').each(function() {
+            if(this.checked === true) { subtitleArr.push($(this).attr('id').split('-')[1]); }
+        });
 
-    $('.subtitleCheck').each(function() {
-        if(this.checked === true) subtitleArr.push($(this).attr('id').split('-')[1]);
-    });
+        $('.removeCheck').each(function() {
+            if(this.checked === true) { removeArr.push($(this).attr('id').split('-')[1]); }
+        });
 
-    $('.removeCheck').each(function() {
-        if(this.checked === true) removeArr.push($(this).attr('id').split('-')[1]);
-    });
+        var deleteCount = 0;
 
-    var deleteCount = 0;
+        $('.deleteCheck').each(function() {
+            if(this.checked === true) { deleteCount++; }
+        });
 
-    $('.deleteCheck').each(function() {
-        if(this.checked === true) deleteCount++;
-    });
+        if(deleteCount >= 1) {
+            bootbox.confirm("You have selected to delete " + deleteCount + " show(s).  Are you sure you wish to continue? All files will be removed from your system.", function(result) {
+                if(result) {
+                    $('.deleteCheck').each(function() {
+                        if(this.checked === true) {
+                            deleteArr.push($(this).attr('id').split('-')[1]);
+                        }
+                    });
+                }
+                if(updateArr.length+refreshArr.length+renameArr.length+subtitleArr.length+deleteArr.length+removeArr.length+metadataArr.length === 0) { return false; }
 
-    if(deleteCount >= 1) {
-        bootbox.confirm("You have selected to delete " + deleteCount + " show(s).  Are you sure you wish to continue? All files will be removed from your system.", function(result) {
-            if(result) {
-                $('.deleteCheck').each(function() {
-                    if(this.checked === true) {
-                        deleteArr.push($(this).attr('id').split('-')[1]);
-                    }
-                });
-            }
-            if(updateArr.length+refreshArr.length+renameArr.length+subtitleArr.length+deleteArr.length+removeArr.length+metadataArr.length === 0) return false;
-            url = 'massUpdate?toUpdate='+updateArr.join('|')+'&toRefresh='+refreshArr.join('|')+'&toRename='+renameArr.join('|')+'&toSubtitle='+subtitleArr.join('|')+'&toDelete='+deleteArr.join('|')+'&toRemove='+removeArr.join('|')+'&toMetadata='+metadataArr.join('|');
-            window.location.href = url;
-        });
-    } else {
-        if(updateArr.length+refreshArr.length+renameArr.length+subtitleArr.length+deleteArr.length+removeArr.length+metadataArr.length === 0) return false;
-        url = 'massUpdate?toUpdate='+updateArr.join('|')+'&toRefresh='+refreshArr.join('|')+'&toRename='+renameArr.join('|')+'&toSubtitle='+subtitleArr.join('|')+'&toDelete='+deleteArr.join('|')+'&toRemove='+removeArr.join('|')+'&toMetadata='+metadataArr.join('|');
-        window.location.href = url;
-    }
-/*
-    $('.metadataCheck').each(function() {
-      if(this.checked == true) {
-        metadataArr.push($(this).attr('id').split('-')[1])
-      }
+                window.location.href = 'massUpdate?toUpdate='+updateArr.join('|')+'&toRefresh='+refreshArr.join('|')+'&toRename='+renameArr.join('|')+'&toSubtitle='+subtitleArr.join('|')+'&toDelete='+deleteArr.join('|')+'&toRemove='+removeArr.join('|')+'&toMetadata='+metadataArr.join('|');
+            });
+        } else {
+            if(updateArr.length+refreshArr.length+renameArr.length+subtitleArr.length+deleteArr.length+removeArr.length+metadataArr.length === 0) { return false; }
+            window.location.href = 'massUpdate?toUpdate='+updateArr.join('|')+'&toRefresh='+refreshArr.join('|')+'&toRename='+renameArr.join('|')+'&toSubtitle='+subtitleArr.join('|')+'&toDelete='+deleteArr.join('|')+'&toRemove='+removeArr.join('|')+'&toMetadata='+metadataArr.join('|');
+        }
     });
-*/
-
-  });
 
     $('.bulkCheck').on('click', function(){
         var bulkCheck = this;
         var whichBulkCheck = $(bulkCheck).attr('id');
 
         $('.'+whichBulkCheck).each(function(){
-            if(!this.disabled) this.checked = !this.checked;
+            if(!this.disabled) { this.checked = !this.checked; }
         });
     });
 
@@ -101,11 +90,10 @@ $(document).ready(function(){
                 switch (found) {
                     case 2: return false;
                     case 1:
-                    if(!this.disabled) this.checked = lastCheck.checked;
+                    if(!this.disabled) { this.checked = lastCheck.checked; }
                 }
-                if(this == check || this == lastCheck) found++;
+                if(this === check || this === lastCheck) { found++; }
             });
-            lastClick = this;
         });
     });
 });
diff --git a/gui/slick/js/plotTooltip.js b/gui/slick/js/plotTooltip.js
index a29e5f869..57e7b94cd 100644
--- a/gui/slick/js/plotTooltip.js
+++ b/gui/slick/js/plotTooltip.js
@@ -1,6 +1,6 @@
 $(function () {
     $('.plotInfo').each(function () {
-        match = $(this).attr("id").match(/^plot_info_(\d+)_(\d+)_(\d+)$/);
+        var match = $(this).attr("id").match(/^plot_info_(\d+)_(\d+)_(\d+)$/);
         $(this).qtip({
             content: {
                 text: 'Loading...',
@@ -12,7 +12,7 @@ $(function () {
                         episode: match[3],
                         season: match[2]
                     },
-                    success: function (data, status) {
+                    success: function (data) {
                         this.set('content.text', data);
                     }
                 }
diff --git a/gui/slick/js/qualityChooser.js b/gui/slick/js/qualityChooser.js
index 8cf90a5d3..7242113d7 100644
--- a/gui/slick/js/qualityChooser.js
+++ b/gui/slick/js/qualityChooser.js
@@ -8,7 +8,7 @@ $(document).ready(function() {
         }
 
         $('#anyQualities option').each(function(i) {
-            var result = preset & $(this).val();
+            var result = preset & $(this).val(); // I have no clue what the & does here
             if (result > 0) {
                 $(this).attr('selected', 'selected');
             } else {
@@ -17,7 +17,7 @@ $(document).ready(function() {
         });
 
         $('#bestQualities option').each(function(i) {
-            var result = preset & ($(this).val() << 16);
+            var result = preset & ($(this).val() << 16); // I have no clue what the & does here
             if (result > 0) {
                 $(this).attr('selected', 'selected');
             } else {
diff --git a/gui/slick/js/ratingTooltip.js b/gui/slick/js/ratingTooltip.js
index 5c106db24..4d9352e96 100644
--- a/gui/slick/js/ratingTooltip.js
+++ b/gui/slick/js/ratingTooltip.js
@@ -1,7 +1,7 @@
 $(function () {
     $('.imdbstars').qtip({
         content: {
-            text: function(event, api) {
+            text: function() {
                 // Retrieve content from custom attribute of the $('.selector') elements.
                 return $(this).attr('qtip-content');
             }
diff --git a/gui/slick/js/restart.js b/gui/slick/js/restart.js
index 7e6fd4b7a..8fec86c0b 100644
--- a/gui/slick/js/restart.js
+++ b/gui/slick/js/restart.js
@@ -1,7 +1,7 @@
 $(document).ready(function() {
-    window.console_debug = false;
-    window.console_prefix = 'Restart: ';
-    window.current_pid = '';
+    window.console_debug = false; // jshint ignore:line
+    window.console_prefix = 'Restart: '; // jshint ignore:line
+    window.current_pid = ''; // jshint ignore:line
 
     var is_alive_url = srRoot + '/home/is_alive/';
 
diff --git a/gui/slick/js/rootDirs.js b/gui/slick/js/rootDirs.js
index d9e0e52df..0d1d516cf 100644
--- a/gui/slick/js/rootDirs.js
+++ b/gui/slick/js/rootDirs.js
@@ -22,41 +22,43 @@
 }());
 
 $(document).ready(function() {
-
     function addRootDir(path) {
-
-        if (!path.length)
+        if (!path.length){
             return;
+        }
 
         // check if it's the first one
-        var is_default = false;
-        if (!$('#whichDefaultRootDir').val().length)
-            is_default = true;
+        var isDefault = false;
+        if (!$('#whichDefaultRootDir').val().length){
+            isDefault = true;
+        }
 
         $('#rootDirs').append('<option value="'+path+'">'+path+'</option>');
 
         syncOptionIDs();
 
-        if (is_default)
+        if (isDefault) {
             setDefault($('#rootDirs option').attr('id'));
+        }
 
         refreshRootDirs();
         $.get(srRoot+'/config/general/saveRootDirs', { rootDirString: $('#rootDirText').val() });
     }
 
     function editRootDir(path) {
-
-        if (!path.length)
+        if (!path.length){
             return;
+        }
 
         // as long as something is selected
         if ($("#rootDirs option:selected").length) {
 
             // update the selected one with the provided path
-            if ($("#rootDirs option:selected").attr('id') == $("#whichDefaultRootDir").val())
+            if ($("#rootDirs option:selected").attr('id') === $("#whichDefaultRootDir").val()) {
                 $("#rootDirs option:selected").text('*'+path);
-            else
+            } else {
                 $("#rootDirs option:selected").text(path);
+            }
             $("#rootDirs option:selected").val(path);
         }
 
@@ -72,8 +74,8 @@ $(document).ready(function() {
 
             var toDelete = $("#rootDirs option:selected");
 
-            var newDefault = (toDelete.attr('id') == $("#whichDefaultRootDir").val());
-            var deleted_num = $("#rootDirs option:selected").attr('id').substr(3);
+            var newDefault = (toDelete.attr('id') === $("#whichDefaultRootDir").val());
+            var deletedNum = $("#rootDirs option:selected").attr('id').substr(3);
 
             toDelete.remove();
             syncOptionIDs();
@@ -86,12 +88,15 @@ $(document).ready(function() {
                 $("#whichDefaultRootDir").val('');
 
                 // if we're deleting the default and there are options left then pick a new default
-                if ($("#rootDirs option").length)
+                if ($("#rootDirs option").length) {
                     setDefault($('#rootDirs option').attr('id'));
+                }
 
             } else if ($("#whichDefaultRootDir").val().length) {
-                var old_default_num = $("#whichDefaultRootDir").val().substr(3);
-                if (old_default_num > deleted_num) $("#whichDefaultRootDir").val('rd-'+(old_default_num-1));
+                var oldDefaultNum = $("#whichDefaultRootDir").val().substr(3);
+                if (oldDefaultNum > deletedNum) {
+                    $("#whichDefaultRootDir").val('rd-'+(oldDefaultNum-1));
+                }
             }
 
         }
@@ -100,8 +105,9 @@ $(document).ready(function() {
     });
 
     $('#defaultRootDir').click(function(){
-        if ($("#rootDirs option:selected").length)
+        if ($("#rootDirs option:selected").length) {
             setDefault($("#rootDirs option:selected").attr('id'));
+        }
         refreshRootDirs();
         $.get(srRoot+'/config/general/saveRootDirs', {rootDirString: $('#rootDirText').val()});
     });
@@ -109,17 +115,17 @@ $(document).ready(function() {
     function setDefault(which, force){
         console.log('setting default to '+which);
 
-        if (which !== undefined && !which.length) return;
+        if (which !== undefined && !which.length) { return; }
 
-        if ($('#whichDefaultRootDir').val() == which && force !== true) return;
+        if ($('#whichDefaultRootDir').val() === which && force !== true) { return; }
 
         // put an asterisk on the text
-        if ($('#'+which).text().charAt(0) != '*') $('#'+which).text('*'+$('#'+which).text());
+        if ($('#'+which).text().charAt(0) !== '*') { $('#'+which).text('*'+$('#'+which).text()); }
 
         // if there's an existing one then take the asterisk off
         if ($('#whichDefaultRootDir').val() && force !== true) {
-            var old_default = $('#'+$('#whichDefaultRootDir').val());
-            old_default.text(old_default.text().substring(1));
+            var oldDefault = $('#'+$('#whichDefaultRootDir').val());
+            oldDefault.text(oldDefault.text().substring(1));
         }
 
         $('#whichDefaultRootDir').val(which);
@@ -135,39 +141,43 @@ $(document).ready(function() {
 
     function refreshRootDirs() {
 
-        if (!$("#rootDirs").length) return;
+        if (!$("#rootDirs").length) { return; }
 
-        var do_disable = 'true';
+        var doDisable = 'true';
 
         // re-sync option ids
         syncOptionIDs();
 
         // if nothing's selected then select the default
-        if (!$("#rootDirs option:selected").length && $('#whichDefaultRootDir').val().length) $('#'+$('#whichDefaultRootDir').val()).prop("selected", true);
+        if (!$("#rootDirs option:selected").length && $('#whichDefaultRootDir').val().length) {
+            $('#'+$('#whichDefaultRootDir').val()).prop("selected", true);
+        }
 
         // if something's selected then we have some behavior to figure out
         if ($("#rootDirs option:selected").length) {
-            do_disable = '';
+            doDisable = '';
         }
 
         // update the elements
-        $('#deleteRootDir').prop('disabled', do_disable);
-        $('#defaultRootDir').prop('disabled', do_disable);
-        $('#editRootDir').prop('disabled', do_disable);
+        $('#deleteRootDir').prop('disabled', doDisable);
+        $('#defaultRootDir').prop('disabled', doDisable);
+        $('#editRootDir').prop('disabled', doDisable);
 
-        var log_str = '';
-        var dir_text = '';
+        var logString = '';
+        var dirString = '';
         if ($('#whichDefaultRootDir').val().length >= 4){
-            dir_text = $('#whichDefaultRootDir').val().substr(3);
+            dirString = $('#whichDefaultRootDir').val().substr(3);
         }
         $('#rootDirs option').each(function() {
-            log_str += $(this).val()+'='+$(this).text()+'->'+$(this).attr('id')+'\n';
-            if (dir_text.length) dir_text += '|' + $(this).val();
+            logString += $(this).val()+'='+$(this).text()+'->'+$(this).attr('id')+'\n';
+            if (dirString.length) {
+                dirString += '|' + $(this).val();
+            }
         });
-        log_str += 'def: '+ $('#whichDefaultRootDir').val();
-        console.log(log_str);
+        logString += 'def: '+ $('#whichDefaultRootDir').val();
+        console.log(logString);
 
-        $('#rootDirText').val(dir_text);
+        $('#rootDirText').val(dirString);
         $('#rootDirText').change();
         console.log('rootDirText: '+$('#rootDirText').val());
     }
diff --git a/gui/slick/js/sceneExceptionsTooltip.js b/gui/slick/js/sceneExceptionsTooltip.js
index 2be789935..face3cdd5 100644
--- a/gui/slick/js/sceneExceptionsTooltip.js
+++ b/gui/slick/js/sceneExceptionsTooltip.js
@@ -1,6 +1,6 @@
 $(function () {
     $('.title a').each(function () {
-        match = $(this).parent().attr("id").match(/^scene_exception_(\d+)$/);
+        var match = $(this).parent().attr("id").match(/^scene_exception_(\d+)$/);
         $(this).qtip({
             content: {
                 text: 'Loading...',
@@ -10,7 +10,7 @@ $(function () {
                     data: {
                         show: match[1]
                     },
-                    success: function (data, status) {
+                    success: function (data) {
                         this.set('content.text', data);
                     }
                 }
diff --git a/gui/slick/js/testRename.js b/gui/slick/js/testRename.js
index b0972122a..6b7cb5e35 100644
--- a/gui/slick/js/testRename.js
+++ b/gui/slick/js/testRename.js
@@ -18,7 +18,7 @@ $(document).ready(function(){
         $('.epCheck:visible').each(function(){
             var epParts = $(this).attr('id').split('x');
 
-            if (epParts[0] == seasNo) {
+            if (epParts[0] === seasNo) {
                 this.checked = seasCheck.checked;
             }
         });
@@ -33,10 +33,9 @@ $(document).ready(function(){
             }
         });
 
-        if (epArr.length === 0) return false;
+        if (epArr.length === 0) { return false; }
 
-        url = srRoot+'/home/doRename?show='+$('#showID').attr('value')+'&eps='+epArr.join('|');
-        window.location.href = url;
+        window.location.href = srRoot+'/home/doRename?show='+$('#showID').attr('value')+'&eps='+epArr.join('|');
     });
 
 });
diff --git a/gui/slick/views/config_anime.mako b/gui/slick/views/config_anime.mako
index 172fd34b3..e123aab59 100644
--- a/gui/slick/views/config_anime.mako
+++ b/gui/slick/views/config_anime.mako
@@ -5,7 +5,6 @@
 %>
 
 <%block name="scripts">
-<script type="text/javascript" src="${srRoot}/js/configAnime.js?${sbPID}"></script>
 <script type="text/javascript" src="${srRoot}/js/config.js?${sbPID}"></script>
 </%block>
 <%block name="content">
diff --git a/gui/slick/views/displayShow.mako b/gui/slick/views/displayShow.mako
index 6e239e521..b8963dbe5 100644
--- a/gui/slick/views/displayShow.mako
+++ b/gui/slick/views/displayShow.mako
@@ -14,7 +14,6 @@
 %>
 <%block name="scripts">
 <script type="text/javascript" src="${srRoot}/js/lib/jquery.bookmarkscroll.js?${sbPID}"></script>
-<script type="text/javascript" src="${srRoot}/js/displayShow.js?${sbPID}"></script>
 <script type="text/javascript" src="${srRoot}/js/plotTooltip.js?${sbPID}"></script>
 <script type="text/javascript" src="${srRoot}/js/sceneExceptionsTooltip.js?${sbPID}"></script>
 <script type="text/javascript" src="${srRoot}/js/ratingTooltip.js?${sbPID}"></script>
@@ -481,7 +480,7 @@
                     ## Lets do this exactly like ComingEpisodes and History
                     ## Avoid issues with dateutil's _isdst on Windows but still provide air dates
                     <% airDate = datetime.datetime.fromordinal(epResult['airdate']) %>
-                    % if airDate.year >= 1970 or show.network:  
+                    % if airDate.year >= 1970 or show.network:
                         <% airDate = sbdatetime.sbdatetime.convert_to_setting(network_timezones.parse_date_time(epResult['airdate'], show.airs, show.network)) %>
                     % endif
                     <time datetime="${airDate.isoformat('T')}" class="date">${sbdatetime.sbdatetime.sbfdatetime(airDate)}</time>
-- 
GitLab


From f5c9e75bd517662612c6a62de9b805499ae95bce Mon Sep 17 00:00:00 2001
From: labrys <labrys@useres.noreply.github.com>
Date: Sat, 7 Nov 2015 13:18:14 -0500
Subject: [PATCH 079/215] PEP 8: Add and remove whitespace and blank lines

---
 sickbeard/clients/download_station_client.py | 24 +++++++++++---------
 1 file changed, 13 insertions(+), 11 deletions(-)

diff --git a/sickbeard/clients/download_station_client.py b/sickbeard/clients/download_station_client.py
index 5db4dc2e6..9119dce2b 100644
--- a/sickbeard/clients/download_station_client.py
+++ b/sickbeard/clients/download_station_client.py
@@ -23,6 +23,7 @@
 import sickbeard
 from sickbeard.clients.generic import GenericClient
 
+
 class DownloadStationAPI(GenericClient):
 
     def __init__(self, host=None, username=None, password=None):
@@ -46,11 +47,12 @@ class DownloadStationAPI(GenericClient):
     def _add_torrent_uri(self, result):
 
         data = {
-            'api':'SYNO.DownloadStation.Task',
-            'version':'1', 'method':'create',
-            'session':'DownloadStation',
-            '_sid':self.auth,
-            'uri':result.url
+            'api': 'SYNO.DownloadStation.Task',
+            'version': '1',
+            'method': 'create',
+            'session': 'DownloadStation',
+            '_sid': self.auth,
+            'uri': result.url
         }
 
         if sickbeard.TORRENT_PATH:
@@ -62,16 +64,16 @@ class DownloadStationAPI(GenericClient):
     def _add_torrent_file(self, result):
 
         data = {
-            'api':'SYNO.DownloadStation.Task',
-            'version':'1',
-            'method':'create',
-            'session':'DownloadStation',
-            '_sid':self.auth
+            'api': 'SYNO.DownloadStation.Task',
+            'version': '1',
+            'method': 'create',
+            'session': 'DownloadStation',
+            '_sid': self.auth
         }
 
         if sickbeard.TORRENT_PATH:
             data['destination'] = sickbeard.TORRENT_PATH
-        files = {'file':(result.name + '.torrent', result.content)}
+        files = {'file': (result.name + '.torrent', result.content)}
         self._request(method='post', data=data, files=files)
 
         return self.response.json()['success']
-- 
GitLab


From e09c239a7d183390d527301e304645686ce54a07 Mon Sep 17 00:00:00 2001
From: labrys <labrys@useres.noreply.github.com>
Date: Sat, 7 Nov 2015 13:19:00 -0500
Subject: [PATCH 080/215] PEP 263: Add encoding declaration

---
 sickbeard/clients/download_station_client.py | 1 +
 1 file changed, 1 insertion(+)

diff --git a/sickbeard/clients/download_station_client.py b/sickbeard/clients/download_station_client.py
index 9119dce2b..621e517d8 100644
--- a/sickbeard/clients/download_station_client.py
+++ b/sickbeard/clients/download_station_client.py
@@ -1,3 +1,4 @@
+# coding=utf-8
 # Authors:
 # Pedro Jose Pereira Vieito <pvieito@gmail.com> (Twitter: @pvieito)
 #
-- 
GitLab


From 627d09601b9173090f23921f9c3c920b8acc563f Mon Sep 17 00:00:00 2001
From: labrys <labrys@useres.noreply.github.com>
Date: Sat, 7 Nov 2015 13:30:03 -0500
Subject: [PATCH 081/215] PEP 8: Add blank lines for consistency

---
 sickbeard/clients/generic.py | 1 +
 1 file changed, 1 insertion(+)

diff --git a/sickbeard/clients/generic.py b/sickbeard/clients/generic.py
index 4603d3ba2..e24b71b39 100644
--- a/sickbeard/clients/generic.py
+++ b/sickbeard/clients/generic.py
@@ -10,6 +10,7 @@ from bencode import bencode, bdecode
 import requests
 from bencode.BTL import BTFailure
 
+
 class GenericClient(object):
     def __init__(self, name, host=None, username=None, password=None):
 
-- 
GitLab


From 214b2749b2e4db9b13be78249a209f72f8729c02 Mon Sep 17 00:00:00 2001
From: labrys <labrys@useres.noreply.github.com>
Date: Sat, 7 Nov 2015 13:28:52 -0500
Subject: [PATCH 082/215] PEP 263: Add encoding declaration

---
 sickbeard/clients/generic.py | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/sickbeard/clients/generic.py b/sickbeard/clients/generic.py
index e24b71b39..830192b8e 100644
--- a/sickbeard/clients/generic.py
+++ b/sickbeard/clients/generic.py
@@ -1,3 +1,5 @@
+# coding=utf-8
+
 import re
 import time
 from hashlib import sha1
-- 
GitLab


From 5074c1b9124b20be2ed8687f01806e1c11330ef7 Mon Sep 17 00:00:00 2001
From: labrys <labrys@useres.noreply.github.com>
Date: Sat, 7 Nov 2015 13:36:13 -0500
Subject: [PATCH 083/215] PEP 8: Add and remove whitespace and blank lines

---
 sickbeard/clients/mlnet_client.py | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/sickbeard/clients/mlnet_client.py b/sickbeard/clients/mlnet_client.py
index 4db6d0115..ee52d3f0b 100644
--- a/sickbeard/clients/mlnet_client.py
+++ b/sickbeard/clients/mlnet_client.py
@@ -18,13 +18,14 @@
 
 from sickbeard.clients.generic import GenericClient
 
+
 class mlnetAPI(GenericClient):
     def __init__(self, host=None, username=None, password=None):
 
         super(mlnetAPI, self).__init__('mlnet', host, username, password)
 
         self.url = self.host
-        #self.session.auth = HTTPDigestAuth(self.username, self.password);
+        # self.session.auth = HTTPDigestAuth(self.username, self.password);
 
     def _get_auth(self):
 
@@ -38,13 +39,13 @@ class mlnetAPI(GenericClient):
 
     def _add_torrent_uri(self, result):
 
-        self.url = self.host+'submit'
+        self.url = self.host + 'submit'
         params = {'q': 'dllink ' + result.url}
         return self._request(method='get', params=params)
 
     def _add_torrent_file(self, result):
 
-        self.url = self.host+'submit'
+        self.url = self.host + 'submit'
         params = {'q': 'dllink ' + result.url}
         return self._request(method='get', params=params)
 
-- 
GitLab


From 7a556fbcc852d8ec1f5882765d1f26001d9f5451 Mon Sep 17 00:00:00 2001
From: labrys <labrys@useres.noreply.github.com>
Date: Sat, 7 Nov 2015 13:34:57 -0500
Subject: [PATCH 084/215] PEP 263: Add encoding declaration

---
 sickbeard/clients/mlnet_client.py | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/sickbeard/clients/mlnet_client.py b/sickbeard/clients/mlnet_client.py
index ee52d3f0b..abd4634a0 100644
--- a/sickbeard/clients/mlnet_client.py
+++ b/sickbeard/clients/mlnet_client.py
@@ -1,3 +1,5 @@
+# coding=utf-8
+
 # Author: kounch
 # URL: http://code.google.com/p/sickbeard/
 #
-- 
GitLab


From 023c21cc5d620e67cab46cb631077a8089afadd1 Mon Sep 17 00:00:00 2001
From: labrys <labrys@useres.noreply.github.com>
Date: Sat, 7 Nov 2015 15:17:05 -0500
Subject: [PATCH 085/215] PEP 8: Add and remove whitespace and blank lines

---
 sickbeard/clients/qbittorrent_client.py | 1 +
 1 file changed, 1 insertion(+)

diff --git a/sickbeard/clients/qbittorrent_client.py b/sickbeard/clients/qbittorrent_client.py
index c78b6b6b0..55d2dea33 100644
--- a/sickbeard/clients/qbittorrent_client.py
+++ b/sickbeard/clients/qbittorrent_client.py
@@ -20,6 +20,7 @@ import sickbeard
 from sickbeard.clients.generic import GenericClient
 from requests.auth import HTTPDigestAuth
 
+
 class qbittorrentAPI(GenericClient):
     def __init__(self, host=None, username=None, password=None):
 
-- 
GitLab


From 6fdc5359b67f17d8efaa61bbd5b2f4b85c9e34e3 Mon Sep 17 00:00:00 2001
From: labrys <labrys@useres.noreply.github.com>
Date: Sat, 7 Nov 2015 15:17:30 -0500
Subject: [PATCH 086/215] PEP 263: Add encoding declaration

---
 sickbeard/clients/qbittorrent_client.py | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/sickbeard/clients/qbittorrent_client.py b/sickbeard/clients/qbittorrent_client.py
index 55d2dea33..962fd22ac 100644
--- a/sickbeard/clients/qbittorrent_client.py
+++ b/sickbeard/clients/qbittorrent_client.py
@@ -1,3 +1,5 @@
+# coding=utf-8
+
 # Author: Mr_Orange <mr_orange@hotmail.it>
 # URL: http://code.google.com/p/sickbeard/
 #
-- 
GitLab


From 92fa0bedfac753d1480c1bc917cafd00f1a39015 Mon Sep 17 00:00:00 2001
From: Dustyn Gibson <miigotu@gmail.com>
Date: Sat, 7 Nov 2015 12:57:18 -0800
Subject: [PATCH 087/215] Fix starting as a daemon when running in unicode mode
 =P

---
 SickBeard.py | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/SickBeard.py b/SickBeard.py
index ef0c9b552..5bd7d2261 100755
--- a/SickBeard.py
+++ b/SickBeard.py
@@ -443,9 +443,10 @@ class SickRage(object):
         stdin = file(devnull, 'r')
         stdout = file(devnull, 'a+')
         stderr = file(devnull, 'a+')
-        os.dup2(stdin.fileno(), sys.stdin.fileno())
-        os.dup2(stdout.fileno(), sys.stdout.fileno())
-        os.dup2(stderr.fileno(), sys.stderr.fileno())
+
+        os.dup2(stdin.fileno(), getattr(sys.stdin, 'device', sys.stdin).fileno())
+        os.dup2(stdout.fileno(), getattr(sys.stdout, 'device', sys.stdout).fileno())
+        os.dup2(stderr.fileno(), getattr(sys.stderr, 'device', sys.stderr).fileno())
 
     @staticmethod
     def remove_pid_file(PIDFILE):
-- 
GitLab


From 16f3118e8338651d1d730d42ff4c052af7a1ecf2 Mon Sep 17 00:00:00 2001
From: Dustyn Gibson <miigotu@gmail.com>
Date: Sat, 7 Nov 2015 13:07:12 -0800
Subject: [PATCH 088/215] Clean up old tornado location before it is imported
 Remove old client pyc removal code

---
 SickBeard.py | 36 +++++-------------------------------
 1 file changed, 5 insertions(+), 31 deletions(-)

diff --git a/SickBeard.py b/SickBeard.py
index 5bd7d2261..f15dc8d19 100755
--- a/SickBeard.py
+++ b/SickBeard.py
@@ -57,13 +57,17 @@ import datetime
 import threading
 import getopt
 
+# Do this before importing sickbeard, to prevent locked files and incorrect import
+oldtornado = os.path.abspath(os.path.join(os.path.dirname(__file__), 'tornado'))
+shutil.move(oldtornado, oldtornado + '_kill')
+shutil.rmtree(oldtornado + '_kill')
+
 import sickbeard
 from sickbeard import db, logger, network_timezones, failed_history, name_cache
 from sickbeard.tv import TVShow
 from sickbeard.webserveInit import SRWebServer
 from sickbeard.event_queue import Events
 from configobj import ConfigObj
-from sickrage.helper.encoding import ek
 
 # http://bugs.python.org/issue7980#msg221094
 throwaway = datetime.datetime.strptime('20110101', '%Y%m%d')
@@ -128,33 +132,6 @@ class SickRage(object):
 
         return help_msg
 
-    @staticmethod
-    def fix_clients_nonsense():
-        filenames = [
-            "sickbeard/clients/download_station.py",
-            "sickbeard/clients/utorrent.py",
-            "sickbeard/clients/qbittorrent.py",
-            "sickbeard/clients/transmission.py",
-            "sickbeard/clients/deluge.py",
-            "sickbeard/clients/deluged.py",
-            "sickbeard/clients/rtorrent.py"
-        ]
-
-        for filename in filenames:
-            filename = ek(os.path.join, sickbeard.PROG_DIR, filename)
-
-            try:
-                if ek(os.path.exists, filename):
-                    ek(os.remove, filename)
-            except Exception:
-                pass
-
-            try:
-                if ek(os.path.exists, filename + "c"):
-                    ek(os.remove, filename + "c")
-            except Exception:
-                pass
-
     # pylint: disable=R0912,R0915
     # Too many branches
     # Too many statements
@@ -306,9 +283,6 @@ class SickRage(object):
         # Get PID
         sickbeard.PID = os.getpid()
 
-        # Fix clients old files
-        self.fix_clients_nonsense()
-
         # Build from the DB to start with
         self.loadShowsFromDB()
 
-- 
GitLab


From c5d49a07a52b92ceec235c1fb68ffb05d9f2838f Mon Sep 17 00:00:00 2001
From: labrys <labrys@useres.noreply.github.com>
Date: Sat, 7 Nov 2015 15:47:26 -0500
Subject: [PATCH 089/215] PEP 263: Add encoding declaration

---
 sickbeard/databases/__init__.py | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/sickbeard/databases/__init__.py b/sickbeard/databases/__init__.py
index 96925d164..2e67a9dd6 100644
--- a/sickbeard/databases/__init__.py
+++ b/sickbeard/databases/__init__.py
@@ -1,3 +1,5 @@
+# coding=utf-8
+
 # Author: Nic Wolfe <nic@wolfeden.ca>
 # URL: http://code.google.com/p/sickbeard/
 #
@@ -16,4 +18,4 @@
 # You should have received a copy of the GNU General Public License
 # along with SickRage.  If not, see <http://www.gnu.org/licenses/>.
 
-__all__ = ["mainDB", "cache", "failed"]
\ No newline at end of file
+__all__ = ["mainDB", "cache", "failed"]
-- 
GitLab


From cd91907db971520be5fef6ad6733485274508483 Mon Sep 17 00:00:00 2001
From: labrys <labrys@useres.noreply.github.com>
Date: Sat, 7 Nov 2015 15:49:33 -0500
Subject: [PATCH 090/215] PEP 8: Add and remove blank lines for consistency

---
 sickbeard/databases/cache_db.py | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/sickbeard/databases/cache_db.py b/sickbeard/databases/cache_db.py
index 9734be453..98b9dd7b2 100644
--- a/sickbeard/databases/cache_db.py
+++ b/sickbeard/databases/cache_db.py
@@ -18,6 +18,7 @@
 
 from sickbeard import db
 
+
 # Add new migrations at the bottom of the list; subclass the previous migration.
 class InitialSchema(db.SchemaUpgrade):
     def test(self):
@@ -49,6 +50,7 @@ class AddSceneExceptions(InitialSchema):
         self.connection.action(
             "CREATE TABLE scene_exceptions (exception_id INTEGER PRIMARY KEY, indexer_id INTEGER KEY, show_name TEXT);")
 
+
 class AddSceneNameCache(AddSceneExceptions):
     def test(self):
         return self.hasTable("scene_names")
@@ -64,6 +66,7 @@ class AddNetworkTimezones(AddSceneNameCache):
     def execute(self):
         self.connection.action("CREATE TABLE network_timezones (network_name TEXT PRIMARY KEY, timezone TEXT);")
 
+
 class AddLastSearch(AddNetworkTimezones):
     def test(self):
         return self.hasTable("lastSearch")
@@ -71,6 +74,7 @@ class AddLastSearch(AddNetworkTimezones):
     def execute(self):
         self.connection.action("CREATE TABLE lastSearch (provider TEXT, time NUMERIC);")
 
+
 class AddSceneExceptionsSeasons(AddLastSearch):
     def test(self):
         return self.hasColumn("scene_exceptions", "season")
@@ -78,6 +82,7 @@ class AddSceneExceptionsSeasons(AddLastSearch):
     def execute(self):
         self.addColumn("scene_exceptions", "season", "NUMERIC", -1)
 
+
 class AddSceneExceptionsCustom(AddSceneExceptionsSeasons):
     def test(self):
         return self.hasColumn("scene_exceptions", "custom")
@@ -85,6 +90,7 @@ class AddSceneExceptionsCustom(AddSceneExceptionsSeasons):
     def execute(self):
         self.addColumn("scene_exceptions", "custom", "NUMERIC", 0)
 
+
 class AddSceneExceptionsRefresh(AddSceneExceptionsCustom):
     def test(self):
         return self.hasTable("scene_exceptions_refresh")
-- 
GitLab


From 49af8d2c3edfcc79d7783f41ff291c0e00d8c674 Mon Sep 17 00:00:00 2001
From: labrys <labrys@useres.noreply.github.com>
Date: Sat, 7 Nov 2015 15:50:01 -0500
Subject: [PATCH 091/215] PEP 263: Add encoding declaration

---
 sickbeard/databases/cache_db.py | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/sickbeard/databases/cache_db.py b/sickbeard/databases/cache_db.py
index 98b9dd7b2..316955a57 100644
--- a/sickbeard/databases/cache_db.py
+++ b/sickbeard/databases/cache_db.py
@@ -1,3 +1,5 @@
+# coding=utf-8
+
 # Author: Nic Wolfe <nic@wolfeden.ca>
 # URL: http://code.google.com/p/sickbeard/
 #
-- 
GitLab


From d731c42b196fee9d66c3db30187ea9f5c2898f93 Mon Sep 17 00:00:00 2001
From: labrys <labrys@useres.noreply.github.com>
Date: Sat, 7 Nov 2015 15:50:44 -0500
Subject: [PATCH 092/215] PEP 263: Add encoding declaration

---
 sickbeard/databases/failed_db.py | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/sickbeard/databases/failed_db.py b/sickbeard/databases/failed_db.py
index 9d880bf3a..6a91a8af1 100644
--- a/sickbeard/databases/failed_db.py
+++ b/sickbeard/databases/failed_db.py
@@ -1,3 +1,5 @@
+# coding=utf-8
+
 # Author: Tyler Fenby <tylerfenby@gmail.com>
 # URL: http://code.google.com/p/sickbeard/
 #
-- 
GitLab


From 48c5c76ab56bcd2a590d6a2f51ca07920662dbd7 Mon Sep 17 00:00:00 2001
From: labrys <labrys@useres.noreply.github.com>
Date: Sat, 7 Nov 2015 16:06:59 -0500
Subject: [PATCH 093/215] PEP 8: Convert None comparisons from operators to 'is
 / is not None'

---
 sickbeard/databases/mainDB.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/sickbeard/databases/mainDB.py b/sickbeard/databases/mainDB.py
index 7641677cc..5ba177517 100644
--- a/sickbeard/databases/mainDB.py
+++ b/sickbeard/databases/mainDB.py
@@ -427,7 +427,7 @@ class AddSizeAndSceneNameFields(InitialSchema):
                 except (InvalidNameException, InvalidShowException):
                     continue
 
-                if parse_result.series_name and parse_result.season_number != None and parse_result.episode_numbers and parse_result.release_group:
+                if parse_result.series_name and parse_result.season_number is not None and parse_result.episode_numbers and parse_result.release_group:
                     # if all is well by this point we'll just put the release name into the database
                     self.connection.action("UPDATE tv_episodes SET release_name = ? WHERE episode_id = ?",
                                            [cur_name, ep_results[0]["episode_id"]])
-- 
GitLab


From 8e1a17caebb54d255e2822ac3d4076b42415d11c Mon Sep 17 00:00:00 2001
From: labrys <labrys@useres.noreply.github.com>
Date: Sat, 7 Nov 2015 16:15:38 -0500
Subject: [PATCH 094/215] PEP 8: Convert membership test from 'not x in y' to
 'x not in y'

---
 sickbeard/databases/mainDB.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/sickbeard/databases/mainDB.py b/sickbeard/databases/mainDB.py
index 5ba177517..c351e07c8 100644
--- a/sickbeard/databases/mainDB.py
+++ b/sickbeard/databases/mainDB.py
@@ -279,7 +279,7 @@ class MainSanityCheck(db.DBSanityCheck):
                 (sqlResult['episode_id'], sqlResult['subtitles']), logger.DEBUG)
 
             for subcode in sqlResult['subtitles'].split(','):
-                if not len(subcode) is 3 or not subcode in validLanguages:
+                if not len(subcode) is 3 or subcode not in validLanguages:
                     logger.log(u"Fixing subtitle codes for episode_id: %s, invalid code: %s" %
                         (sqlResult['episode_id'], subcode), logger.DEBUG)
                     continue
-- 
GitLab


From e1d2e95ac09373e5e68ab10cf9c2830fd8e6d338 Mon Sep 17 00:00:00 2001
From: labrys <labrys@useres.noreply.github.com>
Date: Sat, 7 Nov 2015 15:58:41 -0500
Subject: [PATCH 095/215] PEP 203: Replace assignment with augmented assignment

---
 sickbeard/databases/mainDB.py | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/sickbeard/databases/mainDB.py b/sickbeard/databases/mainDB.py
index c351e07c8..d3edd854d 100644
--- a/sickbeard/databases/mainDB.py
+++ b/sickbeard/databases/mainDB.py
@@ -518,16 +518,16 @@ class Add1080pAndRawHDQualities(RenameSeasonFolders):
         result = old_quality
         # move fullhdbluray from 1<<5 to 1<<8 if set
         if (result & (1 << 5)):
-            result = result & ~(1 << 5)
-            result = result | (1 << 8)
+            result &= ~(1 << 5)
+            result |= 1 << 8
         # move hdbluray from 1<<4 to 1<<7 if set
         if (result & (1 << 4)):
-            result = result & ~(1 << 4)
-            result = result | (1 << 7)
+            result &= ~(1 << 4)
+            result |= 1 << 7
         # move hdwebdl from 1<<3 to 1<<5 if set
         if (result & (1 << 3)):
-            result = result & ~(1 << 3)
-            result = result | (1 << 5)
+            result &= ~(1 << 3)
+            result |= 1 << 5
 
         return result
 
-- 
GitLab


From 85894908e13df8c29f5fc9edda49db973f209a81 Mon Sep 17 00:00:00 2001
From: labrys <labrys@useres.noreply.github.com>
Date: Sat, 7 Nov 2015 16:02:54 -0500
Subject: [PATCH 096/215] PEP 203: Replace list creation with list literal

---
 sickbeard/databases/mainDB.py | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/sickbeard/databases/mainDB.py b/sickbeard/databases/mainDB.py
index d3edd854d..c9628a052 100644
--- a/sickbeard/databases/mainDB.py
+++ b/sickbeard/databases/mainDB.py
@@ -994,9 +994,11 @@ class AddAnimeBlacklistWhitelist(AddSceneAbsoluteNumbering):
     def execute(self):
         backupDatabase(35)
 
-        cl = []
-        cl.append(["CREATE TABLE blacklist (show_id INTEGER, range TEXT, keyword TEXT)"])
-        cl.append(["CREATE TABLE whitelist (show_id INTEGER, range TEXT, keyword TEXT)"])
+        cl = [
+            ["CREATE TABLE blacklist (show_id INTEGER, range TEXT, keyword TEXT)"],
+            ["CREATE TABLE whitelist (show_id INTEGER, range TEXT, keyword TEXT)"]
+        ]
+
         self.connection.mass_action(cl)
 
         self.incDBVersion()
-- 
GitLab


From de1cae3029cb81c3b5bb34ba6c88425454d77704 Mon Sep 17 00:00:00 2001
From: labrys <labrys@useres.noreply.github.com>
Date: Sat, 7 Nov 2015 16:11:16 -0500
Subject: [PATCH 097/215] PEP 8: Fix indentation and add/remove blank lines for
 consistency

---
 sickbeard/databases/mainDB.py | 68 ++++++++++++++++++++---------------
 1 file changed, 39 insertions(+), 29 deletions(-)

diff --git a/sickbeard/databases/mainDB.py b/sickbeard/databases/mainDB.py
index c9628a052..468d3d4ed 100644
--- a/sickbeard/databases/mainDB.py
+++ b/sickbeard/databases/mainDB.py
@@ -48,12 +48,11 @@ class MainSanityCheck(db.DBSanityCheck):
         self.convert_tvrage_to_tvdb()
         self.convert_archived_to_compund()
 
-
     def convert_archived_to_compund(self):
         logger.log(u'Checking for archived episodes not qualified', logger.DEBUG)
 
         query = "SELECT episode_id, showid, status, location, season, episode " + \
-        "FROM tv_episodes WHERE status = %s" % common.ARCHIVED
+                "FROM tv_episodes WHERE status = %s" % common.ARCHIVED
 
         sqlResults = self.connection.select(query)
         if sqlResults:
@@ -67,9 +66,9 @@ class MainSanityCheck(db.DBSanityCheck):
                 fixedStatus = common.Quality.compositeStatus(common.ARCHIVED, quality)
 
             logger.log(u'Changing status from %s to %s for %s: S%02dE%02d at %s (File %s)' %
-                (common.statusStrings[common.ARCHIVED], common.statusStrings[fixedStatus],
-                 archivedEp['showid'], archivedEp['season'], archivedEp['episode'],
-                 archivedEp['location'] if archivedEp['location'] else 'unknown location', ('NOT FOUND', 'EXISTS')[bool(existing)]))
+                       (common.statusStrings[common.ARCHIVED], common.statusStrings[fixedStatus],
+                        archivedEp['showid'], archivedEp['season'], archivedEp['episode'],
+                        archivedEp['location'] if archivedEp['location'] else 'unknown location', ('NOT FOUND', 'EXISTS')[bool(existing)]))
 
             self.connection.action("UPDATE tv_episodes SET status = %i WHERE episode_id = %i" % (fixedStatus, archivedEp['episode_id']))
 
@@ -86,11 +85,11 @@ class MainSanityCheck(db.DBSanityCheck):
         for tvrage_show in sqlResults:
             logger.log(u"Processing %s at %s" % (tvrage_show['show_name'], tvrage_show['location']))
             mapping = self.connection.select("SELECT mindexer_id FROM indexer_mapping WHERE indexer_id=%i AND indexer=%i AND mindexer=%i" %
-                    (tvrage_show['indexer_id'], INDEXER_TVRAGE, INDEXER_TVDB))
+                                             (tvrage_show['indexer_id'], INDEXER_TVRAGE, INDEXER_TVDB))
 
             if len(mapping) != 1:
                 logger.log(u"Error mapping show from tvrage to tvdb for %s (%s), found %i mapping results. Cannot convert automatically!" %
-                        (tvrage_show['show_name'], tvrage_show['location'], len(mapping)), logger.WARNING)
+                           (tvrage_show['show_name'], tvrage_show['location'], len(mapping)), logger.WARNING)
                 logger.log(u"Removing the TVRage show and it's episodes from the DB, use 'addExistingShow'", logger.WARNING)
                 self.connection.action("DELETE FROM tv_shows WHERE indexer_id = %i AND indexer = %i" % (tvrage_show['indexer_id'], INDEXER_TVRAGE))
                 self.connection.action("DELETE FROM tv_episodes WHERE showid = %i" % tvrage_show['indexer_id'])
@@ -100,33 +99,32 @@ class MainSanityCheck(db.DBSanityCheck):
             duplicate = self.connection.select("SELECT * FROM tv_shows WHERE indexer_id = %i AND indexer = %i" % (mapping[0]['mindexer_id'], INDEXER_TVDB))
             if duplicate:
                 logger.log(u'Found %s which has the same id as %s, cannot convert automatically so I am pausing %s' %
-                    (duplicate[0]['show_name'], tvrage_show['show_name'], duplicate[0]['show_name']), logger.WARNING)
+                           (duplicate[0]['show_name'], tvrage_show['show_name'], duplicate[0]['show_name']), logger.WARNING)
                 self.connection.action("UPDATE tv_shows SET paused=1 WHERE indexer=%i AND indexer_id=%i" %
-                        (INDEXER_TVDB, duplicate[0]['indexer_id']))
+                                       (INDEXER_TVDB, duplicate[0]['indexer_id']))
 
                 logger.log(u"Removing %s and it's episodes from the DB" % tvrage_show['show_name'], logger.WARNING)
                 self.connection.action("DELETE FROM tv_shows WHERE indexer_id = %i AND indexer = %i" % (tvrage_show['indexer_id'], INDEXER_TVRAGE))
                 self.connection.action("DELETE FROM tv_episodes WHERE showid = %i" % tvrage_show['indexer_id'])
                 logger.log(u'Manually move the season folders from %s into %s, and delete %s before rescanning %s and unpausing it' %
-                    (tvrage_show['location'], duplicate[0]['location'], tvrage_show['location'], duplicate[0]['show_name']), logger.WARNING)
+                           (tvrage_show['location'], duplicate[0]['location'], tvrage_show['location'], duplicate[0]['show_name']), logger.WARNING)
                 continue
 
             logger.log(u'Mapping %s to tvdb id %i' % (tvrage_show['show_name'], mapping[0]['mindexer_id']))
 
             self.connection.action(
                 "UPDATE tv_shows SET indexer=%i, indexer_id=%i WHERE indexer_id=%i" %
-                    (INDEXER_TVDB, mapping[0]['mindexer_id'], tvrage_show['indexer_id'])
-                )
+                (INDEXER_TVDB, mapping[0]['mindexer_id'], tvrage_show['indexer_id'])
+            )
 
             logger.log(u'Relinking episodes to show')
             self.connection.action(
                 "UPDATE tv_episodes SET indexer=%i, showid=%i, indexerid=0 WHERE showid=%i" %
-                    (INDEXER_TVDB, mapping[0]['mindexer_id'], tvrage_show['indexer_id'])
-                )
+                (INDEXER_TVDB, mapping[0]['mindexer_id'], tvrage_show['indexer_id'])
+            )
 
             logger.log(u'Please perform a full update on %s' % tvrage_show['show_name'], logger.WARNING)
 
-
     def fix_duplicate_shows(self, column='indexer_id'):
 
         sqlResults = self.connection.select(
@@ -148,7 +146,6 @@ class MainSanityCheck(db.DBSanityCheck):
                         cur_dupe_id["show_id"]))
                 self.connection.action("DELETE FROM tv_shows WHERE show_id = ?", [cur_dupe_id["show_id"]])
 
-
     def fix_duplicate_episodes(self):
 
         sqlResults = self.connection.select(
@@ -265,7 +262,8 @@ class MainSanityCheck(db.DBSanityCheck):
 
         sqlResults = self.connection.select(
             "SELECT subtitles, episode_id FROM tv_episodes WHERE subtitles != '' AND subtitles_lastsearch < ?;",
-                [datetime.datetime(2015, 7, 15, 17, 20, 44, 326380).strftime(dateTimeFormat)])
+            [datetime.datetime(2015, 7, 15, 17, 20, 44, 326380).strftime(dateTimeFormat)]
+        )
 
         validLanguages = [Language.fromopensubtitles(language).opensubtitles for language in language_converters['opensubtitles'].codes if len(language) == 3]
 
@@ -276,18 +274,18 @@ class MainSanityCheck(db.DBSanityCheck):
             langs = []
 
             logger.log(u"Checking subtitle codes for episode_id: %s, codes: %s" %
-                (sqlResult['episode_id'], sqlResult['subtitles']), logger.DEBUG)
+                       (sqlResult['episode_id'], sqlResult['subtitles']), logger.DEBUG)
 
             for subcode in sqlResult['subtitles'].split(','):
                 if not len(subcode) is 3 or subcode not in validLanguages:
                     logger.log(u"Fixing subtitle codes for episode_id: %s, invalid code: %s" %
-                        (sqlResult['episode_id'], subcode), logger.DEBUG)
+                               (sqlResult['episode_id'], subcode), logger.DEBUG)
                     continue
 
                 langs.append(subcode)
 
             self.connection.action("UPDATE tv_episodes SET subtitles = ?, subtitles_lastsearch = ? WHERE episode_id = ?;",
-                [','.join(langs), datetime.datetime.now().strftime(dateTimeFormat), sqlResult['episode_id']])
+                                   [','.join(langs), datetime.datetime.now().strftime(dateTimeFormat), sqlResult['episode_id']])
 
     def fix_show_nfo_lang(self):
         self.connection.action("UPDATE tv_shows SET lang = '' WHERE lang = 0 or lang = '0'")
@@ -300,6 +298,7 @@ def backupDatabase(version):
     else:
         logger.log(u"Proceeding with upgrade")
 
+
 # ======================
 # = Main DB Migrations =
 # ======================
@@ -338,18 +337,18 @@ class InitialSchema(db.SchemaUpgrade):
             cur_db_version = self.checkDBVersion()
 
             if cur_db_version < MIN_DB_VERSION:
-                logger.log_error_and_exit(u"Your database version (" + str(
-                    cur_db_version) + ") is too old to migrate from what this version of SickRage supports (" + \
-                                          str(MIN_DB_VERSION) + ").\n" + \
+                logger.log_error_and_exit(u"Your database version (" +
+                                          str(cur_db_version) + ") is too old to migrate from what this version of SickRage supports (" +
+                                          str(MIN_DB_VERSION) + ").\n" +
                                           "Upgrade using a previous version (tag) build 496 to build 501 of SickRage first or remove database file to begin fresh."
-                )
+                                          )
 
             if cur_db_version > MAX_DB_VERSION:
-                logger.log_error_and_exit(u"Your database version (" + str(
-                    cur_db_version) + ") has been incremented past what this version of SickRage supports (" + \
-                                          str(MAX_DB_VERSION) + ").\n" + \
+                logger.log_error_and_exit(u"Your database version (" +
+                                          str(cur_db_version) + ") has been incremented past what this version of SickRage supports (" +
+                                          str(MAX_DB_VERSION) + ").\n" +
                                           "If you have used other forks of SickRage, your database may be unusable due to their modifications."
-                )
+                                          )
 
 
 class AddSizeAndSceneNameFields(InitialSchema):
@@ -559,7 +558,7 @@ class Add1080pAndRawHDQualities(RenameSeasonFolders):
         old_hd = common.Quality.combineQualities(
             [common.Quality.HDTV, common.Quality.HDWEBDL >> 2, common.Quality.HDBLURAY >> 3], [])
         new_hd = common.Quality.combineQualities([common.Quality.HDTV, common.Quality.HDWEBDL, common.Quality.HDBLURAY],
-            [])
+                                                 [])
 
         # update ANY -- shift existing qualities and add new 1080p qualities, note that rawHD was not added to the ANY template
         old_any = common.Quality.combineQualities(
@@ -949,6 +948,7 @@ class AddSceneNumberingToTvEpisodes(AddSportsOption):
 
         self.incDBVersion()
 
+
 class AddAnimeTVShow(AddSceneNumberingToTvEpisodes):
     def test(self):
         return self.checkDBVersion() >= 32
@@ -961,6 +961,7 @@ class AddAnimeTVShow(AddSceneNumberingToTvEpisodes):
 
         self.incDBVersion()
 
+
 class AddAbsoluteNumbering(AddAnimeTVShow):
     def test(self):
         return self.checkDBVersion() >= 33
@@ -973,6 +974,7 @@ class AddAbsoluteNumbering(AddAnimeTVShow):
 
         self.incDBVersion()
 
+
 class AddSceneAbsoluteNumbering(AddAbsoluteNumbering):
     def test(self):
         return self.checkDBVersion() >= 34
@@ -986,6 +988,7 @@ class AddSceneAbsoluteNumbering(AddAbsoluteNumbering):
 
         self.incDBVersion()
 
+
 class AddAnimeBlacklistWhitelist(AddSceneAbsoluteNumbering):
 
     def test(self):
@@ -1003,6 +1006,7 @@ class AddAnimeBlacklistWhitelist(AddSceneAbsoluteNumbering):
 
         self.incDBVersion()
 
+
 class AddSceneAbsoluteNumbering2(AddAnimeBlacklistWhitelist):
     def test(self):
         return self.checkDBVersion() >= 36
@@ -1015,6 +1019,7 @@ class AddSceneAbsoluteNumbering2(AddAnimeBlacklistWhitelist):
 
         self.incDBVersion()
 
+
 class AddXemRefresh(AddSceneAbsoluteNumbering2):
     def test(self):
         return self.checkDBVersion() >= 37
@@ -1028,6 +1033,7 @@ class AddXemRefresh(AddSceneAbsoluteNumbering2):
 
         self.incDBVersion()
 
+
 class AddSceneToTvShows(AddXemRefresh):
     def test(self):
         return self.checkDBVersion() >= 38
@@ -1040,6 +1046,7 @@ class AddSceneToTvShows(AddXemRefresh):
 
         self.incDBVersion()
 
+
 class AddIndexerMapping(AddSceneToTvShows):
     def test(self):
         return self.checkDBVersion() >= 39
@@ -1056,6 +1063,7 @@ class AddIndexerMapping(AddSceneToTvShows):
 
         self.incDBVersion()
 
+
 class AddVersionToTvEpisodes(AddIndexerMapping):
     def test(self):
         return self.checkDBVersion() >= 40
@@ -1070,6 +1078,7 @@ class AddVersionToTvEpisodes(AddIndexerMapping):
 
         self.incDBVersion()
 
+
 class AddDefaultEpStatusToTvShows(AddVersionToTvEpisodes):
     def test(self):
         return self.checkDBVersion() >= 41
@@ -1082,6 +1091,7 @@ class AddDefaultEpStatusToTvShows(AddVersionToTvEpisodes):
 
         self.incDBVersion()
 
+
 class AlterTVShowsFieldTypes(AddDefaultEpStatusToTvShows):
     def test(self):
         return self.checkDBVersion() >= 42
-- 
GitLab


From d87efd92f436a27118c478d724490d328a699c5a Mon Sep 17 00:00:00 2001
From: labrys <labrys@useres.noreply.github.com>
Date: Sat, 7 Nov 2015 15:59:21 -0500
Subject: [PATCH 098/215] PEP 263: Add encoding declaration

---
 sickbeard/databases/mainDB.py | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/sickbeard/databases/mainDB.py b/sickbeard/databases/mainDB.py
index 468d3d4ed..93183d006 100644
--- a/sickbeard/databases/mainDB.py
+++ b/sickbeard/databases/mainDB.py
@@ -1,3 +1,5 @@
+# coding=utf-8
+
 # Author: Nic Wolfe <nic@wolfeden.ca>
 # URL: http://code.google.com/p/sickbeard/
 #
-- 
GitLab


From 3e0c7cc6426239ce9d99dde2e4a92aeaa0b3376d Mon Sep 17 00:00:00 2001
From: labrys <labrys@useres.noreply.github.com>
Date: Sat, 7 Nov 2015 16:07:50 -0500
Subject: [PATCH 099/215] Remove redundant parentheses

---
 sickbeard/databases/mainDB.py | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/sickbeard/databases/mainDB.py b/sickbeard/databases/mainDB.py
index 93183d006..56b057109 100644
--- a/sickbeard/databases/mainDB.py
+++ b/sickbeard/databases/mainDB.py
@@ -518,15 +518,15 @@ class Add1080pAndRawHDQualities(RenameSeasonFolders):
 
         result = old_quality
         # move fullhdbluray from 1<<5 to 1<<8 if set
-        if (result & (1 << 5)):
+        if result & (1 << 5):
             result &= ~(1 << 5)
             result |= 1 << 8
         # move hdbluray from 1<<4 to 1<<7 if set
-        if (result & (1 << 4)):
+        if result & (1 << 4):
             result &= ~(1 << 4)
             result |= 1 << 7
         # move hdwebdl from 1<<3 to 1<<5 if set
-        if (result & (1 << 3)):
+        if result & (1 << 3):
             result &= ~(1 << 3)
             result |= 1 << 5
 
@@ -541,7 +541,7 @@ class Add1080pAndRawHDQualities(RenameSeasonFolders):
         """
 
         best = (status & (0xffff << 16)) >> 16
-        initial = status & (0xffff)
+        initial = status & 0xffff
 
         best = self._update_quality(best)
         initial = self._update_quality(initial)
-- 
GitLab


From 0bee3834db8fcd0ea307b018c5ca973ad399d29f Mon Sep 17 00:00:00 2001
From: labrys <labrys@useres.noreply.github.com>
Date: Sat, 7 Nov 2015 16:27:33 -0500
Subject: [PATCH 100/215] Add a todo for correcting spelling of compound

---
 sickbeard/databases/mainDB.py | 1 +
 1 file changed, 1 insertion(+)

diff --git a/sickbeard/databases/mainDB.py b/sickbeard/databases/mainDB.py
index 56b057109..131406cef 100644
--- a/sickbeard/databases/mainDB.py
+++ b/sickbeard/databases/mainDB.py
@@ -50,6 +50,7 @@ class MainSanityCheck(db.DBSanityCheck):
         self.convert_tvrage_to_tvdb()
         self.convert_archived_to_compund()
 
+    # todo: fix spelling to compound
     def convert_archived_to_compund(self):
         logger.log(u'Checking for archived episodes not qualified', logger.DEBUG)
 
-- 
GitLab


From 5adbc70a91d8f8bd93627d86e47159006690894a Mon Sep 17 00:00:00 2001
From: labrys <labrys@useres.noreply.github.com>
Date: Sat, 7 Nov 2015 15:37:42 -0500
Subject: [PATCH 101/215] PEP 263: Add encoding declaration

---
 sickbeard/clients/utorrent_client.py | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/sickbeard/clients/utorrent_client.py b/sickbeard/clients/utorrent_client.py
index 5bc010aed..68a8a7ec6 100644
--- a/sickbeard/clients/utorrent_client.py
+++ b/sickbeard/clients/utorrent_client.py
@@ -1,3 +1,5 @@
+# coding=utf-8
+
 # Authors: Mr_Orange <mr_orange@hotmail.it>, EchelonFour
 # URL: http://code.google.com/p/sickbeard/
 #
-- 
GitLab


From 4767c90a0b13ca2bbacc6f1c2e45f6998a8772a0 Mon Sep 17 00:00:00 2001
From: labrys <labrys@useres.noreply.github.com>
Date: Sat, 7 Nov 2015 15:31:26 -0500
Subject: [PATCH 102/215] PEP 203: Replace assignment with augmented assignment

---
 sickbeard/clients/transmission_client.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/sickbeard/clients/transmission_client.py b/sickbeard/clients/transmission_client.py
index 608eb479e..b236e93f6 100644
--- a/sickbeard/clients/transmission_client.py
+++ b/sickbeard/clients/transmission_client.py
@@ -30,7 +30,7 @@ class TransmissionAPI(GenericClient):
         super(TransmissionAPI, self).__init__('Transmission', host, username, password)
 
         if not self.host.endswith('/'):
-            self.host = self.host + '/'
+            self.host += '/'
 
         if self.rpcurl.startswith('/'):
             self.rpcurl = self.rpcurl[1:]
-- 
GitLab


From 3ac9dd8d3e7215fe51cf058f540fed9d73fbece8 Mon Sep 17 00:00:00 2001
From: labrys <labrys@useres.noreply.github.com>
Date: Sat, 7 Nov 2015 15:28:21 -0500
Subject: [PATCH 103/215] PEP 263: Add encoding declaration

---
 sickbeard/clients/transmission_client.py | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/sickbeard/clients/transmission_client.py b/sickbeard/clients/transmission_client.py
index b236e93f6..c26a83912 100644
--- a/sickbeard/clients/transmission_client.py
+++ b/sickbeard/clients/transmission_client.py
@@ -1,3 +1,5 @@
+# coding=utf-8
+
 # Author: Mr_Orange <mr_orange@hotmail.it>
 # URL: http://code.google.com/p/sickbeard/
 #
-- 
GitLab


From 4b8bbde54a615d8cf99860b176f2baf177ebeef7 Mon Sep 17 00:00:00 2001
From: Dustyn Gibson <miigotu@gmail.com>
Date: Sat, 7 Nov 2015 14:13:47 -0800
Subject: [PATCH 104/215] Should probably check if it exists first, doh

---
 SickBeard.py | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/SickBeard.py b/SickBeard.py
index f15dc8d19..e4d398f9e 100755
--- a/SickBeard.py
+++ b/SickBeard.py
@@ -59,8 +59,9 @@ import getopt
 
 # Do this before importing sickbeard, to prevent locked files and incorrect import
 oldtornado = os.path.abspath(os.path.join(os.path.dirname(__file__), 'tornado'))
-shutil.move(oldtornado, oldtornado + '_kill')
-shutil.rmtree(oldtornado + '_kill')
+if os.path.isdir(oldtornado):
+    shutil.move(oldtornado, oldtornado + '_kill')
+    shutil.rmtree(oldtornado + '_kill')
 
 import sickbeard
 from sickbeard import db, logger, network_timezones, failed_history, name_cache
-- 
GitLab


From 7bdc8b598c25dd86b86164f1cc1dd9d25bbfa9fc Mon Sep 17 00:00:00 2001
From: Dustyn Gibson <miigotu@gmail.com>
Date: Sat, 7 Nov 2015 15:56:52 -0800
Subject: [PATCH 105/215] Add param to getURL "needBytes" for when we need
 bytes instead of unicode (rare) Fix sending torrents to clients Fix string
 representation of an episode object

---
 sickbeard/classes.py           |  5 ++++-
 sickbeard/clients/generic.py   |  2 +-
 sickbeard/helpers.py           |  4 ++--
 sickbeard/providers/generic.py |  4 ++--
 sickbeard/search.py            |  2 +-
 sickbeard/tv.py                | 22 +++++++++++-----------
 6 files changed, 21 insertions(+), 18 deletions(-)

diff --git a/sickbeard/classes.py b/sickbeard/classes.py
index eb96a12da..534888efa 100644
--- a/sickbeard/classes.py
+++ b/sickbeard/classes.py
@@ -124,7 +124,10 @@ class SearchResult:
         for extra in self.extraInfo:
             myString += "  " + extra + "\n"
 
-        myString += "Episode: " + str(self.episodes) + "\n"
+        myString += "Episodes:\n"
+        for ep in self.episodes:
+            myString += "  " + str(ep) + "\n"
+
         myString += "Quality: " + Quality.qualityStrings[self.quality] + "\n"
         myString += "Name: " + self.name + "\n"
         myString += "Size: " + str(self.size) + "\n"
diff --git a/sickbeard/clients/generic.py b/sickbeard/clients/generic.py
index 830192b8e..945554403 100644
--- a/sickbeard/clients/generic.py
+++ b/sickbeard/clients/generic.py
@@ -151,7 +151,7 @@ class GenericClient(object):
                 torrent_bdecode = bdecode(result.content)
             except BTFailure:
                 logger.log(u'Unable to bdecode torrent', logger.ERROR)
-                logger.log(u'Torrent bencoded data: {0}'.format(str(result.content)), logger.DEBUG)
+                logger.log(u'Torrent bencoded data: %r' % result.content, logger.DEBUG)
                 raise
             try:
                 info = torrent_bdecode["info"]
diff --git a/sickbeard/helpers.py b/sickbeard/helpers.py
index e29c7ecca..cd00ca565 100644
--- a/sickbeard/helpers.py
+++ b/sickbeard/helpers.py
@@ -1582,7 +1582,7 @@ def _setUpSession(session, headers):
     return session
 
 
-def getURL(url, post_data=None, params=None, headers=None, timeout=30, session=None, json=False):
+def getURL(url, post_data=None, params=None, headers=None, timeout=30, session=None, json=False, needBytes=False):
     """
     Returns a byte-string retrieved from the url provider.
     """
@@ -1635,7 +1635,7 @@ def getURL(url, post_data=None, params=None, headers=None, timeout=30, session=N
         logger.log(traceback.format_exc(), logger.WARNING)
         return None
 
-    return resp.text if not json else resp.json()
+    return (resp.text, resp.content)[needBytes] if not json else resp.json()
 
 
 def download_file(url, filename, session=None, headers=None):
diff --git a/sickbeard/providers/generic.py b/sickbeard/providers/generic.py
index c3fb3f7d2..702fb0f11 100644
--- a/sickbeard/providers/generic.py
+++ b/sickbeard/providers/generic.py
@@ -126,14 +126,14 @@ class GenericProvider(object):
 
         return result
 
-    def getURL(self, url, post_data=None, params=None, timeout=30, json=False):
+    def getURL(self, url, post_data=None, params=None, timeout=30, json=False, needBytes=False):
         """
         By default this is just a simple urlopen call but this method should be overridden
         for providers with special URL requirements (like cookies)
         """
 
         return helpers.getURL(url, post_data=post_data, params=params, headers=self.headers, timeout=timeout,
-                              session=self.session, json=json)
+                              session=self.session, json=json, needBytes=needBytes)
 
 
     def _makeURL(self, result):
diff --git a/sickbeard/search.py b/sickbeard/search.py
index 8149563f2..ddd3b2f92 100644
--- a/sickbeard/search.py
+++ b/sickbeard/search.py
@@ -132,7 +132,7 @@ def snatchEpisode(result, endStatus=SNATCHED):
             dlResult = _downloadResult(result)
         else:
             if not result.content and not result.url.startswith('magnet'):
-                result.content = result.provider.getURL(result.url)
+                result.content = result.provider.getURL(result.url, needBytes=True)
 
             if result.content or result.url.startswith('magnet'):
                 client = clients.getClientIstance(sickbeard.TORRENT_METHOD)()
diff --git a/sickbeard/tv.py b/sickbeard/tv.py
index d668f76d5..05e035b20 100644
--- a/sickbeard/tv.py
+++ b/sickbeard/tv.py
@@ -1815,17 +1815,17 @@ class TVEpisode(object):
 
     def __str__(self):
 
-        toReturn = ""
-        toReturn += "%s - S%02dE%02d - %s " % (self.show.name, self.season or 0, self.episode or 0, self.name) + "\n"
-        toReturn += "location: " + str(self.location) + "\n"
-        toReturn += "description: " + str(self.description) + "\n"
-        toReturn += "subtitles: " + str(",".join(self.subtitles)) + "\n"
-        toReturn += "subtitles_searchcount: " + str(self.subtitles_searchcount) + "\n"
-        toReturn += "subtitles_lastsearch: " + str(self.subtitles_lastsearch) + "\n"
-        toReturn += "airdate: " + str(self.airdate.toordinal()) + " (" + str(self.airdate) + ")\n"
-        toReturn += "hasnfo: " + str(self.hasnfo) + "\n"
-        toReturn += "hastbn: " + str(self.hastbn) + "\n"
-        toReturn += "status: " + str(self.status) + "\n"
+        toReturn = u""
+        toReturn += u"%r - S%02rE%02r - %r\n" % (self.show.name, self.season, self.episode, self.name)
+        toReturn += u"location: %r\n" % self.location
+        toReturn += u"description: %r\n" % self.description
+        toReturn += u"subtitles: %r\n" % u",".join(self.subtitles)
+        toReturn += u"subtitles_searchcount: %r\n" % self.subtitles_searchcount
+        toReturn += u"subtitles_lastsearch: %r\n" % self.subtitles_lastsearch
+        toReturn += u"airdate: %r (%r)\n" % (self.airdate.toordinal(), self.airdate)
+        toReturn += u"hasnfo: %r\n" % self.hasnfo
+        toReturn += u"hastbn: %r\n" % self.hastbn
+        toReturn += u"status: %r\n" % self.status
         return toReturn
 
     def createMetaFiles(self):
-- 
GitLab


From 20393c4854cb8509efd77d14582ac1d72d251e1d Mon Sep 17 00:00:00 2001
From: labrys <labrys@useres.noreply.github.com>
Date: Sat, 7 Nov 2015 18:36:00 -0500
Subject: [PATCH 106/215] PEP 8: Move module level imports to top of file

---
 sickbeard/indexers/indexer_exceptions.py | 11 +++++------
 1 file changed, 5 insertions(+), 6 deletions(-)

diff --git a/sickbeard/indexers/indexer_exceptions.py b/sickbeard/indexers/indexer_exceptions.py
index 32a90ffda..d2a67bd09 100644
--- a/sickbeard/indexers/indexer_exceptions.py
+++ b/sickbeard/indexers/indexer_exceptions.py
@@ -1,5 +1,6 @@
 #!/usr/bin/env python2.7
 # encoding:utf-8
+
 # author:echel0n
 # project:indexer_api
 # repository:http://github.com/echel0n/Sick-Beard
@@ -7,15 +8,13 @@
 
 """Custom exceptions used or raised by indexer_api"""
 
+from tvdb_api.tvdb_exceptions import (tvdb_exception, tvdb_error, tvdb_userabort, tvdb_shownotfound, tvdb_showincomplete,
+                                      tvdb_seasonnotfound, tvdb_episodenotfound, tvdb_attributenotfound)
+
 __author__ = "echel0n"
 __version__ = "1.0"
 
-from tvdb_api.tvdb_exceptions import \
-    tvdb_exception, tvdb_attributenotfound, tvdb_episodenotfound, tvdb_error, \
-    tvdb_seasonnotfound, tvdb_shownotfound, tvdb_showincomplete, tvdb_userabort
-
-indexerExcepts = ["indexer_exception", "indexer_error", "indexer_userabort", "indexer_shownotfound",
-                  "indexer_showincomplete",
+indexerExcepts = ["indexer_exception", "indexer_error", "indexer_userabort", "indexer_shownotfound", "indexer_showincomplete",
                   "indexer_seasonnotfound", "indexer_episodenotfound", "indexer_attributenotfound"]
 
 tvdbExcepts = ["tvdb_exception", "tvdb_error", "tvdb_userabort", "tvdb_shownotfound", "tvdb_showincomplete",
-- 
GitLab


From 251493f400c458b31033ccd653dc326b6747b374 Mon Sep 17 00:00:00 2001
From: labrys <labrys@useres.noreply.github.com>
Date: Sat, 7 Nov 2015 18:24:29 -0500
Subject: [PATCH 107/215] PEP 203: Replace dict creation with dict literal

---
 sickbeard/indexers/indexer_config.py | 64 +++++++++++++---------------
 1 file changed, 30 insertions(+), 34 deletions(-)

diff --git a/sickbeard/indexers/indexer_config.py b/sickbeard/indexers/indexer_config.py
index 6040d2325..b9b214568 100644
--- a/sickbeard/indexers/indexer_config.py
+++ b/sickbeard/indexers/indexer_config.py
@@ -1,41 +1,37 @@
 from tvdb_api.tvdb_api import Tvdb
 import requests
 
-INDEXER_TVDB = 1
-
-# Must keep
-INDEXER_TVRAGE = 2
-
-initConfig = {}
-indexerConfig = {}
-
-initConfig['valid_languages'] = [
-    "da", "fi", "nl", "de", "it", "es", "fr", "pl", "hu", "el", "tr",
-    "ru", "he", "ja", "pt", "zh", "cs", "sl", "hr", "ko", "en", "sv", "no"
-]
-
-initConfig['langabbv_to_id'] = {
-    'el': 20, 'en': 7, 'zh': 27,
-    'it': 15, 'cs': 28, 'es': 16, 'ru': 22, 'nl': 13, 'pt': 26, 'no': 9,
-    'tr': 21, 'pl': 18, 'fr': 17, 'hr': 31, 'de': 14, 'da': 10, 'fi': 11,
-    'hu': 19, 'ja': 25, 'he': 24, 'ko': 32, 'sv': 8, 'sl': 30
+initConfig = {
+    'valid_languages': ["da", "fi", "nl", "de", "it", "es", "fr", "pl", "hu", "el", "tr",
+                        "ru", "he", "ja", "pt", "zh", "cs", "sl", "hr", "ko", "en", "sv", "no"
+                        ],
+    'langabbv_to_id': {'el': 20, 'en': 7, 'zh': 27,
+                       'it': 15, 'cs': 28, 'es': 16, 'ru': 22, 'nl': 13, 'pt': 26, 'no': 9,
+                       'tr': 21, 'pl': 18, 'fr': 17, 'hr': 31, 'de': 14, 'da': 10, 'fi': 11,
+                       'hu': 19, 'ja': 25, 'he': 24, 'ko': 32, 'sv': 8, 'sl': 30
+                       }
 }
 
-indexerConfig[INDEXER_TVDB] = {
-    'id': INDEXER_TVDB,
-    'name': 'theTVDB',
-    'module': Tvdb,
-    'api_params': {'apikey': 'F9C450E78D99172E',
-                   'language': 'en',
-                   'useZip': True,
-                  },
-    'session': requests.Session()
+INDEXER_TVDB = 1
+INDEXER_TVRAGE = 2  # Must keep
+
+indexerConfig = {
+    INDEXER_TVDB: {
+        'id': INDEXER_TVDB,
+        'name': 'theTVDB',
+        'module': Tvdb,
+        'api_params': {'apikey': 'F9C450E78D99172E',
+                       'language': 'en',
+                       'useZip': True,
+                       },
+        'session': requests.Session(),
+        'trakt_id': 'tvdb_id',
+        'xem_origin': 'tvdb',
+        'icon': 'thetvdb16.png',
+        'scene_loc': 'http://sickragetv.github.io/sb_tvdb_scene_exceptions/exceptions.txt',
+        'show_url': 'http://thetvdb.com/?tab=series&id=',
+        'base_url': 'http://thetvdb.com/api/%(apikey)s/series/'
+    }
 }
 
-# TVDB Indexer Settings
-indexerConfig[INDEXER_TVDB]['trakt_id'] = 'tvdb_id'
-indexerConfig[INDEXER_TVDB]['xem_origin'] = 'tvdb'
-indexerConfig[INDEXER_TVDB]['icon'] = 'thetvdb16.png'
-indexerConfig[INDEXER_TVDB]['scene_loc'] = 'http://sickragetv.github.io/sb_tvdb_scene_exceptions/exceptions.txt'
-indexerConfig[INDEXER_TVDB]['show_url'] = 'http://thetvdb.com/?tab=series&id='
-indexerConfig[INDEXER_TVDB]['base_url'] = 'http://thetvdb.com/api/%(apikey)s/series/' % indexerConfig[INDEXER_TVDB]['api_params']
+indexerConfig[INDEXER_TVDB]['base_url'] %= indexerConfig[INDEXER_TVDB]['api_params']  # insert API key into base url
-- 
GitLab


From 7f6c15149165b271406b51078287563822238e3a Mon Sep 17 00:00:00 2001
From: labrys <labrys@useres.noreply.github.com>
Date: Sat, 7 Nov 2015 17:40:17 -0500
Subject: [PATCH 108/215] PEP 263: Add encoding declaration

---
 sickbeard/indexers/indexer_config.py | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/sickbeard/indexers/indexer_config.py b/sickbeard/indexers/indexer_config.py
index b9b214568..a76c09a25 100644
--- a/sickbeard/indexers/indexer_config.py
+++ b/sickbeard/indexers/indexer_config.py
@@ -1,3 +1,5 @@
+# coding=utf-8
+
 from tvdb_api.tvdb_api import Tvdb
 import requests
 
-- 
GitLab


From b4f95783d4434d2ea21519e42af624964ff33259 Mon Sep 17 00:00:00 2001
From: labrys <labrys@useres.noreply.github.com>
Date: Sat, 7 Nov 2015 17:39:20 -0500
Subject: [PATCH 109/215] PEP 263: Add encoding declaration

---
 sickbeard/indexers/indexer_api.py | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/sickbeard/indexers/indexer_api.py b/sickbeard/indexers/indexer_api.py
index da79422da..bf9f09ab6 100644
--- a/sickbeard/indexers/indexer_api.py
+++ b/sickbeard/indexers/indexer_api.py
@@ -1,3 +1,5 @@
+# coding=utf-8
+
 # Author: Nic Wolfe <nic@wolfeden.ca>
 # URL: http://code.google.com/p/sickbeard/
 #
-- 
GitLab


From 9468cf991027e667a4470b29d700db3c1131d8aa Mon Sep 17 00:00:00 2001
From: labrys <labrys@useres.noreply.github.com>
Date: Sat, 7 Nov 2015 17:37:57 -0500
Subject: [PATCH 110/215] PEP 263: Add encoding declaration

---
 sickbeard/indexers/__init__.py | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/sickbeard/indexers/__init__.py b/sickbeard/indexers/__init__.py
index b7e23c773..bdbdcca31 100644
--- a/sickbeard/indexers/__init__.py
+++ b/sickbeard/indexers/__init__.py
@@ -1,3 +1,5 @@
+# coding=utf-8
+
 # Author: Nic Wolfe <nic@wolfeden.ca>
 # URL: http://code.google.com/p/sickbeard/
 #
@@ -16,4 +18,4 @@
 # You should have received a copy of the GNU General Public License
 # along with SickRage.  If not, see <http://www.gnu.org/licenses/>.
 
-from . import indexer_api, indexer_exceptions
\ No newline at end of file
+from . import indexer_api, indexer_exceptions
-- 
GitLab


From 23f1c9d11600306c04e843ea49136ffeef272357 Mon Sep 17 00:00:00 2001
From: Alexis Tyler <xo@wvvw.me>
Date: Sun, 8 Nov 2015 12:51:30 +1030
Subject: [PATCH 111/215] fix typo

---
 gui/slick/views/config_postProcessing.mako | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/gui/slick/views/config_postProcessing.mako b/gui/slick/views/config_postProcessing.mako
index 4855c8650..f5e3491ec 100644
--- a/gui/slick/views/config_postProcessing.mako
+++ b/gui/slick/views/config_postProcessing.mako
@@ -47,7 +47,7 @@
                             </label>
                             <label class="nocheck" for="process_automatically">
                                 <span class="component-title">&nbsp;</span>
-                                <span class="component-desc"><b>NOTE:</b> Do not use if you use an external PostProcesing script</span>
+                                <span class="component-desc"><b>NOTE:</b> Do not use if you use an external PostProcessing script</span>
                             </label>
                         </div>
                         <div class="field-pair">
@@ -280,7 +280,7 @@
                                 </label>
                                 <label class="nocheck">
                                     <span class="component-title">&nbsp;</span>
-                                    <span class="component-desc"><b>NOTE:</b> Don't forget to add quality pattern. Otherwise after post-procesing the episode will have UNKNOWN quality</span>
+                                    <span class="component-desc"><b>NOTE:</b> Don't forget to add quality pattern. Otherwise after post-processing the episode will have UNKNOWN quality</span>
                                  </label>
                             </div>
 
-- 
GitLab


From 7f4ee8f713c8e1e09965bebbd953cd27f3156b34 Mon Sep 17 00:00:00 2001
From: Alexis Tyler <xo@wvvw.me>
Date: Sun, 8 Nov 2015 13:15:04 +1030
Subject: [PATCH 112/215] fix indentation

---
 gui/slick/views/config_postProcessing.mako | 9 ++-------
 1 file changed, 2 insertions(+), 7 deletions(-)

diff --git a/gui/slick/views/config_postProcessing.mako b/gui/slick/views/config_postProcessing.mako
index f5e3491ec..089b6960d 100644
--- a/gui/slick/views/config_postProcessing.mako
+++ b/gui/slick/views/config_postProcessing.mako
@@ -23,10 +23,8 @@
     <h1 class="title">${title}</h1>
 % endif
 <div id="config">
-<div id="config-content">
-
-<form id="configForm" action="savePostProcessing" method="post">
-
+    <div id="config-content">
+        <form id="configForm" action="savePostProcessing" method="post">
             <div id="config-components">
                 <ul>
                     <li><a href="#core-component-group1">Post-Processing</a></li>
@@ -247,7 +245,6 @@
                     </div>
 
                     <fieldset class="component-group-list">
-
                         <div class="field-pair">
                             <label class="nocheck" for="name_presets">
                                 <span class="component-title">Name Pattern:</span>
@@ -1121,10 +1118,8 @@
                 <br/>
                 <h6 class="pull-right"><b>All non-absolute folder locations are relative to <span class="path">${sickbeard.DATA_DIR}</span></b> </h6>
                 <input type="submit" class="btn pull-left config_submitter button" value="Save Changes" />
-
         </form>
     </div>
 </div>
-
 <div class="clearfix"></div>
 </%block>
-- 
GitLab


From 194b04677edb4609d32204852540f8833779b67c Mon Sep 17 00:00:00 2001
From: Alexis Tyler <xo@wvvw.me>
Date: Sun, 8 Nov 2015 13:18:05 +1030
Subject: [PATCH 113/215] update old br tags to HTML5 standards

---
 gui/slick/js/ajaxNotifications.js           |   2 +-
 gui/slick/js/configSearch.js                |   2 +-
 gui/slick/js/confirmations.js               |   4 +-
 gui/slick/js/lib/pnotify.custom.min.js      | Bin 27444 -> 27440 bytes
 gui/slick/js/new/displayShow.js             |   2 +-
 gui/slick/js/newShow.js                     |   2 +-
 gui/slick/views/apiBuilder.mako             |  10 ++---
 gui/slick/views/config.mako                 |   4 +-
 gui/slick/views/config_anime.mako           |   2 +-
 gui/slick/views/config_backuprestore.mako   |   8 ++--
 gui/slick/views/config_general.mako         |   4 +-
 gui/slick/views/config_notifications.mako   |  10 ++---
 gui/slick/views/config_postProcessing.mako  |  30 ++++++-------
 gui/slick/views/config_providers.mako       |  10 ++---
 gui/slick/views/config_search.mako          |  16 +++----
 gui/slick/views/config_subtitles.mako       |   6 +--
 gui/slick/views/editShow.mako               |  16 +++----
 gui/slick/views/home_addExistingShow.mako   |   8 ++--
 gui/slick/views/home_addShows.mako          |   8 ++--
 gui/slick/views/home_newShow.mako           |  16 +++----
 gui/slick/views/home_popularShows.mako      |   2 +-
 gui/slick/views/home_recommendedShows.mako  |   4 +-
 gui/slick/views/home_trendingShows.mako     |   4 +-
 gui/slick/views/inc_blackwhitelist.mako     |   6 +--
 gui/slick/views/manage.mako                 |  14 +++---
 gui/slick/views/manage_backlogOverview.mako |   4 +-
 gui/slick/views/manage_episodeStatuses.mako |   6 +--
 gui/slick/views/manage_failedDownloads.mako |   2 +-
 gui/slick/views/manage_manageSearches.mako  |  18 ++++----
 gui/slick/views/manage_massEdit.mako        |  26 +++++------
 gui/slick/views/manage_subtitleMissed.mako  |   6 +--
 gui/slick/views/restart.mako                |   2 +-
 gui/slick/views/schedule.mako               |  12 ++---
 gui/slick/views/testRename.mako             |   6 +--
 gui/slick/views/viewlogs.mako               |   4 +-
 readme.md                                   |   2 +-
 sickbeard/webserve.py                       |  46 ++++++++++----------
 37 files changed, 162 insertions(+), 162 deletions(-)

diff --git a/gui/slick/js/ajaxNotifications.js b/gui/slick/js/ajaxNotifications.js
index 80e2a359c..11cf3bce4 100644
--- a/gui/slick/js/ajaxNotifications.js
+++ b/gui/slick/js/ajaxNotifications.js
@@ -39,5 +39,5 @@ function check_notifications() {
 
 $(document).ready(function(){
     check_notifications();
-    if(test) displayPNotify('notice', 'test', 'test<br/><i class="test-class">hello <b>world</b></i><ul><li>item 1</li><li>item 2</li></ul>');
+    if(test) displayPNotify('notice', 'test', 'test<br><i class="test-class">hello <b>world</b></i><ul><li>item 1</li><li>item 2</li></ul>');
 });
diff --git a/gui/slick/js/configSearch.js b/gui/slick/js/configSearch.js
index eca621cb5..efe80fb9b 100644
--- a/gui/slick/js/configSearch.js
+++ b/gui/slick/js/configSearch.js
@@ -154,7 +154,7 @@ $(document).ready(function(){
             } else if ('rtorrent' == selectedProvider){
                 client = 'rTorrent';
                 $(torrent_paused_option).hide();
-                $('#host_desc_torrent').text('URL to your rTorrent client (e.g. scgi://localhost:5000 <br/> or https://localhost/rutorrent/plugins/httprpc/action.php)');
+                $('#host_desc_torrent').text('URL to your rTorrent client (e.g. scgi://localhost:5000 <br> or https://localhost/rutorrent/plugins/httprpc/action.php)');
                 $(torrent_verify_cert_option).show();
                 $(torrent_verify_deluge).hide();
                 $(torrent_verify_rtorrent).show();
diff --git a/gui/slick/js/confirmations.js b/gui/slick/js/confirmations.js
index 274673290..f20a64db0 100644
--- a/gui/slick/js/confirmations.js
+++ b/gui/slick/js/confirmations.js
@@ -47,7 +47,7 @@ $(document).ready(function () {
         var showname = document.getElementById("showtitle").getAttribute('data-showname');
         $.confirm({
             'title'		: 'Remove Show',
-            'message'	: 'Are you sure you want to remove <span class="footerhighlight">' + showname + '</span> from the database ?<br /><br /><input type="checkbox" id="deleteFiles"> <span class="red-text">Check to delete files as well. IRREVERSIBLE</span></input>',
+            'message'	: 'Are you sure you want to remove <span class="footerhighlight">' + showname + '</span> from the database ?<br><br><input type="checkbox" id="deleteFiles"> <span class="red-text">Check to delete files as well. IRREVERSIBLE</span></input>',
             'buttons'	: {
                 'Yes'	: {
                     'class'	: 'green',
@@ -111,7 +111,7 @@ $(document).ready(function () {
         var target = $(this).attr('href');
         $.confirm({
             'title'		: 'Submit Errors',
-            'message'	: 'Are you sure you want to submit these errors ?<br /><br /><span class="red-text">Make sure SickRage is updated and trigger<br /> this error with debug enabled before submitting</span>',
+            'message'	: 'Are you sure you want to submit these errors ?<br><br><span class="red-text">Make sure SickRage is updated and trigger<br> this error with debug enabled before submitting</span>',
             'buttons'	: {
                 'Yes'	: {
                     'class' : 'green',
diff --git a/gui/slick/js/lib/pnotify.custom.min.js b/gui/slick/js/lib/pnotify.custom.min.js
index f927d92712aa970d3baeabde56c84448bb888a33..b530874b9c8496d26425c0e3b3ca2d7fbddff6c0 100644
GIT binary patch
delta 19
bcmdmTjd8;@#tnr$n~QnwvThC%dK3WwTaO5(

delta 29
lcmdmRjd9C0#tnr$ObYs&3wiFcGAZa!F60s0oFa540syBv3TFTS

diff --git a/gui/slick/js/new/displayShow.js b/gui/slick/js/new/displayShow.js
index 413404fcb..061358d2e 100644
--- a/gui/slick/js/new/displayShow.js
+++ b/gui/slick/js/new/displayShow.js
@@ -259,7 +259,7 @@ $(document).ready(function(){
         widgets: ['saveSort', 'stickyHeaders', 'columnSelector'],
         widgetOptions : {
             columnSelector_saveColumns: true, // jshint ignore:line
-            columnSelector_layout : '<br/><label><input type="checkbox">{name}</label>', // jshint ignore:line
+            columnSelector_layout : '<br><label><input type="checkbox">{name}</label>', // jshint ignore:line
             columnSelector_mediaquery: false, // jshint ignore:line
             columnSelector_cssChecked : 'checked' // jshint ignore:line
         }
diff --git a/gui/slick/js/newShow.js b/gui/slick/js/newShow.js
index c347253fb..65135532d 100644
--- a/gui/slick/js/newShow.js
+++ b/gui/slick/js/newShow.js
@@ -58,7 +58,7 @@ $(document).ready(function () {
                             resultStr += ' [' + obj[0] + ']';
                         }
 
-                        resultStr += '<br />';
+                        resultStr += '<br>';
                     });
                     resultStr += '</ul>';
                 }
diff --git a/gui/slick/views/apiBuilder.mako b/gui/slick/views/apiBuilder.mako
index acf688a02..1f4163eb8 100644
--- a/gui/slick/views/apiBuilder.mako
+++ b/gui/slick/views/apiBuilder.mako
@@ -149,22 +149,22 @@
 
                     <h4>Playground</h4>
 
-                    URL: <kbd id="command-${command_id}-base-url">/api/${apikey}/?cmd=${command}</kbd><br />
+                    URL: <kbd id="command-${command_id}-base-url">/api/${apikey}/?cmd=${command}</kbd><br>
 
                     % if help['data']['requiredParameters']:
-                        Required parameters: ${display_parameters_playground(help['data']['requiredParameters'], True, command_id)}<br />
+                        Required parameters: ${display_parameters_playground(help['data']['requiredParameters'], True, command_id)}<br>
                     % endif
 
                     % if help['data']['optionalParameters']:
-                        Optional parameters: ${display_parameters_playground(help['data']['optionalParameters'], False, command_id)}<br />
+                        Optional parameters: ${display_parameters_playground(help['data']['optionalParameters'], False, command_id)}<br>
                     % endif
 
-                    <button class="btn btn-primary" data-action="api-call" data-command-name="${command_id}" data-base-url="command-${command_id}-base-url" data-target="#command-${command_id}-response" data-time="#command-${command_id}-time" data-url="#command-${command_id}-url">Call API</button><br />
+                    <button class="btn btn-primary" data-action="api-call" data-command-name="${command_id}" data-base-url="command-${command_id}-base-url" data-target="#command-${command_id}-response" data-time="#command-${command_id}-time" data-url="#command-${command_id}-url">Call API</button><br>
 
                     <div class="result-wrapper hidden">
                         <div class="clearfix">
                             <span class="pull-left">
-                                Response: <strong id="command-${command_id}-time"></strong><br />
+                                Response: <strong id="command-${command_id}-time"></strong><br>
                                 URL: <kbd id="command-${command_id}-url"></kbd>
                             </span>
                             <span class="pull-right">
diff --git a/gui/slick/views/config.mako b/gui/slick/views/config.mako
index 6cd206a1c..ac0e4addc 100644
--- a/gui/slick/views/config.mako
+++ b/gui/slick/views/config.mako
@@ -27,9 +27,9 @@
 <table class="infoTable" cellspacing="1" border="0" cellpadding="0" width="100%">
     <tr><td class="infoTableHeader">SR Version: </td><td class="infoTableCell">
 % if sickbeard.VERSION_NOTIFY:
-        BRANCH: (${sickbeard.BRANCH}) / COMMIT: (${sickbeard.CUR_COMMIT_HASH}) <!-- &ndash; build.date //--><br />
+        BRANCH: (${sickbeard.BRANCH}) / COMMIT: (${sickbeard.CUR_COMMIT_HASH}) <!-- &ndash; build.date //--><br>
 % else:
-        You don't have version checking turned on. Please turn on "Check for Update" in Config > General.<br />
+        You don't have version checking turned on. Please turn on "Check for Update" in Config > General.<br>
 % endif
     </td></tr>
 
diff --git a/gui/slick/views/config_anime.mako b/gui/slick/views/config_anime.mako
index e123aab59..bd83311e0 100644
--- a/gui/slick/views/config_anime.mako
+++ b/gui/slick/views/config_anime.mako
@@ -90,7 +90,7 @@
                    </fieldset>
                 </div><!-- /component-group //-->
 
-                <br/><input type="submit" class="btn config_submitter" value="Save Changes" /><br/>
+                <br><input type="submit" class="btn config_submitter" value="Save Changes" /><br>
 
             </div><!-- /config-components //-->
 
diff --git a/gui/slick/views/config_backuprestore.mako b/gui/slick/views/config_backuprestore.mako
index 51293caf1..1e2365b9d 100644
--- a/gui/slick/views/config_backuprestore.mako
+++ b/gui/slick/views/config_backuprestore.mako
@@ -45,12 +45,12 @@
                         <div class="field-pair">
                             Select the folder you wish to save your backup file to:
 
-                            <br/><br/>
+                            <br><br>
 
                             <input type="text" name="backupDir" id="backupDir" class="form-control input-sm input350" />
                             <input class="btn btn-inline" type="button" value="Backup" id="Backup" />
 
-                            <br/>
+                            <br>
 
                         </div>
                         <div class="Backup" id="Backup-result"></div>
@@ -68,12 +68,12 @@
                         <div class="field-pair">
                             Select the backup file you wish to restore:
 
-                            <br/><br/>
+                            <br><br>
 
                             <input type="text" name="backupFile" id="backupFile" class="form-control input-sm input350" />
                             <input class="btn btn-inline" type="button" value="Restore" id="Restore" />
 
-                            <br/>
+                            <br>
 
                         </div>
                         <div class="Restore" id="Restore-result"></div>
diff --git a/gui/slick/views/config_general.mako b/gui/slick/views/config_general.mako
index 7a5b49244..096874d1d 100644
--- a/gui/slick/views/config_general.mako
+++ b/gui/slick/views/config_general.mako
@@ -491,7 +491,7 @@
                                 <span class="component-title">Reverse proxy headers</span>
                                 <span class="component-desc">
                                     <input type="checkbox" name="handle_reverse_proxy" id="handle_reverse_proxy" ${('', 'checked="checked"')[bool(sickbeard.HANDLE_REVERSE_PROXY)]}/>
-                                    <p>accept the following reverse proxy headers (advanced)...<br />(X-Forwarded-For, X-Forwarded-Host, and X-Forwarded-Proto)</p>
+                                    <p>accept the following reverse proxy headers (advanced)...<br>(X-Forwarded-For, X-Forwarded-Host, and X-Forwarded-Proto)</p>
                                 </span>
                             </label>
                         </div>
@@ -773,7 +773,7 @@
 
                 </div><!-- /component-group3 //-->
 
-                <br/>
+                <br>
                 <h6 class="pull-right"><b>All non-absolute folder locations are relative to <span class="path">${sickbeard.DATA_DIR}</span></b> </h6>
                 <input type="submit" class="btn pull-left config_submitter button" value="Save Changes" />
 
diff --git a/gui/slick/views/config_notifications.mako b/gui/slick/views/config_notifications.mako
index c2771c1a9..eca63e139 100644
--- a/gui/slick/views/config_notifications.mako
+++ b/gui/slick/views/config_notifications.mako
@@ -227,7 +227,7 @@
                                             <span class="component-desc">
                                                 <input type="text" name="plex_server_host" id="plex_server_host" value="${re.sub(r'\b,\b', ', ', sickbeard.PLEX_SERVER_HOST)}" class="form-control input-sm input350" />
                                                 <div class="clear-left">
-                                                    <p>one or more hosts running Plex Media Server<br />(eg. 192.168.1.1:32400, 192.168.1.2:32400)</p>
+                                                    <p>one or more hosts running Plex Media Server<br>(eg. 192.168.1.1:32400, 192.168.1.2:32400)</p>
                                                 </div>
                                             </span>
                                         </label>
@@ -295,7 +295,7 @@
                                     <span class="component-desc">
                                         <input type="text" name="plex_host" id="plex_host" value="${sickbeard.PLEX_HOST}" class="form-control input-sm input350" />
                                         <div class="clear-left">
-                                            <p>one or more hosts running Plex client<br />(eg. 192.168.1.100:3000, 192.168.1.101:3000)</p>
+                                            <p>one or more hosts running Plex client<br>(eg. 192.168.1.100:3000, 192.168.1.101:3000)</p>
                                         </div>
                                     </span>
                                 </label>
@@ -1495,7 +1495,7 @@
                                     <span class="component-title">Step One</span>
                                 </label>
                                 <label>
-                                    <span style="font-size: 11px;">Click the "Request Authorization" button.<br/> This will open a new page containing an auth key.<br/> <b>Note:</b> if nothing happens check your popup blocker.<br/></span>
+                                    <span style="font-size: 11px;">Click the "Request Authorization" button.<br> This will open a new page containing an auth key.<br> <b>Note:</b> if nothing happens check your popup blocker.<br></span>
                                     <input class="btn" type="button" value="Request Authorization" id="twitterStep1" />
                                 </label>
                             </div>
@@ -1504,7 +1504,7 @@
                                     <span class="component-title">Step Two</span>
                                 </label>
                                 <label>
-                                    <span style="font-size: 11px;">Enter the key Twitter gave you below, and click "Verify Key".<br/><br/></span>
+                                    <span style="font-size: 11px;">Enter the key Twitter gave you below, and click "Verify Key".<br><br></span>
                                     <input type="text" id="twitter_key" value="" class="form-control input-sm input350" />
                                     <input class="btn btn-inline" type="button" value="Verify Key" id="twitterStep2" />
                                 </label>
@@ -1831,7 +1831,7 @@
             </div><!-- /config-components //-->
         </form>
 
-        <br/><input type="submit" class="config_submitter btn" value="Save Changes" /><br/>
+        <br><input type="submit" class="config_submitter btn" value="Save Changes" /><br>
 
     </div>
 </div>
diff --git a/gui/slick/views/config_postProcessing.mako b/gui/slick/views/config_postProcessing.mako
index f5e3491ec..4ac11b9a7 100644
--- a/gui/slick/views/config_postProcessing.mako
+++ b/gui/slick/views/config_postProcessing.mako
@@ -236,7 +236,7 @@
                                 <span class="component-desc">See <a href="https://github.com/SiCKRAGETV/sickrage-issues/wiki/Post-Processing#extra-scripts"><font color='red'><b>Wiki</b></font></a> for script arguments description and usage.</span>
                             </label>
                         </div>
-                        <input type="submit" class="btn config_submitter" value="Save Changes" /><br/>
+                        <input type="submit" class="btn config_submitter" value="Save Changes" /><br>
                     </fieldset>
                 </div><!-- /component-group1 //-->
                 <div id="core-component-group2" class="component-group">
@@ -416,7 +416,7 @@
                                         </tr>
                                     </tbody>
                                   </table>
-                                  <br/>
+                                  <br>
                             </div>
                         </div>
 
@@ -438,7 +438,7 @@
                             <div class="example">
                                 <span class="jumbo" id="naming_example">&nbsp;</span>
                             </div>
-                            <br/>
+                            <br>
                         </div>
 
                         <div id="naming_example_multi_div">
@@ -446,7 +446,7 @@
                             <div class="example">
                                 <span class="jumbo" id="naming_example_multi">&nbsp;</span>
                             </div>
-                            <br/>
+                            <br>
                         </div>
 
                         <div class="field-pair">
@@ -624,7 +624,7 @@
                                             </tr>
                                         </tbody>
                                       </table>
-                                      <br/>
+                                      <br>
                                 </div>
                             </div><!-- /naming_abd_custom -->
 
@@ -633,7 +633,7 @@
                                 <div class="example">
                                     <span class="jumbo" id="naming_abd_example">&nbsp;</span>
                                 </div>
-                                <br/>
+                                <br>
                             </div>
 
                         </div><!-- /naming_abd_different -->
@@ -801,7 +801,7 @@
                                             </tr>
                                         </tbody>
                                       </table>
-                                      <br/>
+                                      <br>
                                 </div>
                             </div><!-- /naming_sports_custom -->
 
@@ -810,7 +810,7 @@
                                 <div class="example">
                                     <span class="jumbo" id="naming_sports_example">&nbsp;</span>
                                 </div>
-                                <br/>
+                                <br>
                             </div>
 
                         </div><!-- /naming_sports_different -->
@@ -974,7 +974,7 @@
                                             </tr>
                                         </tbody>
                                       </table>
-                                      <br/>
+                                      <br>
                                 </div>
                             </div><!-- /naming_anime_custom -->
 
@@ -996,7 +996,7 @@
                                 <div class="example">
                                     <span class="jumbo" id="naming_example_anime">&nbsp;</span>
                                 </div>
-                                <br/>
+                                <br>
                             </div>
 
                             <div id="naming_example_multi_anime_div">
@@ -1004,7 +1004,7 @@
                                 <div class="example">
                                     <span class="jumbo" id="naming_example_multi_anime">&nbsp;</span>
                                 </div>
-                                <br/>
+                                <br>
                             </div>
 
                             <div class="field-pair">
@@ -1046,7 +1046,7 @@
                         </div><!-- /naming_anime_different -->
 
                         <div></div>
-                        <input type="submit" class="btn config_submitter" value="Save Changes" /><br/>
+                        <input type="submit" class="btn config_submitter" value="Save Changes" /><br>
 
                     </fieldset>
                 </div><!-- /component-group2 //-->
@@ -1112,13 +1112,13 @@
                         </div>
                         % endfor
 
-                        <div class="clearfix"></div><br/>
+                        <div class="clearfix"></div><br>
 
-                        <input type="submit" class="btn config_submitter" value="Save Changes" /><br/>
+                        <input type="submit" class="btn config_submitter" value="Save Changes" /><br>
                     </fieldset>
                 </div><!-- /component-group3 //-->
 
-                <br/>
+                <br>
                 <h6 class="pull-right"><b>All non-absolute folder locations are relative to <span class="path">${sickbeard.DATA_DIR}</span></b> </h6>
                 <input type="submit" class="btn pull-left config_submitter button" value="Save Changes" />
 
diff --git a/gui/slick/views/config_providers.mako b/gui/slick/views/config_providers.mako
index d5478b073..acc35b3f0 100644
--- a/gui/slick/views/config_providers.mako
+++ b/gui/slick/views/config_providers.mako
@@ -59,7 +59,7 @@ $('#config-components').tabs();
                         % if not sickbeard.USE_NZBS or not sickbeard.USE_TORRENTS:
                         <blockquote style="margin: 20px 0;">NZB/Torrent providers can be toggled in <b><a href="${srRoot}/config/search">Search Settings</a></b></blockquote>
                         % else:
-                        <br/>
+                        <br>
                         % endif
 
                         <div>
@@ -90,7 +90,7 @@ $('#config-components').tabs();
                         % endfor
                         </ul>
                         <input type="hidden" name="provider_order" id="provider_order" value="${" ".join([x.getID()+':'+str(int(x.isEnabled())) for x in sickbeard.providers.sortedProviderList()])}"/>
-                        <br/><input type="submit" class="btn config_submitter" value="Save Changes" /><br/>
+                        <br><input type="submit" class="btn config_submitter" value="Save Changes" /><br>
                     </fieldset>
                 </div><!-- /component-group1 //-->
 
@@ -586,7 +586,7 @@ $('#config-components').tabs();
 
                     <!-- end div for editing providers -->
 
-                    <input type="submit" class="btn config_submitter" value="Save Changes" /><br/>
+                    <input type="submit" class="btn config_submitter" value="Save Changes" /><br>
 
                     </fieldset>
                 </div><!-- /component-group2 //-->
@@ -595,7 +595,7 @@ $('#config-components').tabs();
                 <div id="core-component-group3" class="component-group">
 
                     <div class="component-group-desc">
-                        <h3>Configure Custom<br />Newznab Providers</h3>
+                        <h3>Configure Custom<br>Newznab Providers</h3>
                         <p>Add and setup or remove custom Newznab providers.</p>
                     </div>
 
@@ -732,7 +732,7 @@ $('#config-components').tabs();
             </div><!-- /component-group4 //-->
             % endif
 
-            <br/><input type="submit" class="btn config_submitter_refresh" value="Save Changes" /><br/>
+            <br><input type="submit" class="btn config_submitter_refresh" value="Save Changes" /><br>
 
             </div><!-- /config-components //-->
 
diff --git a/gui/slick/views/config_search.mako b/gui/slick/views/config_search.mako
index d8b1e4914..3560645ce 100644
--- a/gui/slick/views/config_search.mako
+++ b/gui/slick/views/config_search.mako
@@ -105,7 +105,7 @@
                                 <span class="component-title">Ignore words</span>
                                 <span class="component-desc">
                                     <input type="text" name="ignore_words" value="${sickbeard.IGNORE_WORDS}" class="form-control input-sm input350" />
-                                    <div class="clear-left">results with one or more word from this list will be ignored<br />
+                                    <div class="clear-left">results with one or more word from this list will be ignored<br>
                                     separate words with a comma, e.g. "word1,word2,word3"
                                     </div>
                                 </span>
@@ -117,7 +117,7 @@
                                 <span class="component-title">Require words</span>
                                 <span class="component-desc">
                                     <input type="text" name="require_words" value="${sickbeard.REQUIRE_WORDS}" class="form-control input-sm input350" />
-                                    <div class="clear-left">results with no word from this list will be ignored<br />
+                                    <div class="clear-left">results with no word from this list will be ignored<br>
                                     separate words with a comma, e.g. "word1,word2,word3"
                                     </div>
                                 </span>
@@ -129,8 +129,8 @@
                                 <span class="component-title">Ignore language names in subbed results</span>
                                 <span class="component-desc">
                                     <input type="text" name="ignored_subs_list" value="${sickbeard.IGNORED_SUBS_LIST}" class="form-control input-sm input350" />
-                                    <div class="clear-left">Ignore subbed releases based on language names <br />
-                                    Example: "dk" will ignore words: dksub, dksubs, dksubbed, dksubed <br />
+                                    <div class="clear-left">Ignore subbed releases based on language names <br>
+                                    Example: "dk" will ignore words: dksub, dksubs, dksubbed, dksubed <br>
                                     separate languages with a comma, e.g. "lang1,lang2,lang3
                                     </div>
                                 </span>
@@ -420,7 +420,7 @@
 
                         <div class="testNotification" id="testSABnzbd_result">Click below to test</div>
                         <input class="btn" type="button" value="Test SABnzbd" id="testSABnzbd" class="btn test-button"/>
-                        <input type="submit" class="btn config_submitter" value="Save Changes" /><br/>
+                        <input type="submit" class="btn config_submitter" value="Save Changes" /><br>
 
                         </div><!-- /content_use_nzbs //-->
 
@@ -472,7 +472,7 @@
                             </div>
 
                             <div></div>
-                            <input type="submit" class="btn config_submitter" value="Save Changes" /><br/>
+                            <input type="submit" class="btn config_submitter" value="Save Changes" /><br>
                             </div>
                         </div>
 
@@ -613,13 +613,13 @@
 
                             <div class="testNotification" id="test_torrent_result">Click below to test</div>
                             <input class="btn" type="button" value="Test Connection" id="test_torrent" class="btn test-button"/>
-                            <input type="submit" class="btn config_submitter" value="Save Changes" /><br/>
+                            <input type="submit" class="btn config_submitter" value="Save Changes" /><br>
                             </div>
                     </div><!-- /content_use_torrents //-->
                     </fieldset>
                 </div><!-- /component-group3 //-->
 
-                <br/>
+                <br>
                 <h6 class="pull-right"><b>All non-absolute folder locations are relative to <span class="path">${sickbeard.DATA_DIR}</span></b> </h6>
                 <input type="submit" class="btn pull-left config_submitter button" value="Save Changes" />
 
diff --git a/gui/slick/views/config_subtitles.mako b/gui/slick/views/config_subtitles.mako
index 28cf9a369..940d7eb87 100644
--- a/gui/slick/views/config_subtitles.mako
+++ b/gui/slick/views/config_subtitles.mako
@@ -146,7 +146,7 @@ $('#subtitles_dir').fileBrowser({ title: 'Select Subtitles Download Directory' }
                                     </label>
                                 </div>
 
-                        <br/><input type="submit" class="btn config_submitter" value="Save Changes" /><br/>
+                        <br><input type="submit" class="btn config_submitter" value="Save Changes" /><br>
                         </div>
                     </fieldset>
                 </div><!-- /component-group1 //-->
@@ -175,7 +175,7 @@ $('#subtitles_dir').fileBrowser({ title: 'Select Subtitles Download Directory' }
                         </ul>
                         <input type="hidden" name="service_order" id="service_order" value="<%" ".join(['%s:%d' % (x['name'], x['enabled']) for x in sickbeard.subtitles.sortedServiceList()])%>"/>
 
-                        <br/><input type="submit" class="btn config_submitter" value="Save Changes" /><br/>
+                        <br><input type="submit" class="btn config_submitter" value="Save Changes" /><br>
                     </fieldset>
                 </div><!-- /component-group2 //-->
                 <div id="core-component-group3" class="component-group">
@@ -211,7 +211,7 @@ $('#subtitles_dir').fileBrowser({ title: 'Select Subtitles Download Directory' }
                                 </label>
                             </div>
                         % endfor
-                        <br/><input type="submit" class="btn config_submitter" value="Save Changes" /><br/>
+                        <br><input type="submit" class="btn config_submitter" value="Save Changes" /><br>
                     </fieldset>
                 </div><!-- /component-group3 //-->
             </div><!-- /config-components //-->
diff --git a/gui/slick/views/editShow.mako b/gui/slick/views/editShow.mako
index d8e9cc47b..2bee5ca1f 100644
--- a/gui/slick/views/editShow.mako
+++ b/gui/slick/views/editShow.mako
@@ -134,7 +134,7 @@
                             <label for="airbydate">
                                 <span class="component-title">Air by date</span>
                                 <span class="component-desc">
-                                    <input type="checkbox" id="airbydate" name="air_by_date" ${('', 'checked="checked"')[show.air_by_date == 1]} /> check if the show is released as Show.03.02.2010 rather than Show.S02E03.<br />
+                                    <input type="checkbox" id="airbydate" name="air_by_date" ${('', 'checked="checked"')[show.air_by_date == 1]} /> check if the show is released as Show.03.02.2010 rather than Show.S02E03.<br>
                                     <span style="color:red">In case of an air date conflict between regular and special episodes, the later will be ignored.</span>
                                 </span>
                             </label>
@@ -144,7 +144,7 @@
                             <label for="anime">
                                 <span class="component-title">Anime</span>
                                 <span class="component-desc">
-                                    <input type="checkbox" id="anime" name="anime" ${('', 'checked="checked"')[show.is_anime == 1]}> check if the show is Anime and episodes are released as Show.265 rather than Show.S02E03<br />
+                                    <input type="checkbox" id="anime" name="anime" ${('', 'checked="checked"')[show.is_anime == 1]}> check if the show is Anime and episodes are released as Show.265 rather than Show.S02E03<br>
                                     % if show.is_anime:
                                         <%include file="/inc_blackwhitelist.mako"/>
                                     % endif
@@ -156,7 +156,7 @@
                             <label for="sports">
                                 <span class="component-title">Sports</span>
                                 <span class="component-desc">
-                                    <input type="checkbox" id="sports" name="sports" ${('', 'checked="checked"')[show.sports == 1]}/> check if the show is a sporting or MMA event released as Show.03.02.2010 rather than Show.S02E03<br />
+                                    <input type="checkbox" id="sports" name="sports" ${('', 'checked="checked"')[show.sports == 1]}/> check if the show is a sporting or MMA event released as Show.03.02.2010 rather than Show.S02E03<br>
                                     <span style="color:red">In case of an air date conflict between regular and special episodes, the later will be ignored.</span>
                                 </span>
                             </label>
@@ -184,7 +184,7 @@
                             <label for="dvdorder">
                                 <span class="component-title">DVD Order</span>
                                 <span class="component-desc">
-                                    <input type="checkbox" id="dvdorder" name="dvdorder" ${('', 'checked="checked"')[show.dvdorder == 1]} /> use the DVD order instead of the air order<br />
+                                    <input type="checkbox" id="dvdorder" name="dvdorder" ${('', 'checked="checked"')[show.dvdorder == 1]} /> use the DVD order instead of the air order<br>
                                     <div class="clear-left"><p>A "Force Full Update" is necessary, and if you have existing episodes you need to sort them manually.</p></div>
                                 </span>
                             </label>
@@ -203,7 +203,7 @@
                             <label for="rls_ignore_words">
                                 <span class="component-title">Ignored Words</span>
                                 <span class="component-desc">
-                                    <input type="text" id="rls_ignore_words" name="rls_ignore_words" id="rls_ignore_words" value="${show.rls_ignore_words}" class="form-control form-control-inline input-sm input350" /><br />
+                                    <input type="text" id="rls_ignore_words" name="rls_ignore_words" id="rls_ignore_words" value="${show.rls_ignore_words}" class="form-control form-control-inline input-sm input350" /><br>
                                     <div class="clear-left">
                                         <p>comma-separated <i>e.g. "word1,word2,word3"</i></>
                                         <p>Search results with one or more words from this list will be ignored.</p>
@@ -216,7 +216,7 @@
                             <label for="rls_require_words">
                                 <span class="component-title">Required Words</span>
                                 <span class="component-desc">
-                                    <input type="text" id="rls_require_words" name="rls_require_words" id="rls_require_words" value="${show.rls_require_words}" class="form-control form-control-inline input-sm input350" /><br />
+                                    <input type="text" id="rls_require_words" name="rls_require_words" id="rls_require_words" value="${show.rls_require_words}" class="form-control form-control-inline input-sm input350" /><br>
                                     <div class="clear-left">
                                         <p>comma-separated <i>e.g. "word1,word2,word3"</i></p>
                                         <p>Search results with no words from this list will be ignored.</p>
@@ -229,7 +229,7 @@
                             <label for="SceneName">
                                 <span class="component-title">Scene Exception</span>
                                 <span class="component-desc">
-                                    <input type="text" id="SceneName" class="form-control form-control-inline input-sm input200" /><input class="btn btn-inline" type="button" value="Add" id="addSceneName" /><br /><br />
+                                    <input type="text" id="SceneName" class="form-control form-control-inline input-sm input200" /><input class="btn btn-inline" type="button" value="Add" id="addSceneName" /><br><br>
                                     <div class="pull-left">
                                         <select id="exceptions_list" name="exceptions_list" multiple="multiple" style="min-width:200px;height:99px;">
                                         % for cur_exception in show.exceptions:
@@ -249,7 +249,7 @@
         
         </div>
 
-        <br />
+        <br>
         <input id="submit" type="submit" value="Save Changes" class="btn pull-left config_submitter button">
         </form>
     </div>
diff --git a/gui/slick/views/home_addExistingShow.mako b/gui/slick/views/home_addExistingShow.mako
index 3e029e486..c4f59585b 100644
--- a/gui/slick/views/home_addExistingShow.mako
+++ b/gui/slick/views/home_addExistingShow.mako
@@ -36,7 +36,7 @@
             <%include file="/inc_addShowOptions.mako"/>
         </div>
     </div>
-    <br />
+    <br>
 
     <p>SickRage can add existing shows, using the current options, by using locally stored NFO/XML metadata to eliminate user interaction.
     If you would rather have SickRage prompt you to customize each show, then use the checkbox below.</p>
@@ -48,10 +48,10 @@
     <p><b>Displaying folders within these directories which aren't already added to SickRage:</b></p>
 
     <ul id="rootDirStaticList"><li></li></ul>
-    <br />
+    <br>
     <div id="tableDiv"></div>
-    <br />
-    <br />
+    <br>
+    <br>
     <input class="btn btn-primary" type="button" value="Submit" id="submitShowDirs" />
 
     </form>
diff --git a/gui/slick/views/home_addShows.mako b/gui/slick/views/home_addShows.mako
index c06e1e2b4..16da9f75c 100644
--- a/gui/slick/views/home_addShows.mako
+++ b/gui/slick/views/home_addShows.mako
@@ -20,7 +20,7 @@
         </div>
     </a>
 
-    <br/><br/>
+    <br><br>
     % if sickbeard.USE_TRAKT == True:
     <a href="${srRoot}/home/addShows/trendingShows/" id="btnNewShow" class="btn btn-large">
         <div class="button"><div class="icon-addtrendingshow"></div></div>
@@ -30,7 +30,7 @@
         </div>
     </a>
 
-    <br/><br/>
+    <br><br>
 
     <a href="${srRoot}/home/addShows/recommendedShows/" id="btnNewShow" class="btn btn-large">
         <div class="button"><div class="icon-addrecommendedshow"></div></div>
@@ -40,7 +40,7 @@
         </div>
     </a>
 
-    <br/><br/>
+    <br><br>
     % endif
 
     <a href="${srRoot}/home/addShows/popularShows/" id="btnNewShow" class="btn btn-large">
@@ -51,7 +51,7 @@
         </div>
     </a>
 
-    <br/><br/>
+    <br><br>
 
     <a href="${srRoot}/home/addShows/existingShows/" id="btnExistingShow" class="btn btn-large">
         <div class="button"><div class="icon-addexistingshow"></div></div>
diff --git a/gui/slick/views/home_newShow.mako b/gui/slick/views/home_newShow.mako
index 0a13df259..62a72a473 100644
--- a/gui/slick/views/home_newShow.mako
+++ b/gui/slick/views/home_newShow.mako
@@ -27,7 +27,7 @@
     <div id="core-component-group1" class="tab-pane active component-group">
 
     <div id="displayText">aoeu</div>
-    <br />
+    <br>
 
     <form id="addShowForm" method="post" action="${srRoot}/home/addShows/addNewShow" accept-charset="utf-8">
 
@@ -60,10 +60,10 @@
                 &nbsp;
                 <input class="btn btn-inline" type="button" id="searchName" value="Search" />
 
-                <br /><br />
-                <b>*</b> This will only affect the language of the retrieved metadata file contents and episode filenames.<br />
-                This <b>DOES NOT</b> allow SickRage to download non-english TV episodes!<br /><br />
-                <div id="searchResults" style="height: 100%;"><br/></div>
+                <br><br>
+                <b>*</b> This will only affect the language of the retrieved metadata file contents and episode filenames.<br>
+                This <b>DOES NOT</b> allow SickRage to download non-english TV episodes!<br><br>
+                <div id="searchResults" style="height: 100%;"><br></div>
             % endif
 
         </div>
@@ -74,8 +74,8 @@
 
         <div class="stepDiv">
             % if provided_show_dir:
-                Pre-chosen Destination Folder: <b>${provided_show_dir}</b> <br />
-                <input type="hidden" id="fullShowPath" name="fullShowPath" value="${provided_show_dir}" /><br />
+                Pre-chosen Destination Folder: <b>${provided_show_dir}</b> <br>
+                <input type="hidden" id="fullShowPath" name="fullShowPath" value="${provided_show_dir}" /><br>
             % else:
                 <%include file="/inc_rootDirs.mako"/>
             % endif
@@ -95,7 +95,7 @@
     <input type="hidden" name="skipShow" id="skipShow" value="" />
     </form>
 
-<br />
+<br>
 
 <div style="width: 100%; text-align: center;">
 <input class="btn" type="button" id="addShowButton" value="Add Show" disabled="disabled" />
diff --git a/gui/slick/views/home_popularShows.mako b/gui/slick/views/home_popularShows.mako
index 17fdc4498..3b5b5ed94 100644
--- a/gui/slick/views/home_popularShows.mako
+++ b/gui/slick/views/home_popularShows.mako
@@ -6,7 +6,7 @@
 %>
 <%block name="content">
 <h2>Popular Shows</h2>
-<br />
+<br>
 
 % if not popular_shows:
     <h3>Fetching of IMDB Data failed. Are you online?</h3>
diff --git a/gui/slick/views/home_recommendedShows.mako b/gui/slick/views/home_recommendedShows.mako
index f1ede4327..f5d77e8ea 100644
--- a/gui/slick/views/home_recommendedShows.mako
+++ b/gui/slick/views/home_recommendedShows.mako
@@ -44,7 +44,7 @@
     </select>
 </div>
 
-<br />
+<br>
 <div id="trendingShows"></div>
-<br />
+<br>
 </%block>
diff --git a/gui/slick/views/home_trendingShows.mako b/gui/slick/views/home_trendingShows.mako
index a6aa74f07..a49b019d8 100644
--- a/gui/slick/views/home_trendingShows.mako
+++ b/gui/slick/views/home_trendingShows.mako
@@ -50,7 +50,7 @@
     </select>
 </div>
 
-<br />
+<br>
 <div id="trendingShows"></div>
-<br />
+<br>
 </%block>
diff --git a/gui/slick/views/inc_blackwhitelist.mako b/gui/slick/views/inc_blackwhitelist.mako
index 0b088b327..0aa539466 100644
--- a/gui/slick/views/inc_blackwhitelist.mako
+++ b/gui/slick/views/inc_blackwhitelist.mako
@@ -19,7 +19,7 @@
                             <option value="${keyword}">${keyword}</option>
                         % endfor
                     </select>
-                    <br/>
+                    <br>
                     <input class="btn" id="removeW" value="Remove" type="button"/>
                 </div>
                 <div class="blackwhitelist pool">
@@ -31,7 +31,7 @@
                         % endif
                     % endfor
                     </select>
-                    <br/>
+                    <br>
                     <input class="btn" id="addW" value="Add to Whitelist" type="button"/>
                     <input class="btn" id="addB" value="Add to Blacklist" type="button"/>
                 </div>
@@ -42,7 +42,7 @@
                             <option value="${keyword}">${keyword}</option>
                         % endfor
                     </select>
-                    <br/>
+                    <br>
                     <input class="btn" id="removeB" value="Remove" type="button"/>
                 </div>
             </div>
diff --git a/gui/slick/views/manage.mako b/gui/slick/views/manage.mako
index e7f0ba823..cb8264528 100644
--- a/gui/slick/views/manage.mako
+++ b/gui/slick/views/manage.mako
@@ -21,7 +21,7 @@
 <table id="massUpdateTable" class="sickbeardTable tablesorter" cellspacing="1" border="0" cellpadding="0">
     <thead>
         <tr>
-            <th class="col-checkbox">Edit<br/><input type="checkbox" class="bulkCheck" id="editCheck" /></th>
+            <th class="col-checkbox">Edit<br><input type="checkbox" class="bulkCheck" id="editCheck" /></th>
             <th class="nowrap" style="text-align: left;">Show Name</th>
             <th class="col-quality">Quality</th>
             <th class="col-legend">Sports</th>
@@ -33,15 +33,15 @@
             <th class="col-legend">Subtitle</th>
             <th class="col-legend">Default Ep<br>Status</th>
             <th class="col-legend">Status</th>
-            <th width="1%">Update<br/><input type="checkbox" class="bulkCheck" id="updateCheck" /></th>
-            <th width="1%">Rescan<br/><input type="checkbox" class="bulkCheck" id="refreshCheck" /></th>
-            <th width="1%">Rename<br/><input type="checkbox" class="bulkCheck" id="renameCheck" /></th>
+            <th width="1%">Update<br><input type="checkbox" class="bulkCheck" id="updateCheck" /></th>
+            <th width="1%">Rescan<br><input type="checkbox" class="bulkCheck" id="refreshCheck" /></th>
+            <th width="1%">Rename<br><input type="checkbox" class="bulkCheck" id="renameCheck" /></th>
         % if sickbeard.USE_SUBTITLES:
-            <th width="1%">Search Subtitle<br/><input type="checkbox" class="bulkCheck" id="subtitleCheck" /></th>
+            <th width="1%">Search Subtitle<br><input type="checkbox" class="bulkCheck" id="subtitleCheck" /></th>
         % endif
             <!-- <th>Force Metadata Regen <input type="checkbox" class="bulkCheck" id="metadataCheck" /></th>//-->
-            <th width="1%">Delete<br/><input type="checkbox" class="bulkCheck" id="deleteCheck" /></th>
-            <th width="1%">Remove<br/><input type="checkbox" class="bulkCheck" id="removeCheck" /></th>
+            <th width="1%">Delete<br><input type="checkbox" class="bulkCheck" id="deleteCheck" /></th>
+            <th width="1%">Remove<br><input type="checkbox" class="bulkCheck" id="removeCheck" /></th>
         </tr>
     </thead>
 
diff --git a/gui/slick/views/manage_backlogOverview.mako b/gui/slick/views/manage_backlogOverview.mako
index db2eca310..637c9d114 100644
--- a/gui/slick/views/manage_backlogOverview.mako
+++ b/gui/slick/views/manage_backlogOverview.mako
@@ -30,7 +30,7 @@
 <div class="h2footer pull-right">
     <span class="listing-key wanted">Wanted: <b>${totalWanted}</b></span>
     <span class="listing-key qual">Low Quality: <b>${totalQual}</b></span>
-</div><br/>
+</div><br>
 
 <div class="float-left">
 Jump to Show
@@ -51,7 +51,7 @@ Jump to Show
     % endif
     <tr class="seasonheader" id="show-${curShow.indexerid}">
         <td colspan="3" class="align-left">
-            <br/><h2><a href="${srRoot}/home/displayShow?show=${curShow.indexerid}">${curShow.name}</a></h2>
+            <br><h2><a href="${srRoot}/home/displayShow?show=${curShow.indexerid}">${curShow.name}</a></h2>
             <div class="pull-right">
                 <span class="listing-key wanted">Wanted: <b>${showCounts[curShow.indexerid][Overview.WANTED]}</b></span>
                 <span class="listing-key qual">Low Quality: <b>${showCounts[curShow.indexerid][Overview.QUAL]}</b></span>
diff --git a/gui/slick/views/manage_episodeStatuses.mako b/gui/slick/views/manage_episodeStatuses.mako
index e26bfdbe8..ebf0cdff4 100644
--- a/gui/slick/views/manage_episodeStatuses.mako
+++ b/gui/slick/views/manage_episodeStatuses.mako
@@ -20,7 +20,7 @@
 
 % if whichStatus:
 <h2>None of your episodes have status ${common.statusStrings[int(whichStatus)]}</h2>
-<br />
+<br>
 % endif
 
 <form action="${srRoot}/manage/episodeStatuses" method="get">
@@ -41,7 +41,7 @@ Manage episodes with status <select name="whichStatus" class="form-control form-
 
 <h2>Shows containing ${common.statusStrings[int(whichStatus)]} episodes</h2>
 
-<br />
+<br>
 
 <%
     if int(whichStatus) in [common.IGNORED, common.SNATCHED] + common.Quality.DOWNLOADED + common.Quality.ARCHIVED:
@@ -77,7 +77,7 @@ Set checked shows/episodes to <select name="newStatus" class="form-control form-
     <button type="button" class="btn btn-xs selectAllShows">Select all</a></button>
     <button type="button" class="btn btn-xs unselectAllShows">Clear all</a></button>
 </div>
-<br />
+<br>
 
 <table class="sickbeardTable manageTable" cellspacing="1" border="0" cellpadding="0">
     % for cur_indexer_id in sorted_show_ids:
diff --git a/gui/slick/views/manage_failedDownloads.mako b/gui/slick/views/manage_failedDownloads.mako
index 759c93070..dbce4121f 100644
--- a/gui/slick/views/manage_failedDownloads.mako
+++ b/gui/slick/views/manage_failedDownloads.mako
@@ -35,7 +35,7 @@
       <th class="nowrap" width="75%" style="text-align: left;">Release</th>
       <th width="10%">Size</th>
       <th width="14%">Provider</th>
-      <th width="1%">Remove<br />
+      <th width="1%">Remove<br>
           <input type="checkbox" class="bulkCheck" id="removeCheck" />
       </th>
     </tr>
diff --git a/gui/slick/views/manage_manageSearches.mako b/gui/slick/views/manage_manageSearches.mako
index 78e3d36a7..e3caf400a 100644
--- a/gui/slick/views/manage_manageSearches.mako
+++ b/gui/slick/views/manage_manageSearches.mako
@@ -21,28 +21,28 @@
 <a class="btn" href="${srRoot}/manage/manageSearches/forceBacklog"><i class="icon-exclamation-sign"></i> Force</a>
 <a class="btn" href="${srRoot}/manage/manageSearches/pauseBacklog?paused=${('1', '0')[bool(backlogPaused)]}"><i class="icon-${('paused', 'play')[bool(backlogPaused)]}"></i> ${('pause', 'Unpause')[bool(backlogPaused)]}</a>
 % if not backlogRunning:
-    Not in progress<br />
+    Not in progress<br>
 % else:
     ${('', 'Paused:')[bool(backlogPaused)]}
-    Currently running<br />
+    Currently running<br>
 % endif
-<br />
+<br>
 
 <h3>Daily Search:</h3>
 <a class="btn" href="${srRoot}/manage/manageSearches/forceSearch"><i class="icon-exclamation-sign"></i> Force</a>
-${('Not in progress', 'In Progress')[dailySearchStatus]}<br />
-<br />
+${('Not in progress', 'In Progress')[dailySearchStatus]}<br>
+<br>
 
 <h3>Find Propers Search:</h3>
 <a class="btn ${('disabled', '')[bool(sickbeard.DOWNLOAD_PROPERS)]}" href="${srRoot}/manage/manageSearches/forceFindPropers"><i class="icon-exclamation-sign"></i> Force</a>
 % if not sickbeard.DOWNLOAD_PROPERS:
-    Propers search disabled <br />
+    Propers search disabled <br>
 % elif not findPropersStatus:
-    Not in progress<br />
+    Not in progress<br>
 % else:
-    In Progress<br />
+    In Progress<br>
 % endif
-<br />
+<br>
 
 <h3>Search Queue:</h3>
 Backlog: <i>${queueLength['backlog']} pending items</i></br>
diff --git a/gui/slick/views/manage_massEdit.mako b/gui/slick/views/manage_massEdit.mako
index 4f28b0896..216782360 100644
--- a/gui/slick/views/manage_massEdit.mako
+++ b/gui/slick/views/manage_massEdit.mako
@@ -39,8 +39,8 @@
                     <div class="component-group">
                         <h3>Main Settings</h3>
 
-                        ==> <u>Changing any settings marked with (<span class="separator">*</span>) will force a refresh of the selected shows.</u><br />
-                        <br />
+                        ==> <u>Changing any settings marked with (<span class="separator">*</span>) will force a refresh of the selected shows.</u><br>
+                        <br>
 
                         <fieldset class="component-group-list">
                             
@@ -49,7 +49,7 @@
                                 <span class="component-title">Selected Shows</span>
                                 <span class="component-desc">
                                     % for curName in sorted(showNames):
-                                    <span style="font-size: 14px;">${curName}</span><br />
+                                    <span style="font-size: 14px;">${curName}</span><br>
                                     % endfor
                                 </span>
                             </label>
@@ -142,7 +142,7 @@
                                         <option value="keep" ${('', 'selected="selected"')[archive_firstmatch_value == None]}>&lt; Keep &gt;</option>
                                         <option value="enable" ${('', 'selected="selected"')[archive_firstmatch_value == 1]}>Yes</option>
                                         <option value="disable" ${('', 'selected="selected"')[archive_firstmatch_value == 0]}>No</option>
-                                    </select><br />
+                                    </select><br>
                                     Archive episode after the first best match is found from your archive quality list.
                                 </span>
                             </label>
@@ -156,7 +156,7 @@
                                         <option value="keep" ${('', 'selected="selected"')[flatten_folders_value == None]}>&lt; Keep &gt;</option>
                                         <option value="enable" ${('', 'selected="selected"')[flatten_folders_value == 0]}>Yes</option>
                                         <option value="disable" ${('', 'selected="selected"')[flatten_folders_value == 1]}>No</option>
-                                    </select><br />
+                                    </select><br>
                                     Group episodes by season folder (set to "No" to store in a single folder).
                                 </span>
                             </label>
@@ -185,7 +185,7 @@
                                         % for curStatus in [WANTED, SKIPPED, IGNORED]:
                                         <option value="${curStatus}" ${('', 'selected="selected"')[curStatus == default_ep_status_value]}>${statusStrings[curStatus]}</option>
                                         % endfor
-                                    </select><br />
+                                    </select><br>
                                     This will set the status for future episodes.
                                 </span>
                             </label>
@@ -199,7 +199,7 @@
                                         <option value="keep" ${('', 'selected="selected"')[scene_value == None]}>&lt; Keep &gt;</option>
                                         <option value="enable" ${('', 'selected="selected"')[scene_value == 1]}>Yes</option>
                                         <option value="disable" ${('', 'selected="selected"')[scene_value == 0]}>No</option>
-                                    </select><br />
+                                    </select><br>
                                     Search by scene numbering (set to "No" to search by indexer numbering).
                                 </span>
                             </label>
@@ -213,7 +213,7 @@
                                         <option value="keep" ${('', 'selected="selected"')[anime_value == None]}>&lt; Keep &gt;</option>
                                         <option value="enable" ${('', 'selected="selected"')[anime_value == 1]}>Yes</option>
                                         <option value="disable" ${('', 'selected="selected"')[anime_value == 0]}>No</option>
-                                    </select><br />
+                                    </select><br>
                                     Set if these shows are Anime and episodes are released as Show.265 rather than Show.S02E03
                                 </span>
                             </label>
@@ -227,8 +227,8 @@
                                         <option value="keep" ${('', 'selected="selected"')[sports_value == None]}>&lt; Keep &gt;</option>
                                         <option value="enable" ${('', 'selected="selected"')[sports_value == 1]}>Yes</option>
                                         <option value="disable" ${('', 'selected="selected"')[sports_value == 0]}>No</option>
-                                    </select><br />
-                                    Set if these shows are sporting or MMA events released as Show.03.02.2010 rather than Show.S02E03.<br />
+                                    </select><br>
+                                    Set if these shows are sporting or MMA events released as Show.03.02.2010 rather than Show.S02E03.<br>
                                     <span style="color:red">In case of an air date conflict between regular and special episodes, the later will be ignored.</span>
                                 </span>
                             </label>
@@ -242,8 +242,8 @@
                                         <option value="keep" ${('', 'selected="selected"')[air_by_date_value == None]}>&lt; Keep &gt;</option>
                                         <option value="enable" ${('', 'selected="selected"')[air_by_date_value == 1]}>Yes</option>
                                         <option value="disable" ${('', 'selected="selected"')[air_by_date_value == 0]}>No</option>
-                                    </select><br />
-                                    Set if these shows are released as Show.03.02.2010 rather than Show.S02E03.<br />
+                                    </select><br>
+                                    Set if these shows are released as Show.03.02.2010 rather than Show.S02E03.<br>
                                     <span style="color:red">In case of an air date conflict between regular and special episodes, the later will be ignored.</span>
                                 </span>
                             </label>
@@ -257,7 +257,7 @@
                                         <option value="keep" ${('', 'selected="selected"')[subtitles_value == None]}>&lt; Keep &gt;</option>
                                         <option value="enable" ${('', 'selected="selected"')[subtitles_value == 1]}>Yes</option>
                                         <option value="disable" ${('', 'selected="selected"')[subtitles_value == 0]}>No</option>
-                                    </select><br />
+                                    </select><br>
                                     Search for subtitles.
                                 </span>
                             </label>
diff --git a/gui/slick/views/manage_subtitleMissed.mako b/gui/slick/views/manage_subtitleMissed.mako
index c53672070..5337fd8e6 100644
--- a/gui/slick/views/manage_subtitleMissed.mako
+++ b/gui/slick/views/manage_subtitleMissed.mako
@@ -22,7 +22,7 @@
 
 % if whichSubs:
 <h2>All of your episodes have ${subsLanguage} subtitles.</h2>
-<br />
+<br>
 % endif
 
 <form action="${srRoot}/manage/subtitleMissed" method="get">
@@ -42,13 +42,13 @@ subtitles
 
 <form action="${srRoot}/manage/downloadSubtitleMissed" method="post">
 <h2>Episodes without ${subsLanguage} subtitles.</h2>
-<br />
+<br>
 Download missed subtitles for selected episodes <input class="btn btn-inline" type="submit" value="Go" />
 <div>
     <button type="button" class="btn btn-xs selectAllShows">Select all</a></button>
     <button type="button" class="btn btn-xs unselectAllShows">Clear all</a></button>
 </div>
-<br />
+<br>
 <table class="sickbeardTable manageTable" cellspacing="1" border="0" cellpadding="0">
 % for cur_indexer_id in sorted_show_ids:
  <tr id="${cur_indexer_id}">
diff --git a/gui/slick/views/restart.mako b/gui/slick/views/restart.mako
index 67510c016..6c53fb340 100644
--- a/gui/slick/views/restart.mako
+++ b/gui/slick/views/restart.mako
@@ -49,7 +49,7 @@ sbDefaultPage = "${sbDefaultPage}";
 %>
 <% themeSpinner = ('', '-dark')['dark' == themeSpinner] %>
 <h2>Performing Restart</h2>
-<br />
+<br>
 <div id="shut_down_message">
 Waiting for SickRage to shut down:
 <img src="${srRoot}/images/loading16${themeSpinner}.gif" height="16" width="16" id="shut_down_loading" />
diff --git a/gui/slick/views/schedule.mako b/gui/slick/views/schedule.mako
index 6f6e69472..921ab7466 100644
--- a/gui/slick/views/schedule.mako
+++ b/gui/slick/views/schedule.mako
@@ -196,7 +196,7 @@
     show_div = 'ep_listing listing-default'
 %>
 % if 'show' == sort:
-    <br /><br />
+    <br><br>
 % endif
 
 % for cur_result in results:
@@ -238,17 +238,17 @@
     % elif 'date' == sort:
         % if cur_segment != cur_ep_airdate:
             % if cur_ep_enddate < today and cur_ep_airdate != today.date() and not missed_header:
-                <br /><h2 class="day">Missed</h2>
+                <br><h2 class="day">Missed</h2>
                 <% missed_header = True %>
             % elif cur_ep_airdate >= next_week.date() and not too_late_header:
-                <br /><h2 class="day">Later</h2>
+                <br><h2 class="day">Later</h2>
                 <% too_late_header = True %>
             % elif cur_ep_enddate >= today and cur_ep_airdate < next_week.date():
                 % if cur_ep_airdate == today.date():
-                    <br /><h2 class="day">${datetime.date.fromordinal(cur_ep_airdate.toordinal()).strftime('%A').decode(sickbeard.SYS_ENCODING).capitalize()}<span style="font-size: 14px; vertical-align: top;">[Today]</span></h2>
+                    <br><h2 class="day">${datetime.date.fromordinal(cur_ep_airdate.toordinal()).strftime('%A').decode(sickbeard.SYS_ENCODING).capitalize()}<span style="font-size: 14px; vertical-align: top;">[Today]</span></h2>
                     <% today_header = True %>
                 % else:
-                    <br /><h2 class="day">${datetime.date.fromordinal(cur_ep_airdate.toordinal()).strftime('%A').decode(sickbeard.SYS_ENCODING).capitalize()}</h2>
+                    <br><h2 class="day">${datetime.date.fromordinal(cur_ep_airdate.toordinal()).strftime('%A').decode(sickbeard.SYS_ENCODING).capitalize()}</h2>
                 % endif
             % endif
             <% cur_segment = cur_ep_airdate %>
@@ -256,7 +256,7 @@
 
         % if cur_ep_airdate == today.date() and not today_header:
             <div>
-            <br /><h2 class="day">${datetime.date.fromordinal(cur_ep_airdate.toordinal()).strftime('%A').decode(sickbeard.SYS_ENCODING).capitalize()} <span style="font-size: 14px; vertical-align: top;">[Today]</span></h2>
+            <br><h2 class="day">${datetime.date.fromordinal(cur_ep_airdate.toordinal()).strftime('%A').decode(sickbeard.SYS_ENCODING).capitalize()} <span style="font-size: 14px; vertical-align: top;">[Today]</span></h2>
             <% today_header = True %>
         % endif
 
diff --git a/gui/slick/views/testRename.mako b/gui/slick/views/testRename.mako
index f7410d500..fb43c9d77 100644
--- a/gui/slick/views/testRename.mako
+++ b/gui/slick/views/testRename.mako
@@ -49,7 +49,7 @@
     </thead>
 </table>
 
-<br/>
+<br>
 <input type="submit" value="Rename Selected" class="btn btn-success"> <a href="/home/displayShow?show=${show.indexerid}" class="btn btn-danger">Cancel Rename</a>
 
 <table id="testRenameTable" class="sickbeardTable" cellspacing="1" border="0" cellpadding="0">
@@ -64,7 +64,7 @@
     <thead>
         <tr class="seasonheader" id="season-${cur_ep_obj.season}">
             <td colspan="4">
-                 <br/>
+                 <br>
                 <h2>${('Season '+str(cur_ep_obj.season), 'Specials')[int(cur_ep_obj.season) == 0]}</h2>
             </td>
         </tr>
@@ -98,6 +98,6 @@ if len(epList) > 1:
     </tbody>
 
 % endfor
-</table><br />
+</table><br>
 <input type="submit" value="Rename Selected" class="btn btn-success"> <a href="/home/displayShow?show=${show.indexerid}" class="btn btn-danger">Cancel Rename</a>
 </%block>
diff --git a/gui/slick/views/viewlogs.mako b/gui/slick/views/viewlogs.mako
index c6c809cd8..cda4163c9 100644
--- a/gui/slick/views/viewlogs.mako
+++ b/gui/slick/views/viewlogs.mako
@@ -33,10 +33,10 @@ Filter log by: <select name="logFilter" id="logFilter" class="form-control form-
 Search log by:
 <input type="text" name="logSearch" placeholder="clear to reset" id="logSearch" value="${('', logSearch)[bool(logSearch)]}" class="form-control form-control-inline input-sm" />
 </div>
-<br />
+<br>
 <div class="align-left"><pre>
 ${logLines}
 </pre>
 </div>
-<br />
+<br>
 </%block>
diff --git a/readme.md b/readme.md
index 9e6029d1b..f7e3af8a8 100644
--- a/readme.md
+++ b/readme.md
@@ -41,7 +41,7 @@ Automatic Video Library Manager for TV Shows. It watches for new episodes of you
 ##### [Wiki](https://github.com/SiCKRAGETV/SickRage/wiki)
 
 #### Important
-Before using this with your existing database (sickbeard.db) please make a backup copy of it and delete any other database files such as cache.db and failed.db if present<br/>
+Before using this with your existing database (sickbeard.db) please make a backup copy of it and delete any other database files such as cache.db and failed.db if present<br>
 We HIGHLY recommend starting out with no database files at all to make this a fresh start but the choice is at your own risk
 
 #### Supported providers
diff --git a/sickbeard/webserve.py b/sickbeard/webserve.py
index a00506ddd..bb15f5695 100644
--- a/sickbeard/webserve.py
+++ b/sickbeard/webserve.py
@@ -177,8 +177,8 @@ class BaseHandler(RequestHandler):
 
         elif self.settings.get("debug") and "exc_info" in kwargs:
             exc_info = kwargs["exc_info"]
-            trace_info = ''.join(["%s<br/>" % line for line in traceback.format_exception(*exc_info)])
-            request_info = ''.join(["<strong>%s</strong>: %s<br/>" % (k, self.request.__dict__[k]) for k in
+            trace_info = ''.join(["%s<br>" % line for line in traceback.format_exception(*exc_info)])
+            request_info = ''.join(["<strong>%s</strong>: %s<br>" % (k, self.request.__dict__[k]) for k in
                                     self.request.__dict__.keys()])
             error = exc_info[1]
 
@@ -874,7 +874,7 @@ class Home(WebRoot):
                 finalResult += "Test KODI notice sent successfully to " + urllib.unquote_plus(curHost)
             else:
                 finalResult += "Test KODI notice failed to " + urllib.unquote_plus(curHost)
-            finalResult += "<br />\n"
+            finalResult += "<br>\n"
 
         return finalResult
 
@@ -891,7 +891,7 @@ class Home(WebRoot):
                 finalResult += 'Successful test notice sent to Plex client ... ' + urllib.unquote_plus(curHost)
             else:
                 finalResult += 'Test failed for Plex client ... ' + urllib.unquote_plus(curHost)
-            finalResult += '<br />' + '\n'
+            finalResult += '<br>' + '\n'
 
         ui.notifications.message('Tested Plex client(s): ', urllib.unquote_plus(host.replace(',', ', ')))
 
@@ -912,7 +912,7 @@ class Home(WebRoot):
             finalResult += 'Test failed, No Plex Media Server host specified'
         else:
             finalResult += 'Test failed for Plex server(s) ... ' + urllib.unquote_plus(curResult.replace(',', ', '))
-        finalResult += '<br />' + '\n'
+        finalResult += '<br>' + '\n'
 
         ui.notifications.message('Tested Plex Media Server host(s): ', urllib.unquote_plus(host.replace(',', ', ')))
 
@@ -1309,7 +1309,7 @@ class Home(WebRoot):
             if season == -1:
                 season = "*"
             out.append("S" + str(season) + ": " + ", ".join(names))
-        return "<br/>".join(out)
+        return "<br>".join(out)
 
     def editShow(self, show=None, location=None, anyQualities=[], bestQualities=[], exceptions_list=[],
                  flatten_folders=None, paused=None, directCall=False, air_by_date=None, sports=None, dvdorder=None,
@@ -1748,7 +1748,7 @@ class Home(WebRoot):
                 myDB.mass_action(sql_l)
 
         if int(status) == WANTED and not showObj.paused:
-            msg = "Backlog was automatically started for the following seasons of <b>" + showObj.name + "</b>:<br />"
+            msg = "Backlog was automatically started for the following seasons of <b>" + showObj.name + "</b>:<br>"
             msg += '<ul>'
 
             for season, segment in segments.iteritems():
@@ -1767,7 +1767,7 @@ class Home(WebRoot):
             logger.log(u"Some episodes were set to wanted, but " + showObj.name + " is paused. Not adding to Backlog until show is unpaused")
 
         if int(status) == FAILED:
-            msg = "Retrying Search was automatically started for the following season of <b>" + showObj.name + "</b>:<br />"
+            msg = "Retrying Search was automatically started for the following season of <b>" + showObj.name + "</b>:<br>"
             msg += '<ul>'
 
             for season, segment in segments.iteritems():
@@ -2200,7 +2200,7 @@ class HomePostProcess(Home):
             if quiet is not None and int(quiet) == 1:
                 return result
 
-            result = result.replace("\n", "<br />\n")
+            result = result.replace("\n", "<br>\n")
             return self._genericMessage("Postprocessing results", result)
 
 
@@ -3349,22 +3349,22 @@ class Manage(Home, WebRoot):
         messageDetail = ""
 
         if updates:
-            messageDetail += "<br /><b>Updates</b><br /><ul><li>"
+            messageDetail += "<br><b>Updates</b><br><ul><li>"
             messageDetail += "</li><li>".join(updates)
             messageDetail += "</li></ul>"
 
         if refreshes:
-            messageDetail += "<br /><b>Refreshes</b><br /><ul><li>"
+            messageDetail += "<br><b>Refreshes</b><br><ul><li>"
             messageDetail += "</li><li>".join(refreshes)
             messageDetail += "</li></ul>"
 
         if renames:
-            messageDetail += "<br /><b>Renames</b><br /><ul><li>"
+            messageDetail += "<br><b>Renames</b><br><ul><li>"
             messageDetail += "</li><li>".join(renames)
             messageDetail += "</li></ul>"
 
         if subtitles:
-            messageDetail += "<br /><b>Subtitles</b><br /><ul><li>"
+            messageDetail += "<br><b>Subtitles</b><br><ul><li>"
             messageDetail += "</li><li>".join(subtitles)
             messageDetail += "</li></ul>"
 
@@ -3393,7 +3393,7 @@ class Manage(Home, WebRoot):
             if helpers.check_url(webui_url + 'download/'):
                 webui_url += 'download/'
             else:
-                info_download_station = '<p>To have a better experience please set the Download Station alias as <code>download</code>, you can check this setting in the Synology DSM <b>Control Panel</b> > <b>Application Portal</b>. Make sure you allow DSM to be embedded with iFrames too in <b>Control Panel</b> > <b>DSM Settings</b> > <b>Security</b>.</p><br/><p>There is more information about this available <a href="https://github.com/midgetspy/Sick-Beard/pull/338">here</a>.</p><br/>'
+                info_download_station = '<p>To have a better experience please set the Download Station alias as <code>download</code>, you can check this setting in the Synology DSM <b>Control Panel</b> > <b>Application Portal</b>. Make sure you allow DSM to be embedded with iFrames too in <b>Control Panel</b> > <b>DSM Settings</b> > <b>Security</b>.</p><br><p>There is more information about this available <a href="https://github.com/midgetspy/Sick-Beard/pull/338">here</a>.</p><br>'
 
         if not sickbeard.TORRENT_PASSWORD == "" and not sickbeard.TORRENT_USERNAME == "":
             webui_url = re.sub('://', '://' + str(sickbeard.TORRENT_USERNAME) + ':' + str(sickbeard.TORRENT_PASSWORD) + '@', webui_url)
@@ -3737,7 +3737,7 @@ class ConfigGeneral(Config):
             for x in results:
                 logger.log(x, logger.ERROR)
             ui.notifications.error('Error(s) Saving Configuration',
-                                   '<br />\n'.join(results))
+                                   '<br>\n'.join(results))
         else:
             ui.notifications.message('Configuration Saved', ek(os.path.join, sickbeard.CONFIG_FILE))
 
@@ -3779,7 +3779,7 @@ class ConfigBackupRestore(Config):
         else:
             finalResult += "You need to choose a folder to save your backup to!"
 
-        finalResult += "<br />\n"
+        finalResult += "<br>\n"
 
         return finalResult
 
@@ -3800,7 +3800,7 @@ class ConfigBackupRestore(Config):
         else:
             finalResult += "You need to select a backup file to restore!"
 
-        finalResult += "<br />\n"
+        finalResult += "<br>\n"
 
         return finalResult
 
@@ -3900,7 +3900,7 @@ class ConfigSearch(Config):
             for x in results:
                 logger.log(x, logger.ERROR)
             ui.notifications.error('Error(s) Saving Configuration',
-                                   '<br />\n'.join(results))
+                                   '<br>\n'.join(results))
         else:
             ui.notifications.message('Configuration Saved', ek(os.path.join, sickbeard.CONFIG_FILE))
 
@@ -4027,7 +4027,7 @@ class ConfigPostProcessing(Config):
             for x in results:
                 logger.log(x, logger.WARNING)
             ui.notifications.error('Error(s) Saving Configuration',
-                                   '<br />\n'.join(results))
+                                   '<br>\n'.join(results))
         else:
             ui.notifications.message('Configuration Saved', ek(os.path.join, sickbeard.CONFIG_FILE))
 
@@ -4579,7 +4579,7 @@ class ConfigProviders(Config):
             for x in results:
                 logger.log(x, logger.ERROR)
             ui.notifications.error('Error(s) Saving Configuration',
-                                   '<br />\n'.join(results))
+                                   '<br>\n'.join(results))
         else:
             ui.notifications.message('Configuration Saved', ek(os.path.join, sickbeard.CONFIG_FILE))
 
@@ -4811,7 +4811,7 @@ class ConfigNotifications(Config):
             for x in results:
                 logger.log(x, logger.ERROR)
             ui.notifications.error('Error(s) Saving Configuration',
-                                   '<br />\n'.join(results))
+                                   '<br>\n'.join(results))
         else:
             ui.notifications.message('Configuration Saved', ek(os.path.join, sickbeard.CONFIG_FILE))
 
@@ -4871,7 +4871,7 @@ class ConfigSubtitles(Config):
             for x in results:
                 logger.log(x, logger.ERROR)
             ui.notifications.error('Error(s) Saving Configuration',
-                                   '<br />\n'.join(results))
+                                   '<br>\n'.join(results))
         else:
             ui.notifications.message('Configuration Saved', ek(os.path.join, sickbeard.CONFIG_FILE))
 
@@ -4906,7 +4906,7 @@ class ConfigAnime(Config):
             for x in results:
                 logger.log(x, logger.ERROR)
             ui.notifications.error('Error(s) Saving Configuration',
-                                   '<br />\n'.join(results))
+                                   '<br>\n'.join(results))
         else:
             ui.notifications.message('Configuration Saved', ek(os.path.join, sickbeard.CONFIG_FILE))
 
-- 
GitLab


From d0702c002441376cfd4ad39d3525dd77e4f043c6 Mon Sep 17 00:00:00 2001
From: labrys <labrys@useres.noreply.github.com>
Date: Sat, 7 Nov 2015 21:14:48 -0500
Subject: [PATCH 114/215] PEP 8: Refactor variables that shadow built-in names

---
 sickbeard/metadata/kodi_12plus.py | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/sickbeard/metadata/kodi_12plus.py b/sickbeard/metadata/kodi_12plus.py
index 5d61c52ba..47e3fb811 100644
--- a/sickbeard/metadata/kodi_12plus.py
+++ b/sickbeard/metadata/kodi_12plus.py
@@ -309,8 +309,8 @@ class KODI_12PlusMetadata(generic.GenericMetadata):
             # watched.text = 'false'
 
             if getattr(myEp, 'writer', None):
-                credits = etree.SubElement(episode, "credits")
-                credits.text = myEp['writer'].strip()
+                ep_credits = etree.SubElement(episode, "credits")
+                ep_credits.text = myEp['writer'].strip()
 
             if getattr(myEp, 'director', None):
                 director = etree.SubElement(episode, "director")
-- 
GitLab


From c3b644f5be254f731ec8b9ac459d9d62855f6fed Mon Sep 17 00:00:00 2001
From: labrys <labrys@useres.noreply.github.com>
Date: Sat, 7 Nov 2015 21:10:48 -0500
Subject: [PATCH 115/215] PEP 8: Add and remove whitespace and blank lines

---
 sickbeard/metadata/kodi_12plus.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/sickbeard/metadata/kodi_12plus.py b/sickbeard/metadata/kodi_12plus.py
index 47e3fb811..91cf75287 100644
--- a/sickbeard/metadata/kodi_12plus.py
+++ b/sickbeard/metadata/kodi_12plus.py
@@ -321,7 +321,7 @@ class KODI_12PlusMetadata(generic.GenericMetadata):
                 rating.text = myEp['rating']
 
             if getattr(myEp, 'gueststars', None) and isinstance(myEp['gueststars'], basestring):
-                for actor in (x.strip() for x in  myEp['gueststars'].split('|') if x.strip()):
+                for actor in (x.strip() for x in myEp['gueststars'].split('|') if x.strip()):
                     cur_actor = etree.SubElement(episode, "actor")
                     cur_actor_name = etree.SubElement(cur_actor, "name")
                     cur_actor_name.text = actor
-- 
GitLab


From 69f4294ac931df22295fde31cb41388459d4cd9e Mon Sep 17 00:00:00 2001
From: labrys <labrys@useres.noreply.github.com>
Date: Sat, 7 Nov 2015 21:09:58 -0500
Subject: [PATCH 116/215] PEP 263: Add encoding declaration

---
 sickbeard/metadata/kodi_12plus.py | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/sickbeard/metadata/kodi_12plus.py b/sickbeard/metadata/kodi_12plus.py
index 91cf75287..4014b8144 100644
--- a/sickbeard/metadata/kodi_12plus.py
+++ b/sickbeard/metadata/kodi_12plus.py
@@ -1,3 +1,5 @@
+# coding=utf-8
+
 # URL: http://code.google.com/p/sickbeard/
 #
 # This file is part of SickRage.
-- 
GitLab


From b21b7977ab0dd06cab7e27c0b7aa3d5b0faf1470 Mon Sep 17 00:00:00 2001
From: labrys <labrys@useres.noreply.github.com>
Date: Sat, 7 Nov 2015 21:20:26 -0500
Subject: [PATCH 117/215] PEP 8: Add and remove whitespace and blank lines

---
 sickbeard/metadata/mede8er.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/sickbeard/metadata/mede8er.py b/sickbeard/metadata/mede8er.py
index c4bd685b7..37d79c7d7 100644
--- a/sickbeard/metadata/mede8er.py
+++ b/sickbeard/metadata/mede8er.py
@@ -316,7 +316,7 @@ class Mede8erMetadata(mediabrowser.MediaBrowserMetadata):
                 if getattr(myShow, '_actors', None) or getattr(myEp, 'gueststars', None):
                     cast = etree.SubElement(episode, "cast")
                     if getattr(myEp, 'gueststars', None) and isinstance(myEp['gueststars'], basestring):
-                        for actor in (x.strip() for x in  myEp['gueststars'].split('|') if x.strip()):
+                        for actor in (x.strip() for x in myEp['gueststars'].split('|') if x.strip()):
                             cur_actor = etree.SubElement(cast, "actor")
                             cur_actor.text = actor
 
-- 
GitLab


From b0fb54fa474769a3620a22b7a7ef5f164aeea078 Mon Sep 17 00:00:00 2001
From: labrys <labrys@useres.noreply.github.com>
Date: Sat, 7 Nov 2015 21:20:05 -0500
Subject: [PATCH 118/215] PEP 263: Add encoding declaration

---
 sickbeard/metadata/mede8er.py | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/sickbeard/metadata/mede8er.py b/sickbeard/metadata/mede8er.py
index 37d79c7d7..36609fde1 100644
--- a/sickbeard/metadata/mede8er.py
+++ b/sickbeard/metadata/mede8er.py
@@ -1,3 +1,5 @@
+# coding=utf-8
+
 # Author: Nic Wolfe <nic@wolfeden.ca>
 # URL: http://code.google.com/p/sickbeard/
 #
-- 
GitLab


From ff7907fc78ee6ad5bf0c50f8f9d908c5e2c469bb Mon Sep 17 00:00:00 2001
From: labrys <labrys@useres.noreply.github.com>
Date: Sat, 7 Nov 2015 21:28:35 -0500
Subject: [PATCH 119/215] PEP 203: Replace dict creation with dict literal

---
 sickbeard/metadata/mediabrowser.py | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/sickbeard/metadata/mediabrowser.py b/sickbeard/metadata/mediabrowser.py
index a9d608a20..c33c7fe7d 100644
--- a/sickbeard/metadata/mediabrowser.py
+++ b/sickbeard/metadata/mediabrowser.py
@@ -401,10 +401,11 @@ class MediaBrowserMetadata(generic.GenericMetadata):
 
         eps_to_write = [ep_obj] + ep_obj.relatedEps
 
-        persons_dict = {}
-        persons_dict['Director'] = []
-        persons_dict['GuestStar'] = []
-        persons_dict['Writer'] = []
+        persons_dict = {
+            'Director': [],
+            'GuestStar': [],
+            'Writer': []
+        }
 
         indexer_lang = ep_obj.show.lang
 
-- 
GitLab


From 6070bb03884318af7930009122dd584d9cfc232a Mon Sep 17 00:00:00 2001
From: labrys <labrys@useres.noreply.github.com>
Date: Sat, 7 Nov 2015 21:23:54 -0500
Subject: [PATCH 120/215] PEP 8: Add and remove whitespace and blank lines

---
 sickbeard/metadata/mediabrowser.py | 1 -
 1 file changed, 1 deletion(-)

diff --git a/sickbeard/metadata/mediabrowser.py b/sickbeard/metadata/mediabrowser.py
index c33c7fe7d..6f45abd61 100644
--- a/sickbeard/metadata/mediabrowser.py
+++ b/sickbeard/metadata/mediabrowser.py
@@ -272,7 +272,6 @@ class MediaBrowserMetadata(generic.GenericMetadata):
             indexerid = etree.SubElement(tv_node, "id")
             indexerid.text = str(myShow['id'])
 
-
         if getattr(myShow, 'seriesname', None):
             SeriesName = etree.SubElement(tv_node, "SeriesName")
             SeriesName.text = myShow['seriesname']
-- 
GitLab


From 00f511b3e0446ee93c0ef46a1f5cd881363210ac Mon Sep 17 00:00:00 2001
From: labrys <labrys@useres.noreply.github.com>
Date: Sat, 7 Nov 2015 21:23:28 -0500
Subject: [PATCH 121/215] PEP 263: Add encoding declaration

---
 sickbeard/metadata/mediabrowser.py | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/sickbeard/metadata/mediabrowser.py b/sickbeard/metadata/mediabrowser.py
index 6f45abd61..0a60d4bb5 100644
--- a/sickbeard/metadata/mediabrowser.py
+++ b/sickbeard/metadata/mediabrowser.py
@@ -1,3 +1,5 @@
+# coding=utf-8
+
 # Author: Nic Wolfe <nic@wolfeden.ca>
 # URL: http://code.google.com/p/sickbeard/
 #
-- 
GitLab


From fa1c8fe3558cc18fd4509fbdf33c243ee5398150 Mon Sep 17 00:00:00 2001
From: labrys <labrys@useres.noreply.github.com>
Date: Sat, 7 Nov 2015 21:24:23 -0500
Subject: [PATCH 122/215] Remove redundant parentheses

---
 sickbeard/metadata/mediabrowser.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/sickbeard/metadata/mediabrowser.py b/sickbeard/metadata/mediabrowser.py
index 0a60d4bb5..e43195281 100644
--- a/sickbeard/metadata/mediabrowser.py
+++ b/sickbeard/metadata/mediabrowser.py
@@ -100,7 +100,7 @@ class MediaBrowserMetadata(generic.GenericMetadata):
     # Override with empty methods for unsupported features
     def retrieveShowMetadata(self, folder):
         # while show metadata is generated, it is not supported for our lookup
-        return (None, None, None)
+        return None, None, None
 
     def create_season_all_poster(self, show_obj):
         pass
-- 
GitLab


From c150459c71c7f21214dd00f9d17667a5ccb4116a Mon Sep 17 00:00:00 2001
From: labrys <labrys@useres.noreply.github.com>
Date: Sat, 7 Nov 2015 21:08:12 -0500
Subject: [PATCH 123/215] PEP 263: Add encoding declaration

---
 sickbeard/metadata/kodi.py | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/sickbeard/metadata/kodi.py b/sickbeard/metadata/kodi.py
index ac9e24312..b093e8272 100644
--- a/sickbeard/metadata/kodi.py
+++ b/sickbeard/metadata/kodi.py
@@ -1,3 +1,5 @@
+# coding=utf-8
+
 # Author: Nic Wolfe <nic@wolfeden.ca>
 # URL: http://code.google.com/p/sickbeard/
 #
-- 
GitLab


From 91009f7555d3b5ecf3fe0d62532b8e3ee0472f34 Mon Sep 17 00:00:00 2001
From: labrys <labrys@useres.noreply.github.com>
Date: Sat, 7 Nov 2015 20:31:35 -0500
Subject: [PATCH 124/215] PEP 8: Move module level imports to top of file

---
 sickbeard/metadata/__init__.py | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/sickbeard/metadata/__init__.py b/sickbeard/metadata/__init__.py
index 2e8f09157..5f137bd51 100644
--- a/sickbeard/metadata/__init__.py
+++ b/sickbeard/metadata/__init__.py
@@ -16,11 +16,11 @@
 # You should have received a copy of the GNU General Public License
 # along with SickRage.  If not, see <http://www.gnu.org/licenses/>.
 
-__all__ = ['generic', 'helpers', 'kodi', 'kodi_12plus', 'mediabrowser', 'ps3', 'wdtv', 'tivo', 'mede8er']
-
 import sys
 from sickbeard.metadata import kodi, kodi_12plus, mediabrowser, ps3, wdtv, tivo, mede8er, generic, helpers
 
+__all__ = ['generic', 'helpers', 'kodi', 'kodi_12plus', 'mediabrowser', 'ps3', 'wdtv', 'tivo', 'mede8er']
+
 
 def available_generators():
     return [x for x in __all__ if x not in ['generic', 'helpers']]
-- 
GitLab


From ef5a113dfb617b2a3dfffaa3cfafbdd40f42e826 Mon Sep 17 00:00:00 2001
From: labrys <labrys@useres.noreply.github.com>
Date: Sat, 7 Nov 2015 20:32:05 -0500
Subject: [PATCH 125/215] PEP 8: Add and remove blank lines for consistency

---
 sickbeard/metadata/__init__.py | 1 +
 1 file changed, 1 insertion(+)

diff --git a/sickbeard/metadata/__init__.py b/sickbeard/metadata/__init__.py
index 5f137bd51..51db601f3 100644
--- a/sickbeard/metadata/__init__.py
+++ b/sickbeard/metadata/__init__.py
@@ -25,6 +25,7 @@ __all__ = ['generic', 'helpers', 'kodi', 'kodi_12plus', 'mediabrowser', 'ps3', '
 def available_generators():
     return [x for x in __all__ if x not in ['generic', 'helpers']]
 
+
 def _getMetadataModule(name):
     name = name.lower()
     prefix = "sickbeard.metadata."
-- 
GitLab


From 275b55fbfde22d27b38309d69057339584695498 Mon Sep 17 00:00:00 2001
From: labrys <labrys@useres.noreply.github.com>
Date: Sat, 7 Nov 2015 20:30:56 -0500
Subject: [PATCH 126/215] PEP 263: Add encoding declaration

---
 sickbeard/metadata/__init__.py | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/sickbeard/metadata/__init__.py b/sickbeard/metadata/__init__.py
index 51db601f3..aa6862f5e 100644
--- a/sickbeard/metadata/__init__.py
+++ b/sickbeard/metadata/__init__.py
@@ -1,3 +1,5 @@
+# coding=utf-8
+
 # Author: Nic Wolfe <nic@wolfeden.ca>
 # URL: http://code.google.com/p/sickbeard/
 #
-- 
GitLab


From 4b1d6a06b7966a180569791613085686a56292c2 Mon Sep 17 00:00:00 2001
From: labrys <labrys@useres.noreply.github.com>
Date: Sat, 7 Nov 2015 20:51:17 -0500
Subject: [PATCH 127/215] Remove unreachable code

---
 sickbeard/metadata/generic.py | 4 ----
 1 file changed, 4 deletions(-)

diff --git a/sickbeard/metadata/generic.py b/sickbeard/metadata/generic.py
index 6af12b5eb..da567762a 100644
--- a/sickbeard/metadata/generic.py
+++ b/sickbeard/metadata/generic.py
@@ -618,8 +618,6 @@ class GenericMetadata(object):
         else:
             return False
 
-        return True
-
     def save_season_banners(self, show_obj, season):
         """
         Saves all season banners to disk for the given show.
@@ -667,8 +665,6 @@ class GenericMetadata(object):
         else:
             return False
 
-        return True
-
     def save_season_all_poster(self, show_obj, which=None):
         # use the default season all poster name
         poster_path = self.get_season_all_poster_path(show_obj)
-- 
GitLab


From 0111c52efc360613d16b4b11bb35f3c876ab6e96 Mon Sep 17 00:00:00 2001
From: labrys <labrys@useres.noreply.github.com>
Date: Sat, 7 Nov 2015 20:49:51 -0500
Subject: [PATCH 128/215] PEP 8: Refactor variables that shadow built-in names

---
 sickbeard/metadata/generic.py | 16 ++++++++--------
 1 file changed, 8 insertions(+), 8 deletions(-)

diff --git a/sickbeard/metadata/generic.py b/sickbeard/metadata/generic.py
index da567762a..7a252b02a 100644
--- a/sickbeard/metadata/generic.py
+++ b/sickbeard/metadata/generic.py
@@ -965,7 +965,7 @@ class GenericMetadata(object):
 
         return (indexer_id, name, indexer)
 
-    def _retrieve_show_images_from_tmdb(self, show, type):
+    def _retrieve_show_images_from_tmdb(self, show, img_type):
         types = {'poster': 'poster_path',
                  'banner': None,
                  'fanart': 'backdrop_path',
@@ -988,15 +988,15 @@ class GenericMetadata(object):
             search = tmdb.Search()
             for show_name in set(allPossibleShowNames(show)):
                 for result in search.collection({'query': show_name})['results'] + search.tv({'query': show_name})['results']:
-                    if types[type] and getattr(result, types[type]):
-                        return "{0}{1}{2}".format(base_url, max_size, result[types[type]])
+                    if types[img_type] and getattr(result, types[img_type]):
+                        return "{0}{1}{2}".format(base_url, max_size, result[types[img_type]])
 
         except Exception:
             pass
 
-        logger.log(u"Could not find any " + type + " images on TMDB for " + show.name, logger.INFO)
+        logger.log(u"Could not find any " + img_type + " images on TMDB for " + show.name, logger.INFO)
 
-    def _retrieve_show_images_from_fanart(self, show, type, thumb=False):
+    def _retrieve_show_images_from_fanart(self, show, img_type, thumb=False):
         types = {
             'poster': fanart.TYPE.TV.POSTER,
             'banner': fanart.TYPE.TV.BANNER,
@@ -1012,17 +1012,17 @@ class GenericMetadata(object):
                     apikey=sickbeard.FANART_API_KEY,
                     id=indexerid,
                     ws=fanart.WS.TV,
-                    type=types[type],
+                    type=types[img_type],
                     sort=fanart.SORT.POPULAR,
                     limit=fanart.LIMIT.ONE,
                 )
 
                 resp = request.response()
-                url = resp[types[type]][0]['url']
+                url = resp[types[img_type]][0]['url']
                 if thumb:
                     url = re.sub('/fanart/', '/preview/', url)
                 return url
         except Exception:
             pass
 
-        logger.log(u"Could not find any " + type + " images on Fanart.tv for " + show.name, logger.INFO)
+        logger.log(u"Could not find any " + img_type + " images on Fanart.tv for " + show.name, logger.INFO)
-- 
GitLab


From 3257c713d32d6e59b97db5f6536294352569ad94 Mon Sep 17 00:00:00 2001
From: labrys <labrys@useres.noreply.github.com>
Date: Sat, 7 Nov 2015 20:38:02 -0500
Subject: [PATCH 129/215] PEP 8: Convert None comparisons from operators to 'is
 / is not None'

---
 sickbeard/metadata/generic.py | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/sickbeard/metadata/generic.py b/sickbeard/metadata/generic.py
index 7a252b02a..3a96dac67 100644
--- a/sickbeard/metadata/generic.py
+++ b/sickbeard/metadata/generic.py
@@ -139,21 +139,21 @@ class GenericMetadata(object):
 
     def _has_episode_thumb(self, ep_obj):
         location = self.get_episode_thumb_path(ep_obj)
-        result = location != None and ek(os.path.isfile, location)
+        result = location is not None and ek(os.path.isfile, location)
         if location:
             logger.log(u"Checking if " + location + " exists: " + str(result), logger.DEBUG)
         return result
 
     def _has_season_poster(self, show_obj, season):
         location = self.get_season_poster_path(show_obj, season)
-        result = location != None and ek(os.path.isfile, location)
+        result = location is not None and ek(os.path.isfile, location)
         if location:
             logger.log(u"Checking if " + location + " exists: " + str(result), logger.DEBUG)
         return result
 
     def _has_season_banner(self, show_obj, season):
         location = self.get_season_banner_path(show_obj, season)
-        result = location != None and ek(os.path.isfile, location)
+        result = location is not None and ek(os.path.isfile, location)
         if location:
             logger.log(u"Checking if " + location + " exists: " + str(result), logger.DEBUG)
         return result
@@ -928,15 +928,15 @@ class GenericMetadata(object):
             with open(metadata_path, 'r') as xmlFileObj:
                 showXML = etree.ElementTree(file=xmlFileObj)
 
-            if showXML.findtext('title') == None or (showXML.findtext('tvdbid') == None and showXML.findtext('id') == None):
+            if showXML.findtext('title') is None or (showXML.findtext('tvdbid') is None and showXML.findtext('id') is None):
                 logger.log(u"Invalid info in tvshow.nfo (missing name or id): %s %s %s" % (showXML.findtext('title'), showXML.findtext('tvdbid'), showXML.findtext('id')))
                 return empty_return
 
             name = showXML.findtext('title')
 
-            if showXML.findtext('tvdbid') != None:
+            if showXML.findtext('tvdbid') is not None:
                 indexer_id = int(showXML.findtext('tvdbid'))
-            elif showXML.findtext('id') != None:
+            elif showXML.findtext('id') is not None:
                 indexer_id = int(showXML.findtext('id'))
             else:
                 logger.log(u"Empty <id> or <tvdbid> field in NFO, unable to find a ID", logger.WARNING)
@@ -947,7 +947,7 @@ class GenericMetadata(object):
                 return empty_return
 
             indexer = None
-            if showXML.find('episodeguide/url') != None:
+            if showXML.find('episodeguide/url') is not None:
                 epg_url = showXML.findtext('episodeguide/url').lower()
                 if str(indexer_id) in epg_url:
                     if 'thetvdb.com' in epg_url:
-- 
GitLab


From cc473f831d52e149bbeab0b63b72121eb0ee0f33 Mon Sep 17 00:00:00 2001
From: labrys <labrys@useres.noreply.github.com>
Date: Sat, 7 Nov 2015 20:34:12 -0500
Subject: [PATCH 130/215] PEP 8: Add and remove blank lines for consistency

---
 sickbeard/metadata/generic.py | 1 -
 1 file changed, 1 deletion(-)

diff --git a/sickbeard/metadata/generic.py b/sickbeard/metadata/generic.py
index 3a96dac67..ea788b136 100644
--- a/sickbeard/metadata/generic.py
+++ b/sickbeard/metadata/generic.py
@@ -956,7 +956,6 @@ class GenericMetadata(object):
                         logger.log(u"Invalid Indexer ID (" + str(indexer_id) + "), not using metadata file because it has TVRage info", logger.WARNING)
                         return empty_return
 
-
         except Exception, e:
             logger.log(
                 u"There was an error parsing your existing metadata file: '" + metadata_path + "' error: " + ex(e),
-- 
GitLab


From 3248c589893e32479be4219586b7a5005614032a Mon Sep 17 00:00:00 2001
From: labrys <labrys@useres.noreply.github.com>
Date: Sat, 7 Nov 2015 20:33:53 -0500
Subject: [PATCH 131/215] PEP 263: Add encoding declaration

---
 sickbeard/metadata/generic.py | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/sickbeard/metadata/generic.py b/sickbeard/metadata/generic.py
index ea788b136..7cb75a4e6 100644
--- a/sickbeard/metadata/generic.py
+++ b/sickbeard/metadata/generic.py
@@ -1,3 +1,5 @@
+# coding=utf-8
+
 # Author: Nic Wolfe <nic@wolfeden.ca>
 # URL: http://code.google.com/p/sickbeard/
 #
-- 
GitLab


From 609e6d329b1314c5de4d761cdbcfc3523dc6b3b7 Mon Sep 17 00:00:00 2001
From: labrys <labrys@useres.noreply.github.com>
Date: Sat, 7 Nov 2015 20:50:20 -0500
Subject: [PATCH 132/215] Remove redundant parentheses

---
 sickbeard/metadata/generic.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/sickbeard/metadata/generic.py b/sickbeard/metadata/generic.py
index 7cb75a4e6..a49389f01 100644
--- a/sickbeard/metadata/generic.py
+++ b/sickbeard/metadata/generic.py
@@ -964,7 +964,7 @@ class GenericMetadata(object):
                 logger.WARNING)
             return empty_return
 
-        return (indexer_id, name, indexer)
+        return indexer_id, name, indexer
 
     def _retrieve_show_images_from_tmdb(self, show, img_type):
         types = {'poster': 'poster_path',
-- 
GitLab


From e51ec7aba475078b24ec2a6cb0118ada7ffa9431 Mon Sep 17 00:00:00 2001
From: labrys <labrys@useres.noreply.github.com>
Date: Sat, 7 Nov 2015 21:58:39 -0500
Subject: [PATCH 133/215] PEP 8: Remove unused variable

---
 sickbeard/metadata/helpers.py | 2 --
 1 file changed, 2 deletions(-)

diff --git a/sickbeard/metadata/helpers.py b/sickbeard/metadata/helpers.py
index 6f3eb3ff4..fb3e9f0df 100644
--- a/sickbeard/metadata/helpers.py
+++ b/sickbeard/metadata/helpers.py
@@ -22,8 +22,6 @@ import requests
 
 meta_session = requests.Session()
 def getShowImage(url, imgNum=None):
-    image_data = None  # @UnusedVariable
-
     if url == None:
         return None
 
-- 
GitLab


From 922f763a5b38b8da1f28765997164f941e43e766 Mon Sep 17 00:00:00 2001
From: labrys <labrys@useres.noreply.github.com>
Date: Sat, 7 Nov 2015 21:59:13 -0500
Subject: [PATCH 134/215] PEP 8: Convert None comparisons from operators to 'is
 / is not None'

---
 sickbeard/metadata/helpers.py | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/sickbeard/metadata/helpers.py b/sickbeard/metadata/helpers.py
index fb3e9f0df..030509b5e 100644
--- a/sickbeard/metadata/helpers.py
+++ b/sickbeard/metadata/helpers.py
@@ -22,11 +22,11 @@ import requests
 
 meta_session = requests.Session()
 def getShowImage(url, imgNum=None):
-    if url == None:
+    if url is None:
         return None
 
     # if they provided a fanart number try to use it instead
-    if imgNum != None:
+    if imgNum is not None:
         tempURL = url.split('-')[0] + "-" + str(imgNum) + ".jpg"
     else:
         tempURL = url
-- 
GitLab


From 5c987505a11f424539911c320c315dff2cb614ff Mon Sep 17 00:00:00 2001
From: labrys <labrys@useres.noreply.github.com>
Date: Sat, 7 Nov 2015 21:59:47 -0500
Subject: [PATCH 135/215] PEP 8: Add and remove whitespace and blank lines

---
 sickbeard/metadata/helpers.py | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/sickbeard/metadata/helpers.py b/sickbeard/metadata/helpers.py
index 030509b5e..c49361ccb 100644
--- a/sickbeard/metadata/helpers.py
+++ b/sickbeard/metadata/helpers.py
@@ -21,6 +21,8 @@ from sickbeard import logger
 import requests
 
 meta_session = requests.Session()
+
+
 def getShowImage(url, imgNum=None):
     if url is None:
         return None
-- 
GitLab


From 9862ebad4dd2e1872b99f53b615e1a1ecd7bcf52 Mon Sep 17 00:00:00 2001
From: labrys <labrys@useres.noreply.github.com>
Date: Sat, 7 Nov 2015 22:00:12 -0500
Subject: [PATCH 136/215] PEP 263: Add encoding declaration

---
 sickbeard/metadata/helpers.py | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/sickbeard/metadata/helpers.py b/sickbeard/metadata/helpers.py
index c49361ccb..e93cbd11c 100644
--- a/sickbeard/metadata/helpers.py
+++ b/sickbeard/metadata/helpers.py
@@ -1,3 +1,5 @@
+# coding=utf-8
+
 # Author: Nic Wolfe <nic@wolfeden.ca>
 # URL: http://code.google.com/p/sickbeard/
 #
-- 
GitLab


From bce75e5adacca952c15813c5754c310cdbb05ff8 Mon Sep 17 00:00:00 2001
From: labrys <labrys@useres.noreply.github.com>
Date: Sat, 7 Nov 2015 22:04:09 -0500
Subject: [PATCH 137/215] Remove redundant parentheses

---
 sickbeard/metadata/ps3.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/sickbeard/metadata/ps3.py b/sickbeard/metadata/ps3.py
index 6dbeab00e..7da393375 100644
--- a/sickbeard/metadata/ps3.py
+++ b/sickbeard/metadata/ps3.py
@@ -77,7 +77,7 @@ class PS3Metadata(generic.GenericMetadata):
     # Override with empty methods for unsupported features
     def retrieveShowMetadata(self, folder):
         # no show metadata generated, we abort this lookup function
-        return (None, None, None)
+        return None, None, None
 
     def create_show_metadata(self, show_obj):
         pass
-- 
GitLab


From ef71f193d15e6aeee851e24fa552893138f90dd0 Mon Sep 17 00:00:00 2001
From: labrys <labrys@useres.noreply.github.com>
Date: Sat, 7 Nov 2015 22:04:45 -0500
Subject: [PATCH 138/215] PEP 263: Add encoding declaration

---
 sickbeard/metadata/ps3.py | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/sickbeard/metadata/ps3.py b/sickbeard/metadata/ps3.py
index 7da393375..e11da1389 100644
--- a/sickbeard/metadata/ps3.py
+++ b/sickbeard/metadata/ps3.py
@@ -1,3 +1,5 @@
+# coding=utf-8
+
 # Author: Nic Wolfe <nic@wolfeden.ca>
 # URL: http://code.google.com/p/sickbeard/
 #
-- 
GitLab


From c675674cea4bf6a7d2f72cfaa376369ca9bde19b Mon Sep 17 00:00:00 2001
From: labrys <labrys@useres.noreply.github.com>
Date: Sat, 7 Nov 2015 22:07:42 -0500
Subject: [PATCH 139/215] Remove redundant parentheses

---
 sickbeard/metadata/tivo.py | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/sickbeard/metadata/tivo.py b/sickbeard/metadata/tivo.py
index 228254a3f..e31ddf056 100644
--- a/sickbeard/metadata/tivo.py
+++ b/sickbeard/metadata/tivo.py
@@ -84,7 +84,7 @@ class TIVOMetadata(generic.GenericMetadata):
     # Override with empty methods for unsupported features
     def retrieveShowMetadata(self, folder):
         # no show metadata generated, we abort this lookup function
-        return (None, None, None)
+        return None, None, None
 
     def create_show_metadata(self, show_obj):
         pass
@@ -224,7 +224,7 @@ class TIVOMetadata(generic.GenericMetadata):
             # after the episode's title and before the description on the Program screen.
 
             # FIXME: Hardcode isEpisode to true for now, not sure how to handle movies
-            data += ("isEpisode : true\n")
+            data += "isEpisode : true\n"
 
             # Write the synopsis of the video here
             # Micrsoft Word's smartquotes can die in a fire.
-- 
GitLab


From f4f5f55ebeac9b3d2b645e5033ecb5fe8cb77d65 Mon Sep 17 00:00:00 2001
From: labrys <labrys@useres.noreply.github.com>
Date: Sat, 7 Nov 2015 22:13:50 -0500
Subject: [PATCH 140/215] Remove redundant parentheses

---
 sickbeard/metadata/wdtv.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/sickbeard/metadata/wdtv.py b/sickbeard/metadata/wdtv.py
index 7dfa88f7d..5eafd5057 100644
--- a/sickbeard/metadata/wdtv.py
+++ b/sickbeard/metadata/wdtv.py
@@ -93,7 +93,7 @@ class WDTVMetadata(generic.GenericMetadata):
     # Override with empty methods for unsupported features
     def retrieveShowMetadata(self, folder):
         # no show metadata generated, we abort this lookup function
-        return (None, None, None)
+        return None, None, None
 
     def create_show_metadata(self, show_obj):
         pass
-- 
GitLab


From 4a7e8d111e7d43213c3035db22ea883db67a7aab Mon Sep 17 00:00:00 2001
From: labrys <labrys@useres.noreply.github.com>
Date: Sat, 7 Nov 2015 22:14:18 -0500
Subject: [PATCH 141/215] PEP 263: Add encoding declaration

---
 sickbeard/metadata/wdtv.py | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/sickbeard/metadata/wdtv.py b/sickbeard/metadata/wdtv.py
index 5eafd5057..03310c80c 100644
--- a/sickbeard/metadata/wdtv.py
+++ b/sickbeard/metadata/wdtv.py
@@ -1,3 +1,5 @@
+# coding=utf-8
+
 # Author: Nic Wolfe <nic@wolfeden.ca>
 # URL: http://code.google.com/p/sickbeard/
 #
-- 
GitLab


From 6edd83d493bf2c6fe70b1d047ac862d935bf9032 Mon Sep 17 00:00:00 2001
From: labrys <labrys@useres.noreply.github.com>
Date: Sat, 7 Nov 2015 22:11:20 -0500
Subject: [PATCH 142/215] PEP 8: Add and remove whitespace and blank lines

---
 sickbeard/metadata/tivo.py | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/sickbeard/metadata/tivo.py b/sickbeard/metadata/tivo.py
index e31ddf056..5d46cd9b7 100644
--- a/sickbeard/metadata/tivo.py
+++ b/sickbeard/metadata/tivo.py
@@ -232,8 +232,7 @@ class TIVOMetadata(generic.GenericMetadata):
             # Replace double curly quotes
             sanitizedDescription = sanitizedDescription.replace(u"\u201c", "\"").replace(u"\u201d", "\"")
             # Replace single curly quotes
-            sanitizedDescription = sanitizedDescription.replace(u"\u2018", "'").replace(u"\u2019", "'").replace(
-                u"\u02BC", "'")
+            sanitizedDescription = sanitizedDescription.replace(u"\u2018", "'").replace(u"\u2019", "'").replace(u"\u02BC", "'")
 
             data += ("description : " + sanitizedDescription + "\n")
 
-- 
GitLab


From b2b842bb35d919ef3e68a14d7e94142e65f42a59 Mon Sep 17 00:00:00 2001
From: labrys <labrys@useres.noreply.github.com>
Date: Sat, 7 Nov 2015 22:08:20 -0500
Subject: [PATCH 143/215] PEP 263: Add encoding declaration

---
 sickbeard/metadata/tivo.py | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/sickbeard/metadata/tivo.py b/sickbeard/metadata/tivo.py
index 5d46cd9b7..15420bb73 100644
--- a/sickbeard/metadata/tivo.py
+++ b/sickbeard/metadata/tivo.py
@@ -1,3 +1,5 @@
+# coding=utf-8
+
 # Author: Nic Wolfe <nic@wolfeden.ca>
 # Author: Gordon Turner <gordonturner@gordonturner.ca>
 # URL: http://code.google.com/p/sickbeard/
-- 
GitLab


From 641754cc91329954c339403ac8db9039ec1c11d0 Mon Sep 17 00:00:00 2001
From: Alexis Tyler <xo@wvvw.me>
Date: Sun, 8 Nov 2015 13:56:39 +1030
Subject: [PATCH 144/215] add extra globals

---
 .jshintrc | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/.jshintrc b/.jshintrc
index a0611d71d..1509de9ae 100644
--- a/.jshintrc
+++ b/.jshintrc
@@ -25,6 +25,8 @@
         "isMeta": true,
         "generate_bwlist": true,
         "_": true,
-        "bootbox": true
+        "bootbox": true,
+        "PNotify": true,
+        "anonURL": true
     }
 }
-- 
GitLab


From 03a781c52eae9e2fb5f9df23422ce024aed55385 Mon Sep 17 00:00:00 2001
From: Alexis Tyler <xo@wvvw.me>
Date: Sun, 8 Nov 2015 13:56:54 +1030
Subject: [PATCH 145/215] linted js files

---
 gui/slick/js/addExistingShow.js |  14 +--
 gui/slick/js/ajaxEpSearch.js    | 173 ++++++++++++++++----------------
 gui/slick/js/ajaxEpSubtitles.js |  48 ++++-----
 gui/slick/js/configProviders.js | 151 +++++++++++++---------------
 4 files changed, 185 insertions(+), 201 deletions(-)

diff --git a/gui/slick/js/addExistingShow.js b/gui/slick/js/addExistingShow.js
index 851628a09..150b5a158 100644
--- a/gui/slick/js/addExistingShow.js
+++ b/gui/slick/js/addExistingShow.js
@@ -1,5 +1,4 @@
 $(document).ready(function() {
-
     $('#tableDiv').on('click', '#checkAll', function() {
         var seasCheck = this;
         $('.dirCheck').each(function() {
@@ -9,7 +8,7 @@ $(document).ready(function() {
 
     $('#submitShowDirs').click(function() {
         var dirArr = [];
-        $('.dirCheck').each(function(i,w) {
+        $('.dirCheck').each(function() {
             if (this.checked === true) {
                 var show = $(this).attr('id');
                 var indexer = $(this).closest('tr').find('select').val();
@@ -21,10 +20,7 @@ $(document).ready(function() {
             return false;
         }
 
-        url = srRoot + '/home/addShows/addExistingShows?promptForSettings=' + ($('#promptForSettings').prop('checked') ? 'on' : 'off');
-        url += '&shows_to_add=' + dirArr.join('&shows_to_add=');
-
-        window.location.href = url;
+        window.location.href = srRoot + '/home/addShows/addExistingShows?promptForSettings=' + ($('#promptForSettings').prop('checked') ? 'on' : 'off') + '&shows_to_add=' + dirArr.join('&shows_to_add=');
     });
 
 
@@ -52,12 +48,12 @@ $(document).ready(function() {
         });
     }
 
-    var last_txt = '';
+    var lastTxt = '';
     $('#rootDirText').change(function() {
-        if (last_txt == $('#rootDirText').val()) {
+        if (lastTxt === $('#rootDirText').val()) {
             return false;
         } else {
-            last_txt = $('#rootDirText').val();
+            lastTxt = $('#rootDirText').val();
         }
         $('#rootDirStaticList').html('');
         $('#rootDirs option').each(function(i, w) {
diff --git a/gui/slick/js/ajaxEpSearch.js b/gui/slick/js/ajaxEpSearch.js
index 6c01dcfd1..ff66ca7c7 100644
--- a/gui/slick/js/ajaxEpSearch.js
+++ b/gui/slick/js/ajaxEpSearch.js
@@ -1,4 +1,4 @@
-var search_status_url = srRoot + '/home/getManualSearchStatus';
+var searchStatusUrl = srRoot + '/home/getManualSearchStatus';
 var failedDownload = false;
 var qualityDownload = false;
 var selectedEpisode = '';
@@ -6,32 +6,16 @@ PNotify.prototype.options.maxonscreen = 5;
 
 $.fn.manualSearches = [];
 
-function check_manual_searches() {
-    var poll_interval = 5000;
-    showId = $('#showID').val();
-    var url = showId !== undefined ? search_status_url + '?show=' + showId : search_status_url ;
-    $.ajax({
-        url: url,
-        success: function (data) {
-            if (data.episodes) {
-                poll_interval = 5000;
-            } else {
-                poll_interval = 15000;
-            }
+function enableLink(el) {
+    el.on('click.disabled', false);
+    el.prop('enableClick', '1');
+    el.fadeTo("fast", 1);
+}
 
-            updateImages(data);
-            //cleanupManualSearches(data);
-        },
-        error: function () {
-            poll_interval = 30000;
-        },
-        type: "GET",
-        dataType: "json",
-        complete: function () {
-            setTimeout(check_manual_searches, poll_interval);
-        },
-        timeout: 15000 // timeout every 15 secs
-    });
+function disableLink(el) {
+    el.off('click.disabled');
+    el.prop('enableClick', '0');
+    el.fadeTo("fast", 0.5);
 }
 
 function updateImages(data) {
@@ -40,14 +24,14 @@ function updateImages(data) {
         var loadingImage = 'loading16.gif';
         var queuedImage = 'queued.png';
         var searchImage = 'search16.png';
-        var status = null;
+        var htmlContent = '';
         //Try to get the <a> Element
-        el=$('a[id=' + ep.show + 'x' + ep.season + 'x' + ep.episode+']');
-        img=el.children('img');
-        parent=el.parent();
+        var el = $('a[id=' + ep.show + 'x' + ep.season + 'x' + ep.episode+']');
+        var img = el.children('img');
+        var parent = el.parent();
         if (el) {
             var rSearchTerm = '';
-            if (ep.searchstatus == 'searching') {
+            if (ep.searchstatus.toLowerCase() === 'searching') {
                 //el=$('td#' + ep.season + 'x' + ep.episode + '.search img');
                 img.prop('title','Searching');
                 img.prop('alt','Searching');
@@ -55,16 +39,16 @@ function updateImages(data) {
                 disableLink(el);
                 // Update Status and Quality
                 rSearchTerm = /(\w+)\s\((.+?)\)/;
-                HtmlContent = ep.searchstatus;
+                htmlContent = ep.searchstatus;
 
-            } else if (ep.searchstatus == 'queued') {
+            } else if (ep.searchstatus.toLowerCase() === 'queued') {
                 //el=$('td#' + ep.season + 'x' + ep.episode + '.search img');
                 img.prop('title','Queued');
                 img.prop('alt','queued');
                 img.prop('src',srRoot+'/images/' + queuedImage );
                 disableLink(el);
-                HtmlContent = ep.searchstatus;
-            } else if (ep.searchstatus == 'finished') {
+                htmlContent = ep.searchstatus;
+            } else if (ep.searchstatus.toLowerCase() === 'finished') {
                 //el=$('td#' + ep.season + 'x' + ep.episode + '.search img');
                 img.prop('title','Searching');
                 img.prop('alt','searching');
@@ -74,54 +58,70 @@ function updateImages(data) {
 
                 // Update Status and Quality
                 rSearchTerm = /(\w+)\s\((.+?)\)/;
-                HtmlContent = ep.status.replace(rSearchTerm,"$1"+' <span class="quality '+ep.quality+'">'+"$2"+'</span>');
+                htmlContent = ep.status.replace(rSearchTerm,"$1"+' <span class="quality '+ep.quality+'">'+"$2"+'</span>');
                 parent.closest('tr').prop("class", ep.overview + " season-" + ep.season + " seasonstyle");
             }
             // update the status column if it exists
-            parent.siblings('.col-status').html(HtmlContent);
+            parent.siblings('.col-status').html(htmlContent);
 
         }
-        el_comEps=$('a[id=forceUpdate-' + ep.show + 'x' + ep.season + 'x' + ep.episode+']');
-        img_comEps=el_comEps.children('img');
-        if (el_comEps) {
-            if (ep.searchstatus == 'searching') {
-                img_comEps.prop('title','Searching');
-                img_comEps.prop('alt','Searching');
-                img_comEps.prop('src',srRoot+'/images/' + loadingImage);
-                disableLink(el_comEps);
-            } else if (ep.searchstatus == 'queued') {
-                img_comEps.prop('title','Queued');
-                img_comEps.prop('alt','queued');
-                img_comEps.prop('src',srRoot+'/images/' + queuedImage );
-            } else if (ep.searchstatus == 'finished') {
-                img_comEps.prop('title','Manual Search');
-                img_comEps.prop('alt','[search]');
-                img_comEps.prop('src',srRoot+'/images/' + searchImage);
-                if (ep.overview == 'snatched') {
-                    el_comEps.closest('tr').remove();
+        var elementCompleteEpisodes = $('a[id=forceUpdate-' + ep.show + 'x' + ep.season + 'x' + ep.episode+']');
+        var imageCompleteEpisodes = elementCompleteEpisodes.children('img');
+        if (elementCompleteEpisodes) {
+            if (ep.searchstatus.toLowerCase() === 'searching') {
+                imageCompleteEpisodes.prop('title','Searching');
+                imageCompleteEpisodes.prop('alt','Searching');
+                imageCompleteEpisodes.prop('src',srRoot+'/images/' + loadingImage);
+                disableLink(elementCompleteEpisodes);
+            } else if (ep.searchstatus.toLowerCase() === 'queued') {
+                imageCompleteEpisodes.prop('title','Queued');
+                imageCompleteEpisodes.prop('alt','queued');
+                imageCompleteEpisodes.prop('src',srRoot+'/images/' + queuedImage );
+            } else if (ep.searchstatus.toLowerCase() === 'finished') {
+                imageCompleteEpisodes.prop('title','Manual Search');
+                imageCompleteEpisodes.prop('alt','[search]');
+                imageCompleteEpisodes.prop('src',srRoot+'/images/' + searchImage);
+                if (ep.overview.toLowerCase() === 'snatched') {
+                    elementCompleteEpisodes.closest('tr').remove();
                 } else {
-                    enableLink(el_comEps);
+                    enableLink(elementCompleteEpisodes);
                 }
             }
         }
     });
 }
 
-$(document).ready(function () {
-    check_manual_searches();
-});
+function checkManualSearches() {
+    var pollInterval = 5000;
+    var showId = $('#showID').val();
+    var url = showId !== undefined ? searchStatusUrl + '?show=' + showId : searchStatusUrl ;
+    $.ajax({
+        url: url,
+        success: function (data) {
+            if (data.episodes) {
+                pollInterval = 5000;
+            } else {
+                pollInterval = 15000;
+            }
 
-function enableLink(el) {
-    el.on('click.disabled', false);
-    el.prop('enableClick', '1');
-    el.fadeTo("fast", 1);
+            updateImages(data);
+            //cleanupManualSearches(data);
+        },
+        error: function () {
+            pollInterval = 30000;
+        },
+        type: "GET",
+        dataType: "json",
+        complete: function () {
+            setTimeout(checkManualSearches, pollInterval);
+        },
+        timeout: 15000 // timeout every 15 secs
+    });
 }
 
-function disableLink(el) {
-    el.off('click.disabled');
-    el.prop('enableClick', '0');
-    el.fadeTo("fast", 0.5);
-}
+$(document).ready(function () {
+    checkManualSearches();
+});
 
 (function(){
     $.ajaxEpSearch = {
@@ -142,7 +142,7 @@ function disableLink(el) {
             event.preventDefault();
 
             // Check if we have disabled the click
-            if($(this).prop('enableClick') == '0') return false;
+            if($(this).prop('enableClick') === '0') { return false; }
 
             selectedEpisode = $(this);
 
@@ -153,7 +153,7 @@ function disableLink(el) {
             event.preventDefault();
 
             // Check if we have disabled the click
-            if ($(this).prop('enableClick') == '0') return false;
+            if ($(this).prop('enableClick') === '0') { return false; }
 
             selectedEpisode = $(this);
 
@@ -165,23 +165,25 @@ function disableLink(el) {
         });
 
         $('#manualSearchModalFailed .btn').click(function(){
-            failedDownload = ($(this).text() == 'Yes');
+            failedDownload = ($(this).text().toLowerCase() === 'yes');
             $("#manualSearchModalQuality").modal('show');
         });
 
         $('#manualSearchModalQuality .btn').click(function(){
-            qualityDownload = ($(this).text() == 'Yes');
+            qualityDownload = ($(this).text().toLowerCase() === 'yes');
             manualSearch();
         });
 
         function manualSearch(){
+            var imageName, imageResult, htmlContent;
+
             var parent = selectedEpisode.parent();
 
             // Create var for anchor
-            link = selectedEpisode;
+            var link = selectedEpisode;
 
             // Create var for img under anchor and set options for the loading gif
-            img=selectedEpisode.children('img');
+            var img = selectedEpisode.children('img');
             img.prop('title','loading');
             img.prop('alt','');
             img.prop('src',srRoot+'/images/' + options.loadingImage);
@@ -197,31 +199,32 @@ function disableLink(el) {
             $.getJSON(url, function(data){
 
                 // if they failed then just put the red X
-                if (data.result == 'failure') {
-                    img_name = options.noImage;
-                    img_result = 'failed';
+                if (data.result.toLowerCase() === 'failure') {
+                    imageName = options.noImage;
+                    imageResult = 'failed';
 
                 // if the snatch was successful then apply the corresponding class and fill in the row appropriately
                 } else {
-                    img_name = options.loadingImage;
-                    img_result = 'success';
+                    imageName = options.loadingImage;
+                    imageResult = 'success';
                     // color the row
-                    if (options.colorRow)
+                    if (options.colorRow) {
                         parent.parent().removeClass('skipped wanted qual good unaired').addClass('snatched');
+                    }
                     // applying the quality class
                     var rSearchTerm = /(\w+)\s\((.+?)\)/;
-                        HtmlContent = data.result.replace(rSearchTerm,"$1"+' <span class="quality '+data.quality+'">'+"$2"+'</span>');
+                        htmlContent = data.result.replace(rSearchTerm,"$1"+' <span class="quality '+data.quality+'">'+"$2"+'</span>');
                     // update the status column if it exists
-                    parent.siblings('.col-status').html(HtmlContent);
+                    parent.siblings('.col-status').html(htmlContent);
                     // Only if the queuing was successful, disable the onClick event of the loading image
                     disableLink(link);
                 }
 
                 // put the corresponding image as the result of queuing of the manual search
-                img.prop('title',img_result);
-                img.prop('alt',img_result);
+                img.prop('title', imageResult);
+                img.prop('alt', imageResult);
                 img.prop('height', options.size);
-                img.prop('src',srRoot+"/images/"+img_name);
+                img.prop('src', srRoot+"/images/" + imageName);
             });
 
             // don't follow the link
diff --git a/gui/slick/js/ajaxEpSubtitles.js b/gui/slick/js/ajaxEpSubtitles.js
index 241ed7f69..a61499c39 100644
--- a/gui/slick/js/ajaxEpSubtitles.js
+++ b/gui/slick/js/ajaxEpSubtitles.js
@@ -1,29 +1,29 @@
 (function(){
     $.fn.ajaxEpSubtitlesSearch = function(){
         $('.epSubtitlesSearch').click(function(){
-            var subtitles_td = $(this).parent().siblings('.col-subtitles');
-            var subtitles_search_link = $(this);
+            var subtitlesTd = $(this).parent().siblings('.col-subtitles');
+            var subtitlesSearchLink = $(this);
             // fill with the ajax loading gif
-            subtitles_search_link.empty();
-            subtitles_search_link.append($("<img/>").attr({"src": srRoot+"/images/loading16.gif", "alt": "", "title": "loading"}));
+            subtitlesSearchLink.empty();
+            subtitlesSearchLink.append($("<img/>").attr({"src": srRoot+"/images/loading16.gif", "alt": "", "title": "loading"}));
             $.getJSON($(this).attr('href'), function(data){
-                if (data.result != "failure" && data.result != "No subtitles downloaded") {
-                // clear and update the subtitles column with new informations
-                var subtitles = data.subtitles.split(',');
-                subtitles_td.empty();
-                $.each(subtitles,function(index, language){
-                    if (language !== "" && language != "und") {
-                        if (index != subtitles.length - 1) {
-                            subtitles_td.append($("<img/>").attr({"src": srRoot+"/images/subtitles/flags/"+language+".png", "alt": language, "width": 16, "height": 11}));
-                        } else {
-                            subtitles_td.append($("<img/>").attr({"src": srRoot+"/images/subtitles/flags/"+language+".png", "alt": language, "width": 16, "height": 11}));
+                if (data.result.toLowerCase() !== "failure" && data.result.toLowerCase() !== "no subtitles downloaded") {
+                    // clear and update the subtitles column with new informations
+                    var subtitles = data.subtitles.split(',');
+                    subtitlesTd.empty();
+                    $.each(subtitles,function(index, language){
+                        if (language !== "" && language !== "und") {
+                            if (index !== subtitles.length - 1) {
+                                subtitlesTd.append($("<img/>").attr({"src": srRoot+"/images/subtitles/flags/"+language+".png", "alt": language, "width": 16, "height": 11}));
+                            } else {
+                                subtitlesTd.append($("<img/>").attr({"src": srRoot+"/images/subtitles/flags/"+language+".png", "alt": language, "width": 16, "height": 11}));
+                            }
                         }
-                    }
-                });
-                // don't allow other searches
-                subtitles_search_link.remove();
+                    });
+                    // don't allow other searches
+                    subtitlesSearchLink.remove();
                 } else {
-                    subtitles_search_link.remove();
+                    subtitlesSearchLink.remove();
                 }
             });
 
@@ -34,13 +34,13 @@
 
     $.fn.ajaxEpMergeSubtitles = function(){
         $('.epMergeSubtitles').click(function(){
-            var subtitles_merge_link = $(this);
+            var subtitlesMergeLink = $(this);
             // fill with the ajax loading gif
-            subtitles_merge_link.empty();
-            subtitles_merge_link.append($("<img/>").attr({"src": srRoot+"/images/loading16.gif", "alt": "", "title": "loading"}));
-            $.getJSON($(this).attr('href'), function(data){
+            subtitlesMergeLink.empty();
+            subtitlesMergeLink.append($("<img/>").attr({"src": srRoot+"/images/loading16.gif", "alt": "", "title": "loading"}));
+            $.getJSON($(this).attr('href'), function(){
                 // don't allow other merges
-                subtitles_merge_link.remove();
+                subtitlesMergeLink.remove();
             });
             // don't follow the link
             return false;
diff --git a/gui/slick/js/configProviders.js b/gui/slick/js/configProviders.js
index 466df5ceb..4bdce6496 100644
--- a/gui/slick/js/configProviders.js
+++ b/gui/slick/js/configProviders.js
@@ -4,7 +4,7 @@ $(document).ready(function(){
             var providerName = $(this).attr('id');
             var selectedProvider = $('#editAProvider :selected').val();
 
-            if (selectedProvider + 'Div' == providerName) {
+            if (selectedProvider + 'Div' == providerName) { // jshint ignore:line
                 $(this).show();
             } else {
                 $(this).hide();
@@ -24,14 +24,9 @@ $(document).ready(function(){
         var url = selectedProvider[1];
         var key = selectedProvider[2];
 
-        if (!name)
-            return;
-
-        if (!url)
-            return;
-
-        if (!key)
+        if (!name || !url || !key) {
             return;
+        }
 
         var params = {url: url, name: name, key: key};
         var returnData;
@@ -40,22 +35,27 @@ $(document).ready(function(){
         var jqxhr = $.getJSON(srRoot + '/config/providers/getNewznabCategories', params,
                 function(data){
                     $(this).updateNewznabCaps( data, selectedProvider );
-                    console.debug(data.tv_categories);
+                    console.debug(data.tv_categories); // jshint ignore:line
             });
         jqxhr.always(function() {
             $(".updating_categories").empty();
-             });
+         });
     };
 
     $.fn.addProvider = function (id, name, url, key, cat, isDefault, showProvider) {
 
         url = $.trim(url);
-        if (!url)
+        if (!url) {
             return;
+        }
 
-        if (!/^https?:\/\//i.test(url)) url = "http://" + url;
+        if (!/^https?:\/\//i.test(url)) {
+            url = "http://" + url;
+        }
 
-        if (url.match('/$') === null) url = url + '/';
+        if (url.match('/$') === null) {
+            url = url + '/';
+        }
 
         var newData = [isDefault, [name, url, key, cat]];
         newznabProviders[id] = newData;
@@ -94,7 +94,6 @@ $(document).ready(function(){
     };
 
     $.fn.updateProvider = function (id, url, key, cat) {
-
         newznabProviders[id][1][1] = url;
         newznabProviders[id][1][2] = key;
         newznabProviders[id][1][3] = cat;
@@ -102,17 +101,14 @@ $(document).ready(function(){
         $(this).populateNewznabSection();
 
         $(this).makeNewznabProviderString();
-
     };
 
     $.fn.deleteProvider = function (id) {
-
         $('#editANewznabProvider').removeOption(id);
         delete newznabProviders[id];
         $(this).populateNewznabSection();
         $('li').remove('#'+id);
         $(this).makeNewznabProviderString();
-
     };
 
     $.fn.updateTorrentRssProvider = function (id, url, cookies, titleTAG) {
@@ -132,12 +128,11 @@ $(document).ready(function(){
     };
 
     $.fn.populateNewznabSection = function() {
-
         var selectedProvider = $('#editANewznabProvider :selected').val();
         var data = '';
         var isDefault = '';
 
-        if (selectedProvider == 'addNewznab') {
+        if (selectedProvider === 'addNewznab') {
             data = ['','',''];
             isDefault = 0;
             $('#newznab_add_div').show();
@@ -183,16 +178,17 @@ $(document).ready(function(){
         var newCatOptions = [];
         if (rrcat) {
             rrcat.forEach(function (cat) {
-                if (cat !== '') newCatOptions.push({text : cat, value : cat});
+                if (cat !== '') {
+                    newCatOptions.push({text : cat, value : cat});
+                }
             });
             $("#newznab_cat").replaceOptions(newCatOptions);
         }
 
-        if (selectedProvider == 'addNewznab') {
+        if (selectedProvider === 'addNewznab') {
             $('#newznab_name').removeAttr("disabled");
             $('#newznab_url').removeAttr("disabled");
         } else {
-
             $('#newznab_name').attr("disabled", "disabled");
 
             if (isDefault) {
@@ -215,7 +211,7 @@ $(document).ready(function(){
         var found = false;
 
         loopThroughArray.forEach(function(rootObject) {
-            if (rootObject.name == searchFor) {
+            if (rootObject.name === searchFor) {
                 found = true;
             }
             console.log(rootObject.name + " while searching for: "+  searchFor);
@@ -231,24 +227,22 @@ $(document).ready(function(){
      * @return no return data. The multiselect input $("#newznab_cap") is updated, as a result.
      */
     $.fn.updateNewznabCaps = function( newzNabCaps, selectedProvider ) {
-
         if (newzNabCaps && !ifExists($.fn.newznabProvidersCapabilities, selectedProvider[0])) {
-            $.fn.newznabProvidersCapabilities.push({'name' : selectedProvider[0], 'categories' : newzNabCaps.tv_categories});
+            $.fn.newznabProvidersCapabilities.push({'name' : selectedProvider[0], 'categories' : newzNabCaps.tv_categories}); // jshint ignore:line
         }
 
         //Loop through the array and if currently selected newznab provider name matches one in the array, use it to
         //update the capabilities select box (on the left).
         if (selectedProvider[0]) {
             $.fn.newznabProvidersCapabilities.forEach(function(newzNabCap) {
-
-                if (newzNabCap.name && newzNabCap.name == selectedProvider[0] && newzNabCap.categories instanceof Array) {
-                        var newCapOptions = [];
-                        newzNabCap.categories.forEach(function(category_set) {
-                            if (category_set.id && category_set.name) {
-                                newCapOptions.push({value : category_set.id, text : category_set.name + "(" + category_set.id + ")"});
-                            }
-                        });
-                        $("#newznab_cap").replaceOptions(newCapOptions);
+                if (newzNabCap.name && newzNabCap.name === selectedProvider[0] && newzNabCap.categories instanceof Array) {
+                    var newCapOptions = [];
+                    newzNabCap.categories.forEach(function(categorySet) {
+                        if (categorySet.id && categorySet.name) {
+                            newCapOptions.push({value : categorySet.id, text : categorySet.name + "(" + categorySet.id + ")"});
+                        }
+                    });
+                    $("#newznab_cap").replaceOptions(newCapOptions);
                 }
             });
         }
@@ -258,7 +252,9 @@ $(document).ready(function(){
         var provStrings = [];
 
         for (var id in newznabProviders) {
-            provStrings.push(newznabProviders[id][1].join('|'));
+            if (newznabProviders.hasOwnProperty(id)) {
+                provStrings.push(newznabProviders[id][1].join('|'));
+            }
         }
 
         $('#newznab_string').val(provStrings.join('!!!'));
@@ -268,7 +264,7 @@ $(document).ready(function(){
         var selectedProvider = $('#editATorrentRssProvider :selected').val();
         var data = '';
 
-        if (selectedProvider == 'addTorrentRss') {
+        if (selectedProvider === 'addTorrentRss') {
             data = ['','','','title'];
             $('#torrentrss_add_div').show();
             $('#torrentrss_update_div').hide();
@@ -283,7 +279,7 @@ $(document).ready(function(){
         $('#torrentrss_cookies').val(data[2]);
         $('#torrentrss_titleTAG').val(data[3]);
 
-        if (selectedProvider == 'addTorrentRss') {
+        if (selectedProvider === 'addTorrentRss') {
             $('#torrentrss_name').removeAttr("disabled");
             $('#torrentrss_url').removeAttr("disabled");
             $('#torrentrss_cookies').removeAttr("disabled");
@@ -295,13 +291,14 @@ $(document).ready(function(){
             $('#torrentrss_titleTAG').removeAttr("disabled");
             $('#torrentrss_delete').removeAttr("disabled");
         }
-
     };
 
     $.fn.makeTorrentRssProviderString = function() {
         var provStrings = [];
         for (var id in torrentRssProviders) {
-            provStrings.push(torrentRssProviders[id].join('|'));
+            if (obj.hasOwnProperty(id)) {
+                provStrings.push(torrentRssProviders[id].join('|'));
+            }
         }
 
         $('#torrentrss_string').val(provStrings.join('!!!'));
@@ -348,22 +345,22 @@ $(document).ready(function(){
     var torrentRssProviders = [];
 
     $(this).on('change', '.newznab_key', function(){
+        var providerId = $(this).attr('id');
+        providerId = providerId.substring(0, providerId.length-'_hash'.length);
 
-        var provider_id = $(this).attr('id');
-        provider_id = provider_id.substring(0, provider_id.length-'_hash'.length);
-
-        var url = $('#'+provider_id+'_url').val();
-        var cat = $('#'+provider_id+'_cat').val();
+        var url = $('#'+providerId+'_url').val();
+        var cat = $('#'+providerId+'_cat').val();
         var key = $(this).val();
 
-        $(this).updateProvider(provider_id, url, key, cat);
-
+        $(this).updateProvider(providerId, url, key, cat);
     });
 
     $('#newznab_key,#newznab_url').change(function(){
         var selectedProvider = $('#editANewznabProvider :selected').val();
 
-        if (selectedProvider == "addNewznab") return;
+        if (selectedProvider === "addNewznab"){
+             return;
+        }
 
         var url = $('#newznab_url').val();
         var key = $('#newznab_key').val();
@@ -378,7 +375,9 @@ $(document).ready(function(){
     $('#torrentrss_url,#torrentrss_cookies,#torrentrss_titleTAG').change(function(){
         var selectedProvider = $('#editATorrentRssProvider :selected').val();
 
-        if (selectedProvider == "addTorrentRss") return;
+        if (selectedProvider === "addTorrentRss"){
+             return;
+        }
 
         var url = $('#torrentrss_url').val();
         var cookies = $('#torrentrss_cookies').val();
@@ -416,33 +415,32 @@ $(document).ready(function(){
         // When the update botton is clicked, loop through the capabilities list
         // and copy the selected category id's to the category list on the right.
         $("#newznab_cap option:selected").each(function(){
-            var selected_cat = $(this).val();
-            console.debug(selected_cat);
-            newOptions.push({text: selected_cat, value: selected_cat});
+            var selectedCat = $(this).val();
+            console.debug(selectedCat);
+            newOptions.push({text: selectedCat, value: selectedCat});
         });
 
         $("#newznab_cat").replaceOptions(newOptions);
 
         var selectedProvider = $("#editANewznabProvider :selected").val();
-        if (selectedProvider == "addNewznab")
+        if (selectedProvider === "addNewznab"){
             return;
+        }
 
         var url = $('#newznab_url').val();
         var key = $('#newznab_key').val();
 
         var cat = $('#newznab_cat option').map(function(i, opt) {
             return $(opt).text();
-          }).toArray().join(',');
+        }).toArray().join(',');
 
         $("#newznab_cat option:not([value])").remove();
 
         $(this).updateProvider(selectedProvider, url, key, cat);
-
     });
 
 
     $('#newznab_add').click(function(){
-
         var selectedProvider = $('#editANewznabProvider :selected').val();
 
         var name = $.trim($('#newznab_name').val());
@@ -451,17 +449,12 @@ $(document).ready(function(){
         //var cat = $.trim($('#newznab_cat').val());
 
         var cat = $.trim($('#newznab_cat option').map(function(i, opt) {
-              return $(opt).text();}).toArray().join(','));
-
-
-        if (!name)
-            return;
-
-        if (!url)
-            return;
+            return $(opt).text();
+        }).toArray().join(','));
 
-        if (!key)
+        if (!name || !url || !key) {
             return;
+        }
 
         var params = {name: name};
 
@@ -473,7 +466,6 @@ $(document).ready(function(){
             }
             $(this).addProvider(data.success, name, url, key, cat, 0);
         });
-
     });
 
     $('.newznab_delete').click(function(){
@@ -546,22 +538,20 @@ $(document).ready(function(){
         }
     });
 
-    $.fn.makeTorrentOptionString = function(provider_id) {
-
-        var seed_ratio  = $('.providerDiv_tip #'+provider_id+'_seed_ratio').prop('value');
-        var seed_time   = $('.providerDiv_tip #'+provider_id+'_seed_time').prop('value');
-        var process_met = $('.providerDiv_tip #'+provider_id+'_process_method').prop('value');
-        var option_string = $('.providerDiv_tip #'+provider_id+'_option_string');
+    $.fn.makeTorrentOptionString = function(providerId) {
+        var seedRatio  = $('.providerDiv_tip #' + providerId + '_seed_ratio').prop('value');
+        var seedTime   = $('.providerDiv_tip #' + providerId + '_seed_time').prop('value');
+        var processMet = $('.providerDiv_tip #' + providerId + '_process_method').prop('value');
+        var optionString = $('.providerDiv_tip #' + providerId + '_option_string');
 
-        option_string.val([seed_ratio, seed_time, process_met].join('|'));
+        optionString.val([seedRatio, seedTime, processMet].join('|'));
     };
 
     $(this).on('change', '.seed_option', function(){
-        var provider_id = $(this).attr('id').split('_')[0];
-        $(this).makeTorrentOptionString(provider_id);
+        var providerId = $(this).attr('id').split('_')[0];
+        $(this).makeTorrentOptionString(providerId);
     });
 
-
     $.fn.replaceOptions = function(options) {
         var self, $option;
 
@@ -569,16 +559,12 @@ $(document).ready(function(){
         self = this;
 
         $.each(options, function(index, option) {
-          $option = $("<option></option>")
-            .attr("value", option.value)
-            .text(option.text);
-          self.append($option);
+            $option = $("<option></option>").attr("value", option.value).text(option.text);
+            self.append($option);
         });
-      };
+    };
 
     // initialization stuff
-
-
     $.fn.newznabProvidersCapabilities = [];
 
     $(this).showHideProviders();
@@ -595,5 +581,4 @@ $(document).ready(function(){
     if ($('#editANewznabProvider').length) {
         $(this).populateNewznabSection();
     }
-
 });
-- 
GitLab


From 8c60b698794ae7feeb828c2c8eebb326d5df7855 Mon Sep 17 00:00:00 2001
From: Alexis Tyler <xo@wvvw.me>
Date: Sun, 8 Nov 2015 13:57:10 +1030
Subject: [PATCH 146/215] linted mako

---
 gui/slick/views/layouts/main.mako | 13 ++++++-------
 1 file changed, 6 insertions(+), 7 deletions(-)

diff --git a/gui/slick/views/layouts/main.mako b/gui/slick/views/layouts/main.mako
index 4dbb89fe3..4f31742ee 100644
--- a/gui/slick/views/layouts/main.mako
+++ b/gui/slick/views/layouts/main.mako
@@ -85,13 +85,12 @@
         <link rel="stylesheet" type="text/css" href="${srRoot}/css/style.css?${sbPID}"/>
         <link rel="stylesheet" type="text/css" href="${srRoot}/css/${sickbeard.THEME_NAME}.css?${sbPID}" />
         <link rel="stylesheet" type="text/css" href="${srRoot}/css/print.css?${sbPID}" />
-        % if sbLogin:
+        % if srLogin:
         <link rel="stylesheet" type="text/css" href="${srRoot}/css/lib/pnotify.custom.min.css?${sbPID}" />
         <link rel="stylesheet" type="text/css" href="${srRoot}/css/country-flags.css?${sbPID}"/>
         % endif
         <%block name="css" />
     </head>
-
     <body>
         <nav class="navbar navbar-default navbar-fixed-top hidden-print" role="navigation">
             <div class="container-fluid">
@@ -105,7 +104,7 @@
                     <a class="navbar-brand" href="${srRoot}/home/" title="SickRage"><img alt="SickRage" src="${srRoot}/images/sickrage.png" style="height: 50px;" class="img-responsive pull-left" /></a>
                 </div>
 
-            % if sbLogin:
+            % if srLogin:
                 <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
                     <ul class="nav navbar-nav navbar-right">
                         <li id="NAVhome" class="navbar-split dropdown${('', ' active')[topmenu == 'home']}">
@@ -223,7 +222,7 @@
                                 <li><a href="${srRoot}/home/updateCheck?pid=${sbPID}"><i class="menu-icon-update"></i>&nbsp;Check For Updates</a></li>
                                 <li><a href="${srRoot}/home/restart/?pid=${sbPID}" class="confirm restart"><i class="menu-icon-restart"></i>&nbsp;Restart</a></li>
                                 <li><a href="${srRoot}/home/shutdown/?pid=${sbPID}" class="confirm shutdown"><i class="menu-icon-shutdown"></i>&nbsp;Shutdown</a></li>
-                                % if sbLogin != True:
+                                % if srLogin != True:
                                     <li><a href="${srRoot}/logout" class="confirm logout"><i class="menu-icon-shutdown"></i>&nbsp;Logout</a></li>
                                 % endif
                                 <li role="separator" class="divider"></li>
@@ -264,13 +263,13 @@
         </div>
         % endif
 
-        % if sickbeard.BRANCH and sickbeard.BRANCH != 'master' and not sickbeard.DEVELOPER and sbLogin:
+        % if sickbeard.BRANCH and sickbeard.BRANCH != 'master' and not sickbeard.DEVELOPER and srLogin:
         <div class="alert alert-danger upgrade-notification hidden-print" role="alert">
             <span>You're using the ${sickbeard.BRANCH} branch. Please use 'master' unless specifically asked</span>
         </div>
         % endif
 
-        % if sickbeard.NEWEST_VERSION_STRING and sbLogin:
+        % if sickbeard.NEWEST_VERSION_STRING and srLogin:
         <div class="alert alert-success upgrade-notification hidden-print" role="alert">
             <span>${sickbeard.NEWEST_VERSION_STRING}</span>
         </div>
@@ -281,7 +280,7 @@
                 <%block name="content" />
             </div> <!-- /content -->
         </div> <!-- /contentWrapper -->
-    % if sbLogin:
+    % if srLogin:
         <footer>
             <div class="footer clearfix">
             <%
-- 
GitLab


From 8c9515e66a26f46c2ddf4aa6df9547b5017e70ca Mon Sep 17 00:00:00 2001
From: Alexis Tyler <xo@wvvw.me>
Date: Sun, 8 Nov 2015 13:58:06 +1030
Subject: [PATCH 147/215] change sbLogin to srLogin

---
 sickbeard/webserve.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/sickbeard/webserve.py b/sickbeard/webserve.py
index a00506ddd..d685ceab7 100644
--- a/sickbeard/webserve.py
+++ b/sickbeard/webserve.py
@@ -118,7 +118,7 @@ class PageTemplate(MakoTemplate):
         self.arguments['sbHandleReverseProxy'] = sickbeard.HANDLE_REVERSE_PROXY
         self.arguments['sbThemeName'] = sickbeard.THEME_NAME
         self.arguments['sbDefaultPage'] = sickbeard.DEFAULT_PAGE
-        self.arguments['sbLogin'] = rh.get_current_user()
+        self.arguments['srLogin'] = rh.get_current_user()
         self.arguments['sbStartTime'] = rh.startTime
 
         if rh.request.headers['Host'][0] == '[':
-- 
GitLab


From 4566d2c8eb37d10d17ef36518fb822bf8f7b126d Mon Sep 17 00:00:00 2001
From: labrys <labrys@useres.noreply.github.com>
Date: Sat, 7 Nov 2015 23:27:20 -0500
Subject: [PATCH 148/215] PEP 8: Convert tabbedindents to spaces

---
 sickbeard/name_parser/regexes.py | 36 ++++++++++++++++----------------
 1 file changed, 18 insertions(+), 18 deletions(-)

diff --git a/sickbeard/name_parser/regexes.py b/sickbeard/name_parser/regexes.py
index 432da8ed1..768ac82be 100644
--- a/sickbeard/name_parser/regexes.py
+++ b/sickbeard/name_parser/regexes.py
@@ -116,7 +116,7 @@ normal_regexes = [
      '''),
 
     ('newpct',
-    # Example: Sobrenatural - Temporada 10 [HDTV][Cap.1023][Espanol Castellano]
+     # Example: Sobrenatural - Temporada 10 [HDTV][Cap.1023][Espanol Castellano]
      r'''
      (?P<series_name>.+?)                      # Showw_Name: "Sobrenatural"
      (?:.-.+\d{1,2}.\[)                        # Separator and junk: " - Temporada 10 ["
@@ -147,7 +147,7 @@ normal_regexes = [
      ((?<![. _-])(?<!WEB)                        # Make sure this is really the release group
      -(?P<release_group>[^- ]+([. _-]\[.*\])?))?)?$              # Group
      '''
-    ),
+     ),
 
     ('no_season_multi_ep',
      # Show.Name.E02-03
@@ -162,7 +162,7 @@ normal_regexes = [
      ((?<![. _-])(?<!WEB)                        # Make sure this is really the release group
      -(?P<release_group>[^- ]+([. _-]\[.*\])?))?)?$              # Group
      '''
-    ),
+     ),
 
     ('no_season_general',
      # Show.Name.E23.Test
@@ -180,7 +180,7 @@ normal_regexes = [
      ((?<![. _-])(?<!WEB)                        # Make sure this is really the release group
      -(?P<release_group>[^- ]+([. _-]\[.*\])?))?)?$              # Group
      '''
-    ),
+     ),
 
     ('no_season',
      # Show Name - 01 - Ep Name
@@ -195,7 +195,7 @@ normal_regexes = [
      ((?<![. _-])(?<!WEB)                            # Make sure this is really the release group
      -(?P<release_group>[^- ]+([. _-]\[.*\])?))?)?$  # Group
      '''
-    ),
+     ),
 
     ('bare',
      # Show.Name.102.Source.Quality.Etc-Group
@@ -239,14 +239,14 @@ anime_regexes = [
      # [ISLAND]One_Piece_679_[VOSTFR]_[8bit]_[720p]_[EB7838FC].mp4
      r'''
      ^\[(?P<release_group>ISLAND?)\]                                          # Release Group
-	 (?P<series_name>.+?)[ ._-]+                                              # Show_Name and separator
-	 (?P<ep_ab_num>\d{1,3})[ ._-]+                                            # Episode number
-	 (\[VOSTFR\])
-	 ([ ._-]+\[[vV](?P<version>[0-9])\])*[ ._-]+                              # Version
-	 (\[(8bit|10bit)\])?[ ._-]+
-	 \[(?P<extra_info>(\d{3,4}[xp]?\d{0,4})?[\.\w\s-]*)\][ ._-]+              # Extra info
-	 (\[(?P<crc>\w{8})\])?                                                    # CRC
-	 .*?
+     (?P<series_name>.+?)[ ._-]+                                              # Show_Name and separator
+     (?P<ep_ab_num>\d{1,3})[ ._-]+                                            # Episode number
+     (\[VOSTFR\])
+     ([ ._-]+\[[vV](?P<version>[0-9])\])*[ ._-]+                              # Version
+     (\[(8bit|10bit)\])?[ ._-]+
+     \[(?P<extra_info>(\d{3,4}[xp]?\d{0,4})?[\.\w\s-]*)\][ ._-]+              # Extra info
+     (\[(?P<crc>\w{8})\])?                                                    # CRC
+     .*?
      '''),
 
     ('anime_Kaerizaki-Fansub',
@@ -354,7 +354,7 @@ anime_regexes = [
      .*?
      '''
 
-    ),
+     ),
 
     ('anime_and_normal_x',
      # Bleach - s16e03-04 - 313-314
@@ -373,7 +373,7 @@ anime_regexes = [
      .*?
      '''
 
-    ),
+     ),
 
     ('anime_and_normal_reverse',
      # Bleach - 313-314 - s16e03-04
@@ -389,7 +389,7 @@ anime_regexes = [
      (?P<extra_ep_num>\d+))*                      # additional E03/etc
      .*?
      '''
-    ),
+     ),
 
     ('anime_and_normal_front',
      # 165.Naruto Shippuuden.s08e014
@@ -404,7 +404,7 @@ anime_regexes = [
      (?P<extra_ep_num>\d+))*                      # additional E03/etc
      .*?
      '''
-    ),
+     ),
 
     ('anime_ep_name',
      r'''
@@ -418,7 +418,7 @@ anime_regexes = [
     (?:\[(?P<crc>\w{8})\])?
     .*?
      '''
-    ),
+     ),
 
     ('anime_WarB3asT',
      # 003. Show Name - Ep Name.ext
-- 
GitLab


From 34a1d21b042698c1ba2c7696d1eef9454fe515ee Mon Sep 17 00:00:00 2001
From: labrys <labrys@useres.noreply.github.com>
Date: Sat, 7 Nov 2015 23:27:38 -0500
Subject: [PATCH 149/215] PEP 263: Add encoding declaration

---
 sickbeard/name_parser/regexes.py | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/sickbeard/name_parser/regexes.py b/sickbeard/name_parser/regexes.py
index 768ac82be..b2beb6882 100644
--- a/sickbeard/name_parser/regexes.py
+++ b/sickbeard/name_parser/regexes.py
@@ -1,3 +1,5 @@
+# coding=utf-8
+
 # Author: Nic Wolfe <nic@wolfeden.ca>
 # URL: http://code.google.com/p/sickbeard/
 #
-- 
GitLab


From 38244917caa09601dfcd3c81926ffed3ff2c9b62 Mon Sep 17 00:00:00 2001
From: labrys <labrys@useres.noreply.github.com>
Date: Sat, 7 Nov 2015 23:07:19 -0500
Subject: [PATCH 150/215] PEP 8: Convert None comparisons from operators to 'is
 / is not None'

---
 sickbeard/name_parser/parser.py | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/sickbeard/name_parser/parser.py b/sickbeard/name_parser/parser.py
index cd5bc886d..e4e665212 100644
--- a/sickbeard/name_parser/parser.py
+++ b/sickbeard/name_parser/parser.py
@@ -346,7 +346,7 @@ class NameParser(object):
         b = getattr(second, attr)
 
         # if a is good use it
-        if a != None or (isinstance(a, list) and a):
+        if a is not None or (isinstance(a, list) and a):
             return a
         # if not use b (if b isn't set it'll just be default)
         else:
@@ -459,7 +459,7 @@ class NameParser(object):
                 "Unable to parse " + name.encode(sickbeard.SYS_ENCODING, 'xmlcharrefreplace'))
 
         # if there's no useful info in it then raise an exception
-        if final_result.season_number == None and not final_result.episode_numbers and final_result.air_date == None and not final_result.ab_episode_numbers and not final_result.series_name:
+        if final_result.season_number is None and not final_result.episode_numbers and final_result.air_date is None and not final_result.ab_episode_numbers and not final_result.series_name:
             raise InvalidNameException("Unable to parse " + name.encode(sickbeard.SYS_ENCODING, 'xmlcharrefreplace'))
 
         if cache_result:
@@ -545,11 +545,11 @@ class ParseResult(object):
         return True
 
     def __str__(self):
-        if self.series_name != None:
+        if self.series_name is not None:
             to_return = self.series_name + u' - '
         else:
             to_return = u''
-        if self.season_number != None:
+        if self.season_number is not None:
             to_return += 'S' + str(self.season_number).zfill(2)
         if self.episode_numbers and len(self.episode_numbers):
             for e in self.episode_numbers:
-- 
GitLab


From 54edd2923589b40cc2df2babe0e49bac29a2df6b Mon Sep 17 00:00:00 2001
From: labrys <labrys@useres.noreply.github.com>
Date: Sat, 7 Nov 2015 23:20:56 -0500
Subject: [PATCH 151/215] PEP 8: Fix indentation

---
 sickbeard/name_parser/parser.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/sickbeard/name_parser/parser.py b/sickbeard/name_parser/parser.py
index e4e665212..eb2f92bab 100644
--- a/sickbeard/name_parser/parser.py
+++ b/sickbeard/name_parser/parser.py
@@ -483,7 +483,7 @@ class ParseResult(object):
                  score=None,
                  quality=None,
                  version=None
-                ):
+                 ):
 
         self.original_name = original_name
 
-- 
GitLab


From 1bfa2e5b86299dffc90fb194d96ed5054976925f Mon Sep 17 00:00:00 2001
From: labrys <labrys@useres.noreply.github.com>
Date: Sat, 7 Nov 2015 23:08:10 -0500
Subject: [PATCH 152/215] PEP 263: Add encoding declaration

---
 sickbeard/name_parser/parser.py | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/sickbeard/name_parser/parser.py b/sickbeard/name_parser/parser.py
index eb2f92bab..9ea8bbe61 100644
--- a/sickbeard/name_parser/parser.py
+++ b/sickbeard/name_parser/parser.py
@@ -1,3 +1,5 @@
+# coding=utf-8
+
 # Author: Nic Wolfe <nic@wolfeden.ca>
 # URL: http://code.google.com/p/sickbeard/
 #
-- 
GitLab


From 1c96df573d86df510cedfa14d99f491a4906d45b Mon Sep 17 00:00:00 2001
From: Dustyn Gibson <miigotu@gmail.com>
Date: Sat, 7 Nov 2015 20:42:26 -0800
Subject: [PATCH 153/215] make sure images and nzb data is downloaded as bytes
 instead of unicode

---
 sickbeard/metadata/helpers.py | 2 +-
 sickbeard/nzbSplitter.py      | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/sickbeard/metadata/helpers.py b/sickbeard/metadata/helpers.py
index e93cbd11c..c952c6644 100644
--- a/sickbeard/metadata/helpers.py
+++ b/sickbeard/metadata/helpers.py
@@ -37,7 +37,7 @@ def getShowImage(url, imgNum=None):
 
     logger.log(u"Fetching image from " + tempURL, logger.DEBUG)
 
-    image_data = helpers.getURL(tempURL, session=meta_session)
+    image_data = helpers.getURL(tempURL, session=meta_session, needBytes=True)
     if image_data is None:
         logger.log(u"There was an error trying to retrieve the image, aborting", logger.WARNING)
         return
diff --git a/sickbeard/nzbSplitter.py b/sickbeard/nzbSplitter.py
index 8c547270b..56b2d5418 100644
--- a/sickbeard/nzbSplitter.py
+++ b/sickbeard/nzbSplitter.py
@@ -128,7 +128,7 @@ def splitResult(result):
     :param result: search result object
     :return: False upon failure, a list of episode objects otherwise
     """
-    urlData = helpers.getURL(result.url, session=requests.Session())
+    urlData = helpers.getURL(result.url, session=requests.Session(), needBytes=True)
     if urlData is None:
         logger.log(u"Unable to load url " + result.url + ", can't download season NZB", logger.ERROR)
         return False
-- 
GitLab


From 1edc4f219cccbf8614549fbbcaa08b32d0e96fdb Mon Sep 17 00:00:00 2001
From: Dustyn Gibson <miigotu@gmail.com>
Date: Sat, 7 Nov 2015 22:37:42 -0800
Subject: [PATCH 154/215] Switch open for io.open, remove ek/ss from
 generic.metadata

---
 sickbeard/helpers.py              |  19 ++--
 sickbeard/metadata/generic.py     | 154 ++++++++++++++----------------
 sickbeard/metadata/mede8er.py     |  14 +--
 sickbeard/metadata/tivo.py        |   6 +-
 sickbeard/providers/rsstorrent.py |   4 +-
 5 files changed, 97 insertions(+), 100 deletions(-)

diff --git a/sickbeard/helpers.py b/sickbeard/helpers.py
index cd00ca565..3569f1ac8 100644
--- a/sickbeard/helpers.py
+++ b/sickbeard/helpers.py
@@ -20,6 +20,7 @@
 
 
 import os
+import io
 import ctypes
 import random
 import re
@@ -948,6 +949,9 @@ def create_https_certificates(ssl_cert, ssl_key):
     :return: True on success, False on failure
     """
 
+    assert isinstance(ssl_key, unicode)
+    assert isinstance(ssl_cert, unicode)
+
     try:
         from OpenSSL import crypto  # @UnresolvedImport
         from certgen import createKeyPair, createCertRequest, createCertificate, TYPE_RSA, \
@@ -970,8 +974,8 @@ def create_https_certificates(ssl_cert, ssl_key):
     try:
         # pylint: disable=E1101
         # Module has no member
-        open(ssl_key, 'w').write(crypto.dump_privatekey(crypto.FILETYPE_PEM, pkey))
-        open(ssl_cert, 'w').write(crypto.dump_certificate(crypto.FILETYPE_PEM, cert))
+        io.open(ssl_key, 'w').write(crypto.dump_privatekey(crypto.FILETYPE_PEM, pkey))
+        io.open(ssl_cert, 'w').write(crypto.dump_certificate(crypto.FILETYPE_PEM, cert))
     except Exception:
         logger.log(u"Error creating SSL key and certificate", logger.ERROR)
         return False
@@ -1091,8 +1095,10 @@ def md5_for_file(filename, block_size=2 ** 16):
     :return MD5 hexdigest on success, or None on failure
     """
 
+    assert isinstance(filename, unicode)
+
     try:
-        with open(filename, 'rb') as f:
+        with io.open(filename, 'rb') as f:
             md5 = hashlib.md5()
             while True:
                 data = f.read(block_size)
@@ -1660,7 +1666,7 @@ def download_file(url, filename, session=None, headers=None):
                 return False
 
             try:
-                with open(filename, 'wb') as fp:
+                with io.open(filename, 'wb') as fp:
                     for chunk in resp.iter_content(chunk_size=1024):
                         if chunk:
                             fp.write(chunk)
@@ -1866,12 +1872,13 @@ def isFileLocked(checkfile, writeLockCheck=False):
     :param writeLockCheck: when true will check if the file is locked for writing (prevents move operations)
     """
 
-    checkfile = ek(os.path.abspath, checkfile)
+    checkfile = os.path.abspath(checkfile)
+    assert isinstance(checkfile, unicode)
 
     if not os.path.exists(checkfile):
         return True
     try:
-        f = open(checkfile, 'r')
+        f = io.open(checkfile, 'rb')
         f.close()
     except IOError:
         return True
diff --git a/sickbeard/metadata/generic.py b/sickbeard/metadata/generic.py
index a49389f01..2738e982e 100644
--- a/sickbeard/metadata/generic.py
+++ b/sickbeard/metadata/generic.py
@@ -19,7 +19,8 @@
 # along with SickRage.  If not, see <http://www.gnu.org/licenses/>.
 
 
-import os.path
+import os
+import io
 import re
 
 try:
@@ -33,7 +34,6 @@ from sickbeard import helpers
 from sickbeard import logger
 from sickbeard.metadata import helpers as metadata_helpers
 from sickbeard.show_name_helpers import allPossibleShowNames
-from sickrage.helper.encoding import ek, ss
 from sickrage.helper.exceptions import ex
 
 from tmdb_api.tmdb_api import TMDB
@@ -63,17 +63,17 @@ class GenericMetadata(object):
                  season_posters=False, season_banners=False,
                  season_all_poster=False, season_all_banner=False):
 
-        self.name = "Generic"
+        self.name = u"Generic"
 
-        self._ep_nfo_extension = "nfo"
-        self._show_metadata_filename = "tvshow.nfo"
+        self._ep_nfo_extension = u"nfo"
+        self._show_metadata_filename = u"tvshow.nfo"
 
-        self.fanart_name = "fanart.jpg"
-        self.poster_name = "poster.jpg"
-        self.banner_name = "banner.jpg"
+        self.fanart_name = u"fanart.jpg"
+        self.poster_name = u"poster.jpg"
+        self.banner_name = u"banner.jpg"
 
-        self.season_all_poster_name = "season-all-poster.jpg"
-        self.season_all_banner_name = "season-all-banner.jpg"
+        self.season_all_poster_name = u"season-all-poster.jpg"
+        self.season_all_banner_name = u"season-all-banner.jpg"
 
         self.show_metadata = show_metadata
         self.episode_metadata = episode_metadata
@@ -90,7 +90,7 @@ class GenericMetadata(object):
         config_list = [self.show_metadata, self.episode_metadata, self.fanart, self.poster, self.banner,
                        self.episode_thumbnails, self.season_posters, self.season_banners, self.season_all_poster,
                        self.season_all_banner]
-        return '|'.join([str(int(x)) for x in config_list])
+        return u'|'.join([str(int(x)) for x in config_list])
 
     def get_id(self):
         return GenericMetadata.makeID(self.name)
@@ -114,78 +114,59 @@ class GenericMetadata(object):
         self.season_all_poster = config_list[8]
         self.season_all_banner = config_list[9]
 
+    @staticmethod
+    def _check_exists(location):
+        if location:
+            assert isinstance(location, unicode)
+            result = os.path.isfile(location)
+            logger.log(u"Checking if " + location + " exists: " + str(result), logger.DEBUG)
+            return result
+        return False
+
     def _has_show_metadata(self, show_obj):
-        result = ek(os.path.isfile, self.get_show_file_path(show_obj))
-        logger.log(u"Checking if " + self.get_show_file_path(show_obj) + " exists: " + str(result), logger.DEBUG)
-        return result
+        return self._check_exists(self.get_show_file_path(show_obj))
 
     def _has_episode_metadata(self, ep_obj):
-        result = ek(os.path.isfile, self.get_episode_file_path(ep_obj))
-        logger.log(u"Checking if " + self.get_episode_file_path(ep_obj) + " exists: " + str(result), logger.DEBUG)
-        return result
+        return self._check_exists(self.get_episode_file_path(ep_obj))
 
     def _has_fanart(self, show_obj):
-        result = ek(os.path.isfile, self.get_fanart_path(show_obj))
-        logger.log(u"Checking if " + self.get_fanart_path(show_obj) + " exists: " + str(result), logger.DEBUG)
-        return result
+        return self._check_exists(self.get_fanart_path(show_obj))
 
     def _has_poster(self, show_obj):
-        result = ek(os.path.isfile, self.get_poster_path(show_obj))
-        logger.log(u"Checking if " + self.get_poster_path(show_obj) + " exists: " + str(result), logger.DEBUG)
-        return result
+        return self._check_exists(self.get_poster_path(show_obj))
 
     def _has_banner(self, show_obj):
-        result = ek(os.path.isfile, self.get_banner_path(show_obj))
-        logger.log(u"Checking if " + self.get_banner_path(show_obj) + " exists: " + str(result), logger.DEBUG)
-        return result
+        return self._check_exists(self.get_banner_path(show_obj))
 
     def _has_episode_thumb(self, ep_obj):
-        location = self.get_episode_thumb_path(ep_obj)
-        result = location is not None and ek(os.path.isfile, location)
-        if location:
-            logger.log(u"Checking if " + location + " exists: " + str(result), logger.DEBUG)
-        return result
+        return self._check_exists(self.get_episode_thumb_path(ep_obj))
 
     def _has_season_poster(self, show_obj, season):
-        location = self.get_season_poster_path(show_obj, season)
-        result = location is not None and ek(os.path.isfile, location)
-        if location:
-            logger.log(u"Checking if " + location + " exists: " + str(result), logger.DEBUG)
-        return result
+        return self._check_exists(self.get_season_poster_path(show_obj, season))
 
     def _has_season_banner(self, show_obj, season):
-        location = self.get_season_banner_path(show_obj, season)
-        result = location is not None and ek(os.path.isfile, location)
-        if location:
-            logger.log(u"Checking if " + location + " exists: " + str(result), logger.DEBUG)
-        return result
+        return self._check_exists(self.get_season_banner_path(show_obj, season))
 
     def _has_season_all_poster(self, show_obj):
-        result = ek(os.path.isfile, self.get_season_all_poster_path(show_obj))
-        logger.log(u"Checking if " + self.get_season_all_poster_path(show_obj) + " exists: " + str(result),
-                   logger.DEBUG)
-        return result
+        return self._check_exists(self.get_season_all_poster_path(show_obj))
 
     def _has_season_all_banner(self, show_obj):
-        result = ek(os.path.isfile, self.get_season_all_banner_path(show_obj))
-        logger.log(u"Checking if " + self.get_season_all_banner_path(show_obj) + " exists: " + str(result),
-                   logger.DEBUG)
-        return result
+        return self._check_exists(self.get_season_all_banner_path(show_obj))
 
     def get_show_file_path(self, show_obj):
-        return ek(os.path.join, show_obj.location, self._show_metadata_filename)
+        return os.path.join(show_obj.location, self._show_metadata_filename)
 
     def get_episode_file_path(self, ep_obj):
-        return ek(helpers.replaceExtension, ep_obj.location, self._ep_nfo_extension)
+        return helpers.replaceExtension(ep_obj.location, self._ep_nfo_extension)
 
     def get_fanart_path(self, show_obj):
-        return ek(os.path.join, show_obj.location, self.fanart_name)
+        return os.path.join(show_obj.location, self.fanart_name)
 
     def get_poster_path(self, show_obj):
-        return ek(os.path.join, show_obj.location, self.poster_name)
+        return os.path.join(show_obj.location, self.poster_name)
 
     def get_banner_path(self, show_obj):
-        return ek(os.path.join, show_obj.location, self.banner_name)
+        return os.path.join(show_obj.location, self.banner_name)
 
     @staticmethod
     def get_episode_thumb_path(ep_obj):
@@ -193,7 +174,8 @@ class GenericMetadata(object):
         Returns the path where the episode thumbnail should be stored.
         ep_obj: a TVEpisode instance for which to create the thumbnail
         """
-        if ek(os.path.isfile, ep_obj.location):
+        assert isinstance(ep_obj.location, unicode)
+        if os.path.isfile(ep_obj.location):
 
             tbn_filename = ep_obj.location.rpartition(".")
 
@@ -222,7 +204,7 @@ class GenericMetadata(object):
         else:
             season_poster_filename = 'season' + str(season).zfill(2)
 
-        return ek(os.path.join, show_obj.location, season_poster_filename + '-poster.jpg')
+        return os.path.join(show_obj.location, season_poster_filename + '-poster.jpg')
 
     @staticmethod
     def get_season_banner_path(show_obj, season):
@@ -240,13 +222,13 @@ class GenericMetadata(object):
         else:
             season_banner_filename = 'season' + str(season).zfill(2)
 
-        return ek(os.path.join, show_obj.location, season_banner_filename + '-banner.jpg')
+        return os.path.join(show_obj.location, season_banner_filename + '-banner.jpg')
 
     def get_season_all_poster_path(self, show_obj):
-        return ek(os.path.join, show_obj.location, self.season_all_poster_name)
+        return os.path.join(show_obj.location, self.season_all_poster_name)
 
     def get_season_all_banner_path(self, show_obj):
-        return ek(os.path.join, show_obj.location, self.season_all_banner_name)
+        return os.path.join(show_obj.location, self.season_all_banner_name)
 
     # pylint: disable=W0613,R0201
     def _show_data(self, show_obj):
@@ -284,8 +266,10 @@ class GenericMetadata(object):
                 logger.DEBUG)
 
             nfo_file_path = self.get_show_file_path(show_obj)
+            assert isinstance(nfo_file_path, unicode)
+
             try:
-                with open(nfo_file_path, 'r') as xmlFileObj:
+                with io.open(nfo_file_path, 'r', encoding='utf-8') as xmlFileObj:
                     showXML = etree.ElementTree(file=xmlFileObj)
 
                 indexerid = showXML.find('id')
@@ -415,19 +399,20 @@ class GenericMetadata(object):
             return False
 
         nfo_file_path = self.get_show_file_path(show_obj)
-        nfo_file_dir = ek(os.path.dirname, nfo_file_path)
+        assert isinstance(nfo_file_path, unicode)
+
+        nfo_file_dir = os.path.dirname(nfo_file_path)
 
         try:
-            if not ek(os.path.isdir, nfo_file_dir):
+            if not os.path.isdir(nfo_file_dir):
                 logger.log(u"Metadata dir didn't exist, creating it at " + nfo_file_dir, logger.DEBUG)
-                ek(os.makedirs, nfo_file_dir)
+                os.makedirs(nfo_file_dir)
                 helpers.chmodAsParent(nfo_file_dir)
 
             logger.log(u"Writing show nfo file to " + nfo_file_path, logger.DEBUG)
 
-            nfo_file = open(nfo_file_path, 'w')
-
-            data.write(nfo_file, encoding="utf-8")
+            nfo_file = io.open(nfo_file_path, 'wb')
+            data.write(nfo_file)
             nfo_file.close()
             helpers.chmodAsParent(nfo_file_path)
         except IOError, e:
@@ -460,19 +445,18 @@ class GenericMetadata(object):
             return False
 
         nfo_file_path = self.get_episode_file_path(ep_obj)
-        nfo_file_dir = ek(os.path.dirname, nfo_file_path)
+        assert isinstance(nfo_file_path, unicode)
+        nfo_file_dir = os.path.dirname(nfo_file_path)
 
         try:
-            if not ek(os.path.isdir, nfo_file_dir):
+            if not os.path.isdir(nfo_file_dir):
                 logger.log(u"Metadata dir didn't exist, creating it at " + nfo_file_dir, logger.DEBUG)
-                ek(os.makedirs, nfo_file_dir)
+                os.makedirs(nfo_file_dir)
                 helpers.chmodAsParent(nfo_file_dir)
 
             logger.log(u"Writing episode nfo file to " + nfo_file_path, logger.DEBUG)
-
-            nfo_file = open(nfo_file_path, 'w')
-
-            data.write(nfo_file, encoding="utf-8")
+            nfo_file = io.open(nfo_file_path, 'wb')
+            data.write(nfo_file)
             nfo_file.close()
             helpers.chmodAsParent(nfo_file_path)
         except IOError, e:
@@ -700,24 +684,26 @@ class GenericMetadata(object):
         image_path: file location to save the image to
         """
 
+        assert isinstance(image_path, unicode)
+
         # don't bother overwriting it
-        if ek(os.path.isfile, image_path):
+        if os.path.isfile(image_path):
             logger.log(u"Image already exists, not downloading", logger.DEBUG)
             return False
 
-        image_dir = ek(os.path.dirname, image_path)
+        image_dir = os.path.dirname(image_path)
 
         if not image_data:
-            logger.log(u"Unable to retrieve image to save in %s, skipping" % (ss(image_path)), logger.DEBUG)
+            logger.log(u"Unable to retrieve image to save in %s, skipping" % image_path, logger.DEBUG)
             return False
 
         try:
-            if not ek(os.path.isdir, image_dir):
+            if not os.path.isdir(image_dir):
                 logger.log(u"Metadata dir didn't exist, creating it at " + image_dir, logger.DEBUG)
-                ek(os.makedirs, image_dir)
+                os.makedirs(image_dir)
                 helpers.chmodAsParent(image_dir)
 
-            outFile = open(image_path, 'wb')
+            outFile = io.open(image_path, 'wb')
             outFile.write(image_data)
             outFile.close()
             helpers.chmodAsParent(image_path)
@@ -918,16 +904,18 @@ class GenericMetadata(object):
 
         empty_return = (None, None, None)
 
-        metadata_path = ek(os.path.join, folder, self._show_metadata_filename)
+        assert isinstance(folder, unicode)
+
+        metadata_path = os.path.join(folder, self._show_metadata_filename)
 
-        if not ek(os.path.isdir, folder) or not ek(os.path.isfile, metadata_path):
-            logger.log(u"Can't load the metadata file from " + repr(metadata_path) + ", it doesn't exist", logger.DEBUG)
+        if not os.path.isdir(folder) or not os.path.isfile(metadata_path):
+            logger.log(u"Can't load the metadata file from " + metadata_path + ", it doesn't exist", logger.DEBUG)
             return empty_return
 
         logger.log(u"Loading show info from metadata file in " + folder, logger.DEBUG)
 
         try:
-            with open(metadata_path, 'r') as xmlFileObj:
+            with io.open(metadata_path, 'r', encoding='utf-8') as xmlFileObj:
                 showXML = etree.ElementTree(file=xmlFileObj)
 
             if showXML.findtext('title') is None or (showXML.findtext('tvdbid') is None and showXML.findtext('id') is None):
diff --git a/sickbeard/metadata/mede8er.py b/sickbeard/metadata/mede8er.py
index 36609fde1..654465e11 100644
--- a/sickbeard/metadata/mede8er.py
+++ b/sickbeard/metadata/mede8er.py
@@ -18,14 +18,14 @@
 # You should have received a copy of the GNU General Public License
 # along with SickRage.  If not, see <http://www.gnu.org/licenses/>.
 
+import io
+import os
 import datetime
-import os.path
 
 import sickbeard
-
+from sickbeard import logger, helpers
 from sickbeard.metadata import mediabrowser
 
-from sickbeard import logger, helpers
 from sickrage.helper.common import dateFormat
 from sickrage.helper.encoding import ek
 from sickrage.helper.exceptions import ex, ShowNotFoundException
@@ -379,9 +379,9 @@ class Mede8erMetadata(mediabrowser.MediaBrowserMetadata):
 
             logger.log(u"Writing show nfo file to " + nfo_file_path, logger.DEBUG)
 
-            nfo_file = open(nfo_file_path, 'w')
+            nfo_file = io.open(nfo_file_path, 'wb')
 
-            data.write(nfo_file, encoding="UTF-8")
+            data.write(nfo_file)
             nfo_file.close()
             helpers.chmodAsParent(nfo_file_path)
         except IOError, e:
@@ -424,9 +424,9 @@ class Mede8erMetadata(mediabrowser.MediaBrowserMetadata):
 
             logger.log(u"Writing episode nfo file to " + nfo_file_path, logger.DEBUG)
 
-            nfo_file = open(nfo_file_path, 'w')
+            nfo_file = io.open(nfo_file_path, 'wb')
 
-            data.write(nfo_file, encoding="UTF-8")
+            data.write(nfo_file)
             nfo_file.close()
             helpers.chmodAsParent(nfo_file_path)
         except IOError, e:
diff --git a/sickbeard/metadata/tivo.py b/sickbeard/metadata/tivo.py
index 15420bb73..6d9cd236e 100644
--- a/sickbeard/metadata/tivo.py
+++ b/sickbeard/metadata/tivo.py
@@ -20,11 +20,11 @@
 # along with SickRage.  If not, see <http://www.gnu.org/licenses/>.
 
 
-import datetime
+import io
 import os
+import datetime
 
 import sickbeard
-
 from sickbeard import logger, helpers
 from sickbeard.metadata import generic
 from sickrage.helper.encoding import ek
@@ -321,7 +321,7 @@ class TIVOMetadata(generic.GenericMetadata):
 
             logger.log(u"Writing episode nfo file to " + nfo_file_path, logger.DEBUG)
 
-            with open(nfo_file_path, 'w') as nfo_file:
+            with io.open(nfo_file_path, 'w') as nfo_file:
                 # Calling encode directly, b/c often descriptions have wonky characters.
                 nfo_file.write(data.encode("utf-8"))
 
diff --git a/sickbeard/providers/rsstorrent.py b/sickbeard/providers/rsstorrent.py
index 2bdaad283..434174d36 100644
--- a/sickbeard/providers/rsstorrent.py
+++ b/sickbeard/providers/rsstorrent.py
@@ -15,6 +15,7 @@
 # You should have received a copy of the GNU General Public License
 # along with SickRage.  If not, see <http://www.gnu.org/licenses/>.
 
+import io
 import os
 import re
 import requests
@@ -25,6 +26,7 @@ from sickbeard.providers import generic
 from sickbeard import helpers
 from sickbeard import logger
 from sickbeard import tvcache
+
 from sickrage.helper.encoding import ek
 from sickrage.helper.exceptions import ex
 
@@ -136,7 +138,7 @@ class TorrentRssProvider(generic.TorrentProvider):
         dumpName = ek(os.path.join, sickbeard.CACHE_DIR, 'custom_torrent.html')
 
         try:
-            fileOut = open(dumpName, 'wb')
+            fileOut = io.open(dumpName, 'wb')
             fileOut.write(data)
             fileOut.close()
             helpers.chmodAsParent(dumpName)
-- 
GitLab


From 9120677d54d85e874a19ce9da5b98c0f9ee16e20 Mon Sep 17 00:00:00 2001
From: Dustyn Gibson <miigotu@gmail.com>
Date: Sat, 7 Nov 2015 22:43:18 -0800
Subject: [PATCH 155/215] Fix another stdout error

---
 SickBeard.py | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/SickBeard.py b/SickBeard.py
index e4d398f9e..2b9ee49b3 100755
--- a/SickBeard.py
+++ b/SickBeard.py
@@ -152,7 +152,7 @@ class SickRage(object):
 
         # pylint: disable=E1101
         if not sickbeard.SYS_ENCODING or sickbeard.SYS_ENCODING.lower() in ('ansi_x3.4-1968', 'us-ascii', 'ascii', 'charmap') or \
-            (sys.platform.startswith('win') and sys.getwindowsversion()[0] >= 6 and str(sys.stdout.encoding).lower() in ('cp65001', 'charmap')):
+            (sys.platform.startswith('win') and sys.getwindowsversion()[0] >= 6 and getattr(sys.stdout, 'device', sys.stdout).encoding.lower() in ('cp65001', 'charmap')):
             sickbeard.SYS_ENCODING = 'UTF-8'
 
         # Need console logging for SickBeard.py and SickBeard-console.exe
@@ -233,7 +233,7 @@ class SickRage(object):
 
             else:
                 if self.consoleLogging:
-                    sys.stdout.write("Not running in daemon mode. PID file creation disabled.\n")
+                    sys.stdout.write(u"Not running in daemon mode. PID file creation disabled.\n")
 
                 self.CREATEPID = False
 
@@ -267,11 +267,11 @@ class SickRage(object):
         if os.path.exists(restoreDir):
             success = self.restoreDB(restoreDir, sickbeard.DATA_DIR)
             if self.consoleLogging:
-                sys.stdout.write("Restore: restoring DB and config.ini %s!\n" % ("FAILED", "SUCCESSFUL")[success])
+                sys.stdout.write(u"Restore: restoring DB and config.ini %s!\n" % ("FAILED", "SUCCESSFUL")[success])
 
         # Load the config and publish it to the sickbeard package
         if self.consoleLogging and not os.path.isfile(sickbeard.CONFIG_FILE):
-            sys.stdout.write("Unable to find '" + sickbeard.CONFIG_FILE + "' , all settings will be default!" + "\n")
+            sys.stdout.write(u"Unable to find '" + sickbeard.CONFIG_FILE + "' , all settings will be default!" + "\n")
 
         sickbeard.CFG = ConfigObj(sickbeard.CONFIG_FILE)
 
@@ -377,7 +377,7 @@ class SickRage(object):
             if pid != 0:
                 os._exit(0)
         except OSError, e:
-            sys.stderr.write("fork #1 failed: %d (%s)\n" % (e.errno, e.strerror))
+            sys.stderr.write(u"fork #1 failed: %d (%s)\n" % (e.errno, e.strerror))
             sys.exit(1)
 
         os.setsid()  # @UndefinedVariable - only available in UNIX
@@ -395,7 +395,7 @@ class SickRage(object):
             if pid != 0:
                 os._exit(0)
         except OSError, e:
-            sys.stderr.write("fork #2 failed: %d (%s)\n" % (e.errno, e.strerror))
+            sys.stderr.write(u"fork #2 failed: %d (%s)\n" % (e.errno, e.strerror))
             sys.exit(1)
 
         # Write pid
-- 
GitLab


From 638583cab4acfa99250440745158a6afaa975037 Mon Sep 17 00:00:00 2001
From: Labrys <labrys@users.noreply.github.com>
Date: Fri, 6 Nov 2015 07:14:12 -0500
Subject: [PATCH 156/215] Convert StatusStrings to a dict subclass

---
 sickbeard/common.py | 91 ++++++++++++++++++++++++++++++++-------------
 1 file changed, 66 insertions(+), 25 deletions(-)

diff --git a/sickbeard/common.py b/sickbeard/common.py
index 846488ff2..bff0bc50e 100644
--- a/sickbeard/common.py
+++ b/sickbeard/common.py
@@ -512,39 +512,80 @@ qualityPresetStrings = {SD: "SD",
                         ANY: "Any"}
 
 
-# pylint: disable=R0903,C1001
-class StatusStrings:
+class StatusStrings(dict):
+    """
+    Dictionary containing strings for status codes
+
+    Keys must be convertible to int or a ValueError will be raised.  This is intentional to match old functionality until
+    the old StatusStrings is fully deprecated, then we will raise a KeyError instead, where appropriate.
+
+    Membership checks using __contains__ (i.e. 'x in y') do not raise a ValueError to match expected dict functionality
+    """
+    # todo: Deprecate StatusStrings().statusStrings and use StatusStrings() directly
+    # todo: Deprecate .has_key and switch to 'x in y'
+    # todo: Switch from raising ValueError to a saner KeyError
+    # todo: Raise KeyError when unable to resolve a missing key instead of returning ''
+    # todo: Make key of None match dict() functionality
     def __init__(self):
-        self.statusStrings = {UNKNOWN: "Unknown",
-                              UNAIRED: "Unaired",
-                              SNATCHED: "Snatched",
-                              DOWNLOADED: "Downloaded",
-                              SKIPPED: "Skipped",
-                              SNATCHED_PROPER: "Snatched (Proper)",
-                              WANTED: "Wanted",
-                              ARCHIVED: "Archived",
-                              IGNORED: "Ignored",
-                              SUBTITLED: "Subtitled",
-                              FAILED: "Failed",
-                              SNATCHED_BEST: "Snatched (Best)"}
-
-    def __getitem__(self, key):
-        key = int(key)
-        if key in Quality.DOWNLOADED + Quality.SNATCHED + Quality.SNATCHED_PROPER + Quality.SNATCHED_BEST + Quality.ARCHIVED:
+        """
+        Initialize status strings
+        """
+        self[UNKNOWN] = "Unknown"
+        self[UNAIRED] = "Unaired"
+        self[SNATCHED] = "Snatched"
+        self[DOWNLOADED] = "Downloaded"
+        self[SKIPPED] = "Skipped"
+        self[SNATCHED_PROPER] = "Snatched (Proper)"
+        self[WANTED] = "Wanted"
+        self[ARCHIVED] = "Archived"
+        self[IGNORED] = "Ignored"
+        self[SUBTITLED] = "Subtitled"
+        self[FAILED] = "Failed"
+        self[SNATCHED_BEST] = "Snatched (Best)"
+        self.statusStrings = dict(self)  # for backwards compatibility
+
+    def __missing__(self, key):
+        """
+        If the key is not found, search for the missing key in qualities
+
+        Keys must be convertible to int or a ValueError will be raised.  This is intentional to match old functionality until
+        the old StatusStrings is fully deprecated, then we will raise a KeyError instead, where appropriate.
+        """
+        key = int(key)  # This will raise a ValueError if the key can't be converted to int
+
+        if key in self.keys() + Quality.DOWNLOADED + Quality.SNATCHED + Quality.SNATCHED_PROPER + Quality.SNATCHED_BEST + Quality.ARCHIVED:
             status, quality = Quality.splitCompositeStatus(key)
-            if quality == Quality.NONE:
-                return self.statusStrings[status]
+            if quality == Quality.NONE:  # If a Quality is not listed... (shouldn't this be 'if not quality:'?)
+                return self[status]  # ...return the status...
             else:
-                return self.statusStrings[status] + " (" + Quality.qualityStrings[quality] + ")"
+                return self[status] + " (" + Quality.qualityStrings[quality] + ")"  # ...otherwise append the quality to the status
         else:
-            return self.statusStrings[key] if self.statusStrings.has_key(key) else ''
+            return ''  # return '' to match old functionality when the numeric key is not found
 
+    # Keep this until all has_key() checks are converted to 'key in dict'
+    # or else has_keys() won't search __missing__ for keys
     def has_key(self, key):
-        key = int(key)
-        return key in self.statusStrings or key in Quality.DOWNLOADED + Quality.ARCHIVED + Quality.SNATCHED + Quality.SNATCHED_PROPER + Quality.SNATCHED_BEST
+        """
+        Override has_key() to test membership using an 'x in y' search
+
+        Keys must be convertible to int or a ValueError will be raised.  This is intentional to match old functionality until
+        the old StatusStrings is fully deprecated, then we will raise a KeyError instead, where appropriate.
+        """
+        return True if key in self else False  # This will raise a ValueError if __missing__ can't convert the key to int
 
     def __contains__(self, key):
-        return self.has_key(key)
+        """
+        Checks for existence of key
+
+        Unlike has_key() and __missing__() this will NOT raise a ValueError to match expected functionality
+        when checking for 'key in dict'
+        """
+        try:
+            # if the key is not found in keys() then leverage __missing__ by trying the key directly
+            return key in self.keys() or self[key]  # This will raise a ValueError if __missing__ can't convert the key to int
+        except ValueError:  # The key is not numeric and since we only want numeric keys...
+            # ...and we don't want this function to fail...
+            pass  # ...suppress the ValueError and do nothing, the key does not exist
 
 statusStrings = StatusStrings()
 
-- 
GitLab


From cd8b0a7fc279dcd6bddd03e9a2b5f80d319e2fe2 Mon Sep 17 00:00:00 2001
From: labrys <labrys@useres.noreply.github.com>
Date: Sat, 7 Nov 2015 03:31:25 -0500
Subject: [PATCH 157/215] Subclass UserDict instead of dict for StatusStrings

---
 sickbeard/common.py | 68 ++++++++++++++++++++++++---------------------
 1 file changed, 36 insertions(+), 32 deletions(-)

diff --git a/sickbeard/common.py b/sickbeard/common.py
index bff0bc50e..9970e285d 100644
--- a/sickbeard/common.py
+++ b/sickbeard/common.py
@@ -22,6 +22,7 @@ import operator
 import platform
 import re
 import uuid
+from UserDict import UserDict
 
 from random import shuffle
 
@@ -512,7 +513,7 @@ qualityPresetStrings = {SD: "SD",
                         ANY: "Any"}
 
 
-class StatusStrings(dict):
+class StatusStrings(UserDict):
     """
     Dictionary containing strings for status codes
 
@@ -526,23 +527,13 @@ class StatusStrings(dict):
     # todo: Switch from raising ValueError to a saner KeyError
     # todo: Raise KeyError when unable to resolve a missing key instead of returning ''
     # todo: Make key of None match dict() functionality
-    def __init__(self):
-        """
-        Initialize status strings
-        """
-        self[UNKNOWN] = "Unknown"
-        self[UNAIRED] = "Unaired"
-        self[SNATCHED] = "Snatched"
-        self[DOWNLOADED] = "Downloaded"
-        self[SKIPPED] = "Skipped"
-        self[SNATCHED_PROPER] = "Snatched (Proper)"
-        self[WANTED] = "Wanted"
-        self[ARCHIVED] = "Archived"
-        self[IGNORED] = "Ignored"
-        self[SUBTITLED] = "Subtitled"
-        self[FAILED] = "Failed"
-        self[SNATCHED_BEST] = "Snatched (Best)"
-        self.statusStrings = dict(self)  # for backwards compatibility
+
+    @property
+    def statusStrings(self):  # for backwards compatibility
+        return self.data
+
+    def __setitem__(self, key, value):
+        self.data[int(key)] = value  # make sure all keys being assigned values are ints
 
     def __missing__(self, key):
         """
@@ -551,16 +542,16 @@ class StatusStrings(dict):
         Keys must be convertible to int or a ValueError will be raised.  This is intentional to match old functionality until
         the old StatusStrings is fully deprecated, then we will raise a KeyError instead, where appropriate.
         """
-        key = int(key)  # This will raise a ValueError if the key can't be converted to int
-
-        if key in self.keys() + Quality.DOWNLOADED + Quality.SNATCHED + Quality.SNATCHED_PROPER + Quality.SNATCHED_BEST + Quality.ARCHIVED:
-            status, quality = Quality.splitCompositeStatus(key)
-            if quality == Quality.NONE:  # If a Quality is not listed... (shouldn't this be 'if not quality:'?)
-                return self[status]  # ...return the status...
+        if isinstance(key, int):  # if the key is already an int...
+            if key in self.keys() + Quality.DOWNLOADED + Quality.SNATCHED + Quality.SNATCHED_PROPER + Quality.SNATCHED_BEST + Quality.ARCHIVED:
+                status, quality = Quality.splitCompositeStatus(key)
+                if quality == Quality.NONE:  # If a Quality is not listed... (shouldn't this be 'if not quality:'?)
+                    return self[status]  # ...return the status...
+                else:
+                    return self[status] + " (" + Quality.qualityStrings[quality] + ")"  # ...otherwise append the quality to the status
             else:
-                return self[status] + " (" + Quality.qualityStrings[quality] + ")"  # ...otherwise append the quality to the status
-        else:
-            return ''  # return '' to match old functionality when the numeric key is not found
+                return ''  # return '' to match old functionality when the numeric key is not found
+        return self[int(key)]  # Since the key was not an int, let's try int(key) instead
 
     # Keep this until all has_key() checks are converted to 'key in dict'
     # or else has_keys() won't search __missing__ for keys
@@ -571,7 +562,7 @@ class StatusStrings(dict):
         Keys must be convertible to int or a ValueError will be raised.  This is intentional to match old functionality until
         the old StatusStrings is fully deprecated, then we will raise a KeyError instead, where appropriate.
         """
-        return True if key in self else False  # This will raise a ValueError if __missing__ can't convert the key to int
+        return key in self  # This will raise a ValueError if __missing__ can't convert the key to int
 
     def __contains__(self, key):
         """
@@ -581,14 +572,27 @@ class StatusStrings(dict):
         when checking for 'key in dict'
         """
         try:
-            # if the key is not found in keys() then leverage __missing__ by trying the key directly
-            return key in self.keys() or self[key]  # This will raise a ValueError if __missing__ can't convert the key to int
+            # This will raise a ValueError if we can't convert the key to int
+            return ((int(key) in self.data) or
+                    (int(key) in Quality.DOWNLOADED + Quality.SNATCHED + Quality.SNATCHED_PROPER + Quality.SNATCHED_BEST + Quality.ARCHIVED))
         except ValueError:  # The key is not numeric and since we only want numeric keys...
             # ...and we don't want this function to fail...
             pass  # ...suppress the ValueError and do nothing, the key does not exist
 
-statusStrings = StatusStrings()
-
+statusStrings = StatusStrings(
+    {UNKNOWN: "Unknown",
+     UNAIRED: "Unaired",
+     SNATCHED: "Snatched",
+     DOWNLOADED: "Downloaded",
+     SKIPPED: "Skipped",
+     SNATCHED_PROPER: "Snatched (Proper)",
+     WANTED: "Wanted",
+     ARCHIVED: "Archived",
+     IGNORED: "Ignored",
+     SUBTITLED: "Subtitled",
+     FAILED: "Failed",
+     SNATCHED_BEST: "Snatched (Best)"
+     })
 
 # pylint: disable=R0903,C1001
 class Overview:
-- 
GitLab


From b45b3bcd0f549e931ec1b8a68e4073318662374f Mon Sep 17 00:00:00 2001
From: Dustyn Gibson <miigotu@gmail.com>
Date: Sat, 7 Nov 2015 23:45:33 -0800
Subject: [PATCH 158/215] Fix unicode in nfo's, clean up some log spam

---
 sickbeard/metadata/generic.py | 13 ++++++-------
 sickbeard/tv.py               | 13 ++++++-------
 2 files changed, 12 insertions(+), 14 deletions(-)

diff --git a/sickbeard/metadata/generic.py b/sickbeard/metadata/generic.py
index 2738e982e..5e570fd8f 100644
--- a/sickbeard/metadata/generic.py
+++ b/sickbeard/metadata/generic.py
@@ -269,7 +269,7 @@ class GenericMetadata(object):
             assert isinstance(nfo_file_path, unicode)
 
             try:
-                with io.open(nfo_file_path, 'r', encoding='utf-8') as xmlFileObj:
+                with io.open(nfo_file_path, 'rb') as xmlFileObj:
                     showXML = etree.ElementTree(file=xmlFileObj)
 
                 indexerid = showXML.find('id')
@@ -283,7 +283,7 @@ class GenericMetadata(object):
                 # Make it purdy
                 helpers.indentXML(root)
 
-                showXML.write(nfo_file_path)
+                showXML.write(nfo_file_path, encoding='UTF-8')
                 helpers.chmodAsParent(nfo_file_path)
 
                 return True
@@ -331,10 +331,9 @@ class GenericMetadata(object):
     def create_season_banners(self, show_obj):
         if self.season_banners and show_obj:
             result = []
+            logger.log(u"Metadata provider " + self.name + " creating season banners for " + show_obj.name, logger.DEBUG)
             for season, _ in show_obj.episodes.iteritems():  # @UnusedVariable
                 if not self._has_season_banner(show_obj, season):
-                    logger.log(u"Metadata provider " + self.name + " creating season banners for " + show_obj.name,
-                               logger.DEBUG)
                     result = result + [self.save_season_banners(show_obj, season)]
             return all(result)
         return False
@@ -412,7 +411,7 @@ class GenericMetadata(object):
             logger.log(u"Writing show nfo file to " + nfo_file_path, logger.DEBUG)
 
             nfo_file = io.open(nfo_file_path, 'wb')
-            data.write(nfo_file)
+            data.write(nfo_file, encoding='UTF-8')
             nfo_file.close()
             helpers.chmodAsParent(nfo_file_path)
         except IOError, e:
@@ -456,7 +455,7 @@ class GenericMetadata(object):
 
             logger.log(u"Writing episode nfo file to " + nfo_file_path, logger.DEBUG)
             nfo_file = io.open(nfo_file_path, 'wb')
-            data.write(nfo_file)
+            data.write(nfo_file, encoding='UTF-8')
             nfo_file.close()
             helpers.chmodAsParent(nfo_file_path)
         except IOError, e:
@@ -915,7 +914,7 @@ class GenericMetadata(object):
         logger.log(u"Loading show info from metadata file in " + folder, logger.DEBUG)
 
         try:
-            with io.open(metadata_path, 'r', encoding='utf-8') as xmlFileObj:
+            with io.open(metadata_path, 'rb') as xmlFileObj:
                 showXML = etree.ElementTree(file=xmlFileObj)
 
             if showXML.findtext('title') is None or (showXML.findtext('tvdbid') is None and showXML.findtext('id') is None):
diff --git a/sickbeard/tv.py b/sickbeard/tv.py
index 05e035b20..3d84b9808 100644
--- a/sickbeard/tv.py
+++ b/sickbeard/tv.py
@@ -1142,10 +1142,10 @@ class TVShow(object):
     def saveToDB(self, forceSave=False):
 
         if not self.dirty and not forceSave:
-            logger.log(str(self.indexerid) + ": Not saving show to db - record is not dirty", logger.DEBUG)
+            # logger.log(str(self.indexerid) + ": Not saving show to db - record is not dirty", logger.DEBUG)
             return
 
-        logger.log(str(self.indexerid) + u": Saving show info to database", logger.DEBUG)
+        logger.log(u"%i: Saving to database: %s" % (self.indexerid, self.name), logger.DEBUG)
 
         controlValueDict = {"indexer_id": self.indexerid}
         newValueDict = {"indexer": self.indexer,
@@ -1949,13 +1949,9 @@ class TVEpisode(object):
         """
 
         if not self.dirty and not forceSave:
-            logger.log(str(self.show.indexerid) + u": Not saving episode to db - record is not dirty", logger.DEBUG)
+            # logger.log(str(self.show.indexerid) + u": Not saving episode to db - record is not dirty", logger.DEBUG)
             return
 
-        logger.log(str(self.show.indexerid) + u": Saving episode details to database", logger.DEBUG)
-
-        logger.log(u"STATUS IS " + str(self.status), logger.DEBUG)
-
         newValueDict = {"indexerid": self.indexerid,
                         "indexer": self.indexer,
                         "name": self.name,
@@ -1979,6 +1975,9 @@ class TVEpisode(object):
                             "season": self.season,
                             "episode": self.episode}
 
+        # logger.log(u"%s: Saving episode details to database %rx%r: %s" %
+        #            (self.show.indexerid, self.season, self.episode, statusStrings[self.status]), logger.DEBUG)
+
         # use a custom update/insert method to get the data into the DB
         myDB = db.DBConnection()
         myDB.upsert("tv_episodes", newValueDict, controlValueDict)
-- 
GitLab


From 29cc94b08ab36572540ae81f4c7ae344fd3f95dd Mon Sep 17 00:00:00 2001
From: Alexis Tyler <xo@wvvw.me>
Date: Sun, 8 Nov 2015 19:02:50 +1030
Subject: [PATCH 159/215] lint js

---
 gui/slick/js/configProviders.js       | 70 +++++++++++--------------
 gui/slick/js/configSearch.js          | 74 ++++++++++++---------------
 gui/slick/js/manageEpisodeStatuses.js | 38 ++++++--------
 gui/slick/js/restart.js               | 36 ++++++-------
 4 files changed, 98 insertions(+), 120 deletions(-)

diff --git a/gui/slick/js/configProviders.js b/gui/slick/js/configProviders.js
index 4bdce6496..2f6e1bc1f 100644
--- a/gui/slick/js/configProviders.js
+++ b/gui/slick/js/configProviders.js
@@ -12,6 +12,18 @@ $(document).ready(function(){
         });
     };
 
+    var ifExists = function(loopThroughArray, searchFor) {
+        var found = false;
+
+        loopThroughArray.forEach(function(rootObject) {
+            if (rootObject.name === searchFor) {
+                found = true;
+            }
+            console.log(rootObject.name + " while searching for: "+  searchFor);
+        });
+        return found;
+    };
+
     /**
      * Gets categories for the provided newznab provider.
      * @param {String} isDefault
@@ -29,21 +41,18 @@ $(document).ready(function(){
         }
 
         var params = {url: url, name: name, key: key};
-        var returnData;
 
         $(".updating_categories").wrapInner('<span><img src="' + srRoot + '/images/loading16' + themeSpinner + '.gif"> Updating Categories ...</span>');
-        var jqxhr = $.getJSON(srRoot + '/config/providers/getNewznabCategories', params,
-                function(data){
-                    $(this).updateNewznabCaps( data, selectedProvider );
-                    console.debug(data.tv_categories); // jshint ignore:line
-            });
+        var jqxhr = $.getJSON(srRoot + '/config/providers/getNewznabCategories', params, function(data){
+            $(this).updateNewznabCaps( data, selectedProvider );
+            console.debug(data.tv_categories); // jshint ignore:line
+        });
         jqxhr.always(function() {
             $(".updating_categories").empty();
-         });
+        });
     };
 
     $.fn.addProvider = function (id, name, url, key, cat, isDefault, showProvider) {
-
         url = $.trim(url);
         if (!url) {
             return;
@@ -76,7 +85,6 @@ $(document).ready(function(){
     };
 
     $.fn.addTorrentRssProvider = function (id, name, url, cookies, titleTAG) {
-
         var newData = [name, url, cookies, titleTAG];
         torrentRssProviders[id] = newData;
 
@@ -84,9 +92,7 @@ $(document).ready(function(){
         $(this).populateTorrentRssSection();
 
         if ($('#provider_order_list > #'+id).length === 0) {
-            var toAdd = '<li class="ui-state-default" id="' + id + '"> <input type="checkbox" id="enable_' + id + '" class="provider_enabler" CHECKED> <a href="' + anonURL + url + '" class="imgLink" target="_new"><img src="' + srRoot + '/images/providers/torrentrss.png" alt="' + name + '" width="16" height="16"></a> ' + name + '</li>';
-
-            $('#provider_order_list').append(toAdd);
+            $('#provider_order_list').append('<li class="ui-state-default" id="' + id + '"> <input type="checkbox" id="enable_' + id + '" class="provider_enabler" CHECKED> <a href="' + anonURL + url + '" class="imgLink" target="_new"><img src="' + srRoot + '/images/providers/torrentrss.png" alt="' + name + '" width="16" height="16"></a> ' + name + '</li>');
             $('#provider_order_list').sortable("refresh");
         }
 
@@ -131,6 +137,7 @@ $(document).ready(function(){
         var selectedProvider = $('#editANewznabProvider :selected').val();
         var data = '';
         var isDefault = '';
+        var rrcat = '';
 
         if (selectedProvider === 'addNewznab') {
             data = ['','',''];
@@ -207,18 +214,6 @@ $(document).ready(function(){
         }
     };
 
-    ifExists = function(loopThroughArray, searchFor) {
-        var found = false;
-
-        loopThroughArray.forEach(function(rootObject) {
-            if (rootObject.name === searchFor) {
-                found = true;
-            }
-            console.log(rootObject.name + " while searching for: "+  searchFor);
-        });
-        return found;
-    };
-
     /**
      * Updates the Global array $.fn.newznabProvidersCapabilities with a combination of newznab prov name
      * and category capabilities. Return
@@ -296,7 +291,7 @@ $(document).ready(function(){
     $.fn.makeTorrentRssProviderString = function() {
         var provStrings = [];
         for (var id in torrentRssProviders) {
-            if (obj.hasOwnProperty(id)) {
+            if (torrentRssProviders.hasOwnProperty(id)) {
                 provStrings.push(torrentRssProviders[id].join('|'));
             }
         }
@@ -441,8 +436,6 @@ $(document).ready(function(){
 
 
     $('#newznab_add').click(function(){
-        var selectedProvider = $('#editANewznabProvider :selected').val();
-
         var name = $.trim($('#newznab_name').val());
         var url = $.trim($('#newznab_url').val());
         var key = $.trim($('#newznab_key').val());
@@ -474,8 +467,6 @@ $(document).ready(function(){
     });
 
     $('#torrentrss_add').click(function(){
-        var selectedProvider = $('#editATorrentRssProvider :selected').val();
-
         var name = $('#torrentrss_name').val();
         var url = $('#torrentrss_url').val();
         var cookies = $('#torrentrss_cookies').val();
@@ -483,25 +474,22 @@ $(document).ready(function(){
         var params = { name: name, url: url, cookies: cookies, titleTAG: titleTAG};
 
         // send to the form with ajax, get a return value
-        $.getJSON(srRoot + '/config/providers/canAddTorrentRssProvider', params,
-            function(data){
-                if (data.error !== undefined) {
-                    alert(data.error);
-                    return;
-                }
+        $.getJSON(srRoot + '/config/providers/canAddTorrentRssProvider', params, function(data){
+            if (data.error !== undefined) {
+                alert(data.error);
+                return;
+            }
 
-                $(this).addTorrentRssProvider(data.success, name, url, cookies, titleTAG);
-                $(this).refreshEditAProvider();
+            $(this).addTorrentRssProvider(data.success, name, url, cookies, titleTAG);
+            $(this).refreshEditAProvider();
         });
     });
 
     $('.torrentrss_delete').on('click', function(){
-        var selectedProvider = $('#editATorrentRssProvider :selected').val();
-        $(this).deleteTorrentRssProvider(selectedProvider);
+        $(this).deleteTorrentRssProvider($('#editATorrentRssProvider :selected').val());
         $(this).refreshEditAProvider();
     });
 
-
     $(this).on('change', "[class='providerDiv_tip'] input", function(){
         $('div .providerDiv ' + "[name=" + $(this).attr('name') + "]").replaceWith($(this).clone());
         $('div .providerDiv ' + "[newznab_name=" + $(this).attr('id') + "]").replaceWith($(this).clone());
@@ -571,7 +559,7 @@ $(document).ready(function(){
 
     $("#provider_order_list").sortable({
         placeholder: 'ui-state-highlight',
-        update: function (event, ui) {
+        update: function () {
             $(this).refreshProviderList();
         }
     });
diff --git a/gui/slick/js/configSearch.js b/gui/slick/js/configSearch.js
index efe80fb9b..defb6407a 100644
--- a/gui/slick/js/configSearch.js
+++ b/gui/slick/js/configSearch.js
@@ -1,7 +1,7 @@
 $(document).ready(function(){
     var loading = '<img src="' + srRoot + '/images/loading16' + themeSpinner + '.gif" height="16" width="16" />';
 
-    function toggle_torrent_title(){
+    function toggleTorrentTitle(){
         if ($('#use_torrents').prop('checked')){
             $('#no_torrents').show();
         } else {
@@ -9,37 +9,37 @@ $(document).ready(function(){
         }
     }
 
-    $.fn.nzb_method_handler = function() {
+    $.fn.nzbMethodHandler = function() {
         var selectedProvider = $('#nzb_method :selected').val(),
-            blackhole_settings = '#blackhole_settings',
-            sabnzbd_settings = '#sabnzbd_settings',
+            blackholeSettings = '#blackhole_settings',
+            sabnzbdSettings = '#sabnzbd_settings',
             testSABnzbd = '#testSABnzbd',
-            testSABnzbd_result = '#testSABnzbd_result',
-            nzbget_settings = '#nzbget_settings';
+            testSABnzbdResult = '#testSABnzbd_result',
+            nzbgetSettings = '#nzbget_settings';
 
-        $(blackhole_settings).hide();
-        $(sabnzbd_settings).hide();
+        $(blackholeSettings).hide();
+        $(sabnzbdSettings).hide();
         $(testSABnzbd).hide();
-        $(testSABnzbd_result).hide();
-        $(nzbget_settings).hide();
+        $(testSABnzbdResult).hide();
+        $(nzbgetSettings).hide();
 
-        if ('blackhole' == selectedProvider) {
-            $(blackhole_settings).show();
-        } else if ('nzbget' == selectedProvider) {
-            $(nzbget_settings).show();
+        if (selectedProvider.toLowerCase() === 'blackhole') {
+            $(blackholeSettings).show();
+        } else if (selectedProvider.toLowerCase() === 'nzbget') {
+            $(nzbgetSettings).show();
         } else {
-            $(sabnzbd_settings).show();
+            $(sabnzbdSettings).show();
             $(testSABnzbd).show();
-            $(testSABnzbd_result).show();
+            $(testSABnzbdResult).show();
         }
     };
 
-    $.fn.rtorrent_scgi = function(){
+    $.fn.rtorrentScgi = function(){
         var selectedProvider = $('#torrent_method :selected').val();
 
-        if ('rtorrent' == selectedProvider) {
+        if (selectedProvider.toLowerCase() === 'rtorrent') {
             var hostname = $('#torrent_host').prop('value');
-            var isMatch = hostname.substr(0, 7) == "scgi://";
+            var isMatch = hostname.substr(0, 7) === "scgi://";
 
             if (isMatch) {
                 $('#torrent_username_option').hide();
@@ -56,8 +56,7 @@ $(document).ready(function(){
         }
     };
 
-    $.fn.torrent_method_handler = function() {
-
+    $.fn.torrentMethodHandler = function() {
         $('#options_torrent_clients').hide();
         $('#options_torrent_blackhole').hide();
 
@@ -68,10 +67,10 @@ $(document).ready(function(){
             label = ' label',
             directory = ' directory',
             client = '',
-            option_panel = '#options_torrent_blackhole';
+            optionPanel = '#options_torrent_blackhole';
             rpcurl = ' RPC URL';
 
-        if ('blackhole' != selectedProvider) {
+        if (selectedProvider.toLowerCase() !== 'blackhole') {
             var label_warning_deluge = '#label_warning_deluge',
                 label_anime_warning_deluge = '#label_anime_warning_deluge',
                 host_desc_rtorrent = '#host_desc_rtorrent',
@@ -103,15 +102,15 @@ $(document).ready(function(){
             $(path_synology).hide();
             $(torrent_paused_option).show();
             $(torrent_rpcurl_option).hide();
-            $(this).rtorrent_scgi();
+            $(this).rtorrentScgi();
 
-            if ('utorrent' == selectedProvider) {
+            if (selectedProvider.toLowerCase() === 'utorrent') {
                 client = 'uTorrent';
                 $(torrent_path_option).hide();
                 $('#torrent_seed_time_label').text('Minimum seeding time is');
                 $(torrent_seed_time_option).show();
                 $('#host_desc_torrent').text('URL to your uTorrent client (e.g. http://localhost:8000)');
-            } else if ('transmission' == selectedProvider){
+            } else if (selectedProvider.toLowerCase() === 'transmission'){
                 client = 'Transmission';
                 $('#torrent_seed_time_label').text('Stop seeding when inactive for');
                 $(torrent_seed_time_option).show();
@@ -120,8 +119,7 @@ $(document).ready(function(){
                 $(torrent_label_anime_option).hide();
                 $(torrent_rpcurl_option).show();
                 $('#host_desc_torrent').text('URL to your Transmission client (e.g. http://localhost:9091)');
-                //$('#directory_title').text(client + directory);
-            } else if ('deluge' == selectedProvider){
+            } else if (selectedProvider.toLowerCase() === 'deluge'){
                 client = 'Deluge';
                 $(torrent_verify_cert_option).show();
                 $(torrent_verify_deluge).show();
@@ -131,7 +129,6 @@ $(document).ready(function(){
                 $('#torrent_username_option').hide();
                 $('#torrent_username').prop('value', '');
                 $('#host_desc_torrent').text('URL to your Deluge client (e.g. http://localhost:8112)');
-                //$('#directory_title').text(client + directory);
             } else if ('deluged' == selectedProvider){
                 client = 'Deluge';
                 $(torrent_verify_cert_option).hide();
@@ -141,7 +138,6 @@ $(document).ready(function(){
                 $(label_anime_warning_deluge).show();
                 $('#torrent_username_option').show();
                 $('#host_desc_torrent').text('IP or Hostname of your Deluge Daemon (e.g. scgi://localhost:58846)');
-                //$('#directory_title').text(client + directory);
             } else if ('download_station' == selectedProvider){
                 client = 'Synology DS';
                 $(torrent_label_option).hide();
@@ -149,7 +145,6 @@ $(document).ready(function(){
                 $('#torrent_paused_option').hide();
                 $(torrent_path_option).find('.fileBrowser').hide();
                 $('#host_desc_torrent').text('URL to your Synology DS client (e.g. http://localhost:5000)');
-                //$('#directory_title').text(client + directory);
                 $(path_synology).show();
             } else if ('rtorrent' == selectedProvider){
                 client = 'rTorrent';
@@ -159,7 +154,6 @@ $(document).ready(function(){
                 $(torrent_verify_deluge).hide();
                 $(torrent_verify_rtorrent).show();
                 $(torrent_auth_type_option).show();
-                //$('#directory_title').text(client + directory);
             } else if ('qbittorrent' == selectedProvider){
                 client = 'qbittorrent';
                 $(torrent_path_option).hide();
@@ -182,14 +176,14 @@ $(document).ready(function(){
             $('#password_title').text(client + password);
             $('#torrent_client').text(client);
             $('#rpcurl_title').text(client + rpcurl);
-            option_panel = '#options_torrent_clients';
+            optionPanel = '#options_torrent_clients';
         }
-        $(option_panel).show();
+        $(optionPanel).show();
     };
 
-    $('#nzb_method').change($(this).nzb_method_handler);
+    $('#nzb_method').change($(this).nzbMethodHandler);
 
-    $(this).nzb_method_handler();
+    $(this).nzbMethodHandler();
 
     $('#testSABnzbd').click(function(){
         $('#testSABnzbd_result').html(loading);
@@ -205,12 +199,12 @@ $(document).ready(function(){
     });
 
 
-    $('#torrent_method').change($(this).torrent_method_handler);
+    $('#torrent_method').change($(this).torrentMethodHandler);
 
-    $(this).torrent_method_handler();
+    $(this).torrentMethodHandler();
 
     $('#use_torrents').click(function(){
-        toggle_torrent_title();
+        toggleTorrentTitle();
     });
 
     $('#test_torrent').click(function(){
@@ -224,5 +218,5 @@ $(document).ready(function(){
         function(data){ $('#test_torrent_result').html(data); });
     });
 
-    $('#torrent_host').change($(this).rtorrent_scgi);
+    $('#torrent_host').change($(this).rtorrentScgi);
 });
diff --git a/gui/slick/js/manageEpisodeStatuses.js b/gui/slick/js/manageEpisodeStatuses.js
index 313087e30..8118aa478 100644
--- a/gui/slick/js/manageEpisodeStatuses.js
+++ b/gui/slick/js/manageEpisodeStatuses.js
@@ -1,52 +1,48 @@
 $(document).ready(function() {
 
-    function make_row(indexer_id, season, episode, name, checked) {
-        checked = checked ? ' checked' : '';
-
-        var row_class = $('#row_class').val();
-
+    function makeRow(indexerId, season, episode, name, checked) {
         var row = '';
-        row += ' <tr class="'+row_class+' show-'+indexer_id+'">';
-        row += '  <td class="tableleft" align="center"><input type="checkbox" class="'+indexer_id+'-epcheck" name="'+indexer_id+'-'+season+'x'+episode+'"'+checked+'></td>';
-        row += '  <td>'+season+'x'+episode+'</td>';
-        row += '  <td class="tableright" style="width: 100%">'+name+'</td>';
+        row += ' <tr class="' + $('#row_class').val() + ' show-' + indexerId + '">';
+        row += '  <td class="tableleft" align="center"><input type="checkbox" class="' + indexerId + '-epcheck" name="' + indexerId + '-' + season + 'x' + episode + '"' + (checked ? ' checked' : '') + '></td>';
+        row += '  <td>' + season + 'x' + episode + '</td>';
+        row += '  <td class="tableright" style="width: 100%">' + name + '</td>';
         row += ' </tr>';
 
         return row;
     }
 
     $('.allCheck').click(function(){
-        var indexer_id = $(this).attr('id').split('-')[1];
-        $('.'+indexer_id+'-epcheck').prop('checked', $(this).prop('checked'));
+        var indexerId = $(this).attr('id').split('-')[1];
+        $('.' + indexerId + '-epcheck').prop('checked', $(this).prop('checked'));
     });
 
     $('.get_more_eps').click(function(){
-        var cur_indexer_id = $(this).attr('id');
-        var checked = $('#allCheck-'+cur_indexer_id).prop('checked');
-        var last_row = $('tr#'+cur_indexer_id);
+        var curIndexerId = $(this).attr('id');
+        var checked = $('#allCheck-' + curIndexerId).prop('checked');
+        var lastRow = $('tr#' + curIndexerId);
         var clicked = $(this).attr('data-clicked');
         var action = $(this).attr('value');
 
-        if (!clicked)  {
+        if(!clicked) {
             $.getJSON(srRoot+'/manage/showEpisodeStatuses',{
-                indexer_id: cur_indexer_id,
+                indexer_id: curIndexerId, // jshint ignore:line
                 whichStatus: $('#oldStatus').val()
             }, function (data) {
                 $.each(data, function(season,eps){
                     $.each(eps, function(episode, name) {
                         //alert(season+'x'+episode+': '+name);
-                        last_row.after(make_row(cur_indexer_id, season, episode, name, checked));
+                        lastRow.after(makeRow(curIndexerId, season, episode, name, checked));
                     });
                 });
             });
             $(this).attr('data-clicked',1);
             $(this).prop('value', 'Collapse');
         } else {
-            if (action === 'Collapse') {
-                $('table tr').filter('.show-'+cur_indexer_id).hide();
+            if (action.toLowerCase() === 'collapse') {
+                $('table tr').filter('.show-' + curIndexerId).hide();
                 $(this).prop('value', 'Expand');
-            } else if (action === 'Expand') {
-                $('table tr').filter('.show-'+cur_indexer_id).show();
+            } else if (action.toLowerCase() === 'expand') {
+                $('table tr').filter('.show-' + curIndexerId).show();
                 $(this).prop('value', 'Collapse');
             }
         }
diff --git a/gui/slick/js/restart.js b/gui/slick/js/restart.js
index 8fec86c0b..5c5e1b7dc 100644
--- a/gui/slick/js/restart.js
+++ b/gui/slick/js/restart.js
@@ -3,37 +3,37 @@ $(document).ready(function() {
     window.console_prefix = 'Restart: '; // jshint ignore:line
     window.current_pid = ''; // jshint ignore:line
 
-    var is_alive_url = srRoot + '/home/is_alive/';
+    var isAliveUrl = srRoot + '/home/is_alive/';
 
-    var check_isAlive = setInterval(is_alive, 1000);
+    var checkIsAlive = setInterval(isAlive, 1000);
 
-    function is_alive() {
+    function isAlive() {
         // Setup error detection
         $.ajaxSetup({
-            error: ajax_error
+            error: ajaxError
         });
 
-        var jqxhr = $.get(is_alive_url, function(data) {
-            if (data.msg == 'nope') {
+        var jqxhr = $.get(isAliveUrl, function(data) {
+            if (data.msg.toLowerCase() === 'nope') {
                 // if it's still initializing then just wait and try again
-                if (console_debug) {
-                    console.log(console_prefix + 'is_alive: Sickrage is starting.');
+                if (console_debug) { // jshint ignore:line
+                    console.log(console_prefix + 'isAlive: Sickrage is starting.');
                 }
                 $('#shut_down_loading').hide();
                 $('#shut_down_success').show();
                 $('#restart_message').show();
             } else {
                 // if this is before we've even shut down then just try again later
-                if (console_debug) {
-                    console.log(console_prefix + 'is_alive: Sickrage is shutdowning.');
+                if (console_debug) { // jshint ignore:line
+                    console.log(console_prefix + 'isAlive: Sickrage is shutdowning.');
                 }
                 if (current_pid === '' || data.msg == current_pid) {
                     current_pid = data.msg;
                 // if we're ready to go then redirect to new url
                 } else {
-                    clearInterval(check_isAlive);
+                    clearInterval(checkIsAlive);
                     if (console_debug) {
-                        console.log(console_prefix + 'is_alive: Setting redirect.');
+                        console.log(console_prefix + 'isAlive: Setting redirect.');
                     }
                     $('#restart_loading').hide();
                     $('#restart_success').show();
@@ -45,20 +45,20 @@ $(document).ready(function() {
         }, 'jsonp');
 
         jqxhr.fail(function() {
-            ajax_error();
+            ajaxError();
         });
     }
 
-    function ajax_error(x, e) {
+    function ajaxError(x, e) {
         if (console_debug) {
             if (x.status === 0) {
-                console.log(console_prefix + 'is_alive: Sickrage is not responding.');
+                console.log(console_prefix + 'isAlive: Sickrage is not responding.');
             } else if (x.status == 404) {
-                console.log(console_prefix + 'is_alive: Requested URL not found.');
+                console.log(console_prefix + 'isAlive: Requested URL not found.');
             } else if (x.status == 500) {
-                console.log(console_prefix + 'is_alive: Internel Server Error.');
+                console.log(console_prefix + 'isAlive: Internel Server Error.');
             }  else {
-                console.log(console_prefix + 'is_alive: Unknow Error.\n' + x.responseText);
+                console.log(console_prefix + 'isAlive: Unknow Error.\n' + x.responseText);
             }
         }
     }
-- 
GitLab


From baa20ef23b6e2a8190dc0c50833c4224c316c907 Mon Sep 17 00:00:00 2001
From: Alexis Tyler <xo@wvvw.me>
Date: Sun, 8 Nov 2015 19:29:34 +1030
Subject: [PATCH 160/215] linted js

---
 gui/slick/js/configSubtitles.js |  5 +----
 gui/slick/js/displayShow.js     |  3 ---
 gui/slick/js/restart.js         | 16 ++++++++--------
 3 files changed, 9 insertions(+), 15 deletions(-)
 delete mode 100644 gui/slick/js/displayShow.js

diff --git a/gui/slick/js/configSubtitles.js b/gui/slick/js/configSubtitles.js
index 8414d8e9b..5ff3942a2 100644
--- a/gui/slick/js/configSubtitles.js
+++ b/gui/slick/js/configSubtitles.js
@@ -15,8 +15,6 @@ $(document).ready(function(){
     $.fn.addService = function (id, name, url, key, isDefault, showService) {
         if (url.match('/$') === null) { url = url + '/'; }
 
-        var newData = [isDefault, [name, url, key]];
-
         if ($('#service_order_list > #'+id).length === 0 && showService !== false) {
             var toAdd = '<li class="ui-state-default" id="' + id + '"> <input type="checkbox" id="enable_' + id + '" class="service_enabler" CHECKED> <a href="' + anonURL + url + '" class="imgLink" target="_new"><img src="' + srRoot + '/images/services/newznab.gif" alt="' + name + '" width="16" height="16"></a> ' + name + '</li>';
 
@@ -47,13 +45,12 @@ $(document).ready(function(){
         $(this).refreshServiceList();
     });
 
-
     // initialization stuff
     $(this).showHideServices();
 
     $("#service_order_list").sortable({
         placeholder: 'ui-state-highlight',
-        update: function (event, ui) {
+        update: function () {
             $(this).refreshServiceList();
         }
     });
diff --git a/gui/slick/js/displayShow.js b/gui/slick/js/displayShow.js
deleted file mode 100644
index a01c02b14..000000000
--- a/gui/slick/js/displayShow.js
+++ /dev/null
@@ -1,3 +0,0 @@
-$(document).ready(function () {
-
-});
diff --git a/gui/slick/js/restart.js b/gui/slick/js/restart.js
index 5c5e1b7dc..f51c67b86 100644
--- a/gui/slick/js/restart.js
+++ b/gui/slick/js/restart.js
@@ -7,7 +7,7 @@ $(document).ready(function() {
 
     var checkIsAlive = setInterval(isAlive, 1000);
 
-    function isAlive() {
+    function isAlive() {  // jshint ignore:line
         // Setup error detection
         $.ajaxSetup({
             error: ajaxError
@@ -17,7 +17,7 @@ $(document).ready(function() {
             if (data.msg.toLowerCase() === 'nope') {
                 // if it's still initializing then just wait and try again
                 if (console_debug) { // jshint ignore:line
-                    console.log(console_prefix + 'isAlive: Sickrage is starting.');
+                    console.log(console_prefix + 'isAlive: Sickrage is starting.'); // jshint ignore:line
                 }
                 $('#shut_down_loading').hide();
                 $('#shut_down_success').show();
@@ -25,15 +25,15 @@ $(document).ready(function() {
             } else {
                 // if this is before we've even shut down then just try again later
                 if (console_debug) { // jshint ignore:line
-                    console.log(console_prefix + 'isAlive: Sickrage is shutdowning.');
+                    console.log(console_prefix + 'isAlive: Sickrage is shutdowning.'); // jshint ignore:line
                 }
-                if (current_pid === '' || data.msg == current_pid) {
-                    current_pid = data.msg;
+                if (current_pid === '' || data.msg == current_pid) { // jshint ignore:line
+                    current_pid = data.msg; // jshint ignore:line
                 // if we're ready to go then redirect to new url
                 } else {
                     clearInterval(checkIsAlive);
-                    if (console_debug) {
-                        console.log(console_prefix + 'isAlive: Setting redirect.');
+                    if (console_debug) { // jshint ignore:line
+                        console.log(console_prefix + 'isAlive: Setting redirect.'); // jshint ignore:line
                     }
                     $('#restart_loading').hide();
                     $('#restart_success').show();
@@ -50,7 +50,7 @@ $(document).ready(function() {
     }
 
     function ajaxError(x, e) {
-        if (console_debug) {
+        if (console_debug) { // jshint ignore:line
             if (x.status === 0) {
                 console.log(console_prefix + 'isAlive: Sickrage is not responding.');
             } else if (x.status == 404) {
-- 
GitLab


From 8a9496b51f2962df2a6da6631c588e009f0485fb Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Gae=CC=88tan=20Muller?= <m.gaetan89@gmail.com>
Date: Sun, 8 Nov 2015 11:42:02 +0100
Subject: [PATCH 161/215] Use names parameters when adding a show from the API

---
 sickbeard/webapi.py | 39 ++++++++++++++++++++++-----------------
 1 file changed, 22 insertions(+), 17 deletions(-)

diff --git a/sickbeard/webapi.py b/sickbeard/webapi.py
index 96a3c1259..431b0ab8f 100644
--- a/sickbeard/webapi.py
+++ b/sickbeard/webapi.py
@@ -24,7 +24,6 @@ import urllib
 import datetime
 import re
 import traceback
-
 import sickbeard
 from sickrage.helper.common import dateFormat, dateTimeFormat, timeFormat
 from sickrage.helper.encoding import ek
@@ -39,7 +38,6 @@ from sickrage.show.History import History
 from sickrage.show.Show import Show
 from sickrage.system.Restart import Restart
 from sickrage.system.Shutdown import Shutdown
-
 from sickbeard.versionChecker import CheckVersion
 from sickbeard import db, logger, ui, helpers
 from sickbeard import search_queue
@@ -67,7 +65,6 @@ try:
 except ImportError:
     import simplejson as json
 
-
 from tornado.web import RequestHandler
 
 indexer_ids = ["indexerid", "tvdbid"]
@@ -86,6 +83,8 @@ result_type_map = {
     RESULT_FATAL: "fatal",
     RESULT_DENIED: "denied",
 }
+
+
 # basically everything except RESULT_SUCCESS / success is bad
 
 
@@ -161,7 +160,7 @@ class ApiHandler(RequestHandler):
                 out = callback + '(' + out + ');'  # wrap with JSONP call if requested
         except Exception, e:  # if we fail to generate the output fake an error
             logger.log(u"API :: " + traceback.format_exc(), logger.DEBUG)
-            out = '{"result": "%s", "message": "error while composing output: %s"}' %\
+            out = '{"result": "%s", "message": "error while composing output: %s"}' % \
                   (result_type_map[RESULT_ERROR], ex(e))
         return out
 
@@ -234,7 +233,6 @@ class ApiHandler(RequestHandler):
 
         return outDict
 
-
     def filter_params(self, cmd, args, kwargs):
         """ return only params kwargs that are for cmd
             and rename them to a clean version (remove "<cmd>_")
@@ -618,6 +616,7 @@ class IntParseError(Exception):
     A value could not be parsed into an int, but should be parsable to an int
     """
 
+
 # -------------------------------------------------------------------------------------#
 
 
@@ -754,7 +753,7 @@ class CMD_Episode(ApiCall):
         if helpers.tryInt(episode['airdate'], 1) > 693595: # 1900
             episode['airdate'] = sbdatetime.sbdatetime.sbfdate(sbdatetime.sbdatetime.convert_to_setting(
                 network_timezones.parse_date_time(int(episode['airdate']), showObj.airs, showObj.network)),
-                                                               d_preset=dateFormat)
+                d_preset=dateFormat)
         else:
             episode['airdate'] = 'Never'
 
@@ -853,7 +852,6 @@ class CMD_EpisodeSetStatus(ApiCall):
         # convert the string status to a int
         for status in statusStrings.statusStrings:
             if str(statusStrings[status]).lower() == str(self.status).lower():
-
                 self.status = status
                 break
         else:  # if we dont break out of the for loop we got here.
@@ -2016,8 +2014,11 @@ class CMD_ShowAddExisting(ApiCall):
         if iqualityID or aqualityID:
             newQuality = Quality.combineQualities(iqualityID, aqualityID)
 
-        sickbeard.showQueueScheduler.action.addShow(int(indexer), int(self.indexerid), self.location, SKIPPED,
-                                                    newQuality, int(self.flatten_folders))
+        sickbeard.showQueueScheduler.action.addShow(
+            int(indexer), int(self.indexerid), self.location, default_status=sickbeard.STATUS_DEFAULT,
+            quality=newQuality, flatten_folders=int(self.flatten_folders), subtitles=self.subtitles,
+            default_status_after=sickbeard.STATUS_DEFAULT_AFTER, archive=self.archive_firstmatch
+        )
 
         return _responds(RESULT_SUCCESS, {"name": indexerName}, indexerName + " has been queued to be added")
 
@@ -2040,7 +2041,9 @@ class CMD_ShowAddNew(ApiCall):
             "anime": {"desc": "True to mark the show as an anime, False otherwise"},
             "scene": {"desc": "True if episodes search should be made by scene numbering, False otherwise"},
             "future_status": {"desc": "The status of future episodes"},
-            "archive_firstmatch": {"desc": "True if episodes should be archived when first match is downloaded, False otherwise"},
+            "archive_firstmatch": {
+                "desc": "True if episodes should be archived when first match is downloaded, False otherwise"
+            },
         }
     }
 
@@ -2184,10 +2187,11 @@ class CMD_ShowAddNew(ApiCall):
             else:
                 helpers.chmodAsParent(showPath)
 
-        sickbeard.showQueueScheduler.action.addShow(int(indexer), int(self.indexerid), showPath, newStatus,
-                                                    newQuality,
-                                                    int(self.flatten_folders), self.lang, self.subtitles, self.anime,
-                                                    self.scene, default_status_after=default_ep_status_after, archive=self.archive_firstmatch)  # @UndefinedVariable
+        sickbeard.showQueueScheduler.action.addShow(
+            int(indexer), int(self.indexerid), showPath, default_status=newStatus, quality=newQuality,
+            flatten_folders=int(self.flatten_folders), lang=self.lang, subtitles=self.subtitles, anime=self.anime,
+            scene=self.scene, default_status_after=default_ep_status_after, archive=self.archive_firstmatch
+        )
 
         return _responds(RESULT_SUCCESS, {"name": indexerName}, indexerName + " has been queued to be added")
 
@@ -2534,7 +2538,7 @@ class CMD_ShowSeasons(ApiCall):
                 status, quality = Quality.splitCompositeStatus(int(row["status"]))
                 row["status"] = _get_status_Strings(status)
                 row["quality"] = get_quality_string(quality)
-                if helpers.tryInt(row['airdate'], 1) > 693595: # 1900
+                if helpers.tryInt(row['airdate'], 1) > 693595:  # 1900
                     dtEpisodeAirs = sbdatetime.sbdatetime.convert_to_setting(
                         network_timezones.parse_date_time(row['airdate'], showObj.airs, showObj.network))
                     row['airdate'] = sbdatetime.sbdatetime.sbfdate(dtEpisodeAirs, d_preset=dateFormat)
@@ -2561,7 +2565,7 @@ class CMD_ShowSeasons(ApiCall):
                 status, quality = Quality.splitCompositeStatus(int(row["status"]))
                 row["status"] = _get_status_Strings(status)
                 row["quality"] = get_quality_string(quality)
-                if helpers.tryInt(row['airdate'], 1) > 693595: # 1900
+                if helpers.tryInt(row['airdate'], 1) > 693595:  # 1900
                     dtEpisodeAirs = sbdatetime.sbdatetime.convert_to_setting(
                         network_timezones.parse_date_time(row['airdate'], showObj.airs, showObj.network))
                     row['airdate'] = sbdatetime.sbdatetime.sbfdate(dtEpisodeAirs, d_preset=dateFormat)
@@ -2823,7 +2827,7 @@ class CMD_Shows(ApiCall):
                 "subtitles": (0, 1)[curShow.subtitles],
             }
 
-            if helpers.tryInt(curShow.nextaired, 1) > 693595: # 1900
+            if helpers.tryInt(curShow.nextaired, 1) > 693595:  # 1900
                 dtEpisodeAirs = sbdatetime.sbdatetime.convert_to_setting(
                     network_timezones.parse_date_time(curShow.nextaired, curShow.airs, showDict['network']))
                 showDict['next_ep_airdate'] = sbdatetime.sbdatetime.sbfdate(dtEpisodeAirs, d_preset=dateFormat)
@@ -2862,6 +2866,7 @@ class CMD_ShowsStats(ApiCall):
             'shows_total': stats['shows']['total'],
         })
 
+
 # WARNING: never define a cmd call string that contains a "_" (underscore)
 # this is reserved for cmd indexes used while cmd chaining
 
-- 
GitLab


From 9736515c72e16854353f6874b4f227b248658812 Mon Sep 17 00:00:00 2001
From: Dustyn Gibson <miigotu@gmail.com>
Date: Sun, 8 Nov 2015 05:33:24 -0800
Subject: [PATCH 162/215] Hella lint errors and some actual bugs fixed

---
 gui/slick/views/home_postprocess.mako |  4 +-
 sickbeard/browser.py                  |  5 +-
 sickbeard/classes.py                  | 25 +++++----
 sickbeard/common.py                   |  8 +--
 sickbeard/imdbPopular.py              |  4 +-
 sickbeard/naming.py                   |  4 +-
 sickbeard/notifiers/pushover.py       |  4 +-
 sickbeard/nzbget.py                   | 19 +++----
 sickbeard/processTV.py                | 77 +++++++++++++--------------
 sickbeard/providers/iptorrents.py     |  5 +-
 sickbeard/show_queue.py               | 34 +++++++-----
 sickbeard/traktChecker.py             | 59 ++++++++++----------
 sickbeard/webserve.py                 | 12 ++---
 13 files changed, 132 insertions(+), 128 deletions(-)

diff --git a/gui/slick/views/home_postprocess.mako b/gui/slick/views/home_postprocess.mako
index 795c3d3cd..670119977 100644
--- a/gui/slick/views/home_postprocess.mako
+++ b/gui/slick/views/home_postprocess.mako
@@ -16,13 +16,13 @@
 <div id="postProcess">
     <form name="processForm" method="post" action="processEpisode" style="line-height: 40px;">
     <table>
-        <input type="hidden" id="type" name="type" value="manual">
+        <input type="hidden" id="type" name="proc_type" value="manual">
         <tr>
             <td style="padding-right:10px;">
                 <b>Enter the folder containing the episode:</b>
             </td>
             <td>
-                <input type="text" name="dir" id="episodeDir" class="form-control form-control-inline input-sm input350" />
+                <input type="text" name="proc_dir" id="episodeDir" class="form-control form-control-inline input-sm input350" />
             </td>
         </tr>
         <tr>
diff --git a/sickbeard/browser.py b/sickbeard/browser.py
index 127fbe9c1..f7b7b3cbb 100644
--- a/sickbeard/browser.py
+++ b/sickbeard/browser.py
@@ -83,13 +83,14 @@ def foldersAtPath(path, includeParent=False, includeFiles=False):
         fileList = [{'name': filename, 'path': ek(os.path.join, parentPath, filename)} for filename in ek(os.listdir, parentPath)]
 
     if not includeFiles:
-        fileList = filter(lambda entry: ek(os.path.isdir, entry['path']), fileList)
+        fileList = [x for x in fileList if ek(os.path.isdir, x['path'])]
 
     # prune out directories to protect the user from doing stupid things (already lower case the dir to reduce calls)
     hideList = ["boot", "bootmgr", "cache", "msocache", "recovery", "$recycle.bin", "recycler",
                 "system volume information", "temporary internet files"]  # windows specific
     hideList += [".fseventd", ".spotlight", ".trashes", ".vol", "cachedmessages", "caches", "trash"]  # osx specific
-    fileList = filter(lambda entry: entry['name'].lower() not in hideList, fileList)
+
+    fileList = [x for x in fileList if x['name'].lower() not in hideList]
 
     fileList = sorted(fileList,
                       lambda x, y: cmp(os.path.basename(x['name']).lower(), os.path.basename(y['path']).lower()))
diff --git a/sickbeard/classes.py b/sickbeard/classes.py
index 534888efa..fdb20d3bc 100644
--- a/sickbeard/classes.py
+++ b/sickbeard/classes.py
@@ -25,7 +25,7 @@ import urllib
 import datetime
 from dateutil import parser
 
-from common import USER_AGENT, Quality
+from sickbeard.common import USER_AGENT, Quality
 from sickrage.helper.common import dateFormat, dateTimeFormat
 
 
@@ -73,13 +73,13 @@ class AuthURLOpener(SickBeardURLopener):
         return SickBeardURLopener.open(self, url)
 
 
-class SearchResult:
+class SearchResult(object):
     """
     Represents a search result from an indexer.
     """
 
     def __init__(self, episodes):
-        self.provider = -1
+        self.provider = None
 
         # release show object
         self.show = None
@@ -114,6 +114,8 @@ class SearchResult:
         # content
         self.content = None
 
+        self.resultType = ''
+
     def __str__(self):
 
         if self.provider is None:
@@ -160,7 +162,7 @@ class TorrentSearchResult(SearchResult):
     resultType = "torrent"
 
 
-class AllShowsListUI:
+class AllShowsListUI(object):
     """
     This class is for indexer api. Instead of prompting with a UI to pick the
     desired result out of a list of shows it tries to be smart about it
@@ -203,7 +205,7 @@ class AllShowsListUI:
         return searchResults
 
 
-class ShowListUI:
+class ShowListUI(object):
     """
     This class is for tvdb-api. Instead of prompting with a UI to pick the
     desired result out of a list of shows it tries to be smart about it
@@ -217,17 +219,18 @@ class ShowListUI:
     def selectSeries(self, allSeries):
         try:
             # try to pick a show that's in my show list
+            showIDList = [int(x.indexerid) for x in sickbeard.showList]
             for curShow in allSeries:
-                if filter(lambda x: int(x.indexerid) == int(curShow['id']), sickbeard.showList):
+                if int(curShow['id']) in showIDList:
                     return curShow
-        except:
+        except Exception:
             pass
 
         # if nothing matches then return first result
         return allSeries[0]
 
 
-class Proper:
+class Proper(object):
     def __init__(self, name, url, date, show):
         self.name = name
         self.url = url
@@ -250,7 +253,7 @@ class Proper:
             self.indexerid) + " from " + str(sickbeard.indexerApi(self.indexer).name)
 
 
-class ErrorViewer:
+class ErrorViewer(object):
     """
     Keeps a static list of UIErrors to be displayed on the UI and allows
     the list to be cleared.
@@ -274,7 +277,7 @@ class ErrorViewer:
         return ErrorViewer.errors
 
 
-class WarningViewer:
+class WarningViewer(object):
     """
     Keeps a static list of (warning) UIErrors to be displayed on the UI and allows
     the list to be cleared.
@@ -298,7 +301,7 @@ class WarningViewer:
         return WarningViewer.errors
 
 
-class UIError:
+class UIError(object):
     """
     Represents an error to be displayed in the web UI.
     """
diff --git a/sickbeard/common.py b/sickbeard/common.py
index 9970e285d..7349d69df 100644
--- a/sickbeard/common.py
+++ b/sickbeard/common.py
@@ -108,8 +108,8 @@ multiEpStrings[NAMING_EXTEND] = "Extend"
 multiEpStrings[NAMING_LIMITED_EXTEND] = "Extend (Limited)"
 multiEpStrings[NAMING_LIMITED_EXTEND_E_PREFIXED] = "Extend (Limited, E-prefixed)"
 
-# pylint: disable=W0232,C1001
-class Quality:
+# pylint: disable=W0232
+class Quality(object):
     NONE = 0  # 0
     SDTV = 1  # 1
     SDDVD = 1 << 1  # 2
@@ -594,8 +594,8 @@ statusStrings = StatusStrings(
      SNATCHED_BEST: "Snatched (Best)"
      })
 
-# pylint: disable=R0903,C1001
-class Overview:
+# pylint: disable=R0903
+class Overview(object):
 
     UNAIRED = UNAIRED  # 1
     QUAL = 2
diff --git a/sickbeard/imdbPopular.py b/sickbeard/imdbPopular.py
index 3d09ec4b0..26af7f895 100644
--- a/sickbeard/imdbPopular.py
+++ b/sickbeard/imdbPopular.py
@@ -8,8 +8,8 @@ import sickbeard
 from sickbeard import helpers
 from sickrage.helper.encoding import ek
 
-# pylint: disable=C1001
-class imdbPopular:
+
+class imdbPopular(object):
     def __init__(self):
         """Gets a list of most popular TV series from imdb"""
 
diff --git a/sickbeard/naming.py b/sickbeard/naming.py
index 3e64f17cc..4c7965338 100644
--- a/sickbeard/naming.py
+++ b/sickbeard/naming.py
@@ -25,9 +25,9 @@ from sickbeard import tv
 from sickbeard import common
 from sickbeard import logger
 from sickbeard.name_parser.parser import NameParser
-from sickrage.helper.encoding import ek
+from sickbeard.common import Quality, DOWNLOADED
 
-from common import Quality, DOWNLOADED
+from sickrage.helper.encoding import ek
 
 name_presets = (
     '%SN - %Sx%0E - %EN',
diff --git a/sickbeard/notifiers/pushover.py b/sickbeard/notifiers/pushover.py
index dbc422877..e605f3c31 100644
--- a/sickbeard/notifiers/pushover.py
+++ b/sickbeard/notifiers/pushover.py
@@ -29,8 +29,8 @@ from sickrage.helper.exceptions import ex
 
 API_URL = "https://api.pushover.net/1/messages.json"
 
-# pylint: disable=W0232,C1001
-class PushoverNotifier:
+# pylint: disable=W0232
+class PushoverNotifier(object):
     def test_notify(self, userKey=None, apiKey=None):
         return self._notifyPushover("This is a test notification from SickRage", 'Test', userKey=userKey, apiKey=apiKey, force=True)
 
diff --git a/sickbeard/nzbget.py b/sickbeard/nzbget.py
index 64278c9a5..b37bc57b9 100644
--- a/sickbeard/nzbget.py
+++ b/sickbeard/nzbget.py
@@ -18,20 +18,15 @@
 # along with SickRage.  If not, see <http://www.gnu.org/licenses/>.
 
 
-
 import httplib
 import datetime
-
-import sickbeard
-
 from base64 import standard_b64encode
 import xmlrpclib
 
+import sickbeard
 from sickbeard.providers.generic import GenericProvider
-
 from sickbeard import logger, helpers
-
-from common import Quality
+from sickbeard.common import Quality
 
 
 def sendNZB(nzb, proper=False):
@@ -46,7 +41,7 @@ def sendNZB(nzb, proper=False):
     category = sickbeard.NZBGET_CATEGORY
     if nzb.show.is_anime:
         category = sickbeard.NZBGET_CATEGORY_ANIME
-    
+
     if sickbeard.NZBGET_USE_HTTPS:
         nzbgetXMLrpc = "https://%(username)s:%(password)s@%(host)s/xmlrpc"
     else:
@@ -73,7 +68,7 @@ def sendNZB(nzb, proper=False):
         return False
 
     except xmlrpclib.ProtocolError, e:
-        if (e.errmsg == "Unauthorized"):
+        if e.errmsg == "Unauthorized":
             logger.log(u"NZBget username or password is incorrect.", logger.ERROR)
         else:
             logger.log(u"Protocol Error: " + e.errmsg, logger.ERROR)
@@ -121,7 +116,7 @@ def sendNZB(nzb, proper=False):
                 if nzb.resultType == "nzb":
                     genProvider = GenericProvider("")
                     data = genProvider.getURL(nzb.url)
-                    if (data == None):
+                    if data == None:
                         return False
                     nzbcontent64 = standard_b64encode(data)
                 nzbget_result = nzbGetRPC.append(nzb.name + ".nzb", category, addToTop, nzbcontent64)
@@ -133,7 +128,7 @@ def sendNZB(nzb, proper=False):
                 nzbget_result = nzbGetRPC.appendurl(nzb.name + ".nzb", category, nzbgetprio, False,
                                                     nzb.url, False, dupekey, dupescore, "score")
         # v13+ has a new combined append method that accepts both (url and content)
-        # also the return value has changed from boolean to integer 
+        # also the return value has changed from boolean to integer
         # (Positive number representing NZBID of the queue item. 0 and negative numbers represent error codes.)
         elif nzbget_version >= 13:
             nzbget_result = True if nzbGetRPC.append(nzb.name + ".nzb", nzbcontent64 if nzbcontent64 is not None else nzb.url,
@@ -153,6 +148,6 @@ def sendNZB(nzb, proper=False):
         else:
             logger.log(u"NZBget could not add %s to the queue" % (nzb.name + ".nzb"), logger.ERROR)
             return False
-    except:
+    except Exception:
         logger.log(u"Connect Error to NZBget: could not add %s to the queue" % (nzb.name + ".nzb"), logger.ERROR)
         return False
diff --git a/sickbeard/processTV.py b/sickbeard/processTV.py
index 0ba1f8899..6ea2c5a0b 100644
--- a/sickbeard/processTV.py
+++ b/sickbeard/processTV.py
@@ -44,7 +44,7 @@ import shutil_custom
 shutil.copyfile = shutil_custom.copyfile_custom
 
 
-class ProcessResult:
+class ProcessResult(object):
     def __init__(self):
         self.result = True
         self.output = ''
@@ -127,8 +127,7 @@ def delete_files(processPath, notwantedFiles, result, force=False):
             try:
                 ek(os.chmod, cur_file_path, stat.S_IWRITE)
             except OSError, e:
-                result.output += logHelper(u"Cannot change permissions of " + cur_file_path + ': ' + str(e.strerror),
-                                       logger.DEBUG)
+                result.output += logHelper(u"Cannot change permissions of " + cur_file_path + ': ' + ex(e), logger.DEBUG)
         try:
             ek(os.remove, cur_file_path)
         except OSError, e:
@@ -140,7 +139,7 @@ def logHelper(logMessage, logLevel=logger.INFO):
     return logMessage + u"\n"
 
 
-def processDir(dirName, nzbName=None, process_method=None, force=False, is_priority=None, delete_on=False, failed=False, type="auto"):
+def processDir(dirName, nzbName=None, process_method=None, force=False, is_priority=None, delete_on=False, failed=False, proc_type="auto"):
     """
     Scans through the files in dirName and processes whatever media files it finds
 
@@ -148,7 +147,7 @@ def processDir(dirName, nzbName=None, process_method=None, force=False, is_prior
     :param nzbName: The NZB name which resulted in this folder being downloaded
     :param force: True to postprocess already postprocessed files
     :param failed: Boolean for whether or not the download failed
-    :param type: Type of postprocessing auto or manual
+    :param proc_type: Type of postprocessing auto or manual
     """
 
     result = ProcessResult()
@@ -174,10 +173,10 @@ def processDir(dirName, nzbName=None, process_method=None, force=False, is_prior
             logger.DEBUG)
         return result.output
 
-    path, dirs, files = get_path_dir_files(dirName, nzbName, type)
+    path, dirs, files = get_path_dir_files(dirName, nzbName, proc_type)
 
-    files = filter(helpers.notTorNZBFile, files)
-    SyncFiles = filter(helpers.isSyncFile, files)
+    files = [x for x in files if helpers.notTorNZBFile(x)]
+    SyncFiles = [x for x in files if helpers.isSyncFile(x)]
 
     # Don't post process if files are still being synced and option is activated
     if SyncFiles and sickbeard.POSTPONE_IF_SYNC_FILES:
@@ -189,11 +188,11 @@ def processDir(dirName, nzbName=None, process_method=None, force=False, is_prior
         result.output += logHelper(u"PostProcessing Path: " + path, logger.INFO)
         result.output += logHelper(u"PostProcessing Dirs: " + str(dirs), logger.DEBUG)
 
-        rarFiles = filter(helpers.isRarFile, files)
+        rarFiles = [x for x in files if helpers.isRarFile(x)]
         rarContent = unRAR(path, rarFiles, force, result)
         files += rarContent
-        videoFiles = filter(helpers.isMediaFile, files)
-        videoInRar = filter(helpers.isMediaFile, rarContent)
+        videoFiles = [x for x in files if helpers.isMediaFile(x)]
+        videoInRar = [x for x in rarContent if helpers.isMediaFile(x)]
 
         result.output += logHelper(u"PostProcessing Files: " + str(files), logger.DEBUG)
         result.output += logHelper(u"PostProcessing VideoFiles: " + str(videoFiles), logger.DEBUG)
@@ -230,29 +229,29 @@ def processDir(dirName, nzbName=None, process_method=None, force=False, is_prior
         result.missedfiles.append(path + " : Syncfiles found")
 
     # Process Video File in all TV Subdir
-    for dir in [x for x in dirs if validateDir(path, x, nzbNameOriginal, failed, result)]:
+    for curDir in [x for x in dirs if validateDir(path, x, nzbNameOriginal, failed, result)]:
 
         result.result = True
 
-        for processPath, processDir, fileList in ek(os.walk, ek(os.path.join, path, dir), topdown=False):
+        for processPath, _, fileList in ek(os.walk, ek(os.path.join, path, curDir), topdown=False):
 
-            if (not validateDir(path, processPath, nzbNameOriginal, failed, result)):
+            if not validateDir(path, processPath, nzbNameOriginal, failed, result):
                 continue
 
             postpone = False
 
-            SyncFiles = filter(helpers.isSyncFile, fileList)
+            SyncFiles = [x for x in fileList if helpers.isSyncFile(x)]
 
             # Don't post process if files are still being synced and option is activated
             if SyncFiles and sickbeard.POSTPONE_IF_SYNC_FILES:
                 postpone = True
 
             if not postpone:
-                rarFiles = filter(helpers.isRarFile, fileList)
+                rarFiles = [x for x in fileList if helpers.isRarFile(x)]
                 rarContent = unRAR(processPath, rarFiles, force, result)
                 fileList = set(fileList + rarContent)
-                videoFiles = filter(helpers.isMediaFile, fileList)
-                videoInRar = filter(helpers.isMediaFile, rarContent)
+                videoFiles = [x for x in fileList if helpers.isMediaFile(x)]
+                videoInRar = [x for x in rarContent if helpers.isMediaFile(x)]
                 notwantedFiles = [x for x in fileList if x not in videoFiles]
                 if notwantedFiles:
                     result.output += logHelper(u"Found unwanted files: " + str(notwantedFiles), logger.DEBUG)
@@ -273,14 +272,13 @@ def processDir(dirName, nzbName=None, process_method=None, force=False, is_prior
 
                     # Delete all file not needed
                     if process_method != "move" or not result.result \
-                            or (type == "manual" and not delete_on):  # Avoid to delete files if is Manual PostProcessing
+                            or (proc_type == "manual" and not delete_on):  # Avoid to delete files if is Manual PostProcessing
                         continue
 
                     delete_files(processPath, notwantedFiles, result)
 
-                    if (not sickbeard.NO_DELETE or type == "manual") and process_method == "move" and \
-                                    ek(os.path.normpath, processPath) != ek(os.path.normpath,
-                                                                                  sickbeard.TV_DOWNLOAD_DIR):
+                    if (not sickbeard.NO_DELETE or proc_type == "manual") and process_method == "move" and \
+                        ek(os.path.normpath, processPath) != ek(os.path.normpath, sickbeard.TV_DOWNLOAD_DIR):
                         if delete_folder(processPath, check_empty=True):
                             result.output += logHelper(u"Deleted folder: " + processPath, logger.DEBUG)
             else:
@@ -325,12 +323,10 @@ def validateDir(path, dirName, nzbNameOriginal, failed, result):
         result.output += logHelper(u"The directory name indicates it failed to extract.", logger.DEBUG)
         failed = True
     elif folder_name.startswith('_UNDERSIZED_'):
-        result.output += logHelper(u"The directory name indicates that it was previously rejected for being undersized.",
-                               logger.DEBUG)
+        result.output += logHelper(u"The directory name indicates that it was previously rejected for being undersized.", logger.DEBUG)
         failed = True
     elif folder_name.upper().startswith('_UNPACK'):
-        result.output += logHelper(u"The directory name indicates that this release is in the process of being unpacked.",
-                               logger.DEBUG)
+        result.output += logHelper(u"The directory name indicates that this release is in the process of being unpacked.", logger.DEBUG)
         result.missedfiles.append(dirName + " : Being unpacked")
         return False
 
@@ -349,9 +345,9 @@ def validateDir(path, dirName, nzbNameOriginal, failed, result):
     sqlResults = myDB.select("SELECT * FROM tv_shows")
 
     for sqlShow in sqlResults:
-        if dirName.lower().startswith(
-                        ek(os.path.realpath, sqlShow["location"]).lower() + os.sep) or dirName.lower() == ek(
-                os.path.realpath, sqlShow["location"]).lower():
+        if dirName.lower().startswith(ek(os.path.realpath, sqlShow["location"]).lower() + os.sep) or \
+            dirName.lower() == ek(os.path.realpath, sqlShow["location"]).lower():
+
             result.output += logHelper(
                 u"Cannot process an episode that's already been moved to its show dir, skipping " + dirName,
                 logger.WARNING)
@@ -360,11 +356,11 @@ def validateDir(path, dirName, nzbNameOriginal, failed, result):
     # Get the videofile list for the next checks
     allFiles = []
     allDirs = []
-    for processPath, processDir, fileList in ek(os.walk, ek(os.path.join, path, dirName), topdown=False):
-        allDirs += processDir
+    for _, processdir, fileList in ek(os.walk, ek(os.path.join, path, dirName), topdown=False):
+        allDirs += processdir
         allFiles += fileList
 
-    videoFiles = filter(helpers.isMediaFile, allFiles)
+    videoFiles = [x for x in allFiles if helpers.isMediaFile(x)]
     allDirs.append(dirName)
 
     # check if the dir have at least one tv video file
@@ -375,16 +371,16 @@ def validateDir(path, dirName, nzbNameOriginal, failed, result):
         except (InvalidNameException, InvalidShowException):
             pass
 
-    for dir in allDirs:
+    for proc_dir in allDirs:
         try:
-            NameParser().parse(dir, cache_result=False)
+            NameParser().parse(proc_dir, cache_result=False)
             return True
         except (InvalidNameException, InvalidShowException):
             pass
 
     if sickbeard.UNPACK:
         # Search for packed release
-        packedFiles = filter(helpers.isRarFile, allFiles)
+        packedFiles = [x for x in allFiles if helpers.isRarFile(x)]
 
         for packed in packedFiles:
             try:
@@ -508,7 +504,7 @@ def already_postprocessed(dirName, videofile, force, result):
         np = NameParser(dirName, tryIndexers=True)
         try:  # if it fails to find any info (because we're doing an unparsable folder (like the TV root dir) it will throw an exception, which we want to ignore
             parse_result = np.parse(dirName)
-        except:  # ignore the exception, because we kind of expected it, but create parse_result anyway so we can perform a check on it.
+        except Exception:  # ignore the exception, because we kind of expected it, but create parse_result anyway so we can perform a check on it.
             parse_result = False
 
 
@@ -563,26 +559,25 @@ def process_media(processPath, videoFiles, nzbName, process_method, force, is_pr
         if result.result:
             result.output += logHelper(u"Processing succeeded for " + cur_video_file_path)
         else:
-            result.output += logHelper(u"Processing failed for " + cur_video_file_path + ": " + process_fail_message,
-                                   logger.WARNING)
+            result.output += logHelper(u"Processing failed for " + cur_video_file_path + ": " + process_fail_message, logger.WARNING)
             result.missedfiles.append(cur_video_file_path + " : Processing failed: " + process_fail_message)
             result.aggresult = False
 
 
-def get_path_dir_files(dirName, nzbName, type):
+def get_path_dir_files(dirName, nzbName, proc_type):
     """
     Get files in a path
 
     :param dirName: Directory to start in
     :param nzbName: NZB file, if present
-    :param type: auto/manual
+    :param proc_type: auto/manual
     :return: a tuple of (path,dirs,files)
     """
     path = ""
     dirs = []
     files = []
 
-    if dirName == sickbeard.TV_DOWNLOAD_DIR and not nzbName or type == "manual":  # Scheduled Post Processing Active
+    if dirName == sickbeard.TV_DOWNLOAD_DIR and not nzbName or proc_type == "manual":  # Scheduled Post Processing Active
         # Get at first all the subdir in the dirName
         for path, dirs, files in ek(os.walk, dirName):
             break
diff --git a/sickbeard/providers/iptorrents.py b/sickbeard/providers/iptorrents.py
index 1fd44e609..000c9b03e 100644
--- a/sickbeard/providers/iptorrents.py
+++ b/sickbeard/providers/iptorrents.py
@@ -20,8 +20,8 @@ import re
 from sickbeard.providers import generic
 from sickbeard import logger
 from sickbeard import tvcache
-from sickrage.helper.exceptions import AuthException
 from sickbeard.bs4_parser import BS4Parser
+from sickrage.helper.exceptions import AuthException, ex
 
 class IPTorrentsProvider(generic.TorrentProvider):
     def __init__(self):
@@ -159,7 +159,8 @@ class IPTorrentsProvider(generic.TorrentProvider):
     def seedRatio(self):
         return self.ratio
 
-    def _convertSize(self, size):
+    @staticmethod
+    def _convertSize(size):
         size, modifier = size.split(' ')
         size = float(size)
         if modifier in 'KB':
diff --git a/sickbeard/show_queue.py b/sickbeard/show_queue.py
index b8342b151..e31752e09 100644
--- a/sickbeard/show_queue.py
+++ b/sickbeard/show_queue.py
@@ -168,7 +168,11 @@ class ShowQueue(generic_queue.GenericQueue):
 
         return queueItemObj
 
-class ShowQueueActions:
+class ShowQueueActions(object):
+
+    def __init__(self):
+        pass
+
     REFRESH = 1
     ADD = 2
     UPDATE = 3
@@ -177,13 +181,14 @@ class ShowQueueActions:
     SUBTITLE = 6
     REMOVE = 7
 
-    names = {REFRESH: 'Refresh',
-             ADD: 'Add',
-             UPDATE: 'Update',
-             FORCEUPDATE: 'Force Update',
-             RENAME: 'Rename',
-             SUBTITLE: 'Subtitle',
-             REMOVE: 'Remove Show'
+    names = {
+        REFRESH: 'Refresh',
+        ADD: 'Add',
+        UPDATE: 'Update',
+        FORCEUPDATE: 'Force Update',
+        RENAME: 'Rename',
+        SUBTITLE: 'Subtitle',
+        REMOVE: 'Remove Show'
     }
 
 
@@ -305,14 +310,15 @@ class QueueItemAdd(ShowQueueItem):
                 self._finishEarly()
                 return
         except Exception, e:
-            logger.log(u"Error while loading information from indexer %s. Error: %r" % (self.indexer_id,sickbeard.indexerApi(self.indexer).name, ex(e)),logger.ERROR)
+            logger.log(u"%s Error while loading information from indexer %s. Error: %r" % (self.indexer_id, sickbeard.indexerApi(self.indexer).name, ex(e)), logger.ERROR)
             # logger.log(u"Show name with ID %s doesn't exist on %s anymore. If you are using trakt, it will be removed from your TRAKT watchlist. If you are adding manually, try removing the nfo and adding again" %
             #            (self.indexer_id, sickbeard.indexerApi(self.indexer).name), logger.WARNING)
 
-            ui.notifications.error("Unable to add show",
-                                   "Unable to look up the show in " + self.showDir + " on " + str(sickbeard.indexerApi(
-                                       self.indexer).name) + " using ID " + str(
-                                       self.indexer_id) + ", not using the NFO. Delete .nfo and try adding manually again.")
+            ui.notifications.error(
+                "Unable to add show",
+                "Unable to look up the show in %s on %s using ID %s, not using the NFO. Delete .nfo and try adding manually again." %
+                (self.showDir, sickbeard.indexerApi(self.indexer).name, self.indexer_id)
+            )
 
             if sickbeard.USE_TRAKT:
 
@@ -669,6 +675,6 @@ class QueueItemRemove(ShowQueueItem):
             try:
                 sickbeard.traktCheckerScheduler.action.removeShowFromTraktLibrary(self.show)
             except Exception as e:
-                logger.log(u"Unable to delete show from Trakt: %s. Error: %s" % (self.show.name, ex(e)),logger.WARNING)
+                logger.log(u"Unable to delete show from Trakt: %s. Error: %s" % (self.show.name, ex(e)), logger.WARNING)
 
         self.finish()
diff --git a/sickbeard/traktChecker.py b/sickbeard/traktChecker.py
index 42efb9394..e5463eadf 100644
--- a/sickbeard/traktChecker.py
+++ b/sickbeard/traktChecker.py
@@ -20,6 +20,8 @@
 import os
 import traceback
 import datetime
+from libtrakt.exceptions import traktException
+from libtrakt import TraktAPI
 
 import sickbeard
 from sickbeard import logger
@@ -30,10 +32,9 @@ from sickbeard.common import ARCHIVED
 from sickbeard.common import SKIPPED
 from sickbeard.common import UNKNOWN
 from sickbeard.common import WANTED
+from sickbeard.common import Quality
 from sickrage.helper.encoding import ek
-from common import Quality
-from libtrakt import *
-from libtrakt.exceptions import traktException
+from sickrage.helper.exceptions import ex
 
 
 def setEpisodeToWanted(show, s, e):
@@ -106,7 +107,7 @@ class TraktChecker(object):
                 logger.log(u"No shows found in your library, aborting library update", logger.DEBUG)
                 return
 
-            traktShow = filter(lambda x: int(indexerid) in [int(x['show']['ids']['tvdb'] or 0), int(x['show']['ids']['tvrage'] or 0)], library)
+            traktShow = [x for x in library if int(indexerid) in [int(x['show']['ids']['tvdb'] or 0), int(x['show']['ids']['tvrage'] or 0)]]
         except traktException as e:
             logger.log(u"Could not connect to Trakt service. Aborting library check. Error: %s" % repr(e), logger.WARNING)
 
@@ -203,13 +204,13 @@ class TraktChecker(object):
                                        (cur_episode["show_name"], cur_episode["season"], cur_episode["episode"]), logger.DEBUG)
                             trakt_data.append((cur_episode["showid"], cur_episode["indexer"], cur_episode["show_name"], cur_episode["startyear"], cur_episode["season"], cur_episode["episode"]))
 
-            if len(trakt_data):
-                try:
-                    data = self.trakt_bulk_data_generate(trakt_data)
-                    self.trakt_api.traktRequest("sync/collection/remove", data, method='POST')
-                    self._getShowCollection()
-                except traktException as e:
-                    logger.log(u"Could not connect to Trakt service. Aborting removing episode %s S%02dE%02d from Trakt collection. Error: %s" % (cur_episode["show_name"], cur_episode["season"], cur_episode["episode"], repr(e)), logger.WARNING)
+                if len(trakt_data):
+                    try:
+                        data = self.trakt_bulk_data_generate(trakt_data)
+                        self.trakt_api.traktRequest("sync/collection/remove", data, method='POST')
+                        self._getShowCollection()
+                    except traktException as e:
+                        logger.log(u"Could not connect to Trakt service. Error: %s" % ex(e), logger.WARNING)
 
             logger.log(u"COLLECTION::REMOVE::FINISH - Look for Episodes to Remove From Trakt Collection", logger.DEBUG)
 
@@ -238,7 +239,7 @@ class TraktChecker(object):
                         self.trakt_api.traktRequest("sync/collection", data, method='POST')
                         self._getShowCollection()
                     except traktException as e:
-                        logger.log(u"Could not connect to Trakt service. Aborting adding episode to Trakt collection. Error: %s" % repr(e), logger.WARNING)
+                        logger.log(u"Could not connect to Trakt service. Error: %s" % ex(e), logger.WARNING)
 
             logger.log(u"COLLECTION::ADD::FINISH - Look for Episodes to Add to Trakt Collection", logger.DEBUG)
 
@@ -277,15 +278,15 @@ class TraktChecker(object):
                                        (cur_episode["show_name"], cur_episode["season"], cur_episode["episode"]), logger.DEBUG)
                             trakt_data.append((cur_episode["showid"], cur_episode["indexer"], cur_episode["show_name"], cur_episode["startyear"], cur_episode["season"], cur_episode["episode"]))
 
-            if len(trakt_data):
-                try:
-                    data = self.trakt_bulk_data_generate(trakt_data)
-                    self.trakt_api.traktRequest("sync/watchlist/remove", data, method='POST')
-                    self._getEpisodeWatchlist()
-                except traktException as e:
-                    logger.log(u"Could not connect to Trakt service. Aborting removing episode %s S%02dE%02d from Trakt watchlist. Error: %s" % (cur_episode["show_name"], cur_episode["season"], cur_episode["episode"], repr(e)), logger.WARNING)
+                if len(trakt_data):
+                    try:
+                        data = self.trakt_bulk_data_generate(trakt_data)
+                        self.trakt_api.traktRequest("sync/watchlist/remove", data, method='POST')
+                        self._getEpisodeWatchlist()
+                    except traktException as e:
+                        logger.log(u"Could not connect to Trakt service. Error: %s" % ex(e), logger.WARNING)
 
-            logger.log(u"WATCHLIST::REMOVE::FINISH - Look for Episodes to Remove from Trakt Watchlist", logger.DEBUG)
+                logger.log(u"WATCHLIST::REMOVE::FINISH - Look for Episodes to Remove from Trakt Watchlist", logger.DEBUG)
 
     def addEpisodeToTraktWatchList(self):
         if sickbeard.TRAKT_SYNC_WATCHLIST and sickbeard.USE_TRAKT:
@@ -313,7 +314,7 @@ class TraktChecker(object):
                         self.trakt_api.traktRequest("sync/watchlist", data, method='POST')
                         self._getEpisodeWatchlist()
                     except traktException as e:
-                        logger.log(u"Could not connect to Trakt service. Aborting adding episode %s S%02dE%02d to Trakt watchlist. Error: %s" % (cur_episode["show_name"], cur_episode["season"], cur_episode["episode"], repr(e)), logger.WARNING)
+                        logger.log(u"Could not connect to Trakt service. Error %s" % ex(e), logger.WARNING)
 
             logger.log(u"WATCHLIST::ADD::FINISH - Look for Episodes to Add to Trakt Watchlist", logger.DEBUG)
 
@@ -342,7 +343,7 @@ class TraktChecker(object):
                         self.trakt_api.traktRequest("sync/watchlist", data, method='POST')
                         self._getShowWatchlist()
                     except traktException as e:
-                        logger.log(u"Could not connect to Trakt service. Aborting adding show %s to Trakt watchlist. Error: %s" % (show.name, repr(e)), logger.WARNING)
+                        logger.log(u"Could not connect to Trakt service. Error: %s" % ex(e), logger.WARNING)
 
             logger.log(u"SHOW_WATCHLIST::ADD::FINISH - Look for Shows to Add to Trakt Watchlist", logger.DEBUG)
 
@@ -437,7 +438,8 @@ class TraktChecker(object):
                 logger.log(u"Could not parse the output from trakt for %s " % show["title"], logger.DEBUG)
         logger.log(u"SHOW_WATCHLIST::CHECK::FINISH - Trakt Episode Watchlist", logger.DEBUG)
 
-    def addDefaultShow(self, indexer, indexer_id, name, status):
+    @staticmethod
+    def addDefaultShow(indexer, indexer_id, name, status):
         """
         Adds a new show with the default settings
         """
@@ -447,7 +449,7 @@ class TraktChecker(object):
 
             try:
                 location = root_dirs[int(root_dirs[0]) + 1]
-            except:
+            except Exception:
                 location = None
 
             if location:
@@ -490,19 +492,19 @@ class TraktChecker(object):
             try:
                 if self.Collectionlist[trakt_id][showid]['seasons'][season]['episodes'][episode] == episode:
                     return True
-            except:
+            except Exception:
                 return False
         elif "Show" == List:
             try:
                 if self.ShowWatchlist[trakt_id][showid]['id'] == showid:
                     return True
-            except:
+            except Exception:
                 return False
         else:
             try:
                 if self.EpisodeWatchlist[trakt_id][showid]['seasons'][season]['episodes'][episode] == episode:
                     return True
-            except:
+            except Exception:
                 return False
 
     def _getShowWatchlist(self):
@@ -651,7 +653,8 @@ class TraktChecker(object):
             return False
         return True
 
-    def trakt_bulk_data_generate(self, data):
+    @staticmethod
+    def trakt_bulk_data_generate(data):
         """
         Build the JSON structure to send back to Trakt
         """
diff --git a/sickbeard/webserve.py b/sickbeard/webserve.py
index e2f6e78fe..c6df598a0 100644
--- a/sickbeard/webserve.py
+++ b/sickbeard/webserve.py
@@ -911,7 +911,7 @@ class Home(WebRoot):
         elif curResult is False:
             finalResult += 'Test failed, No Plex Media Server host specified'
         else:
-            finalResult += 'Test failed for Plex server(s) ... ' + urllib.unquote_plus(curResult.replace(',', ', '))
+            finalResult += 'Test failed for Plex server(s) ... ' + urllib.unquote_plus(str(curResult).replace(',', ', '))
         finalResult += '<br>' + '\n'
 
         ui.notifications.message('Tested Plex Media Server host(s): ', urllib.unquote_plus(host.replace(',', ', ')))
@@ -2173,8 +2173,8 @@ class HomePostProcess(Home):
         t = PageTemplate(rh=self, filename="home_postprocess.mako")
         return t.render(title='Post Processing', header='Post Processing', topmenu='home')
 
-    def processEpisode(self, dir=None, nzbName=None, jobName=None, quiet=None, process_method=None, force=None,
-                       is_priority=None, delete_on="0", failed="0", type="auto", *args, **kwargs):
+    def processEpisode(self, proc_dir=None, nzbName=None, jobName=None, quiet=None, process_method=None, force=None,
+                       is_priority=None, delete_on="0", failed="0", proc_type="auto", *args, **kwargs):
 
         def argToBool(argument):
             if isinstance(argument, basestring):
@@ -2189,12 +2189,12 @@ class HomePostProcess(Home):
 
             return argument
 
-        if not dir:
+        if not proc_dir:
             return self.redirect("/home/postprocess/")
         else:
             result = processTV.processDir(
-                dir, nzbName, process_method=process_method, force=argToBool(force),
-                is_priority=argToBool(is_priority), delete_on=argToBool(delete_on), failed=argToBool(failed), type=type
+                proc_dir, nzbName, process_method=process_method, force=argToBool(force),
+                is_priority=argToBool(is_priority), delete_on=argToBool(delete_on), failed=argToBool(failed), proc_type=proc_type
             )
 
             if quiet is not None and int(quiet) == 1:
-- 
GitLab


From 32d665285ef42a4eccf21e2a78f36bffc71ea902 Mon Sep 17 00:00:00 2001
From: Dustyn Gibson <miigotu@gmail.com>
Date: Sun, 8 Nov 2015 21:11:27 -0800
Subject: [PATCH 163/215] Select sbtimezone correctly for windows/linux Rewrite
 pushbullet notifier to use requests and better code Fix snatching (calling
 init for SearchResult) Return uncode from sbdatetime Lint scene_exceptions

---
 SickBeard.py                      |   2 +-
 sickbeard/classes.py              |  12 ++-
 sickbeard/helpers.py              |   8 +-
 sickbeard/name_cache.py           |  14 +--
 sickbeard/network_timezones.py    |  12 +--
 sickbeard/notifiers/pushbullet.py | 147 ++++++++++++++----------------
 sickbeard/sbdatetime.py           | 131 +++++++++++++-------------
 sickbeard/scene_exceptions.py     |  18 ++--
 sickbeard/search.py               |   2 +-
 9 files changed, 163 insertions(+), 183 deletions(-)

diff --git a/SickBeard.py b/SickBeard.py
index 2b9ee49b3..96c4afdb6 100755
--- a/SickBeard.py
+++ b/SickBeard.py
@@ -1,5 +1,5 @@
 #!/usr/bin/env python2.7
-# coding=utf-8
+# -*- coding: utf-8 -*
 # Author: Nic Wolfe <nic@wolfeden.ca>
 # URL: http://code.google.com/p/sickbeard/
 #
diff --git a/sickbeard/classes.py b/sickbeard/classes.py
index fdb20d3bc..422261220 100644
--- a/sickbeard/classes.py
+++ b/sickbeard/classes.py
@@ -145,21 +145,27 @@ class NZBSearchResult(SearchResult):
     """
     Regular NZB result with an URL to the NZB
     """
-    resultType = "nzb"
+    def __init__(self, episodes):
+        super(NZBSearchResult, self).__init__(episodes)
+        self.resultType = "nzb"
 
 
 class NZBDataSearchResult(SearchResult):
     """
     NZB result where the actual NZB XML data is stored in the extraInfo
     """
-    resultType = "nzbdata"
+    def __init__(self, episodes):
+        super(NZBDataSearchResult, self).__init__(episodes)
+        self.resultType = "nzbdata"
 
 
 class TorrentSearchResult(SearchResult):
     """
     Torrent result with an URL to the torrent
     """
-    resultType = "torrent"
+    def __init__(self, episodes):
+        super(TorrentSearchResult, self).__init__(episodes)
+        self.resultType = "torrent"
 
 
 class AllShowsListUI(object):
diff --git a/sickbeard/helpers.py b/sickbeard/helpers.py
index 3569f1ac8..bdd4b0d09 100644
--- a/sickbeard/helpers.py
+++ b/sickbeard/helpers.py
@@ -54,7 +54,7 @@ from sickbeard.common import USER_AGENT
 from sickbeard.common import mediaExtensions
 from sickbeard.common import subtitleExtensions
 from sickbeard import db
-from sickbeard import notifiers
+from sickbeard.notifiers.synoindex import notifier as synoindex_notifier
 from sickbeard import clients
 from sickbeard.subtitles import isValidLanguage
 from sickrage.helper.encoding import ek
@@ -357,7 +357,7 @@ def makeDir(path):
         try:
             ek(os.makedirs, path)
             # do the library update for synoindex
-            notifiers.synoindex_notifier.addFolder(path)
+            synoindex_notifier.addFolder(path)
         except OSError:
             return False
     return True
@@ -622,7 +622,7 @@ def make_dirs(path):
                     # use normpath to remove end separator, otherwise checks permissions against itself
                     chmodAsParent(ek(os.path.normpath, sofar))
                     # do the library update for synoindex
-                    notifiers.synoindex_notifier.addFolder(sofar)
+                    synoindex_notifier.addFolder(sofar)
                 except (OSError, IOError) as e:
                     logger.log(u"Failed creating %s : %r" % (sofar, ex(e)), logger.ERROR)
                     return False
@@ -702,7 +702,7 @@ def delete_empty_folders(check_empty_dir, keep_dir=None):
                 # need shutil.rmtree when ignore_items is really implemented
                 ek(os.rmdir, check_empty_dir)
                 # do the library update for synoindex
-                notifiers.synoindex_notifier.deleteFolder(check_empty_dir)
+                synoindex_notifier.deleteFolder(check_empty_dir)
             except OSError as e:
                 logger.log(u"Unable to delete %s. Error: %r" % (check_empty_dir, repr(e)), logger.WARNING)
                 break
diff --git a/sickbeard/name_cache.py b/sickbeard/name_cache.py
index 8b0af37e8..590eded75 100644
--- a/sickbeard/name_cache.py
+++ b/sickbeard/name_cache.py
@@ -31,9 +31,6 @@ def addNameToCache(name, indexer_id=0):
     :param name: The show name to cache
     :param indexer_id: the TVDB id that this show should be cached with (can be None/0 for unknown)
     """
-
-    global nameCache
-
     cacheDB = db.DBConnection('cache.db')
 
     # standardize the name we're using to account for small differences in providers
@@ -50,8 +47,6 @@ def retrieveNameFromCache(name):
     :param name: The show name to look up.
     :return: the TVDB id that resulted from the cache lookup or None if the show wasn't found in the cache
     """
-    global nameCache
-
     name = sickbeard.helpers.full_sanitizeSceneName(name)
     if name in nameCache:
         return int(nameCache[name])
@@ -60,12 +55,6 @@ def clearCache(indexerid=0):
     """
     Deletes all "unknown" entries from the cache (names with indexer_id of 0).
     """
-    global nameCache
-
-    # init name cache
-    if not nameCache:
-        nameCache = {}
-
     cacheDB = db.DBConnection('cache.db')
     cacheDB.action("DELETE FROM scene_names WHERE indexer_id = ? OR indexer_id = ?", (indexerid, 0))
 
@@ -87,7 +76,6 @@ def buildNameCache(show=None):
 
     :param show: Specify show to build name cache for, if None, just do all shows
     """
-    global nameCache
     with nameCacheLock:
         sickbeard.scene_exceptions.retrieve_exceptions()
 
@@ -105,4 +93,4 @@ def buildNameCache(show=None):
                     continue
 
                 nameCache[name] = int(show.indexerid)
-        logger.log(u"Internal name cache for " + show.name + " set to: [ " + u', '.join([key for key, value in nameCache.iteritems() if value == show.indexerid]) +" ]" , logger.DEBUG)
+        logger.log(u"Internal name cache for " + show.name + " set to: [ " + u', '.join([key for key, value in nameCache.iteritems() if value == show.indexerid]) +" ]", logger.DEBUG)
diff --git a/sickbeard/network_timezones.py b/sickbeard/network_timezones.py
index 312ea3127..607df0192 100644
--- a/sickbeard/network_timezones.py
+++ b/sickbeard/network_timezones.py
@@ -21,7 +21,6 @@ import re
 import datetime
 import requests
 from dateutil import tz
-from os import name as osname
 
 from sickbeard import db
 from sickbeard import helpers
@@ -33,11 +32,7 @@ am_regex = re.compile(r'(A[. ]? ?M)', flags=re.IGNORECASE)
 pm_regex = re.compile(r'(P[. ]? ?M)', flags=re.IGNORECASE)
 
 network_dict = None
-
-if osname == 'nt' and tz.tzwinlocal is not None:
-    sb_timezone = tz.tzwinlocal()
-else:
-    sb_timezone = tz.tzlocal()
+sb_timezone = tz.tzwinlocal() if tz.tzwinlocal else tz.tzlocal()
 
 # update the network timezone table
 def update_network_dict():
@@ -76,7 +71,7 @@ def update_network_dict():
             del network_list[network]
 
     if network_list:
-        purged = list(x for x in network_list)
+        purged = [x for x in network_list]
         queries.append(['DELETE FROM network_timezones WHERE network_name IN (%s);' % ','.join(['?'] * len(purged)), purged])
 
     if queries:
@@ -170,8 +165,7 @@ def parse_date_time(d, t, network):
     te = datetime.datetime.fromordinal(helpers.tryInt(d) or 1)
     try:
         foreign_timezone = get_network_timezone(network, network_dict)
-        foreign_naive = datetime.datetime(te.year, te.month, te.day, hr, m, tzinfo=foreign_timezone)
-        return foreign_naive
+        return datetime.datetime(te.year, te.month, te.day, hr, m, tzinfo=foreign_timezone)
     except Exception:
         return datetime.datetime(te.year, te.month, te.day, hr, m, tzinfo=sb_timezone)
 
diff --git a/sickbeard/notifiers/pushbullet.py b/sickbeard/notifiers/pushbullet.py
index 275578d47..5f8bc65d9 100644
--- a/sickbeard/notifiers/pushbullet.py
+++ b/sickbeard/notifiers/pushbullet.py
@@ -1,3 +1,4 @@
+# -*- coding: utf-8 -*
 # Author: Pedro Correia (http://github.com/pedrocorreia/)
 # Based on pushalot.py by Nic Wolfe <nic@wolfeden.ca>
 # URL: http://code.google.com/p/sickbeard/
@@ -17,107 +18,99 @@
 # You should have received a copy of the GNU General Public License
 # along with SickRage. If not, see <http://www.gnu.org/licenses/>.
 
-import socket
-from httplib import HTTPSConnection, HTTPException
 import json
-from ssl import SSLError
+import requests
+import traceback
+
 import sickbeard
-from sickbeard import logger, common
+from sickbeard import logger
+from sickbeard.common import notifyStrings
+from sickbeard.common import NOTIFY_SNATCH
+from sickbeard.common import NOTIFY_DOWNLOAD
+from sickbeard.common import NOTIFY_GIT_UPDATE
+from sickbeard.common import NOTIFY_GIT_UPDATE_TEXT
+from sickbeard.common import NOTIFY_SUBTITLE_DOWNLOAD
+
+
+class PushbulletNotifier(object):
+    session = requests.Session()
+    TEST_EVENT = 'Test'
 
+    def __init__(self):
+        pass
 
-class PushbulletNotifier:
     def test_notify(self, pushbullet_api):
-        return self._sendPushbullet(pushbullet_api, event="Test", message="Testing Pushbullet settings from SickRage",
-                                    method="POST", notificationType="note", force=True)
+        logger.log(u"Sending a test Pushbullet notification.", logger.DEBUG)
+        return self._sendPushbullet(pushbullet_api, event=self.TEST_EVENT, message="Testing Pushbullet settings from SickRage")
 
     def get_devices(self, pushbullet_api):
-        return self._sendPushbullet(pushbullet_api, method="GET", force=True)
+        logger.log(u"Testing Pushbullet authentication and retrieving the device list.", logger.DEBUG)
+        return self._sendPushbullet(pushbullet_api)
 
     def notify_snatch(self, ep_name):
         if sickbeard.PUSHBULLET_NOTIFY_ONSNATCH:
-            self._sendPushbullet(pushbullet_api=None, event=common.notifyStrings[common.NOTIFY_SNATCH] + " : " + ep_name, message=ep_name,
-                                 notificationType="note", method="POST")
+            self._sendPushbullet(pushbullet_api=None, event=notifyStrings[NOTIFY_SNATCH] + " : " + ep_name, message=ep_name)
 
     def notify_download(self, ep_name):
         if sickbeard.PUSHBULLET_NOTIFY_ONDOWNLOAD:
-            self._sendPushbullet(pushbullet_api=None, event=common.notifyStrings[common.NOTIFY_DOWNLOAD] + " : " + ep_name,
-                                 message=ep_name, notificationType="note", method="POST")
+            self._sendPushbullet(pushbullet_api=None, event=notifyStrings[NOTIFY_DOWNLOAD] + " : " + ep_name, message=ep_name)
 
     def notify_subtitle_download(self, ep_name, lang):
         if sickbeard.PUSHBULLET_NOTIFY_ONSUBTITLEDOWNLOAD:
-            self._sendPushbullet(pushbullet_api=None, event=common.notifyStrings[common.NOTIFY_SUBTITLE_DOWNLOAD] + " : " + ep_name + " : " + lang,
-                                 message=ep_name + ": " + lang, notificationType="note", method="POST")
-                                 
-    def notify_git_update(self, new_version = "??"):
+            self._sendPushbullet(pushbullet_api=None, event=notifyStrings[NOTIFY_SUBTITLE_DOWNLOAD] + " : " + ep_name + " : " + lang, message=ep_name + ": " + lang)
+
+    def notify_git_update(self, new_version="??"):
         if sickbeard.USE_PUSHBULLET:
-            update_text=common.notifyStrings[common.NOTIFY_GIT_UPDATE_TEXT]
-            title=common.notifyStrings[common.NOTIFY_GIT_UPDATE]
-            self._sendPushbullet(pushbullet_api=None, event=title, message=update_text + new_version, notificationType="note", method="POST")
+            self._sendPushbullet(pushbullet_api=None, event=notifyStrings[NOTIFY_GIT_UPDATE], message=notifyStrings[NOTIFY_GIT_UPDATE_TEXT] + new_version)
 
-    def _sendPushbullet(self, pushbullet_api=None, pushbullet_device=None, event=None, message=None,
-                        notificationType=None, method=None, force=False):
+    def _sendPushbullet(self, pushbullet_api=None, pushbullet_device=None, event=None, message=None):
 
-        if not sickbeard.USE_PUSHBULLET and not force:
+        if not (sickbeard.USE_PUSHBULLET or event is 'Test' or event is None):
             return False
 
-        if pushbullet_api == None:
-            pushbullet_api = sickbeard.PUSHBULLET_API
-        if pushbullet_device == None:
-            pushbullet_device = sickbeard.PUSHBULLET_DEVICE
-
-        if method == 'POST':
-            uri = '/v2/pushes'
-        else:
-            uri = '/v2/devices'
-
-        logger.log(u"Pushbullet event: " + str(event), logger.DEBUG)
-        logger.log(u"Pushbullet message: " + str(message), logger.DEBUG)
-        logger.log(u"Pushbullet api: " + str(pushbullet_api), logger.DEBUG)
-        logger.log(u"Pushbullet devices: " + str(pushbullet_device), logger.DEBUG)
-        logger.log(u"Pushbullet notification type: " + str(notificationType), logger.DEBUG)
-
-        http_handler = HTTPSConnection("api.pushbullet.com")
-
-        if notificationType == None:
-            testMessage = True
-            try:
-                logger.log(u"Testing Pushbullet authentication and retrieving the device list.", logger.DEBUG)
-                http_handler.request(method, uri, None, headers={'Authorization': 'Bearer %s' % pushbullet_api})
-            except (SSLError, HTTPException, socket.error):
-                logger.log(u"Pushbullet notification failed.", logger.ERROR)
-                return False
-        else:
-            testMessage = False
-            try:
-                data = {
-                    'title': event.encode('utf-8'),
-                    'body': message.encode('utf-8'),
-                    'device_iden': pushbullet_device,
-                    'type': notificationType}
-                data = json.dumps(data)
-                http_handler.request(method, uri, body=data,
-                                     headers={'Content-Type': 'application/json', 'Authorization': 'Bearer %s' % pushbullet_api})
-            except (SSLError, HTTPException, socket.error):
-                return False
-
-        response = http_handler.getresponse()
-        request_body = response.read()
-        request_status = response.status
-        logger.log(u"Pushbullet response: %s" % request_body, logger.DEBUG)
-
-        if request_status == 200:
-            if testMessage:
-                return request_body
-            else:
-                logger.log(u"Pushbullet notifications sent.", logger.DEBUG)
-                return True
-        elif request_status == 410:
-            logger.log(u"Pushbullet auth failed: %s" % response.reason, logger.ERROR)
+        pushbullet_api = pushbullet_api or sickbeard.PUSHBULLET_API
+        pushbullet_device = pushbullet_device or sickbeard.PUSHBULLET_DEVICE
+
+        logger.log(u"Pushbullet event: %r" % event, logger.DEBUG)
+        logger.log(u"Pushbullet message: %r" % message, logger.DEBUG)
+        logger.log(u"Pushbullet api: %r" % pushbullet_api, logger.DEBUG)
+        logger.log(u"Pushbullet devices: %r" % pushbullet_device, logger.DEBUG)
+        logger.log(u"Pushbullet notification type: %r" % 'note' if event else 'None', logger.DEBUG)
+
+        url = 'https://api.pushbullet.com/v2/%s' % ('devices', 'pushes')[event is not None]
+
+        data = json.dumps({
+            'title': event.encode('utf-8'),
+            'body': message.encode('utf-8'),
+            'device_iden': pushbullet_device.encode('utf-8'),
+            'type': 'note'
+        }) if event else None
+
+        method = 'GET' if data is None else 'POST'
+        headers = {'Content-Type': 'application/json', 'Authorization': 'Bearer %s' % pushbullet_api}
+
+        try:
+            response = self.session.request(method, url, data=data, headers=headers)
+        except Exception:
+            logger.log(u'Pushbullet authorization failed with exception: %r' % traceback.format_exc(), logger.DEBUG)
             return False
-        else:
+
+        if response.status_code == 410:
+            logger.log(u'Pushbullet authorization failed', logger.DEBUG)
+            return False
+
+        if response.status_code != 200:
+            logger.log(u'Pushbullet call failed with error code %r' % response.status_code, logger.DEBUG)
+            return False
+
+        logger.log(u"Pushbullet response: %r" % response.text, logger.DEBUG)
+
+        if not response.text:
             logger.log(u"Pushbullet notification failed.", logger.ERROR)
             return False
 
+        logger.log(u"Pushbullet notifications sent.", logger.DEBUG)
+        return (True, response.text)[event is self.TEST_EVENT or event is None]
 
-notifier = PushbulletNotifier
 
+notifier = PushbulletNotifier
diff --git a/sickbeard/sbdatetime.py b/sickbeard/sbdatetime.py
index 815eeb45b..27b7f69b8 100644
--- a/sickbeard/sbdatetime.py
+++ b/sickbeard/sbdatetime.py
@@ -24,69 +24,70 @@ import functools
 import sickbeard
 from sickbeard.network_timezones import sb_timezone
 
-date_presets = ('%Y-%m-%d',
-                '%a, %Y-%m-%d',
-                '%A, %Y-%m-%d',
-                '%y-%m-%d',
-                '%a, %y-%m-%d',
-                '%A, %y-%m-%d',
-                '%m/%d/%Y',
-                '%a, %m/%d/%Y',
-                '%A, %m/%d/%Y',
-                '%m/%d/%y',
-                '%a, %m/%d/%y',
-                '%A, %m/%d/%y',
-                '%m-%d-%Y',
-                '%a, %m-%d-%Y',
-                '%A, %m-%d-%Y',
-                '%m-%d-%y',
-                '%a, %m-%d-%y',
-                '%A, %m-%d-%y',
-                '%m.%d.%Y',
-                '%a, %m.%d.%Y',
-                '%A, %m.%d.%Y',
-                '%m.%d.%y',
-                '%a, %m.%d.%y',
-                '%A, %m.%d.%y',
-                '%d-%m-%Y',
-                '%a, %d-%m-%Y',
-                '%A, %d-%m-%Y',
-                '%d-%m-%y',
-                '%a, %d-%m-%y',
-                '%A, %d-%m-%y',
-                '%d/%m/%Y',
-                '%a, %d/%m/%Y',
-                '%A, %d/%m/%Y',
-                '%d/%m/%y',
-                '%a, %d/%m/%y',
-                '%A, %d/%m/%y',
-                '%d.%m.%Y',
-                '%a, %d.%m.%Y',
-                '%A, %d.%m.%Y',
-                '%d.%m.%y',
-                '%a, %d.%m.%y',
-                '%A, %d.%m.%y',
-                '%d. %b %Y',
-                '%a, %d. %b %Y',
-                '%A, %d. %b %Y',
-                '%d. %b %y',
-                '%a, %d. %b %y',
-                '%A, %d. %b %y',
-                '%d. %B %Y',
-                '%a, %d. %B %Y',
-                '%A, %d. %B %Y',
-                '%d. %B %y',
-                '%a, %d. %B %y',
-                '%A, %d. %B %y',
-                '%b %d, %Y',
-                '%a, %b %d, %Y',
-                '%A, %b %d, %Y',
-                '%B %d, %Y',
-                '%a, %B %d, %Y',
-                '%A, %B %d, %Y')
+date_presets = (
+    '%Y-%m-%d',
+    '%a, %Y-%m-%d',
+    '%A, %Y-%m-%d',
+    '%y-%m-%d',
+    '%a, %y-%m-%d',
+    '%A, %y-%m-%d',
+    '%m/%d/%Y',
+    '%a, %m/%d/%Y',
+    '%A, %m/%d/%Y',
+    '%m/%d/%y',
+    '%a, %m/%d/%y',
+    '%A, %m/%d/%y',
+    '%m-%d-%Y',
+    '%a, %m-%d-%Y',
+    '%A, %m-%d-%Y',
+    '%m-%d-%y',
+    '%a, %m-%d-%y',
+    '%A, %m-%d-%y',
+    '%m.%d.%Y',
+    '%a, %m.%d.%Y',
+    '%A, %m.%d.%Y',
+    '%m.%d.%y',
+    '%a, %m.%d.%y',
+    '%A, %m.%d.%y',
+    '%d-%m-%Y',
+    '%a, %d-%m-%Y',
+    '%A, %d-%m-%Y',
+    '%d-%m-%y',
+    '%a, %d-%m-%y',
+    '%A, %d-%m-%y',
+    '%d/%m/%Y',
+    '%a, %d/%m/%Y',
+    '%A, %d/%m/%Y',
+    '%d/%m/%y',
+    '%a, %d/%m/%y',
+    '%A, %d/%m/%y',
+    '%d.%m.%Y',
+    '%a, %d.%m.%Y',
+    '%A, %d.%m.%Y',
+    '%d.%m.%y',
+    '%a, %d.%m.%y',
+    '%A, %d.%m.%y',
+    '%d. %b %Y',
+    '%a, %d. %b %Y',
+    '%A, %d. %b %Y',
+    '%d. %b %y',
+    '%a, %d. %b %y',
+    '%A, %d. %b %y',
+    '%d. %B %Y',
+    '%a, %d. %B %Y',
+    '%A, %d. %B %Y',
+    '%d. %B %y',
+    '%a, %d. %B %y',
+    '%A, %d. %B %y',
+    '%b %d, %Y',
+    '%a, %b %d, %Y',
+    '%A, %b %d, %Y',
+    '%B %d, %Y',
+    '%a, %B %d, %Y',
+    '%A, %B %d, %Y'
+)
 
-time_presets = ('%I:%M:%S %p',
-                '%H:%M:%S')
+time_presets = ('%I:%M:%S %p', '%H:%M:%S')
 
 # helper class
 class static_or_instance(object):
@@ -140,7 +141,7 @@ class sbdatetime(datetime.datetime):
             except Exception:
                 sbdatetime.has_locale = False
 
-        strt = ''
+        strt = u''
         try:
             if self is None:
                 if dt is not None:
@@ -183,7 +184,7 @@ class sbdatetime(datetime.datetime):
         except Exception:
             pass
 
-        strd = ''
+        strd = u''
         try:
             if self is None:
                 if dt is not None:
@@ -224,7 +225,7 @@ class sbdatetime(datetime.datetime):
         except Exception:
             pass
 
-        strd = ''
+        strd = u''
         try:
             if self is None:
                 if dt is not None:
diff --git a/sickbeard/scene_exceptions.py b/sickbeard/scene_exceptions.py
index ed926d625..8e1e6b814 100644
--- a/sickbeard/scene_exceptions.py
+++ b/sickbeard/scene_exceptions.py
@@ -38,33 +38,33 @@ exceptionsSeasonCache = {}
 
 exceptionLock = threading.Lock()
 
-def shouldRefresh(list):
+def shouldRefresh(exList):
     """
-    Check if we should refresh cache for items in list
+    Check if we should refresh cache for items in exList
 
-    :param list: list to check
+    :param exList: exception list to check if needs a refresh
     :return: True if refresh is needed
     """
     MAX_REFRESH_AGE_SECS = 86400  # 1 day
 
     myDB = db.DBConnection('cache.db')
-    rows = myDB.select("SELECT last_refreshed FROM scene_exceptions_refresh WHERE list = ?", [list])
+    rows = myDB.select("SELECT last_refreshed FROM scene_exceptions_refresh WHERE list = ?", [exList])
     if rows:
         lastRefresh = int(rows[0]['last_refreshed'])
         return int(time.mktime(datetime.datetime.today().timetuple())) > lastRefresh + MAX_REFRESH_AGE_SECS
     else:
         return True
 
-def setLastRefresh(list):
+def setLastRefresh(exList):
     """
     Update last cache update time for shows in list
 
-    :param list: list to check
+    :param exList: exception list to set refresh time
     """
     myDB = db.DBConnection('cache.db')
     myDB.upsert("scene_exceptions_refresh",
                 {'last_refreshed': int(time.mktime(datetime.datetime.today().timetuple()))},
-                {'list': list})
+                {'list': exList})
 
 def get_scene_exceptions(indexer_id, season=-1):
     """
@@ -183,8 +183,6 @@ def retrieve_exceptions():
     """
     global exception_dict, anidb_exception_dict, xem_exception_dict
 
-    # exceptions are stored in submodules in this repo, sourced from the github repos
-    # TODO: `git submodule update`
     for indexer in sickbeard.indexerApi().indexers:
         if shouldRefresh(sickbeard.indexerApi(indexer).name):
             logger.log(u"Checking for scene exception updates for " + sickbeard.indexerApi(indexer).name + "")
@@ -270,7 +268,7 @@ def update_scene_exceptions(indexer_id, scene_exceptions, season=-1):
     myDB.action('DELETE FROM scene_exceptions WHERE indexer_id=? and season=?', [indexer_id, season])
 
     logger.log(u"Updating scene exceptions", logger.INFO)
-    
+
     # A change has been made to the scene exception list. Let's clear the cache, to make this visible
     if indexer_id in exceptionsCache:
         exceptionsCache[indexer_id] = {}
diff --git a/sickbeard/search.py b/sickbeard/search.py
index ddd3b2f92..aea1bfa0d 100644
--- a/sickbeard/search.py
+++ b/sickbeard/search.py
@@ -141,7 +141,7 @@ def snatchEpisode(result, endStatus=SNATCHED):
                 logger.log(u"Torrent file content is empty", logger.WARNING)
                 dlResult = False
     else:
-        logger.log(u"Unknown result type, unable to download it", logger.ERROR)
+        logger.log(u"Unknown result type, unable to download it (%r)" % result.resultType, logger.ERROR)
         dlResult = False
 
     if not dlResult:
-- 
GitLab


From 5d53ef93afe320314fee0eaebe2ecc372d7dd83a Mon Sep 17 00:00:00 2001
From: Dustyn Gibson <miigotu@gmail.com>
Date: Sun, 8 Nov 2015 22:50:19 -0800
Subject: [PATCH 164/215] Fix displaying non ascii in log/error viewer Remove
 mako error matching regex, to speed up issue submitter Also return local
 encoding for windows in issue submitter (should work according to docs)

---
 sickbeard/logger.py   | 46 ++++++++++++++++++-------------------------
 sickbeard/webapi.py   |  2 +-
 sickbeard/webserve.py | 13 ++++++------
 3 files changed, 26 insertions(+), 35 deletions(-)

diff --git a/sickbeard/logger.py b/sickbeard/logger.py
index c322c5ade..abc96c575 100644
--- a/sickbeard/logger.py
+++ b/sickbeard/logger.py
@@ -16,8 +16,9 @@
 #
 # You should have received a copy of the GNU General Public License
 # along with SickRage.  If not, see <http://www.gnu.org/licenses/>.
-# pylint: disable=W0703
 
+
+import io
 import os
 import re
 import sys
@@ -28,13 +29,14 @@ import platform
 import locale
 import traceback
 
+from github import Github, InputFileContent
+
 import sickbeard
 from sickbeard import classes
 from sickrage.helper.common import dateTimeFormat
-from sickrage.helper.encoding import ek, ss
 from sickrage.helper.exceptions import ex
-from github import Github, InputFileContent
-import codecs
+from sickrage.helper.encoding import ss
+
 
 # log levels
 ERROR = logging.ERROR
@@ -174,11 +176,11 @@ class Logger(object):
         else:
             sys.exit(1)
 
-    def submit_errors(self):
+    def submit_errors(self): # Too many local variables, too many branches, pylint: disable=R0912,R0914
 
         submitter_result = u''
         issue_id = None
-        # pylint: disable=R0912,R0914,R0915
+
         if not (sickbeard.GIT_USERNAME and sickbeard.GIT_PASSWORD and sickbeard.DEBUG and len(classes.ErrorViewer.errors) > 0):
             submitter_result = u'Please set your GitHub username and password in the config and enable debug. Unable to submit issue ticket to GitHub!'
             return submitter_result, issue_id
@@ -212,12 +214,12 @@ class Logger(object):
             log_data = None
 
             if os.path.isfile(self.logFile):
-                with ek(codecs.open, *[self.logFile, 'r', 'utf-8']) as f:
+                with io.open(self.logFile, 'r', encoding='utf-8') as f:
                     log_data = f.readlines()
 
             for i in range(1, int(sickbeard.LOG_NR)):
                 if os.path.isfile(self.logFile + ".%i" % i) and (len(log_data) <= 500):
-                    with ek(codecs.open, *[self.logFile + ".%i" % i, 'r', 'utf-8']) as f:
+                    with io.open(self.logFile + ".%i" % i, 'r', encoding='utf-8') as f:
                         log_data += f.readlines()
 
             log_data = [line for line in reversed(log_data)]
@@ -226,7 +228,7 @@ class Logger(object):
             for curError in sorted(classes.ErrorViewer.errors, key=lambda error: error.time, reverse=True)[:500]:
 
                 try:
-                    title_Error = ss(str(curError.title))
+                    title_Error = ss(curError.title)
                     if not len(title_Error) or title_Error == 'None':
                         title_Error = re.match(r"^[A-Z0-9\-\[\] :]+::\s*(.*)$", ss(curError.message)).group(1)
 
@@ -236,14 +238,13 @@ class Logger(object):
                     self.log("Unable to get error title : " + ex(e), ERROR)
 
                 gist = None
-                regex = r"^(%s)\s+([A-Z]+)\s+([0-9A-Z\-]+)\s*(.*)$" % curError.time
+                regex = ur"^(%s)\s+([A-Z]+)\s+([0-9A-Z\-]+)\s*(.*)$" % curError.time
                 for i, x in enumerate(log_data):
-                    x = ss(x)
                     match = re.match(regex, x)
                     if match:
                         level = match.group(2)
                         if reverseNames[level] == ERROR:
-                            paste_data = "".join(log_data[i:i+50])
+                            paste_data = u"".join(log_data[i:i+50])
                             if paste_data:
                                 gist = gh.get_user().create_gist(True, {"sickrage.log": InputFileContent(paste_data)})
                             break
@@ -253,11 +254,10 @@ class Logger(object):
                 message = u"### INFO\n"
                 message += u"Python Version: **" + sys.version[:120].replace('\n', '') + "**\n"
                 message += u"Operating System: **" + platform.platform() + "**\n"
-                if not 'Windows' in platform.platform():
-                    try:
-                        message += u"Locale: " + locale.getdefaultlocale()[1] + "\n"
-                    except Exception:
-                        message += u"Locale: unknown" + "\n"
+                try:
+                    message += u"Locale: " + locale.getdefaultlocale()[1] + "\n"
+                except Exception:
+                    message += u"Locale: unknown" + "\n"
                 message += u"Branch: **" + sickbeard.BRANCH + "**\n"
                 message += u"Commit: SiCKRAGETV/SickRage@" + sickbeard.CUR_COMMIT_HASH + "\n"
                 if gist and gist != 'No ERROR found':
@@ -274,29 +274,21 @@ class Logger(object):
                 title_Error = u"[APP SUBMITTED]: " + title_Error
                 reports = gh.get_organization(gh_org).get_repo(gh_repo).get_issues(state="all")
 
-                def is_mako_error(title):
-                    # [APP SUBMITTED]: Loaded module _home_pi_SickRage_gui_slick_views_home_mako not found in sys.modules
-                    # [APP SUBMITTED]: Loaded module _opt_sickbeard_gui_slick_views_home_mako not found in sys.modules
-                    # [APP SUBMITTED]: Loaded module D__TV_SickRage_gui_slick_views_home_mako not found in sys.modules
-                    return re.search(r".* Loaded module .* not found in sys\.modules", title) is not None
-
                 def is_ascii_error(title):
                     # [APP SUBMITTED]: 'ascii' codec can't encode characters in position 00-00: ordinal not in range(128)
                     # [APP SUBMITTED]: 'charmap' codec can't decode byte 0x00 in position 00: character maps to <undefined>
-                    return re.search(r".* codec can't .*code .* in position .*:", title) is not None
+                    return re.search(ur".* codec can't .*code .* in position .*:", title) is not None
 
                 def is_malformed_error(title):
                     # [APP SUBMITTED]: not well-formed (invalid token): line 0, column 0
-                    return re.search(r".* not well-formed \(invalid token\): line .* column .*", title) is not None
+                    return re.search(ur".* not well-formed \(invalid token\): line .* column .*", title) is not None
 
-                mako_error = is_mako_error(title_Error)
                 ascii_error = is_ascii_error(title_Error)
                 malformed_error = is_malformed_error(title_Error)
 
                 issue_found = False
                 for report in reports:
                     if title_Error.rsplit(' :: ')[-1] in report.title or \
-           	         (mako_error and is_mako_error(report.title)) or \
                         (malformed_error and is_malformed_error(report.title)) or \
                             (ascii_error and is_ascii_error(report.title)):
 
diff --git a/sickbeard/webapi.py b/sickbeard/webapi.py
index 431b0ab8f..4a2507c42 100644
--- a/sickbeard/webapi.py
+++ b/sickbeard/webapi.py
@@ -1211,7 +1211,7 @@ class CMD_Logs(ApiCall):
 
         data = []
         if os.path.isfile(logger.logFile):
-            with ek(codecs.open, *[logger.logFile, 'r', 'utf-8']) as f:
+            with io.open(logger.logFile, 'r', encoding='utf-8') as f:
                 data = f.readlines()
 
         regex = r"^(\d\d\d\d)\-(\d\d)\-(\d\d)\s*(\d\d)\:(\d\d):(\d\d)\s*([A-Z]+)\s*(.+?)\s*\:\:\s*(.*)$"
diff --git a/sickbeard/webserve.py b/sickbeard/webserve.py
index c6df598a0..659bba264 100644
--- a/sickbeard/webserve.py
+++ b/sickbeard/webserve.py
@@ -17,13 +17,13 @@
 # You should have received a copy of the GNU General Public License
 # along with SickRage.  If not, see <http://www.gnu.org/licenses/>.
 
-import traceback
+import io
 import os
+import re
 import time
 import urllib
-import re
 import datetime
-import codecs
+import traceback
 
 import sickbeard
 from sickbeard import config, sab
@@ -4965,7 +4965,6 @@ class ErrorLogs(WebRoot):
             finalData = []
 
             for x in reversed(data_in):
-                x = ss(x)
                 match = re.match(regex, x)
 
                 if match:
@@ -5029,17 +5028,17 @@ class ErrorLogs(WebRoot):
         data = []
 
         if os.path.isfile(logger.logFile):
-            with ek(codecs.open, *[logger.logFile, 'r', 'utf-8']) as f:
+            with io.open(logger.logFile, 'r', encoding='utf-8') as f:
                 data = Get_Data(minLevel, f.readlines(), 0, regex, logFilter, logSearch, maxLines)
 
         for i in range(1, int(sickbeard.LOG_NR)):
             if os.path.isfile(logger.logFile + "." + str(i)) and (len(data) <= maxLines):
-                with ek(codecs.open, *[logger.logFile + "." + str(i), 'r', 'utf-8']) as f:
+                with io.open(logger.logFile + "." + str(i), 'r', encoding='utf-8') as f:
                     data += Get_Data(minLevel, f.readlines(), len(data), regex, logFilter, logSearch, maxLines)
 
         return t.render(
             header="Log File", title="Logs", topmenu="system",
-            logLines="".join(data), minLevel=minLevel, logNameFilters=logNameFilters,
+            logLines=u"".join(data), minLevel=minLevel, logNameFilters=logNameFilters,
             logFilter=logFilter, logSearch=logSearch)
 
     def submit_errors(self):
-- 
GitLab


From eb15176b75602953ecc550c13785686782f2553c Mon Sep 17 00:00:00 2001
From: Dustyn Gibson <miigotu@gmail.com>
Date: Mon, 9 Nov 2015 01:17:43 -0800
Subject: [PATCH 165/215] Fix missing episodes in displayShow

---
 gui/slick/js/new/displayShow.js  |  7 ++++---
 gui/slick/views/displayShow.mako | 12 ++++++------
 2 files changed, 10 insertions(+), 9 deletions(-)

diff --git a/gui/slick/js/new/displayShow.js b/gui/slick/js/new/displayShow.js
index 061358d2e..64dd98218 100644
--- a/gui/slick/js/new/displayShow.js
+++ b/gui/slick/js/new/displayShow.js
@@ -115,9 +115,10 @@ $(document).ready(function(){
     });
 
     // initially show/hide all the rows according to the checkboxes
-    $("#checkboxControls input").each(function() {
-        $("tr." + $(this).attr('id')).each(function() {
-            if(this.checked) {
+    $("#checkboxControls input").each(function(e) {
+        var status = $(this).prop('checked');
+        $("tr." + $(this).attr('id')).each(function(status) {
+            if(status) {
                 $(this).show();
             } else {
                 $(this).hide();
diff --git a/gui/slick/views/displayShow.mako b/gui/slick/views/displayShow.mako
index b8963dbe5..4dbed7129 100644
--- a/gui/slick/views/displayShow.mako
+++ b/gui/slick/views/displayShow.mako
@@ -14,12 +14,12 @@
 %>
 <%block name="scripts">
 <script type="text/javascript" src="${srRoot}/js/lib/jquery.bookmarkscroll.js?${sbPID}"></script>
+<script type="text/javascript" src="${srRoot}/js/new/displayShow.js"></script>
 <script type="text/javascript" src="${srRoot}/js/plotTooltip.js?${sbPID}"></script>
 <script type="text/javascript" src="${srRoot}/js/sceneExceptionsTooltip.js?${sbPID}"></script>
 <script type="text/javascript" src="${srRoot}/js/ratingTooltip.js?${sbPID}"></script>
 <script type="text/javascript" src="${srRoot}/js/ajaxEpSearch.js?${sbPID}"></script>
 <script type="text/javascript" src="${srRoot}/js/ajaxEpSubtitles.js?${sbPID}"></script>
-<script type="text/javascript" src="${srRoot}/js/new/displayShow.js"></script>
 </%block>
 <%block name="content">
 <%namespace file="/inc_defs.mako" import="renderQualityPill"/>
@@ -250,11 +250,11 @@
 
     <div class="pull-right clearfix" id="checkboxControls">
         <div style="padding-bottom: 5px;">
-            <label for="wanted"><span class="wanted"><input type="checkbox" id="wanted"checked="checked" /> Wanted: <b>${epCounts[Overview.WANTED]}</b></span></label>
-            <label for="qual"><span class="qual"><input type="checkbox" id="qual"checked="checked" /> Low Quality: <b>${epCounts[Overview.QUAL]}</b></span></label>
-            <label for="good"><span class="good"><input type="checkbox" id="good"checked="checked" /> Downloaded: <b>${epCounts[Overview.GOOD]}</b></span></label>
-            <label for="skipped"><span class="skipped"><input type="checkbox" id="skipped"checked="checked" /> Skipped: <b>${epCounts[Overview.SKIPPED]}</b></span></label>
-            <label for="snatched"><span class="snatched"><input type="checkbox" id="snatched"checked="checked" /> Snatched: <b>${epCounts[Overview.SNATCHED]}</b></span></label>
+            <label for="wanted"><span class="wanted"><input type="checkbox" id="wanted" checked="checked" /> Wanted: <b>${epCounts[Overview.WANTED]}</b></span></label>
+            <label for="qual"><span class="qual"><input type="checkbox" id="qual" checked="checked" /> Low Quality: <b>${epCounts[Overview.QUAL]}</b></span></label>
+            <label for="good"><span class="good"><input type="checkbox" id="good" checked="checked" /> Downloaded: <b>${epCounts[Overview.GOOD]}</b></span></label>
+            <label for="skipped"><span class="skipped"><input type="checkbox" id="skipped" checked="checked" /> Skipped: <b>${epCounts[Overview.SKIPPED]}</b></span></label>
+            <label for="snatched"><span class="snatched"><input type="checkbox" id="snatched" checked="checked" /> Snatched: <b>${epCounts[Overview.SNATCHED]}</b></span></label>
         </div>
 
         <button id="popover" type="button" class="btn btn-xs">Select Columns <b class="caret"></b></button>
-- 
GitLab


From d7c568249b59be3757de4b970d5f561527bc3553 Mon Sep 17 00:00:00 2001
From: medariox <dariovizz@hotmail.it>
Date: Mon, 9 Nov 2015 17:10:36 +0100
Subject: [PATCH 166/215] Added DVD parsing for %SQN, making sure group is not
 included in parsing

---
 sickbeard/common.py |  4 ++--
 sickbeard/tv.py     | 10 +++++-----
 2 files changed, 7 insertions(+), 7 deletions(-)

diff --git a/sickbeard/common.py b/sickbeard/common.py
index 7349d69df..fdab157b2 100644
--- a/sickbeard/common.py
+++ b/sickbeard/common.py
@@ -436,9 +436,9 @@ class Quality(object):
 
         # 2 corresponds to SDDVD quality
         if quality == 2:
-            if re.search(r"b[rd](|.|-| )(rip|mux)", name.lower()):
+            if re.search(r"b(r|d|rd)?(-| |\.)?(rip|mux)", name.lower()):
                 rip_type = " BDRip"
-            elif re.search(r"dvd(|.|-| )(rip|mux)", name.lower()):
+            elif re.search(r"(dvd)(-| |\.)?(rip|mux)?", name.lower()):
                 rip_type = " DVDRip"
             else:
                 rip_type = ""
diff --git a/sickbeard/tv.py b/sickbeard/tv.py
index 3d84b9808..1a54e45b8 100644
--- a/sickbeard/tv.py
+++ b/sickbeard/tv.py
@@ -2107,11 +2107,6 @@ class TVEpisode(object):
         else:
             show_name = self.show.name
 
-        # try to get the release encoder to comply with scene naming standards
-        encoder = Quality.sceneQualityFromName(self.release_name, epQual)
-        if encoder:
-            logger.log(u"Found codec for '" + show_name + ": " + ep_name + "'.", logger.DEBUG)
-
         # try to get the release group
         rel_grp = {}
         rel_grp["SiCKRAGE"] = 'SiCKRAGE'
@@ -2137,6 +2132,11 @@ class TVEpisode(object):
             relgrp = 'location'
         else: relgrp = 'SiCKRAGE'
 
+        # try to get the release encoder to comply with scene naming standards
+        encoder = Quality.sceneQualityFromName(self.release_name.replace(rel_grp[relgrp], ""), epQual)
+        if encoder:
+            logger.log(u"Found codec for '" + show_name + ": " + ep_name + "'.", logger.DEBUG)
+
         return {
             '%SN': show_name,
             '%S.N': dot(show_name),
-- 
GitLab


From 51c8c8ba3443b6ce4dbe538c49c2f59a6180050f Mon Sep 17 00:00:00 2001
From: Dustyn Gibson <miigotu@gmail.com>
Date: Mon, 9 Nov 2015 08:18:25 -0800
Subject: [PATCH 167/215] Fix forgotten import in webapi Lint
 gui/slick/js/new/displayShow.js

---
 gui/slick/js/new/displayShow.js | 4 ++--
 sickbeard/webapi.py             | 7 ++++---
 2 files changed, 6 insertions(+), 5 deletions(-)

diff --git a/gui/slick/js/new/displayShow.js b/gui/slick/js/new/displayShow.js
index 64dd98218..acc6c5d6e 100644
--- a/gui/slick/js/new/displayShow.js
+++ b/gui/slick/js/new/displayShow.js
@@ -115,9 +115,9 @@ $(document).ready(function(){
     });
 
     // initially show/hide all the rows according to the checkboxes
-    $("#checkboxControls input").each(function(e) {
+    $("#checkboxControls input").each(function() {
         var status = $(this).prop('checked');
-        $("tr." + $(this).attr('id')).each(function(status) {
+        $("tr." + $(this).attr('id')).each(function() {
             if(status) {
                 $(this).show();
             } else {
diff --git a/sickbeard/webapi.py b/sickbeard/webapi.py
index 4a2507c42..9fbe6cfae 100644
--- a/sickbeard/webapi.py
+++ b/sickbeard/webapi.py
@@ -18,12 +18,14 @@
 # along with SickRage.  If not, see <http://www.gnu.org/licenses/>.
 # pylint: disable=W0223,E0202
 
+import io
 import os
+import re
 import time
 import urllib
 import datetime
-import re
 import traceback
+
 import sickbeard
 from sickrage.helper.common import dateFormat, dateTimeFormat, timeFormat
 from sickrage.helper.encoding import ek
@@ -58,7 +60,6 @@ from sickbeard.common import UNKNOWN
 from sickbeard.common import WANTED
 from sickbeard.common import ARCHIVED
 from sickbeard.common import statusStrings
-import codecs
 
 try:
     import json
@@ -1290,7 +1291,7 @@ class CMD_PostProcess(ApiCall):
             self.type = 'manual'
 
         data = processTV.processDir(self.path, process_method=self.process_method, force=self.force_replace,
-                                    is_priority=self.is_priority, failed=self.failed, type=self.type)
+                                    is_priority=self.is_priority, failed=self.failed, proc_type=self.type)
 
         if not self.return_data:
             data = ""
-- 
GitLab


From 570e11a823e4aced85298760cd43110bf860bd29 Mon Sep 17 00:00:00 2001
From: Dustyn Gibson <miigotu@gmail.com>
Date: Mon, 9 Nov 2015 11:06:50 -0800
Subject: [PATCH 168/215] Fix displayshow, shcedule, history encoding problems.
 Still a few questionable str() calls around datetime objects in mako

---
 gui/slick/views/schedule.mako |  4 ++--
 sickbeard/sbdatetime.py       | 24 ++++++++++++------------
 2 files changed, 14 insertions(+), 14 deletions(-)

diff --git a/gui/slick/views/schedule.mako b/gui/slick/views/schedule.mako
index 921ab7466..87e79ab51 100644
--- a/gui/slick/views/schedule.mako
+++ b/gui/slick/views/schedule.mako
@@ -139,7 +139,7 @@
 
             <td>
 % if cur_result['description']:
-                <img alt="" src="${srRoot}/images/info32.png" height="16" width="16" class="plotInfo" id="plot_info_${'%s_%s_%s' % (str(cur_result['showid']), str(cur_result['season']), str(cur_result['episode']))}" />
+                <img alt="" src="${srRoot}/images/info32.png" height="16" width="16" class="plotInfo" id="plot_info_${'%s_%s_%s' % (cur_result['showid'], cur_result['season'], cur_result['episode'])}" />
 % else:
                 <img alt="" src="${srRoot}/images/info32.png" width="16" height="16" class="plotInfoNone"  />
 % endif
@@ -319,7 +319,7 @@
                 <span class="title">Next Episode:</span> <span>${'S%02iE%02i' % (int(cur_result['season']), int(cur_result['episode']))} - ${cur_result['name']}</span>
 
                 <div class="clearfix">
-                    <span class="title">Airs: </span><span class="airdate">${sbdatetime.sbdatetime.sbfdatetime(cur_result['localtime']).decode(sickbeard.SYS_ENCODING)}</span>${('', '<span> on %s</span>' % str(cur_result['network']))[bool(cur_result['network'])]}
+                    <span class="title">Airs: </span><span class="airdate">${sbdatetime.sbdatetime.sbfdatetime(cur_result['localtime'])}</span>${('', '<span> on %s</span>' % cur_result['network'])[bool(cur_result['network'])]}
                 </div>
 
                 <div class="clearfix">
diff --git a/sickbeard/sbdatetime.py b/sickbeard/sbdatetime.py
index 27b7f69b8..4c0850bd8 100644
--- a/sickbeard/sbdatetime.py
+++ b/sickbeard/sbdatetime.py
@@ -141,7 +141,7 @@ class sbdatetime(datetime.datetime):
             except Exception:
                 sbdatetime.has_locale = False
 
-        strt = u''
+        strt = ''
         try:
             if self is None:
                 if dt is not None:
@@ -165,7 +165,7 @@ class sbdatetime(datetime.datetime):
             except Exception:
                 sbdatetime.has_locale = False
 
-        return strt
+        return strt.decode(sickbeard.SYS_ENCODING)
 
     # display Date in SickRage Format
     @static_or_instance
@@ -184,7 +184,7 @@ class sbdatetime(datetime.datetime):
         except Exception:
             pass
 
-        strd = u''
+        strd = ''
         try:
             if self is None:
                 if dt is not None:
@@ -204,7 +204,7 @@ class sbdatetime(datetime.datetime):
             except Exception:
                 pass
 
-        return strd
+        return strd.decode(sickbeard.SYS_ENCODING)
 
     # display Datetime in SickRage Format
     @static_or_instance
@@ -225,7 +225,7 @@ class sbdatetime(datetime.datetime):
         except Exception:
             pass
 
-        strd = u''
+        strd = ''
         try:
             if self is None:
                 if dt is not None:
@@ -243,11 +243,11 @@ class sbdatetime(datetime.datetime):
                         except Exception:
                             sbdatetime.has_locale = False
                     if t_preset is not None:
-                        strd += u', ' + dt.strftime(t_preset)
+                        strd += ', ' + dt.strftime(t_preset)
                     elif show_seconds:
-                        strd += u', ' + dt.strftime(sickbeard.TIME_PRESET_W_SECONDS)
+                        strd += ', ' + dt.strftime(sickbeard.TIME_PRESET_W_SECONDS)
                     else:
-                        strd += u', ' + dt.strftime(sickbeard.TIME_PRESET)
+                        strd += ', ' + dt.strftime(sickbeard.TIME_PRESET)
             else:
                 if d_preset is not None:
                     strd = self.strftime(d_preset)
@@ -263,11 +263,11 @@ class sbdatetime(datetime.datetime):
                     except Exception:
                         sbdatetime.has_locale = False
                 if t_preset is not None:
-                    strd += u', ' + self.strftime(t_preset)
+                    strd += ', ' + self.strftime(t_preset)
                 elif show_seconds:
-                    strd += u', ' + self.strftime(sickbeard.TIME_PRESET_W_SECONDS)
+                    strd += ', ' + self.strftime(sickbeard.TIME_PRESET_W_SECONDS)
                 else:
-                    strd += u', ' + self.strftime(sickbeard.TIME_PRESET)
+                    strd += ', ' + self.strftime(sickbeard.TIME_PRESET)
         finally:
             try:
                 if sbdatetime.has_locale:
@@ -275,4 +275,4 @@ class sbdatetime(datetime.datetime):
             except Exception:
                 sbdatetime.has_locale = False
 
-        return strd
+        return strd.decode(sickbeard.SYS_ENCODING)
-- 
GitLab


From 3f55c027638c401de4d4e0619827790dccc28dce Mon Sep 17 00:00:00 2001
From: medariox <dariovizz@hotmail.it>
Date: Mon, 9 Nov 2015 20:39:04 +0100
Subject: [PATCH 169/215] Fixes extra scripts for subtitles

---
 sickbeard/subtitles.py | 35 +++++++++++++++--------------------
 1 file changed, 15 insertions(+), 20 deletions(-)

diff --git a/sickbeard/subtitles.py b/sickbeard/subtitles.py
index ab84da88b..5e06e596a 100644
--- a/sickbeard/subtitles.py
+++ b/sickbeard/subtitles.py
@@ -154,7 +154,7 @@ def downloadSubtitles(subtitles_info):
         save_subtitles(video, found_subtitles, directory=subtitles_path, single=not sickbeard.SUBTITLES_MULTI)
 
         if not sickbeard.EMBEDDED_SUBTITLES_ALL and sickbeard.SUBTITLES_EXTRA_SCRIPTS and video_path.endswith(('.mkv', '.mp4')):
-            run_subs_extra_scripts(subtitles_info, found_subtitles)
+            run_subs_extra_scripts(subtitles_info, found_subtitles, video, single=not sickbeard.SUBTITLES_MULTI)
 
         current_subtitles = subtitlesLanguages(video_path)[0]
         new_subtitles = frozenset(current_subtitles).difference(existing_subtitles)
@@ -439,31 +439,26 @@ class SubtitlesFinder(object):
         return {'old': [0, 24], 'new': [0, 4, 8, 4, 16, 24, 24]}
 
 
-def run_subs_extra_scripts(epObj, foundSubs):
+def run_subs_extra_scripts(epObj, found_subtitles, video, single=False):
 
     for curScriptName in sickbeard.SUBTITLES_EXTRA_SCRIPTS:
         script_cmd = [piece for piece in re.split("( |\\\".*?\\\"|'.*?')", curScriptName) if piece.strip()]
         script_cmd[0] = ek(os.path.abspath, script_cmd[0])
         logger.log(u"Absolute path to script: " + script_cmd[0], logger.DEBUG)
 
-        for video, subs in foundSubs.iteritems():
-            for sub in subs:
-                subpath = subliminal.subtitle.get_subtitle_path(video.name, sub.language)
-                if os.path.isabs(sickbeard.SUBTITLES_DIR):
-                    subpath = ek(os.path.join, sickbeard.SUBTITLES_DIR, ek(os.path.basename, subpath))
-                elif sickbeard.SUBTITLES_DIR:
-                    subpath = ek(os.path.join, ek(os.path.dirname, subpath), sickbeard.SUBTITLES_DIR, ek(os.path.basename, subpath))
+        for subtitle in found_subtitles:
+            subtitle_path = subliminal.subtitle.get_subtitle_path(video.name, None if single else subtitle.language)
 
-                inner_cmd = script_cmd + [video.name, subpath, sub.language.opensubtitles, epObj['show.name'],
-                                          str(epObj['season']), str(epObj['episode']), epObj['name'], str(epObj['show.indexerid'])]
+            inner_cmd = script_cmd + [video.name, subtitle_path, subtitle.language.opensubtitles, epObj['show.name'],
+                                      str(epObj['season']), str(epObj['episode']), epObj['name'], str(epObj['show.indexerid'])]
 
-                # use subprocess to run the command and capture output
-                logger.log(u"Executing command: %s" % inner_cmd)
-                try:
-                    p = subprocess.Popen(inner_cmd, stdin=subprocess.PIPE, stdout=subprocess.PIPE,
-                                         stderr=subprocess.STDOUT, cwd=sickbeard.PROG_DIR)
-                    out, _ = p.communicate()  # @UnusedVariable
-                    logger.log(u"Script result: %s" % out, logger.DEBUG)
+            # use subprocess to run the command and capture output
+            logger.log(u"Executing command: %s" % inner_cmd)
+            try:
+                p = subprocess.Popen(inner_cmd, stdin=subprocess.PIPE, stdout=subprocess.PIPE,
+                                     stderr=subprocess.STDOUT, cwd=sickbeard.PROG_DIR)
+                out, _ = p.communicate()  # @UnusedVariable
+                logger.log(u"Script result: %s" % out, logger.DEBUG)
 
-                except Exception as e:
-                    logger.log(u"Unable to run subs_extra_script: " + ex(e))
+            except Exception as e:
+                logger.log(u"Unable to run subs_extra_script: " + ex(e))
-- 
GitLab


From 97ed4adedf4cca09086a80d336a5fd0149c10a27 Mon Sep 17 00:00:00 2001
From: Gaganpreet Arora <gaganpreet.arora@gmail.com>
Date: Mon, 9 Nov 2015 20:55:26 +0100
Subject: [PATCH 170/215] Encode long type as int

---
 lib/rtorrent/lib/bencode.py | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/lib/rtorrent/lib/bencode.py b/lib/rtorrent/lib/bencode.py
index 97bd2f0eb..705d9cd65 100644
--- a/lib/rtorrent/lib/bencode.py
+++ b/lib/rtorrent/lib/bencode.py
@@ -42,8 +42,10 @@ _py3 = sys.version_info[0] == 3
 
 if _py3:
     _VALID_STRING_TYPES = (str,)
+    _VALID_INT_TYPES = (int,)
 else:
     _VALID_STRING_TYPES = (str, unicode)  # @UndefinedVariable
+    _VALID_INT_TYPES = (int, long)  # @UndefinedVariable
 
 _TYPE_INT = 1
 _TYPE_STRING = 2
@@ -267,7 +269,7 @@ def _encode_dict(data):
 def encode(data):
     if isinstance(data, bool):
         return False
-    elif isinstance(data, int):
+    elif isinstance(data, _VALID_INT_TYPES):
         return _encode_int(data)
     elif isinstance(data, bytes):
         return _encode_string(data)
-- 
GitLab


From 4b352bc44e189f45937b98b0365cc1b9c6d5c7eb Mon Sep 17 00:00:00 2001
From: Dustyn Gibson <miigotu@gmail.com>
Date: Mon, 9 Nov 2015 13:54:53 -0800
Subject: [PATCH 171/215] Fix synoindex calls in helpers Remove unneeded global
 keywords in sceme_exceptions Clarify log message for torrentz

---
 sickbeard/helpers.py            |  6 +++---
 sickbeard/providers/torrentz.py |  2 +-
 sickbeard/scene_exceptions.py   | 21 +++++++--------------
 3 files changed, 11 insertions(+), 18 deletions(-)

diff --git a/sickbeard/helpers.py b/sickbeard/helpers.py
index bdd4b0d09..47aaf3bd1 100644
--- a/sickbeard/helpers.py
+++ b/sickbeard/helpers.py
@@ -357,7 +357,7 @@ def makeDir(path):
         try:
             ek(os.makedirs, path)
             # do the library update for synoindex
-            synoindex_notifier.addFolder(path)
+            synoindex_notifier().addFolder(path)
         except OSError:
             return False
     return True
@@ -622,7 +622,7 @@ def make_dirs(path):
                     # use normpath to remove end separator, otherwise checks permissions against itself
                     chmodAsParent(ek(os.path.normpath, sofar))
                     # do the library update for synoindex
-                    synoindex_notifier.addFolder(sofar)
+                    synoindex_notifier().addFolder(sofar)
                 except (OSError, IOError) as e:
                     logger.log(u"Failed creating %s : %r" % (sofar, ex(e)), logger.ERROR)
                     return False
@@ -702,7 +702,7 @@ def delete_empty_folders(check_empty_dir, keep_dir=None):
                 # need shutil.rmtree when ignore_items is really implemented
                 ek(os.rmdir, check_empty_dir)
                 # do the library update for synoindex
-                synoindex_notifier.deleteFolder(check_empty_dir)
+                synoindex_notifier().deleteFolder(check_empty_dir)
             except OSError as e:
                 logger.log(u"Unable to delete %s. Error: %r" % (check_empty_dir, repr(e)), logger.WARNING)
                 break
diff --git a/sickbeard/providers/torrentz.py b/sickbeard/providers/torrentz.py
index 2741708db..c5a89de89 100644
--- a/sickbeard/providers/torrentz.py
+++ b/sickbeard/providers/torrentz.py
@@ -86,7 +86,7 @@ class TORRENTZProvider(generic.TorrentProvider):
                     continue
 
                 if not all([data, 'rss' in data, 'channel' in data['rss'], 'item' in data['rss']['channel']]):
-                    logger.log(u"Malformed rss returned, skipping", logger.DEBUG)
+                    logger.log(u"Malformed rss returned or no results, skipping", logger.DEBUG)
                     continue
 
                 time.sleep(cpu_presets[sickbeard.CPU_PRESET])
diff --git a/sickbeard/scene_exceptions.py b/sickbeard/scene_exceptions.py
index 8e1e6b814..69cdfbcfc 100644
--- a/sickbeard/scene_exceptions.py
+++ b/sickbeard/scene_exceptions.py
@@ -70,7 +70,7 @@ def get_scene_exceptions(indexer_id, season=-1):
     """
     Given a indexer_id, return a list of all the scene exceptions.
     """
-    global exceptionsCache
+
     exceptionsList = []
 
     if indexer_id not in exceptionsCache or season not in exceptionsCache[indexer_id]:
@@ -117,7 +117,6 @@ def get_scene_seasons(indexer_id):
     """
     return a list of season numbers that have scene exceptions
     """
-    global exceptionsSeasonCache
     exceptionsSeasonList = []
 
     if indexer_id not in exceptionsSeasonCache:
@@ -181,7 +180,6 @@ def retrieve_exceptions():
     Looks up the exceptions on github, parses them into a dict, and inserts them into the
     scene_exceptions table in cache.db. Also clears the scene name cache.
     """
-    global exception_dict, anidb_exception_dict, xem_exception_dict
 
     for indexer in sickbeard.indexerApi().indexers:
         if shouldRefresh(sickbeard.indexerApi(indexer).name):
@@ -202,7 +200,7 @@ def retrieve_exceptions():
 
             # each exception is on one line with the format indexer_id: 'show name 1', 'show name 2', etc
             for cur_line in data.splitlines():
-                indexer_id, sep, aliases = cur_line.partition(':')  # @UnusedVariable
+                indexer_id, _, aliases = cur_line.partition(':')  # @UnusedVariable
 
                 if not aliases:
                     continue
@@ -246,8 +244,9 @@ def retrieve_exceptions():
             for ex in cur_exception_dict.iteritems():
                 cur_exception, curSeason = ex
                 if cur_exception not in existing_exceptions:
-                    queries.append(["INSERT OR IGNORE INTO scene_exceptions (indexer_id, show_name, season) VALUES (?,?,?);",
-                            [cur_indexer_id, cur_exception, curSeason]])
+                    queries.append(
+                        ["INSERT OR IGNORE INTO scene_exceptions (indexer_id, show_name, season) VALUES (?,?,?);",
+                         [cur_indexer_id, cur_exception, curSeason]])
     if queries:
         myDB.mass_action(queries)
         logger.log(u"Updated scene exceptions", logger.DEBUG)
@@ -263,7 +262,6 @@ def update_scene_exceptions(indexer_id, scene_exceptions, season=-1):
     """
     Given a indexer_id, and a list of all show scene exceptions, update the db.
     """
-    global exceptionsCache
     myDB = db.DBConnection('cache.db')
     myDB.action('DELETE FROM scene_exceptions WHERE indexer_id=? and season=?', [indexer_id, season])
 
@@ -279,15 +277,13 @@ def update_scene_exceptions(indexer_id, scene_exceptions, season=-1):
                     [indexer_id, cur_exception, season])
 
 def _anidb_exceptions_fetcher():
-    global anidb_exception_dict
-
     if shouldRefresh('anidb'):
         logger.log(u"Checking for scene exception updates for AniDB")
         for show in sickbeard.showList:
             if show.is_anime and show.indexer == 1:
                 try:
                     anime = adba.Anime(None, name=show.name, tvdbid=show.indexerid, autoCorrectName=True)
-                except:
+                except Exception:
                     continue
                 else:
                     if anime.name and anime.name != show.name:
@@ -300,9 +296,6 @@ def _anidb_exceptions_fetcher():
 xem_session = requests.Session()
 
 def _xem_exceptions_fetcher():
-    global xem_exception_dict
-    global xem_session
-
     if shouldRefresh('xem'):
         for indexer in sickbeard.indexerApi().indexers:
             logger.log(u"Checking for XEM scene exception updates for " + sickbeard.indexerApi(indexer).name)
@@ -310,7 +303,7 @@ def _xem_exceptions_fetcher():
             url = "http://thexem.de/map/allNames?origin=%s&seasonNumbers=1" % sickbeard.indexerApi(indexer).config[
                 'xem_origin']
 
-            parsedJSON = helpers.getURL(url, session=xem_session, timeout = 90, json=True)
+            parsedJSON = helpers.getURL(url, session=xem_session, timeout=90, json=True)
             if not parsedJSON:
                 logger.log(u"Check scene exceptions update failed for " + sickbeard.indexerApi(
                     indexer).name + ", Unable to get URL: " + url, logger.DEBUG)
-- 
GitLab


From 505ad2a9326eba0f9f77b08338ef6f4a87243c8d Mon Sep 17 00:00:00 2001
From: Dustyn Gibson <miigotu@gmail.com>
Date: Mon, 9 Nov 2015 17:27:40 -0800
Subject: [PATCH 172/215] Fix history layout caching issue (cant define
 mutables inside <%!) Fix a few mako errors

---
 gui/slick/views/config_providers.mako  |  1 -
 gui/slick/views/displayShow.mako       |  2 +-
 gui/slick/views/history.mako           |  5 +----
 gui/slick/views/home_popularShows.mako |  6 +++---
 gui/slick/views/manage_massEdit.mako   |  3 +--
 gui/slick/views/schedule.mako          | 11 +++++------
 6 files changed, 11 insertions(+), 17 deletions(-)

diff --git a/gui/slick/views/config_providers.mako b/gui/slick/views/config_providers.mako
index acc35b3f0..28bf95490 100644
--- a/gui/slick/views/config_providers.mako
+++ b/gui/slick/views/config_providers.mako
@@ -4,7 +4,6 @@
     from sickbeard.providers.generic import GenericProvider
     from sickbeard.providers import thepiratebay
     from sickbeard.helpers import anon_url
-
 %>
 <%block name="scripts">
 <script type="text/javascript" src="${srRoot}/js/configProviders.js?${sbPID}"></script>
diff --git a/gui/slick/views/displayShow.mako b/gui/slick/views/displayShow.mako
index 4dbed7129..77ae53cca 100644
--- a/gui/slick/views/displayShow.mako
+++ b/gui/slick/views/displayShow.mako
@@ -161,7 +161,7 @@
                     ${renderQualityPill(show.quality)}
                 % else:
                 % if anyQualities:
-                    <i>Allowed:</i> ${", ".join([capture(renderQualityPill, x) for x in sorted(anyQualities)])}${("", "</br>")[bool(bestQualities)]}
+                    <i>Allowed:</i> ${", ".join([capture(renderQualityPill, x) for x in sorted(anyQualities)])}${("", "<br>")[bool(bestQualities)]}
                 % endif
                 % if bestQualities:
                     <i>Preferred:</i> ${", ".join([capture(renderQualityPill, x) for x in sorted(bestQualities)])}
diff --git a/gui/slick/views/history.mako b/gui/slick/views/history.mako
index 495e8968e..ce5a5b5dd 100644
--- a/gui/slick/views/history.mako
+++ b/gui/slick/views/history.mako
@@ -14,9 +14,6 @@
     from sickbeard.common import Quality, statusStrings, Overview
 
     from sickrage.show.History import History
-
-    layout = sickbeard.HISTORY_LAYOUT
-    history_limit = sickbeard.HISTORY_LIMIT
 %>
 <%block name="scripts">
 <script type="text/javascript" src="${srRoot}/js/new/history.js"></script>
@@ -50,7 +47,7 @@
 </div>
 <br>
 
-% if layout == "detailed":
+% if sickbeard.HISTORY_LAYOUT == "detailed":
     <table id="historyTable" class="sickbeardTable tablesorter" cellspacing="1" border="0" cellpadding="0">
         <thead>
             <tr>
diff --git a/gui/slick/views/home_popularShows.mako b/gui/slick/views/home_popularShows.mako
index 3b5b5ed94..0da617745 100644
--- a/gui/slick/views/home_popularShows.mako
+++ b/gui/slick/views/home_popularShows.mako
@@ -1,13 +1,13 @@
 <%inherit file="/layouts/main.mako"/>
 <%!
     from sickbeard.helpers import anon_url
-    import sickbeard    
-    imdb_tt = [show.imdbid for show in sickbeard.showList if show.imdbid]
+    import sickbeard
 %>
 <%block name="content">
 <h2>Popular Shows</h2>
 <br>
 
+<% imdb_tt = [show.imdbid for show in sickbeard.showList if show.imdbid] %>
 % if not popular_shows:
     <h3>Fetching of IMDB Data failed. Are you online?</h3>
 
@@ -34,7 +34,7 @@
                     Add Show</a></span>
                 % else:
                 <span> Already added </span>
-                % endif    
+                % endif
 
             </div>
             <br style="clear:both" />
diff --git a/gui/slick/views/manage_massEdit.mako b/gui/slick/views/manage_massEdit.mako
index 216782360..816af35f2 100644
--- a/gui/slick/views/manage_massEdit.mako
+++ b/gui/slick/views/manage_massEdit.mako
@@ -13,7 +13,6 @@
         initial_quality = int(quality_value)
     else:
         initial_quality = common.SD
-    endif
 
     anyQualities, bestQualities = common.Quality.splitQuality(initial_quality)
 %>
@@ -43,7 +42,7 @@
                         <br>
 
                         <fieldset class="component-group-list">
-                            
+
                         <div class="field-pair">
                             <label for="shows">
                                 <span class="component-title">Selected Shows</span>
diff --git a/gui/slick/views/schedule.mako b/gui/slick/views/schedule.mako
index 87e79ab51..3429ed986 100644
--- a/gui/slick/views/schedule.mako
+++ b/gui/slick/views/schedule.mako
@@ -19,7 +19,6 @@
 </style>
 </%block>
 <%block name="content">
-<% sort = sickbeard.COMING_EPS_SORT %>
 <%namespace file="/inc_defs.mako" import="renderQualityPill"/>
 <h1 class="header">${header}</h1>
 <div class="h2footer pull-right">
@@ -122,7 +121,7 @@
                 <time datetime="${airDate.isoformat('T')}" class="date">${sbdatetime.sbdatetime.sbfdatetime(airDate)}</time>
             </td>
 
-            <td align="center" nowrap="nowrap"> 
+            <td align="center" nowrap="nowrap">
                 <% ends = sbdatetime.sbdatetime.convert_to_setting(cur_ep_enddate) %>
                 <time datetime="${ends.isoformat('T')}" class="date">${sbdatetime.sbdatetime.sbfdatetime(ends)}</time>
             </td>
@@ -195,7 +194,7 @@
     today_header = False
     show_div = 'ep_listing listing-default'
 %>
-% if 'show' == sort:
+% if sickbeard.COMING_EPS_SORT == 'show':
     <br><br>
 % endif
 
@@ -214,7 +213,7 @@
     else:
         cur_ep_enddate = cur_result['localtime']
 %>
-    % if 'network' == sort:
+    % if sickbeard.COMING_EPS_SORT == 'network:
         <% show_network = ('no network', cur_result['network'])[bool(cur_result['network'])] %>
         % if cur_segment != show_network:
             <div>
@@ -235,7 +234,7 @@
             % endif
         % endif
 
-    % elif 'date' == sort:
+    % elif sickbeard.COMING_EPS_SORT == 'date':
         % if cur_segment != cur_ep_airdate:
             % if cur_ep_enddate < today and cur_ep_airdate != today.date() and not missed_header:
                 <br><h2 class="day">Missed</h2>
@@ -272,7 +271,7 @@
             % endif
         % endif
 
-    % elif 'show' == sort:
+    % elif sickbeard.COMING_EPS_SORT == 'show':
         % if cur_ep_enddate < today:
             <% show_div = 'ep_listing listing-overdue listingradius' %>
         % elif cur_ep_airdate >= next_week.date():
-- 
GitLab


From 12d9056c0ea41091dd5741b25c4c688f00e722e0 Mon Sep 17 00:00:00 2001
From: Dustyn Gibson <miigotu@gmail.com>
Date: Mon, 9 Nov 2015 17:54:05 -0800
Subject: [PATCH 173/215] Remove unused imports in mako @OmgImAlexis I figured
 out how to lint mako fairly ok, I just lint the py files in cache/mako =P

---
 gui/slick/views/displayShow.mako | 3 +--
 gui/slick/views/home.mako        | 8 +++-----
 2 files changed, 4 insertions(+), 7 deletions(-)

diff --git a/gui/slick/views/displayShow.mako b/gui/slick/views/displayShow.mako
index 77ae53cca..44f17cb44 100644
--- a/gui/slick/views/displayShow.mako
+++ b/gui/slick/views/displayShow.mako
@@ -7,9 +7,8 @@
     from sickbeard import subtitles, sbdatetime, network_timezones
     import sickbeard.helpers
 
-    from sickbeard.common import SKIPPED, WANTED, UNAIRED, ARCHIVED, IGNORED, SNATCHED, SNATCHED_PROPER, SNATCHED_BEST, FAILED
+    from sickbeard.common import SKIPPED, WANTED, UNAIRED, ARCHIVED, IGNORED, FAILED
     from sickbeard.common import Quality, qualityPresets, statusStrings, Overview
-
     from sickbeard.helpers import anon_url
 %>
 <%block name="scripts">
diff --git a/gui/slick/views/home.mako b/gui/slick/views/home.mako
index 33b95391c..b386eaa95 100644
--- a/gui/slick/views/home.mako
+++ b/gui/slick/views/home.mako
@@ -2,10 +2,8 @@
 <%!
     import sickbeard
     import calendar
-    from sickbeard.common import SKIPPED, WANTED, UNAIRED, ARCHIVED, IGNORED, SNATCHED, SNATCHED_PROPER, SNATCHED_BEST, FAILED
-    from sickbeard.common import Quality, qualityPresets, qualityPresetStrings
-    from sickbeard import db, sbdatetime, network_timezones
-    import datetime
+    from sickbeard import sbdatetime
+    from sickbeard import network_timezones
     import re
 %>
 <%block name="metas">
@@ -404,7 +402,7 @@
         <%
             display_status = curShow.status
             if None is not display_status:
-                if re.search('(?i)(?:new|returning)\s*series', curShow.status):
+                if re.search(r'(?i)(?:new|returning)\s*series', curShow.status):
                     display_status = 'Continuing'
                 elif re.search('(?i)(?:nded)', curShow.status):
                     display_status = 'Ended'
-- 
GitLab


From e8c5912099a266dd7006a3ed65ed4678c58d5b2e Mon Sep 17 00:00:00 2001
From: Fernando <fernandog@users.noreply.github.com>
Date: Tue, 10 Nov 2015 10:13:47 -0200
Subject: [PATCH 174/215] Fix typo

---
 gui/slick/views/schedule.mako | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/gui/slick/views/schedule.mako b/gui/slick/views/schedule.mako
index 3429ed986..98a4c2cf3 100644
--- a/gui/slick/views/schedule.mako
+++ b/gui/slick/views/schedule.mako
@@ -213,7 +213,7 @@
     else:
         cur_ep_enddate = cur_result['localtime']
 %>
-    % if sickbeard.COMING_EPS_SORT == 'network:
+    % if sickbeard.COMING_EPS_SORT == 'network':
         <% show_network = ('no network', cur_result['network'])[bool(cur_result['network'])] %>
         % if cur_segment != show_network:
             <div>
-- 
GitLab


From e140a18be3ccc67943c020e456eb4107fc056616 Mon Sep 17 00:00:00 2001
From: Dustyn Gibson <miigotu@gmail.com>
Date: Tue, 10 Nov 2015 06:25:25 -0800
Subject: [PATCH 175/215] Only use the exception logger for ERROR level (maybe
 we should use logger.warn() too xD) Fixes
 https://github.com/SiCKRAGETV/sickrage-issues/issues/3609

---
 sickbeard/logger.py | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/sickbeard/logger.py b/sickbeard/logger.py
index abc96c575..dc128ab86 100644
--- a/sickbeard/logger.py
+++ b/sickbeard/logger.py
@@ -155,9 +155,6 @@ class Logger(object):
             message = check
             level = WARNING
 
-        if level in (ERROR, WARNING):
-            self.logger.exception(message, *args, **kwargs)
-
         if level == ERROR:
             classes.ErrorViewer.add(classes.UIError(message))
         elif level == WARNING:
@@ -165,6 +162,9 @@ class Logger(object):
 
             # if sickbeard.GIT_AUTOISSUES:
             #    self.submit_errors()
+
+        if level == ERROR:
+            self.logger.exception(message, *args, **kwargs)
         else:
             self.logger.log(level, message, *args, **kwargs)
 
-- 
GitLab


From 87bff389d2c11becb44ee883a7319aeec69571e6 Mon Sep 17 00:00:00 2001
From: supergonkas <duramato@users.noreply.github.com>
Date: Tue, 10 Nov 2015 16:25:11 +0000
Subject: [PATCH 176/215] Add real to proper strings

---
 sickbeard/providers/generic.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/sickbeard/providers/generic.py b/sickbeard/providers/generic.py
index 702fb0f11..ff2cadc27 100644
--- a/sickbeard/providers/generic.py
+++ b/sickbeard/providers/generic.py
@@ -84,7 +84,7 @@ class GenericProvider(object):
 
         shuffle(self.btCacheURLS)
 
-        self.proper_strings = ['PROPER|REPACK']
+        self.proper_strings = ['PROPER|REPACK|REAL']
 
     def getID(self):
         return GenericProvider.makeID(self.name)
-- 
GitLab


From 56d32e9f33c10636992858ab5aac9736c88975e7 Mon Sep 17 00:00:00 2001
From: psych0d0g <bigluks@gmail.com>
Date: Tue, 10 Nov 2015 20:44:31 +0100
Subject: [PATCH 177/215] update user information on anime Black- and
 Whitelisting behaviour

---
 gui/slick/views/inc_blackwhitelist.mako | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/gui/slick/views/inc_blackwhitelist.mako b/gui/slick/views/inc_blackwhitelist.mako
index 0aa539466..37cc9fb65 100644
--- a/gui/slick/views/inc_blackwhitelist.mako
+++ b/gui/slick/views/inc_blackwhitelist.mako
@@ -8,6 +8,8 @@
             <p>The <b>Whitelist</b> is checked <i>before</i> the <b>Blacklist</b>.</p>
             <p>Groups are shown as <b>Name</b> | <b>Rating</b> | <b>Number of subbed episodes</b>.</p>
             <p>You may also add any fansub group not listed to either list manually.</p>
+            <p>When doing this please note that you can only use groups listed on anidb for this anime.
+            </br>If a group is not listed on anidb but subbed this anime, please correct anidb's data.</p>
         </div>
         <div class="bwlWrapper" id="Anime">
         <div class="blackwhitelist all">
-- 
GitLab


From d159d208325551a2fe20cddab62544db3f0f2731 Mon Sep 17 00:00:00 2001
From: adaur <adaur.underground@gmail.com>
Date: Wed, 11 Nov 2015 15:00:55 +0100
Subject: [PATCH 178/215] Remove FTDB provider

---
 .../images/providers/frenchtorrentdb.png      | Bin 441 -> 0 bytes
 sickbeard/helpers.py                          |   1 -
 sickbeard/providers/__init__.py               |   3 +-
 sickbeard/providers/frenchtorrentdb.py        | 200 ------------------
 tests/helpers_tests.py                        |   1 -
 5 files changed, 1 insertion(+), 204 deletions(-)
 delete mode 100644 gui/slick/images/providers/frenchtorrentdb.png
 delete mode 100644 sickbeard/providers/frenchtorrentdb.py

diff --git a/gui/slick/images/providers/frenchtorrentdb.png b/gui/slick/images/providers/frenchtorrentdb.png
deleted file mode 100644
index 26a665b300adc56127ec4e55e36574b66f5f27e5..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 441
zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4rT@h1`S>QU<L+;Edf3uuK)l4XJBApVq#)o
zU|?lsg|OM!*cccX*x1-OIXNLBtgNg&JUk2x44j;tTwEYySy@^6`1qKZm{?g^Au74J
zxOjMY`1tsQgoMPz#3Upn<lRdY6ckicRMgbe)ck5RG&D5o9%wc^((3rA)%Rb!^n`Zj
zC*9_!dacj&TA%Cd>l-FaF;1LjZf<UoyV5dau9cOQt*xy?{$j_NDtC8xFE6j);NXae
zhzs=<whRmmq9s9o!3-uQ>FEs(4F?V!xO(;K)wgfoe*E~+Z^=|U1_p-to-U3d5|?w&
z?<_jxAi!{OUUK9@tuz1stG4$>WTzkFRGAWgBl0jiqrmoa9g*u3POnl5wU2ISn0q&L
ziPmw|f|QTjqz<UPE|+|JMJBpWEHt+zc~uox{=3J^+Ag_XITCU<#EMTT>oZ$=u;84+
zH9fzwrcN{sSfr(#p5_vkAi~}__s09m+G)Yj)0e+GbLP0R;fnh?Qza|+p8p=RSx@=f
c6Z!gmi^7@jZ2INFz`(%Z>FVdQ&MBb@07nLrF#rGn

diff --git a/sickbeard/helpers.py b/sickbeard/helpers.py
index 47aaf3bd1..78fbb5c40 100644
--- a/sickbeard/helpers.py
+++ b/sickbeard/helpers.py
@@ -154,7 +154,6 @@ def remove_non_release_groups(name):
         r'^\[ www\.Cpasbien\.com \] ':       'searchre',
         r'- \{ www\.SceneTime\.com \}$':     'searchre',
         r'^\{ www\.SceneTime\.com \} - ':    'searchre',
-        r'^\[www\.frenchtorrentdb\.com\] ':  'searchre',
         r'^\]\.\[www\.tensiontorrent.com\] - ':      'searchre',
         r'^\]\.\[ www\.tensiontorrent.com \] - ':    'searchre',
         r'- \[ www\.torrentday\.com \]$':            'searchre',
diff --git a/sickbeard/providers/__init__.py b/sickbeard/providers/__init__.py
index 933cdf5d7..4c1ef35f2 100644
--- a/sickbeard/providers/__init__.py
+++ b/sickbeard/providers/__init__.py
@@ -18,7 +18,7 @@
 
 from sickbeard.providers import btn, newznab, womble, thepiratebay, torrentleech, kat, iptorrents, torrentz, \
     omgwtfnzbs, scc, hdtorrents, torrentday, hdbits, hounddawgs, nextgen, speedcd, nyaatorrents, animenzb, bluetigers, cpasbien, fnt, xthor, torrentbytes, \
-    frenchtorrentdb, freshontv, titansoftv, libertalia, morethantv, bitsoup, t411, tokyotoshokan, shazbat, rarbg, alpharatio, tntvillage, binsearch, torrentproject, extratorrent, \
+    freshontv, titansoftv, libertalia, morethantv, bitsoup, t411, tokyotoshokan, shazbat, rarbg, alpharatio, tntvillage, binsearch, torrentproject, extratorrent, \
     scenetime, btdigg, strike, transmitthenet, tvchaosuk, bitcannon, pretome, gftracker, hdspace, newpct
 
 __all__ = ['womble',
@@ -38,7 +38,6 @@ __all__ = ['womble',
            'nyaatorrents',
            'animenzb',
            'torrentbytes',
-           'frenchtorrentdb',
            'freshontv',
            'titansoftv',
            'libertalia',
diff --git a/sickbeard/providers/frenchtorrentdb.py b/sickbeard/providers/frenchtorrentdb.py
deleted file mode 100644
index 0f120b54f..000000000
--- a/sickbeard/providers/frenchtorrentdb.py
+++ /dev/null
@@ -1,200 +0,0 @@
-# Authors: Yannick Croissant <yannick.croissant@gmail.com>
-#          adaur <adaur.underground@gmail.com>
-# URL: http://code.google.com/p/sickbeard/
-#
-# This file is part of SickRage.
-#
-# Sick Beard 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 3 of the License, or
-# (at your option) any later version.
-#
-# Sick Beard 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 Sick Beard.  If not, see <http://www.gnu.org/licenses/>.
-
-import re
-from sickbeard.providers import generic
-
-from sickbeard.bs4_parser import BS4Parser
-from sickbeard import logger
-from sickbeard import tvcache
-
-class FrenchTorrentDBProvider(generic.TorrentProvider):
-
-    def __init__(self):
-
-        generic.TorrentProvider.__init__(self, "FrenchTorrentDB")
-
-        self.supportsBacklog = True
-
-
-        self.urls = {
-            'base_url': 'http://www.frenchtorrentdb.com',
-            }
-
-        self.url = self.urls['base_url']
-        self.search_params = {
-            "adv_cat%5Bs%5D%5B1%5D": 95,
-            "adv_cat%5Bs%5D%5B2%5D": 190,
-            "adv_cat%5Bs%5D%5B3%5D": 101,
-            "adv_cat%5Bs%5D%5B4%5D": 191,
-            "adv_cat%5Bs%5D%5B5%5D": 197,
-            "adv_cat%5Bs%5D%5B7%5D": 199,
-            "adv_cat%5Bs%5D%5B8%5D": 201,
-            "adv_cat%5Bs%5D%5B9%5D": 128,
-            "section": "TORRENTS",
-            "exact": 1,
-            "submit": "GO"
-            }
-
-        self.username = None
-        self.password = None
-        self.ratio = None
-        self.minseed = None
-        self.minleech = None
-
-    def _doLogin(self):
-
-        params = {
-            "section": "LOGIN",
-            "challenge": 1
-        }
-
-        data = self.getURL(self.url, params=params, json=True)
-
-        post_data = {
-            'username'    : self.username,
-            'password'    : self.password,
-            'secure_login': self._getSecureLogin(data['challenge']),
-            'hash'        : data['hash']
-            }
-
-        params.pop('challenge')
-        params['ajax'] = 1
-        self.getURL(self.url, params=params, post_data=post_data)
-
-        return True
-
-    def _getSecureLogin(self, challenges):
-
-        def fromCharCode(*args):
-            return ''.join(map(unichr, args))
-
-        def decodeString(p, a, c, k, e, d):
-            a = int(a)
-            c = int(c)
-            def e(c):
-                if c < a:
-                    f = ''
-                else:
-                    f = e(c / a)
-                return f + fromCharCode(c % a + 161)
-            while c:
-                c -= 1
-                if k[c]:
-                    regex = re.compile(e(c))
-                    p = re.sub(regex, k[c], p)
-            return p
-
-        def decodeChallenge(challenge):
-            regexGetArgs = re.compile('\'([^\']+)\',([0-9]+),([0-9]+),\'([^\']+)\'')
-            regexIsEncoded = re.compile('decodeURIComponent')
-            regexUnquote = re.compile('\'')
-            if challenge == 'a':
-                return '05f'
-            if re.match(regexIsEncoded, challenge) == None:
-                return re.sub(regexUnquote, '', challenge)
-            args = re.findall(regexGetArgs, challenge)
-            decoded = decodeString(
-                args[0][0], args[0][1],
-                args[0][2], args[0][3].split('|'),
-                0, {})
-            return decoded
-
-        secureLogin = ''
-        for challenge in challenges:
-            secureLogin += decodeChallenge(challenge)
-        return secureLogin
-
-    def _doSearch(self, search_strings, search_mode='eponly', epcount=0, age=0, epObj=None):
-
-        results = []
-        items = {'Season': [], 'Episode': [], 'RSS': []}
-
-        # check for auth
-        if not self._doLogin():
-            return results
-
-        for mode in search_strings.keys():
-            logger.log(u"Search Mode: %s" % mode, logger.DEBUG)
-            for search_string in search_strings[mode]:
-
-                if mode is not 'RSS':
-                    logger.log(u"Search string: %s " % search_string, logger.DEBUG)
-
-                self.search_params['name'] = search_string
-
-                r = self.getURL(self.url, params=self.search_params)
-                with BS4Parser(r, features=["html5lib", "permissive"]) as html:
-                    resultsTable = html.find("div", {"class": "DataGrid"})
-
-                    if resultsTable:
-                        rows = resultsTable.findAll("ul")
-
-                        for row in rows:
-                            link = row.find("a", title=True)
-                            title = link['title']
-                            # FIXME
-                            size = -1
-                            seeders = 1
-                            leechers = 0
-
-                            autogetURL = self.url + '/' + (row.find("li", {"class": "torrents_name"}).find('a')['href'][1:]).replace('#FTD_MENU', '&menu=4')
-                            r = self.getURL(autogetURL)
-                            with BS4Parser(r, features=["html5lib", "permissive"]) as html:
-
-                                download_url = html.find("div", {"class" : "autoget"}).find('a')['href']
-
-                                if not all([title, download_url]):
-                                    continue
-
-                                # Filter unseeded torrent
-                                # if seeders < self.minseed or leechers < self.minleech:
-                                #    if mode is not 'RSS':
-                                #        logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG)
-                                #    continue
-
-                                item = title, download_url, size, seeders, leechers
-                                if mode is not 'RSS':
-                                    logger.log(u"Found result: %s " % title, logger.DEBUG)
-
-                                items[mode].append(item)
-
-            # For each search mode sort all the items by seeders if available
-            items[mode].sort(key=lambda tup: tup[3], reverse=True)
-
-            results += items[mode]
-
-        return results
-
-    def seedRatio(self):
-        return self.ratio
-
-
-class FrenchTorrentDBCache(tvcache.TVCache):
-    def __init__(self, provider_obj):
-        tvcache.TVCache.__init__(self, provider_obj)
-
-        # Only poll FTDB every 10 minutes max
-        self.minTime = 10
-
-    def _getRSSData(self):
-        search_strings = {'RSS': ['']}
-        return {'entries': self.provider._doSearch(search_strings)}
-
-provider = FrenchTorrentDBProvider()
diff --git a/tests/helpers_tests.py b/tests/helpers_tests.py
index b4ef164a2..f51b3896c 100755
--- a/tests/helpers_tests.py
+++ b/tests/helpers_tests.py
@@ -39,7 +39,6 @@ test_cases = {
         'Show.Name.S01E01.HDTV.x264-RLSGROUP[EtHD]',
         'Show.Name.S01E01.HDTV.x264-RLSGROUP-20-40',
         'Show.Name.S01E01.HDTV.x264-RLSGROUP[NO-RAR] - [ www.torrentday.com ]',
-        '[www.frenchtorrentdb.com] Show.Name.S01E01.HDTV.x264-RLSGROUP',
         'Show.Name.S01E01.HDTV.x264-RLSGROUP[rarbg]',
         'Show.Name.S01E01.HDTV.x264-RLSGROUP[Seedbox]',
         '{ www.SceneTime.com } - Show.Name.S01E01.HDTV.x264-RLSGROUP',
-- 
GitLab


From 7029a4b4f8adb4cfc7a857002f76870d1acd3c49 Mon Sep 17 00:00:00 2001
From: theit8514 <theit8514@users.noreply.github.com>
Date: Wed, 11 Nov 2015 16:08:57 -0800
Subject: [PATCH 179/215] Use login on initial Github request if defined.

---
 sickbeard/__init__.py | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/sickbeard/__init__.py b/sickbeard/__init__.py
index 888de22b0..4157b2e78 100644
--- a/sickbeard/__init__.py
+++ b/sickbeard/__init__.py
@@ -682,7 +682,10 @@ def initialize(consoleLogging=True):
 
         # github api
         try:
-            gh = Github(user_agent="SiCKRAGE").get_organization(GIT_ORG).get_repo(GIT_REPO)
+            if not (GIT_USERNAME and GIT_PASSWORD):
+                gh = Github(user_agent="SiCKRAGE").get_organization(GIT_ORG).get_repo(GIT_REPO)
+            else:
+                gh = Github(login_or_token=GIT_USERNAME, password=GIT_PASSWORD, user_agent="SiCKRAGE").get_organization(GIT_ORG).get_repo(GIT_REPO)
         except Exception as e:
             gh = None
             logger.log(u'Unable to setup GitHub properly. GitHub will not be available. Error: %s' % ex(e), logger.WARNING)
-- 
GitLab


From d0153c962a2a092d3181e3e6f4cb4cb6a5dc0f8e Mon Sep 17 00:00:00 2001
From: Dustyn Gibson <miigotu@gmail.com>
Date: Wed, 11 Nov 2015 17:06:08 -0800
Subject: [PATCH 180/215] Fix post processing non-ascii

---
 sickbeard/processTV.py | 4 ++--
 sickbeard/webserve.py  | 4 +++-
 2 files changed, 5 insertions(+), 3 deletions(-)

diff --git a/sickbeard/processTV.py b/sickbeard/processTV.py
index 6ea2c5a0b..bcc58bb03 100644
--- a/sickbeard/processTV.py
+++ b/sickbeard/processTV.py
@@ -28,7 +28,7 @@ from sickbeard import logger
 from sickbeard.name_parser.parser import NameParser, InvalidNameException, InvalidShowException
 from sickbeard import common
 from sickbeard import failedProcessor
-from sickrage.helper.encoding import ek
+from sickrage.helper.encoding import ek, ss
 from sickrage.helper.exceptions import EpisodePostProcessingFailedException, ex, FailedPostProcessingFailedException
 
 from unrar2 import RarFile
@@ -516,7 +516,7 @@ def already_postprocessed(dirName, videofile, force, result):
 
         search_sql += " and tv_episodes.status IN (" + ",".join([str(x) for x in common.Quality.DOWNLOADED]) + ")"
         search_sql += " and history.resource LIKE ?"
-        sqlResult = myDB.select(search_sql, [u'%' + videofile])
+        sqlResult = myDB.select(search_sql, ['%' + videofile])
         if sqlResult:
             # result.output += logHelper(u"You're trying to post process a video that's already been processed, skipping", logger.DEBUG)
             return True
diff --git a/sickbeard/webserve.py b/sickbeard/webserve.py
index 659bba264..62c174d53 100644
--- a/sickbeard/webserve.py
+++ b/sickbeard/webserve.py
@@ -2192,8 +2192,10 @@ class HomePostProcess(Home):
         if not proc_dir:
             return self.redirect("/home/postprocess/")
         else:
+            nzbName = ss(nzbName) if nzbName else nzbName
+
             result = processTV.processDir(
-                proc_dir, nzbName, process_method=process_method, force=argToBool(force),
+                ss(proc_dir), nzbName, process_method=process_method, force=argToBool(force),
                 is_priority=argToBool(is_priority), delete_on=argToBool(delete_on), failed=argToBool(failed), proc_type=proc_type
             )
 
-- 
GitLab


From f034dd320dc604962bc8b619126302994ba12d37 Mon Sep 17 00:00:00 2001
From: Alexis Tyler <xo@wvvw.me>
Date: Sat, 14 Nov 2015 16:11:43 +1030
Subject: [PATCH 181/215] hide build files

---
 .gitignore | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/.gitignore b/.gitignore
index e17cfc889..77f444fa1 100644
--- a/.gitignore
+++ b/.gitignore
@@ -62,6 +62,6 @@ lib/unrar2/UnRAR.exe
 
 # Bower #
 ######################
-bower_components
-node_modules
-gui/**/_bower.js
+.build/bower_components
+.build/node_modules
+.build/_bower*
-- 
GitLab


From de8f2021333f689926cdda4cf4cd5f17bd561702 Mon Sep 17 00:00:00 2001
From: Alexis Tyler <xo@wvvw.me>
Date: Sat, 14 Nov 2015 16:12:11 +1030
Subject: [PATCH 182/215] add minified vender files

---
 gui/slick/css/vender.min.css | Bin 0 -> 1812 bytes
 gui/slick/js/vender.min.js   | Bin 0 -> 504707 bytes
 2 files changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 gui/slick/css/vender.min.css
 create mode 100644 gui/slick/js/vender.min.js

diff --git a/gui/slick/css/vender.min.css b/gui/slick/css/vender.min.css
new file mode 100644
index 0000000000000000000000000000000000000000..16f33eb6152f17e9301150733d3242ef26430c9d
GIT binary patch
literal 1812
zcmYevEYmB=&rZ$L&CDw(EzwOW$}dRCFVE8{%|Q{*$t*6Z&M!+XO3TSFx5~&&NlDGK
zPRq|L(JjubO0_aHDyV>P(-Lztb1JREQj1a&^AdH66Z497i&Kj-(`vDph|Ly-oXl#F
zZMwxJl{u-pC6xuKR(bh(so3;aXQXDPXOvhamX_ozX66>;7nLODl~_YX4OOknGgC@3
ztV|3H3M#CV@{3YZi>wR_Din(Ib23vDlr1eSt&>ZOit~%CN>VFItgCc0^HNePtU%(q
ziACv|c~%D21&JvsnR)3}2G&W5$=T^e`K5U&y2<%D`9)UBX=!QJ$vLTsMOHbfX(iZP
zsF0JX01nw|sPzU=HyN9P+ypb+xS&G80^~-lR_K<eCS_-q=q45vq$U<6<|U_EB_|f8
zVpy1xS)7=ZlbV7atT1sT$6(mwY5{`iUO>``k{rNErW!LqTr6FUogJ;A!DH?Mf+U%#
zP+X9hR}Izg>;{6cC`w69ODxSPsm;m6;uQ3x2~7ex69zPTjSDK^5e$k0Q><~2Vvw4a
zXaMt-fq?-esh2|%pSghnniH*4GK&jx5-Y8ea`Kb2u{v0xpgJulKd}UyaNtfbu!g$J
z0J|n|;6U^hff7E<N#^F}Feen`XXcfp7NP4ePR&V8E=f(%#T9b~78WKZsW1c6($eso
zfD%thNlCT13X<xA{Nl`#%=|p7#H8Z<oYIn1Xa<00N{oaE%2SZMq6^AY$oVxnIT@OZ
zb-~`pA(xb2Qj(vGE(y)(&{PD^>xMX8u24`7iw$@Lfzk)K)I*MYNLgTRZjRfi(i}{)
z4Dcxjm4cYr3lug;MTRxjauQceD3s<XpyeG{X|J1ElA4PpJEtXrAOUxx<VF+|jj$P+
qmPWulh1A??^e_hV!4-m4UVc$-Vh#Z_P}~Gh`zVgX;x<S=uLS_A<*0lB

literal 0
HcmV?d00001

diff --git a/gui/slick/js/vender.min.js b/gui/slick/js/vender.min.js
new file mode 100644
index 0000000000000000000000000000000000000000..e37f67ccef5b5d5322859284153e21292d0efd20
GIT binary patch
literal 504707
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

literal 0
HcmV?d00001

-- 
GitLab


From 9960a80d9895aee4e8c485dc9057aec8d094c4e7 Mon Sep 17 00:00:00 2001
From: Alexis Tyler <xo@wvvw.me>
Date: Sat, 14 Nov 2015 16:13:04 +1030
Subject: [PATCH 183/215] add libs to bower

---
 .build/Gruntfile.js                           |  37 +-
 .build/bower.json                             |   3 +-
 .build/package.json                           |   8 +-
 gui/slick/js/lib/bootbox.min.js               | Bin 9972 -> 0 bytes
 .../js/lib/bootstrap-formhelpers.min-2.3.0.js |   8 -
 .../js/lib/bootstrap-hover-dropdown.min.js    | Bin 1501 -> 0 bytes
 gui/slick/js/lib/bootstrap.min.js             | Bin 36816 -> 0 bytes
 gui/slick/js/lib/bootstrap3-typeahead.min.js  | Bin 6878 -> 0 bytes
 gui/slick/js/lib/jquery-2.1.4.min.js          | Bin 84345 -> 0 bytes
 gui/slick/js/lib/jquery.confirm.js            |  56 --
 gui/slick/js/lib/jquery.cookie.js             |  47 -
 gui/slick/js/lib/jquery.timeago.js            | 223 -----
 gui/slick/js/lib/jquery.tokeninput.js         | 861 ------------------
 13 files changed, 33 insertions(+), 1210 deletions(-)
 delete mode 100644 gui/slick/js/lib/bootbox.min.js
 delete mode 100644 gui/slick/js/lib/bootstrap-formhelpers.min-2.3.0.js
 delete mode 100644 gui/slick/js/lib/bootstrap-hover-dropdown.min.js
 delete mode 100644 gui/slick/js/lib/bootstrap.min.js
 delete mode 100644 gui/slick/js/lib/bootstrap3-typeahead.min.js
 delete mode 100644 gui/slick/js/lib/jquery-2.1.4.min.js
 delete mode 100644 gui/slick/js/lib/jquery.confirm.js
 delete mode 100644 gui/slick/js/lib/jquery.cookie.js
 delete mode 100644 gui/slick/js/lib/jquery.timeago.js
 delete mode 100644 gui/slick/js/lib/jquery.tokeninput.js

diff --git a/.build/Gruntfile.js b/.build/Gruntfile.js
index 5ae24b022..8716d54c5 100644
--- a/.build/Gruntfile.js
+++ b/.build/Gruntfile.js
@@ -2,34 +2,49 @@ module.exports = function(grunt) {
     grunt.initConfig({
         bower_concat: {
             all: {
-                dest: '../gui/slick/js/_bower.js',
-                // cssDest: 'gui/slick/css/_bower.css',
+                dest: './_bower.js',
+                cssDest: './_bower.css',
                 exclude: [
-                    // 'jquery',
-                    // 'modernizr'
                 ],
                 dependencies: {
-                    // 'underscore': 'jquery',
-                    // 'backbone': 'underscore',
-                    // 'jquery-mousewheel': 'jquery'
                 },
                 bowerOptions: {
                     relative: false
-                },
+                }
             }
         },
         uglify: {
             my_target: {
                 files: {
-                    '../gui/slick/js/_bower.min.js': ['../gui/slick/js/_bower.js']
+                    '../gui/slick/js/vender.min.js': ['./_bower.js'],
+                    '../gui/slick/js/core.min.js': ['../gui/slick/js/core.js']
+                }
+            }
+        },
+        cssmin: {
+            options: {
+                shorthandCompacting: false,
+                roundingPrecision: -1
+            },
+            target: {
+                files: {
+                    '../gui/slick/css/vender.min.css': ['./_bower.css'],
+                    // '../gui/slick/css/core.min.css': ['./gui/slick/css/core.css']
                 }
             }
+        },
+        jshint: {
+            options: {
+                eqeqeq: true
+            },
+            uses_defaults: ['../gui/slick/js/**/*.js']
         }
     });
 
     grunt.loadNpmTasks('grunt-bower-concat');
     grunt.loadNpmTasks('grunt-contrib-uglify');
+    grunt.loadNpmTasks('grunt-contrib-cssmin');
+    grunt.loadNpmTasks('grunt-contrib-jshint');
 
-    grunt.registerTask('default', ['bower_concat', 'uglify']);
-
+    grunt.registerTask('default', ['bower_concat', 'uglify', 'cssmin']);
 };
diff --git a/.build/bower.json b/.build/bower.json
index bb396f088..d92b4f39c 100644
--- a/.build/bower.json
+++ b/.build/bower.json
@@ -19,6 +19,7 @@
     "jquery-timeago": "~1.4.3",
     "jquery-tokeninput": "~1.7.0",
     "bootstrap3-typeahead": "~3.1.1",
-    "underscore": "~1.8.3"
+    "underscore": "~1.8.3",
+    "jQuery Confirm": "jquery-confirm#~2.5.0"
   }
 }
diff --git a/.build/package.json b/.build/package.json
index cada201ee..a0a4b4118 100644
--- a/.build/package.json
+++ b/.build/package.json
@@ -5,14 +5,16 @@
   "dependencies": {
     "grunt": "^0.4.5",
     "grunt-bower-concat": "^0.5.0",
+    "grunt-contrib-cssmin": "^0.14.0",
+    "grunt-contrib-jshint": "^0.11.3",
     "grunt-contrib-uglify": "^0.9.2"
   },
   "repository": {
     "type": "git",
-    "url": "git+https://github.com/OmgImAlexis/SickRage.git"
+    "url": "git+https://github.com/SickRage/SickRage.git"
   },
   "bugs": {
-    "url": "https://github.com/OmgImAlexis/SickRage/issues"
+    "url": "https://github.com/SickRage/SickRage/issues"
   },
-  "homepage": "https://github.com/OmgImAlexis/SickRage#readme"
+  "homepage": "https://github.com/SickRage/SickRage#readme"
 }
diff --git a/gui/slick/js/lib/bootbox.min.js b/gui/slick/js/lib/bootbox.min.js
deleted file mode 100644
index 0dc0cbd5f42ee1df3ab6568b77f0f6366329b2e6..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 9972
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

diff --git a/gui/slick/js/lib/bootstrap-formhelpers.min-2.3.0.js b/gui/slick/js/lib/bootstrap-formhelpers.min-2.3.0.js
deleted file mode 100644
index 4cffbbccd..000000000
--- a/gui/slick/js/lib/bootstrap-formhelpers.min-2.3.0.js
+++ /dev/null
@@ -1,8 +0,0 @@
-/**
-* bootstrap-formhelpers.js v2.3.0 by @vincentlamanna
-* Copyright 2013 Vincent Lamanna
-* http://www.apache.org/licenses/LICENSE-2.0
-*/
-if(!jQuery)throw new Error("Bootstrap Form Helpers requires jQuery");var BFHCountriesList={AF:"Afghanistan",AL:"Albania",DZ:"Algeria",AS:"American Samoa",AD:"Andorra",AO:"Angola",AI:"Anguilla",AQ:"Antarctica",AG:"Antigua and Barbuda",AR:"Argentina",AM:"Armenia",AW:"Aruba",AU:"Australia",AT:"Austria",AZ:"Azerbaijan",BH:"Bahrain",BD:"Bangladesh",BB:"Barbados",BY:"Belarus",BE:"Belgium",BZ:"Belize",BJ:"Benin",BM:"Bermuda",BT:"Bhutan",BO:"Bolivia",BA:"Bosnia and Herzegovina",BW:"Botswana",BV:"Bouvet Island",BR:"Brazil",IO:"British Indian Ocean Territory",VG:"British Virgin Islands",BN:"Brunei",BG:"Bulgaria",BF:"Burkina Faso",BI:"Burundi",CI:"Côte d'Ivoire",KH:"Cambodia",CM:"Cameroon",CA:"Canada",CV:"Cape Verde",KY:"Cayman Islands",CF:"Central African Republic",TD:"Chad",CL:"Chile",CN:"China",CX:"Christmas Island",CC:"Cocos (Keeling) Islands",CO:"Colombia",KM:"Comoros",CG:"Congo",CK:"Cook Islands",CR:"Costa Rica",HR:"Croatia",CU:"Cuba",CY:"Cyprus",CZ:"Czech Republic",CD:"Democratic Republic of the Congo",DK:"Denmark",DJ:"Djibouti",DM:"Dominica",DO:"Dominican Republic",TP:"East Timor",EC:"Ecuador",EG:"Egypt",SV:"El Salvador",GQ:"Equatorial Guinea",ER:"Eritrea",EE:"Estonia",ET:"Ethiopia",FO:"Faeroe Islands",FK:"Falkland Islands",FJ:"Fiji",FI:"Finland",MK:"Former Yugoslav Republic of Macedonia",FR:"France",FX:"France, Metropolitan",GF:"French Guiana",PF:"French Polynesia",TF:"French Southern Territories",GA:"Gabon",GE:"Georgia",DE:"Germany",GH:"Ghana",GI:"Gibraltar",GR:"Greece",GL:"Greenland",GD:"Grenada",GP:"Guadeloupe",GU:"Guam",GT:"Guatemala",GN:"Guinea",GW:"Guinea-Bissau",GY:"Guyana",HT:"Haiti",HM:"Heard and Mc Donald Islands",HN:"Honduras",HK:"Hong Kong",HU:"Hungary",IS:"Iceland",IN:"India",ID:"Indonesia",IR:"Iran",IQ:"Iraq",IE:"Ireland",IL:"Israel",IT:"Italy",JM:"Jamaica",JP:"Japan",JO:"Jordan",KZ:"Kazakhstan",KE:"Kenya",KI:"Kiribati",KW:"Kuwait",KG:"Kyrgyzstan",LA:"Laos",LV:"Latvia",LB:"Lebanon",LS:"Lesotho",LR:"Liberia",LY:"Libya",LI:"Liechtenstein",LT:"Lithuania",LU:"Luxembourg",MO:"Macau",MG:"Madagascar",MW:"Malawi",MY:"Malaysia",MV:"Maldives",ML:"Mali",MT:"Malta",MH:"Marshall Islands",MQ:"Martinique",MR:"Mauritania",MU:"Mauritius",YT:"Mayotte",MX:"Mexico",FM:"Micronesia",MD:"Moldova",MC:"Monaco",MN:"Mongolia",ME:"Montenegro",MS:"Montserrat",MA:"Morocco",MZ:"Mozambique",MM:"Myanmar",NA:"Namibia",NR:"Nauru",NP:"Nepal",NL:"Netherlands",AN:"Netherlands Antilles",NC:"New Caledonia",NZ:"New Zealand",NI:"Nicaragua",NE:"Niger",NG:"Nigeria",NU:"Niue",NF:"Norfolk Island",KP:"North Korea",MP:"Northern Marianas",NO:"Norway",OM:"Oman",PK:"Pakistan",PW:"Palau",PS:"Palestine",PA:"Panama",PG:"Papua New Guinea",PY:"Paraguay",PE:"Peru",PH:"Philippines",PN:"Pitcairn Islands",PL:"Poland",PT:"Portugal",PR:"Puerto Rico",QA:"Qatar",RE:"Reunion",RO:"Romania",RU:"Russia",RW:"Rwanda",ST:"São Tomé and Príncipe",SH:"Saint Helena",PM:"St. Pierre and Miquelon",KN:"Saint Kitts and Nevis",LC:"Saint Lucia",VC:"Saint Vincent and the Grenadines",WS:"Samoa",SM:"San Marino",SA:"Saudi Arabia",SN:"Senegal",RS:"Serbia",SC:"Seychelles",SL:"Sierra Leone",SG:"Singapore",SK:"Slovakia",SI:"Slovenia",SB:"Solomon Islands",SO:"Somalia",ZA:"South Africa",GS:"South Georgia and the South Sandwich Islands",KR:"South Korea",ES:"Spain",LK:"Sri Lanka",SD:"Sudan",SR:"Suriname",SJ:"Svalbard and Jan Mayen Islands",SZ:"Swaziland",SE:"Sweden",CH:"Switzerland",SY:"Syria",TW:"Taiwan",TJ:"Tajikistan",TZ:"Tanzania",TH:"Thailand",BS:"The Bahamas",GM:"The Gambia",TG:"Togo",TK:"Tokelau",TO:"Tonga",TT:"Trinidad and Tobago",TN:"Tunisia",TR:"Turkey",TM:"Turkmenistan",TC:"Turks and Caicos Islands",TV:"Tuvalu",VI:"US Virgin Islands",UG:"Uganda",UA:"Ukraine",AE:"United Arab Emirates",GB:"United Kingdom",US:"United States",UM:"United States Minor Outlying Islands",UY:"Uruguay",UZ:"Uzbekistan",VU:"Vanuatu",VA:"Vatican City",VE:"Venezuela",VN:"Vietnam",WF:"Wallis and Futuna Islands",EH:"Western Sahara",YE:"Yemen",ZM:"Zambia",ZW:"Zimbabwe"},BFHCurrenciesList={AED:{label:"United Arab Emirates dirham",currencyflag:"",symbol:"د.إ"},AFN:{label:"Afghan afghani",currencyflag:"",symbol:"؋"},ALL:{label:"Albanian lek",currencyflag:"",symbol:"L"},AMD:{label:"Armenian dram",currencyflag:"",symbol:"դր"},AOA:{label:"Angolan kwanza",currencyflag:"",symbol:"Kz"},ARS:{label:"Argentine peso",currencyflag:"",symbol:"$"},AUD:{label:"Australian dollar",currencyflag:"AUD",symbol:"$"},AWG:{label:"Aruban florin",currencyflag:"",symbol:"ƒ"},AZN:{label:"Azerbaijani manat",currencyflag:"",symbol:""},BAM:{label:"Bosnia and Herzegovina convertible mark",currencyflag:"",symbol:"KM"},BBD:{label:"Barbadian dollar",currencyflag:"",symbol:"$"},BDT:{label:"Bangladeshi taka",currencyflag:"",symbol:"৳"},BGN:{label:"Bulgarian lev",currencyflag:"",symbol:"лв"},BHD:{label:"Bahraini dinar",currencyflag:"",symbol:".د.ب"},BIF:{label:"Burundian franc",currencyflag:"",symbol:"Fr"},BMD:{label:"Bermudian dollar",currencyflag:"",symbol:"$"},BND:{label:"Brunei dollar",currencyflag:"",symbol:"$"},BOB:{label:"Bolivian boliviano",currencyflag:"",symbol:"Bs"},BRL:{label:"Brazilian real",currencyflag:"",symbol:"R$"},BSD:{label:"Bahamian dollar",currencyflag:"",symbol:"$"},BTN:{label:"Bhutanese ngultrum",currencyflag:"",symbol:"Nu"},BWP:{label:"Botswana pula",currencyflag:"",symbol:"P"},BYR:{label:"Belarusian ruble",currencyflag:"",symbol:"Br"},BZD:{label:"Belize dollar",currencyflag:"",symbol:"$"},CAD:{label:"Canadian dollar",currencyflag:"",symbol:"$"},CDF:{label:"Congolese franc",currencyflag:"",symbol:"Fr"},CHF:{label:"Swiss franc",currencyflag:"CHF",symbol:"Fr"},CLP:{label:"Chilean peso",currencyflag:"",symbol:"$"},CNY:{label:"Chinese yuan",currencyflag:"",symbol:"¥"},COP:{label:"Colombian peso",currencyflag:"",symbol:"$"},CRC:{label:"Costa Rican colón",currencyflag:"",symbol:"₡"},CUP:{label:"Cuban convertible peso",currencyflag:"",symbol:"$"},CVE:{label:"Cape Verdean escudo",currencyflag:"",symbol:"$"},CZK:{label:"Czech koruna",currencyflag:"",symbol:"Kč"},DJF:{label:"Djiboutian franc",currencyflag:"",symbol:"Fr"},DKK:{label:"Danish krone",currencyflag:"DKK",symbol:"kr"},DOP:{label:"Dominican peso",currencyflag:"",symbol:"$"},DZD:{label:"Algerian dinar",currencyflag:"",symbol:"د.ج"},EGP:{label:"Egyptian pound",currencyflag:"",symbol:"ج.م"},ERN:{label:"Eritrean nakfa",currencyflag:"",symbol:"Nfk"},ETB:{label:"Ethiopian birr",currencyflag:"",symbol:"Br"},EUR:{label:"Euro",currencyflag:"EUR",symbol:"€"},FJD:{label:"Fijian dollar",currencyflag:"",symbol:"$"},FKP:{label:"Falkland Islands pound",currencyflag:"",symbol:"£"},GBP:{label:"British pound",currencyflag:"",symbol:"£"},GEL:{label:"Georgian lari",currencyflag:"",symbol:"ლ"},GHS:{label:"Ghana cedi",currencyflag:"",symbol:"₵"},GMD:{label:"Gambian dalasi",currencyflag:"",symbol:"D"},GNF:{label:"Guinean franc",currencyflag:"",symbol:"Fr"},GTQ:{label:"Guatemalan quetzal",currencyflag:"",symbol:"Q"},GYD:{label:"Guyanese dollar",currencyflag:"",symbol:"$"},HKD:{label:"Hong Kong dollar",currencyflag:"",symbol:"$"},HNL:{label:"Honduran lempira",currencyflag:"",symbol:"L"},HRK:{label:"Croatian kuna",currencyflag:"",symbol:"kn"},HTG:{label:"Haitian gourde",currencyflag:"",symbol:"G"},HUF:{label:"Hungarian forint",currencyflag:"",symbol:"Ft"},IDR:{label:"Indonesian rupiah",currencyflag:"",symbol:"Rp"},ILS:{label:"Israeli new shekel",currencyflag:"",symbol:"₪"},IMP:{label:"Manx pound",currencyflag:"",symbol:"£"},INR:{label:"Indian rupee",currencyflag:"",symbol:""},IQD:{label:"Iraqi dinar",currencyflag:"",symbol:"ع.د"},IRR:{label:"Iranian rial",currencyflag:"",symbol:"﷼"},ISK:{label:"Icelandic króna",currencyflag:"",symbol:"kr"},JEP:{label:"Jersey pound",currencyflag:"",symbol:"£"},JMD:{label:"Jamaican dollar",currencyflag:"",symbol:"$"},JOD:{label:"Jordanian dinar",currencyflag:"",symbol:"د.ا"},JPY:{label:"Japanese yen",currencyflag:"",symbol:"¥"},KES:{label:"Kenyan shilling",currencyflag:"",symbol:"Sh"},KGS:{label:"Kyrgyzstani som",currencyflag:"",symbol:"лв"},KHR:{label:"Cambodian riel",currencyflag:"",symbol:"៛"},KMF:{label:"Comorian franc",currencyflag:"",symbol:"Fr"},KPW:{label:"North Korean won",currencyflag:"",symbol:"₩"},KRW:{label:"South Korean won",currencyflag:"",symbol:"₩"},KWD:{label:"Kuwaiti dinar",currencyflag:"",symbol:"د.ك"},KYD:{label:"Cayman Islands dollar",currencyflag:"",symbol:"$"},KZT:{label:"Kazakhstani tenge",currencyflag:"",symbol:"₸"},LAK:{label:"Lao kip",currencyflag:"",symbol:"₭"},LBP:{label:"Lebanese pound",currencyflag:"",symbol:"ل.ل"},LKR:{label:"Sri Lankan rupee",currencyflag:"",symbol:"Rs"},LRD:{label:"Liberian dollar",currencyflag:"",symbol:"$"},LSL:{label:"Lesotho loti",currencyflag:"",symbol:"L"},LTL:{label:"Lithuanian litas",currencyflag:"",symbol:"Lt"},LVL:{label:"Latvian lats",currencyflag:"",symbol:"Ls"},LYD:{label:"Libyan dinar",currencyflag:"",symbol:"ل.د"},MAD:{label:"Moroccan dirham",currencyflag:"",symbol:"د.م."},MDL:{label:"Moldovan leu",currencyflag:"",symbol:"L"},MGA:{label:"Malagasy ariary",currencyflag:"",symbol:"Ar"},MKD:{label:"Macedonian denar",currencyflag:"",symbol:"ден"},MMK:{label:"Burmese kyat",currencyflag:"",symbol:"Ks"},MNT:{label:"Mongolian tögrög",currencyflag:"",symbol:"₮"},MOP:{label:"Macanese pataca",currencyflag:"",symbol:"P"},MRO:{label:"Mauritanian ouguiya",currencyflag:"",symbol:"UM"},MUR:{label:"Mauritian rupee",currencyflag:"",symbol:"Rs"},MVR:{label:"Maldivian rufiyaa",currencyflag:"",symbol:".ރ"},MWK:{label:"Malawian kwacha",currencyflag:"",symbol:"MK"},MXN:{label:"Mexican peso",currencyflag:"",symbol:"$"},MYR:{label:"Malaysian ringgit",currencyflag:"",symbol:"MR"},MZN:{label:"Mozambican metical",currencyflag:"",symbol:"MT"},NAD:{label:"Namibian dollar",currencyflag:"",symbol:"$"},NGN:{label:"Nigerian naira",currencyflag:"",symbol:"₦"},NIO:{label:"Nicaraguan córdoba",currencyflag:"",symbol:"C$"},NOK:{label:"Norwegian krone",currencyflag:"",symbol:"kr"},NPR:{label:"Nepalese rupee",currencyflag:"",symbol:"Rs"},NZD:{label:"New Zealand dollar",currencyflag:"",symbol:"$"},OMR:{label:"Omani rial",currencyflag:"",symbol:"ر.ع."},PAB:{label:"Panamanian balboa",currencyflag:"",symbol:"B/."},PEN:{label:"Peruvian nuevo sol",currencyflag:"",symbol:"S/."},PGK:{label:"Papua New Guinean kina",currencyflag:"",symbol:"K"},PHP:{label:"Philippine peso",currencyflag:"",symbol:"₱"},PKR:{label:"Pakistani rupee",currencyflag:"",symbol:"Rs"},PLN:{label:"Polish złoty",currencyflag:"",symbol:"zł"},PRB:{label:"Transnistrian ruble",currencyflag:"",symbol:"р."},PYG:{label:"Paraguayan guaraní",currencyflag:"",symbol:"₲"},QAR:{label:"Qatari riyal",currencyflag:"",symbol:"ر.ق"},RON:{label:"Romanian leu",currencyflag:"",symbol:"L"},RSD:{label:"Serbian dinar",currencyflag:"",symbol:"дин"},RUB:{label:"Russian ruble",currencyflag:"",symbol:"руб."},RWF:{label:"Rwandan franc",currencyflag:"",symbol:"Fr"},SAR:{label:"Saudi riyal",currencyflag:"",symbol:"ر.س"},SBD:{label:"Solomon Islands dollar",currencyflag:"",symbol:"$"},SCR:{label:"Seychellois rupee",currencyflag:"",symbol:"Rs"},SDG:{label:"Singapore dollar",currencyflag:"",symbol:"$"},SEK:{label:"Swedish krona",currencyflag:"",symbol:"kr"},SGD:{label:"Singapore dollar",currencyflag:"",symbol:"$"},SHP:{label:"Saint Helena pound",currencyflag:"",symbol:"£"},SLL:{label:"Sierra Leonean leone",currencyflag:"",symbol:"Le"},SOS:{label:"Somali shilling",currencyflag:"",symbol:"Sh"},SRD:{label:"Surinamese dollar",currencyflag:"",symbol:"$"},SSP:{label:"South Sudanese pound",currencyflag:"",symbol:"£"},STD:{label:"São Tomé and Príncipe dobra",currencyflag:"",symbol:"Db"},SVC:{label:"Salvadoran colón",currencyflag:"",symbol:"₡"},SYP:{label:"Syrian pound",currencyflag:"",symbol:"£"},SZL:{label:"Swazi lilangeni",currencyflag:"",symbol:"L"},THB:{label:"Thai baht",currencyflag:"",symbol:"฿"},TJS:{label:"Tajikistani somoni",currencyflag:"",symbol:"SM"},TMT:{label:"Turkmenistan manat",currencyflag:"",symbol:"m"},TND:{label:"Tunisian dinar",currencyflag:"",symbol:"د.ت"},TOP:{label:"Tongan paʻanga",currencyflag:"",symbol:"T$"},TRY:{label:"Turkish lira",currencyflag:"",symbol:"&#8378;"},TTD:{label:"Trinidad and Tobago dollar",currencyflag:"",symbol:"$"},TWD:{label:"New Taiwan dollar",currencyflag:"",symbol:"$"},TZS:{label:"Tanzanian shilling",currencyflag:"",symbol:"Sh"},UAH:{label:"Ukrainian hryvnia",currencyflag:"",symbol:"₴"},UGX:{label:"Ugandan shilling",currencyflag:"",symbol:"Sh"},USD:{label:"United States dollar",currencyflag:"",symbol:"$"},UYU:{label:"Uruguayan peso",currencyflag:"",symbol:"$"},UZS:{label:"Uzbekistani som",currencyflag:"",symbol:"лв"},VEF:{label:"Venezuelan bolívar",currencyflag:"",symbol:"Bs F"},VND:{label:"Vietnamese đồng",currencyflag:"",symbol:"₫"},VUV:{label:"Vanuatu vatu",currencyflag:"",symbol:"Vt"},WST:{label:"Samoan tālā",currencyflag:"",symbol:"T"},XAF:{label:"Central African CFA franc",currencyflag:"XAF",symbol:"Fr"},XCD:{label:"East Caribbean dollar",currencyflag:"XCD",symbol:"$"},XOF:{label:"West African CFA franc",currencyflag:"XOF",symbol:"Fr"},XPF:{label:"CFP franc",currencyflag:"XPF",symbol:"Fr"},YER:{label:"Yemeni rial",currencyflag:"",symbol:"﷼"},ZAR:{label:"South African rand",currencyflag:"ZAR",symbol:"R"},ZMW:{label:"Zambian kwacha",currencyflag:"",symbol:"ZK"},ZWL:{label:"Zimbabwean dollar",currencyflag:"",symbol:"$"}},BFHMonthsList=["January","February","March","April","May","June","July","August","September","October","November","December"],BFHDaysList=["SUN","MON","TUE","WED","THU","FRI","SAT"],BFHDayOfWeekStart=0,BFHFontsList={"Andale Mono":'"Andale Mono", AndaleMono, monospace',Arial:'Arial, "Helvetica Neue", Helvetica, sans-serif',"Arial Black":'"Arial Black", "Arial Bold", Gadget, sans-serif',"Arial Narrow":'"Arial Narrow", Arial, sans-serif',"Arial Rounded MT Bold":'"Arial Rounded MT Bold", "Helvetica Rounded", Arial, sans-serif',"Avant Garde":'"Avant Garde", Avantgarde, "Century Gothic", CenturyGothic, "AppleGothic", sans-serif',Baskerville:'Baskerville, "Baskerville Old Face", "Hoefler Text", Garamond, "Times New Roman", serif',"Big Caslon":'"Big Caslon", "Book Antiqua", "Palatino Linotype", Georgia, serif',"Bodoni MT":'"Bodoni MT", Didot, "Didot LT STD", "Hoefler Text", Garamond, "Times New Roman", serif',"Book Antiqua":'"Book Antiqua", Palatino, "Palatino Linotype", "Palatino LT STD", Georgia, serif',"Brush Script MT":'"Brush Script MT", cursive',Calibri:'Calibri, Candara, Segoe, "Segoe UI", Optima, Arial, sans-serif',"Calisto MT":'"Calisto MT", "Bookman Old Style", Bookman, "Goudy Old Style", Garamond, "Hoefler Text", "Bitstream Charter", Georgia, serif',Cambrio:"Cambria, Georgia, serif",Candara:'Candara, Calibri, Segoe, "Segoe UI", Optima, Arial, sans-serif',"Century Gothic":'"Century Gothic", CenturyGothic, AppleGothic, sans-serif',Consolas:"Consolas, monaco, monospace",Copperplate:'Copperplate, "Copperplate Gothic Light", fantasy',"Courier New":'"Courier New", Courier, "Lucida Sans Typewriter", "Lucida Typewriter", monospace',Didot:'Didot, "Didot LT STD", "Hoefler Text", Garamond, "Times New Roman", serif',"Franklin Gothic Medium":'"Franklin Gothic Medium", "Franklin Gothic", "ITC Franklin Gothic", Arial, sans-serif',Futura:'Futura, "Trebuchet MS", Arial, sans-serif',Garamond:'Garamond, Baskerville, "Baskerville Old Face", "Hoefler Text", "Times New Roman", serif',Geneva:"Geneva, Tahoma, Verdana, sans-serif",Georgia:'Georgia, Times, "Times New Roman", serif',"Gill Sans":'"Gill Sans", "Gill Sans MT", Calibri, sans-serif',"Goudy Old Style":'"Goudy Old Style", Garamond, "Big Caslon", "Times New Roman", serif',Helvetica:'"Helvetica Neue", Helvetica, Arial, sans-serif',"Hoefler Text":'"Hoefler Text", "Baskerville old face", Garamond, "Times New Roman", serif',Impact:'Impact, Haettenschweiler, "Franklin Gothic Bold", Charcoal, "Helvetica Inserat", "Bitstream Vera Sans Bold", "Arial Black", sans serif',"Lucida Bright":'"Lucida Bright", Georgia, serif',"Lucida Console":'"Lucida Console", "Lucida Sans Typewriter", Monaco, "Bitstream Vera Sans Mono", monospace',"Lucida Sans Typewriter":'"Lucida Sans Typewriter", "Lucida Console", Monaco, "Bitstream Vera Sans Mono", monospace',"Lucida Grande":'"Lucida Grande", "Lucida Sans Unicode", "Lucida Sans", Geneva, Verdana, sans-serif',Monaco:'Monaco, Consolas, "Lucida Console", monospace',Optima:'Optima, Segoe, "Segoe UI", Candara, Calibri, Arial, sans-serif',Palatino:'Palatino, "Palatino Linotype", "Palatino LT STD", "Book Antiqua", Georgia, serif',Papyrus:"Papyrus, fantasy",Perpetua:'Perpetua, Baskerville, "Big Caslon", "Palatino Linotype", Palatino, "URW Palladio L", "Nimbus Roman No9 L", serif',Rockwell:'Rockwell, "Courier Bold", Courier, Georgia, Times, "Times New Roman", serif',"Rockwell Extra Bold":'"Rockwell Extra Bold", "Rockwell Bold", monospace',"Segoe UI":'"Segoe UI", Frutiger, "Frutiger Linotype',Tahoma:"Tahoma, Verdana, Segoe, sans-serif","Times New Roman":'TimesNewRoman, "Times New Roman", Times, Baskerville, Georgia, serif',"Trebuchet MS":'"Trebuchet MS", "Lucida Grande", "Lucida Sans Unicode", "Lucida Sans", Tahoma, sans-serif',Verdana:"Verdana, Geneva, sans-serif"},BFHFontSizesList={8:"8px",9:"9px",10:"10px",11:"11px",12:"12px",14:"14px",16:"16px",18:"18px",20:"20px",24:"24px",28:"28px",36:"36px",48:"48px"},BFHGoogleFontsList={kind:"webfonts#webfontList",items:[{kind:"webfonts#webfont",family:"ABeeZee",variants:["regular","italic"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Abel",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Abril Fatface",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Aclonica",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Acme",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Actor",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Adamina",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Advent Pro",variants:["100","200","300","regular","500","600","700"],subsets:["latin-ext","latin","greek"]},{kind:"webfonts#webfont",family:"Aguafina Script",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Akronim",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Aladin",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Aldrich",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Alegreya",variants:["regular","italic","700","700italic","900","900italic"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Alegreya SC",variants:["regular","italic","700","700italic","900","900italic"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Alex Brush",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Alfa Slab One",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Alice",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Alike",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Alike Angular",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Allan",variants:["regular","700"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Allerta",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Allerta Stencil",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Allura",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Almendra",variants:["regular","italic","700","700italic"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Almendra Display",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Almendra SC",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Amarante",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Amaranth",variants:["regular","italic","700","700italic"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Amatic SC",variants:["regular","700"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Amethysta",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Anaheim",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Andada",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Andika",variants:["regular"],subsets:["cyrillic","latin-ext","latin","cyrillic-ext"]},{kind:"webfonts#webfont",family:"Angkor",variants:["regular"],subsets:["khmer"]},{kind:"webfonts#webfont",family:"Annie Use Your Telescope",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Anonymous Pro",variants:["regular","italic","700","700italic"],subsets:["cyrillic","greek-ext","latin-ext","latin","greek","cyrillic-ext"]},{kind:"webfonts#webfont",family:"Antic",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Antic Didone",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Antic Slab",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Anton",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Arapey",variants:["regular","italic"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Arbutus",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Arbutus Slab",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Architects Daughter",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Archivo Black",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Archivo Narrow",variants:["regular","italic","700","700italic"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Arimo",variants:["regular","italic","700","700italic"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Arizonia",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Armata",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Artifika",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Arvo",variants:["regular","italic","700","700italic"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Asap",variants:["regular","italic","700","700italic"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Asset",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Astloch",variants:["regular","700"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Asul",variants:["regular","700"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Atomic Age",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Aubrey",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Audiowide",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Autour One",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Average",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Average Sans",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Averia Gruesa Libre",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Averia Libre",variants:["300","300italic","regular","italic","700","700italic"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Averia Sans Libre",variants:["300","300italic","regular","italic","700","700italic"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Averia Serif Libre",variants:["300","300italic","regular","italic","700","700italic"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Bad Script",variants:["regular"],subsets:["cyrillic","latin"]},{kind:"webfonts#webfont",family:"Balthazar",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Bangers",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Basic",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Battambang",variants:["regular","700"],subsets:["khmer"]},{kind:"webfonts#webfont",family:"Baumans",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Bayon",variants:["regular"],subsets:["khmer"]},{kind:"webfonts#webfont",family:"Belgrano",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Belleza",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"BenchNine",variants:["300","regular","700"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Bentham",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Berkshire Swash",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Bevan",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Bigelow Rules",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Bigshot One",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Bilbo",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Bilbo Swash Caps",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Bitter",variants:["regular","italic","700"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Black Ops One",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Bokor",variants:["regular"],subsets:["khmer"]},{kind:"webfonts#webfont",family:"Bonbon",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Boogaloo",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Bowlby One",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Bowlby One SC",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Brawler",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Bree Serif",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Bubblegum Sans",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Bubbler One",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Buda",variants:["300"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Buenard",variants:["regular","700"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Butcherman",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Butterfly Kids",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Cabin",variants:["regular","italic","500","500italic","600","600italic","700","700italic"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Cabin Condensed",variants:["regular","500","600","700"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Cabin Sketch",variants:["regular","700"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Caesar Dressing",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Cagliostro",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Calligraffitti",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Cambo",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Candal",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Cantarell",variants:["regular","italic","700","700italic"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Cantata One",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Cantora One",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Capriola",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Cardo",variants:["regular","italic","700"],subsets:["greek-ext","latin-ext","latin","greek"]},{kind:"webfonts#webfont",family:"Carme",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Carrois Gothic",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Carrois Gothic SC",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Carter One",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Caudex",variants:["regular","italic","700","700italic"],subsets:["greek-ext","latin-ext","latin","greek"]},{kind:"webfonts#webfont",family:"Cedarville Cursive",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Ceviche One",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Changa One",variants:["regular","italic"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Chango",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Chau Philomene One",variants:["regular","italic"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Chela One",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Chelsea Market",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Chenla",variants:["regular"],subsets:["khmer"]},{kind:"webfonts#webfont",family:"Cherry Cream Soda",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Cherry Swash",variants:["regular","700"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Chewy",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Chicle",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Chivo",variants:["regular","italic","900","900italic"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Cinzel",variants:["regular","700","900"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Cinzel Decorative",variants:["regular","700","900"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Clicker Script",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Coda",variants:["regular","800"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Coda Caption",variants:["800"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Codystar",variants:["300","regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Combo",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Comfortaa",variants:["300","regular","700"],subsets:["cyrillic","latin-ext","latin","greek","cyrillic-ext"]},{kind:"webfonts#webfont",family:"Coming Soon",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Concert One",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Condiment",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Content",variants:["regular","700"],subsets:["khmer"]},{kind:"webfonts#webfont",family:"Contrail One",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Convergence",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Cookie",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Copse",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Corben",variants:["regular","700"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Courgette",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Cousine",variants:["regular","italic","700","700italic"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Coustard",variants:["regular","900"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Covered By Your Grace",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Crafty Girls",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Creepster",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Crete Round",variants:["regular","italic"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Crimson Text",variants:["regular","italic","600","600italic","700","700italic"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Croissant One",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Crushed",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Cuprum",variants:["regular","italic","700","700italic"],subsets:["cyrillic","latin-ext","latin"]},{kind:"webfonts#webfont",family:"Cutive",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Cutive Mono",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Damion",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Dancing Script",variants:["regular","700"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Dangrek",variants:["regular"],subsets:["khmer"]},{kind:"webfonts#webfont",family:"Dawning of a New Day",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Days One",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Delius",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Delius Swash Caps",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Delius Unicase",variants:["regular","700"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Della Respira",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Devonshire",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Didact Gothic",variants:["regular"],subsets:["cyrillic","greek-ext","latin-ext","latin","greek","cyrillic-ext"]},{kind:"webfonts#webfont",family:"Diplomata",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Diplomata SC",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Doppio One",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Dorsa",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Dosis",variants:["200","300","regular","500","600","700","800"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Dr Sugiyama",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Droid Sans",variants:["regular","700"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Droid Sans Mono",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Droid Serif",variants:["regular","italic","700","700italic"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Duru Sans",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Dynalight",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"EB Garamond",variants:["regular"],subsets:["cyrillic","latin-ext","latin","vietnamese","cyrillic-ext"]},{kind:"webfonts#webfont",family:"Eagle Lake",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Eater",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Economica",variants:["regular","italic","700","700italic"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Electrolize",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Emblema One",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Emilys Candy",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Engagement",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Englebert",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Enriqueta",variants:["regular","700"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Erica One",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Esteban",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Euphoria Script",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Ewert",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Exo",variants:["100","100italic","200","200italic","300","300italic","regular","italic","500","500italic","600","600italic","700","700italic","800","800italic","900","900italic"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Expletus Sans",variants:["regular","italic","500","500italic","600","600italic","700","700italic"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Fanwood Text",variants:["regular","italic"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Fascinate",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Fascinate Inline",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Faster One",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Fasthand",variants:["regular"],subsets:["khmer"]},{kind:"webfonts#webfont",family:"Federant",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Federo",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Felipa",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Fenix",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Finger Paint",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Fjord One",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Flamenco",variants:["300","regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Flavors",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Fondamento",variants:["regular","italic"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Fontdiner Swanky",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Forum",variants:["regular"],subsets:["cyrillic","latin-ext","latin","cyrillic-ext"]},{kind:"webfonts#webfont",family:"Francois One",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Freckle Face",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Fredericka the Great",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Fredoka One",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Freehand",variants:["regular"],subsets:["khmer"]},{kind:"webfonts#webfont",family:"Fresca",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Frijole",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Fugaz One",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"GFS Didot",variants:["regular"],subsets:["greek"]},{kind:"webfonts#webfont",family:"GFS Neohellenic",variants:["regular","italic","700","700italic"],subsets:["greek"]},{kind:"webfonts#webfont",family:"Gafata",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Galdeano",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Galindo",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Gentium Basic",variants:["regular","italic","700","700italic"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Gentium Book Basic",variants:["regular","italic","700","700italic"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Geo",variants:["regular","italic"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Geostar",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Geostar Fill",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Germania One",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Gilda Display",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Give You Glory",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Glass Antiqua",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Glegoo",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Gloria Hallelujah",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Goblin One",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Gochi Hand",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Gorditas",variants:["regular","700"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Goudy Bookletter 1911",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Graduate",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Gravitas One",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Great Vibes",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Griffy",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Gruppo",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Gudea",variants:["regular","italic","700"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Habibi",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Hammersmith One",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Hanalei",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Hanalei Fill",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Handlee",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Hanuman",variants:["regular","700"],subsets:["khmer"]},{kind:"webfonts#webfont",family:"Happy Monkey",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Headland One",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Henny Penny",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Herr Von Muellerhoff",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Holtwood One SC",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Homemade Apple",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Homenaje",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"IM Fell DW Pica",variants:["regular","italic"],subsets:["latin"]},{kind:"webfonts#webfont",family:"IM Fell DW Pica SC",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"IM Fell Double Pica",variants:["regular","italic"],subsets:["latin"]},{kind:"webfonts#webfont",family:"IM Fell Double Pica SC",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"IM Fell English",variants:["regular","italic"],subsets:["latin"]},{kind:"webfonts#webfont",family:"IM Fell English SC",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"IM Fell French Canon",variants:["regular","italic"],subsets:["latin"]},{kind:"webfonts#webfont",family:"IM Fell French Canon SC",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"IM Fell Great Primer",variants:["regular","italic"],subsets:["latin"]},{kind:"webfonts#webfont",family:"IM Fell Great Primer SC",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Iceberg",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Iceland",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Imprima",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Inconsolata",variants:["regular","700"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Inder",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Indie Flower",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Inika",variants:["regular","700"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Irish Grover",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Istok Web",variants:["regular","italic","700","700italic"],subsets:["cyrillic","latin-ext","latin","cyrillic-ext"]},{kind:"webfonts#webfont",family:"Italiana",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Italianno",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Jacques Francois",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Jacques Francois Shadow",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Jim Nightshade",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Jockey One",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Jolly Lodger",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Josefin Sans",variants:["100","100italic","300","300italic","regular","italic","600","600italic","700","700italic"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Josefin Slab",variants:["100","100italic","300","300italic","regular","italic","600","600italic","700","700italic"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Joti One",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Judson",variants:["regular","italic","700"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Julee",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Julius Sans One",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Junge",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Jura",variants:["300","regular","500","600"],subsets:["cyrillic","greek-ext","latin-ext","latin","greek","cyrillic-ext"]},{kind:"webfonts#webfont",family:"Just Another Hand",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Just Me Again Down Here",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Kameron",variants:["regular","700"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Karla",variants:["regular","italic","700","700italic"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Kaushan Script",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Keania One",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Kelly Slab",variants:["regular"],subsets:["cyrillic","latin-ext","latin"]},{kind:"webfonts#webfont",family:"Kenia",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Khmer",variants:["regular"],subsets:["khmer"]},{kind:"webfonts#webfont",family:"Kite One",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Knewave",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Kotta One",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Koulen",variants:["regular"],subsets:["khmer"]},{kind:"webfonts#webfont",family:"Kranky",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Kreon",variants:["300","regular","700"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Kristi",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Krona One",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"La Belle Aurore",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Lancelot",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Lato",variants:["100","100italic","300","300italic","regular","italic","700","700italic","900","900italic"],subsets:["latin"]},{kind:"webfonts#webfont",family:"League Script",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Leckerli One",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Ledger",variants:["regular"],subsets:["cyrillic","latin-ext","latin"]},{kind:"webfonts#webfont",family:"Lekton",variants:["regular","italic","700"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Lemon",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Life Savers",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Lilita One",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Limelight",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Linden Hill",variants:["regular","italic"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Lobster",variants:["regular"],subsets:["cyrillic","latin-ext","latin","cyrillic-ext"]},{kind:"webfonts#webfont",family:"Lobster Two",variants:["regular","italic","700","700italic"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Londrina Outline",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Londrina Shadow",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Londrina Sketch",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Londrina Solid",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Lora",variants:["regular","italic","700","700italic"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Love Ya Like A Sister",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Loved by the King",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Lovers Quarrel",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Luckiest Guy",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Lusitana",variants:["regular","700"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Lustria",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Macondo",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Macondo Swash Caps",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Magra",variants:["regular","700"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Maiden Orange",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Mako",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Marcellus",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Marcellus SC",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Marck Script",variants:["regular"],subsets:["cyrillic","latin-ext","latin"]},{kind:"webfonts#webfont",family:"Margarine",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Marko One",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Marmelad",variants:["regular"],subsets:["cyrillic","latin-ext","latin"]},{kind:"webfonts#webfont",family:"Marvel",variants:["regular","italic","700","700italic"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Mate",variants:["regular","italic"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Mate SC",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Maven Pro",variants:["regular","500","700","900"],subsets:["latin"]},{kind:"webfonts#webfont",family:"McLaren",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Meddon",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"MedievalSharp",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Medula One",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Megrim",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Meie Script",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Merienda",variants:["regular","700"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Merienda One",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Merriweather",variants:["300","regular","700","900"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Metal",variants:["regular"],subsets:["khmer"]},{kind:"webfonts#webfont",family:"Metal Mania",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Metamorphous",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Metrophobic",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Michroma",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Miltonian",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Miltonian Tattoo",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Miniver",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Miss Fajardose",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Modern Antiqua",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Molengo",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Molle",variants:["italic"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Monofett",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Monoton",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Monsieur La Doulaise",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Montaga",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Montez",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Montserrat",variants:["regular","700"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Montserrat Alternates",variants:["regular","700"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Montserrat Subrayada",variants:["regular","700"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Moul",variants:["regular"],subsets:["khmer"]},{kind:"webfonts#webfont",family:"Moulpali",variants:["regular"],subsets:["khmer"]},{kind:"webfonts#webfont",family:"Mountains of Christmas",variants:["regular","700"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Mouse Memoirs",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Mr Bedfort",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Mr Dafoe",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Mr De Haviland",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Mrs Saint Delafield",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Mrs Sheppards",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Muli",variants:["300","300italic","regular","italic"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Mystery Quest",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Neucha",variants:["regular"],subsets:["cyrillic","latin"]},{kind:"webfonts#webfont",family:"Neuton",variants:["200","300","regular","italic","700","800"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"News Cycle",variants:["regular","700"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Niconne",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Nixie One",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Nobile",variants:["regular","italic","700","700italic"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Nokora",variants:["regular","700"],subsets:["khmer"]},{kind:"webfonts#webfont",family:"Norican",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Nosifer",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Nothing You Could Do",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Noticia Text",variants:["regular","italic","700","700italic"],subsets:["latin-ext","latin","vietnamese"]},{kind:"webfonts#webfont",family:"Nova Cut",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Nova Flat",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Nova Mono",variants:["regular"],subsets:["latin","greek"]},{kind:"webfonts#webfont",family:"Nova Oval",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Nova Round",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Nova Script",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Nova Slim",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Nova Square",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Numans",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Nunito",variants:["300","regular","700"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Odor Mean Chey",variants:["regular"],subsets:["khmer"]},{kind:"webfonts#webfont",family:"Offside",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Old Standard TT",variants:["regular","italic","700"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Oldenburg",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Oleo Script",variants:["regular","700"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Oleo Script Swash Caps",variants:["regular","700"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Open Sans",variants:["300","300italic","regular","italic","600","600italic","700","700italic","800","800italic"],subsets:["cyrillic","greek-ext","latin-ext","latin","vietnamese","greek","cyrillic-ext"]},{kind:"webfonts#webfont",family:"Open Sans Condensed",variants:["300","300italic","700"],subsets:["cyrillic","greek-ext","latin-ext","latin","vietnamese","greek","cyrillic-ext"]},{kind:"webfonts#webfont",family:"Oranienbaum",variants:["regular"],subsets:["cyrillic","latin-ext","latin","cyrillic-ext"]},{kind:"webfonts#webfont",family:"Orbitron",variants:["regular","500","700","900"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Oregano",variants:["regular","italic"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Orienta",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Original Surfer",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Oswald",variants:["300","regular","700"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Over the Rainbow",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Overlock",variants:["regular","italic","700","700italic","900","900italic"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Overlock SC",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Ovo",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Oxygen",variants:["300","regular","700"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Oxygen Mono",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"PT Mono",variants:["regular"],subsets:["cyrillic","latin-ext","latin","cyrillic-ext"]},{kind:"webfonts#webfont",family:"PT Sans",variants:["regular","italic","700","700italic"],subsets:["cyrillic","latin-ext","latin"]},{kind:"webfonts#webfont",family:"PT Sans Caption",variants:["regular","700"],subsets:["cyrillic","latin-ext","latin"]},{kind:"webfonts#webfont",family:"PT Sans Narrow",variants:["regular","700"],subsets:["cyrillic","latin-ext","latin"]},{kind:"webfonts#webfont",family:"PT Serif",variants:["regular","italic","700","700italic"],subsets:["cyrillic","latin"]},{kind:"webfonts#webfont",family:"PT Serif Caption",variants:["regular","italic"],subsets:["cyrillic","latin"]},{kind:"webfonts#webfont",family:"Pacifico",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Paprika",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Parisienne",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Passero One",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Passion One",variants:["regular","700","900"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Patrick Hand",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Patua One",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Paytone One",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Peralta",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Permanent Marker",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Petit Formal Script",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Petrona",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Philosopher",variants:["regular","italic","700","700italic"],subsets:["cyrillic","latin"]},{kind:"webfonts#webfont",family:"Piedra",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Pinyon Script",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Pirata One",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Plaster",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Play",variants:["regular","700"],subsets:["cyrillic","greek-ext","latin-ext","latin","greek","cyrillic-ext"]},{kind:"webfonts#webfont",family:"Playball",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Playfair Display",variants:["regular","italic","700","700italic","900","900italic"],subsets:["cyrillic","latin-ext","latin"]},{kind:"webfonts#webfont",family:"Playfair Display SC",variants:["regular","italic","700","700italic","900","900italic"],subsets:["cyrillic","latin-ext","latin"]},{kind:"webfonts#webfont",family:"Podkova",variants:["regular","700"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Poiret One",variants:["regular"],subsets:["cyrillic","latin-ext","latin"]},{kind:"webfonts#webfont",family:"Poller One",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Poly",variants:["regular","italic"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Pompiere",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Pontano Sans",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Port Lligat Sans",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Port Lligat Slab",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Prata",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Preahvihear",variants:["regular"],subsets:["khmer"]},{kind:"webfonts#webfont",family:"Press Start 2P",variants:["regular"],subsets:["cyrillic","latin-ext","latin","greek"]},{kind:"webfonts#webfont",family:"Princess Sofia",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Prociono",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Prosto One",variants:["regular"],subsets:["cyrillic","latin-ext","latin"]},{kind:"webfonts#webfont",family:"Puritan",variants:["regular","italic","700","700italic"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Purple Purse",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Quando",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Quantico",variants:["regular","italic","700","700italic"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Quattrocento",variants:["regular","700"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Quattrocento Sans",variants:["regular","italic","700","700italic"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Questrial",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Quicksand",variants:["300","regular","700"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Quintessential",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Qwigley",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Racing Sans One",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Radley",variants:["regular","italic"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Raleway",variants:["100","200","300","regular","500","600","700","800","900"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Raleway Dots",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Rambla",variants:["regular","italic","700","700italic"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Rammetto One",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Ranchers",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Rancho",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Rationale",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Redressed",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Reenie Beanie",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Revalia",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Ribeye",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Ribeye Marrow",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Righteous",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Risque",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Rochester",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Rock Salt",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Rokkitt",variants:["regular","700"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Romanesco",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Ropa Sans",variants:["regular","italic"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Rosario",variants:["regular","italic","700","700italic"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Rosarivo",variants:["regular","italic"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Rouge Script",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Ruda",variants:["regular","700","900"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Rufina",variants:["regular","700"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Ruge Boogie",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Ruluko",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Rum Raisin",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Ruslan Display",variants:["regular"],subsets:["cyrillic","latin-ext","latin","cyrillic-ext"]},{kind:"webfonts#webfont",family:"Russo One",variants:["regular"],subsets:["cyrillic","latin-ext","latin"]},{kind:"webfonts#webfont",family:"Ruthie",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Rye",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Sacramento",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Sail",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Salsa",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Sanchez",variants:["regular","italic"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Sancreek",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Sansita One",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Sarina",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Satisfy",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Scada",variants:["regular","italic","700","700italic"],subsets:["cyrillic","latin-ext","latin"]},{kind:"webfonts#webfont",family:"Schoolbell",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Seaweed Script",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Sevillana",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Seymour One",variants:["regular"],subsets:["cyrillic","latin-ext","latin"]},{kind:"webfonts#webfont",family:"Shadows Into Light",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Shadows Into Light Two",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Shanti",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Share",variants:["regular","italic","700","700italic"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Share Tech",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Share Tech Mono",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Shojumaru",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Short Stack",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Siemreap",variants:["regular"],subsets:["khmer"]},{kind:"webfonts#webfont",family:"Sigmar One",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Signika",variants:["300","regular","600","700"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Signika Negative",variants:["300","regular","600","700"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Simonetta",variants:["regular","italic","900","900italic"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Sirin Stencil",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Six Caps",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Skranji",variants:["regular","700"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Slackey",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Smokum",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Smythe",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Sniglet",variants:["800"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Snippet",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Snowburst One",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Sofadi One",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Sofia",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Sonsie One",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Sorts Mill Goudy",variants:["regular","italic"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Source Code Pro",variants:["200","300","regular","600","700","900"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Source Sans Pro",variants:["200","200italic","300","300italic","regular","italic","600","600italic","700","700italic","900","900italic"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Special Elite",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Spicy Rice",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Spinnaker",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Spirax",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Squada One",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Stalemate",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Stalinist One",variants:["regular"],subsets:["cyrillic","latin-ext","latin"]},{kind:"webfonts#webfont",family:"Stardos Stencil",variants:["regular","700"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Stint Ultra Condensed",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Stint Ultra Expanded",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Stoke",variants:["300","regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Strait",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Sue Ellen Francisco",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Sunshiney",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Supermercado One",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Suwannaphum",variants:["regular"],subsets:["khmer"]},{kind:"webfonts#webfont",family:"Swanky and Moo Moo",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Syncopate",variants:["regular","700"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Tangerine",variants:["regular","700"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Taprom",variants:["regular"],subsets:["khmer"]},{kind:"webfonts#webfont",family:"Telex",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Tenor Sans",variants:["regular"],subsets:["cyrillic","latin-ext","latin","cyrillic-ext"]},{kind:"webfonts#webfont",family:"Text Me One",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"The Girl Next Door",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Tienne",variants:["regular","700","900"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Tinos",variants:["regular","italic","700","700italic"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Titan One",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Titillium Web",variants:["200","200italic","300","300italic","regular","italic","600","600italic","700","700italic","900"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Trade Winds",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Trocchi",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Trochut",variants:["regular","italic","700"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Trykker",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Tulpen One",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Ubuntu",variants:["300","300italic","regular","italic","500","500italic","700","700italic"],subsets:["cyrillic","greek-ext","latin-ext","latin","greek","cyrillic-ext"]},{kind:"webfonts#webfont",family:"Ubuntu Condensed",variants:["regular"],subsets:["cyrillic","greek-ext","latin-ext","latin","greek","cyrillic-ext"]},{kind:"webfonts#webfont",family:"Ubuntu Mono",variants:["regular","italic","700","700italic"],subsets:["cyrillic","greek-ext","latin-ext","latin","greek","cyrillic-ext"]},{kind:"webfonts#webfont",family:"Ultra",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Uncial Antiqua",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Underdog",variants:["regular"],subsets:["cyrillic","latin-ext","latin"]},{kind:"webfonts#webfont",family:"Unica One",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"UnifrakturCook",variants:["700"],subsets:["latin"]},{kind:"webfonts#webfont",family:"UnifrakturMaguntia",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Unkempt",variants:["regular","700"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Unlock",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Unna",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"VT323",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Vampiro One",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Varela",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Varela Round",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Vast Shadow",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Vibur",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Vidaloka",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Viga",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Voces",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Volkhov",variants:["regular","italic","700","700italic"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Vollkorn",variants:["regular","italic","700","700italic"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Voltaire",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Waiting for the Sunrise",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Wallpoet",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Walter Turncoat",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Warnes",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Wellfleet",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Wire One",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Yanone Kaffeesatz",variants:["200","300","regular","700"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Yellowtail",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Yeseva One",variants:["regular"],subsets:["cyrillic","latin-ext","latin"]},{kind:"webfonts#webfont",family:"Yesteryear",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Zeyada",variants:["regular"],subsets:["latin"]}]},BFHLanguagesList={om:"Afaan Oromoo",aa:"Afaraf",af:"Afrikaans",ak:"Akan",an:"aragonés",ig:"Asụsụ Igbo",gn:"Avañe'ẽ",ae:"avesta",ay:"aymar aru",az:"azərbaycan dili",id:"Bahasa Indonesia",ms:"bahasa Melayu",bm:"bamanankan",jv:"basa Jawa",su:"Basa Sunda",bi:"Bislama",bs:"bosanski jezik",br:"brezhoneg",ca:"català",ch:"Chamoru",ny:"chiCheŵa",sn:"chiShona",co:"corsu",cy:"Cymraeg",da:"dansk",se:"Davvisámegiella",de:"Deutsch",nv:"Diné bizaad",et:"eesti",na:"Ekakairũ Naoero",en:"English",es:"español",eo:"Esperanto",eu:"euskara",ee:"Eʋegbe",to:"faka Tonga",mg:"fiteny malagasy",fr:"français",fy:"Frysk",ff:"Fulfulde",fo:"føroyskt",ga:"Gaeilge",gv:"Gaelg",sm:"gagana fa'a Samoa",gl:"galego",sq:"gjuha shqipe",gd:"Gàidhlig",ki:"Gĩkũyũ",ha:"Hausa",ho:"Hiri Motu",hr:"hrvatski jezik",io:"Ido",rw:"Ikinyarwanda",rn:"Ikirundi",ia:"Interlingua",nd:"isiNdebele",nr:"isiNdebele",xh:"isiXhosa",zu:"isiZulu",it:"italiano",ik:"Iñupiaq",pl:"polski",mh:"Kajin M̧ajeļ",kl:"kalaallisut",kr:"Kanuri",kw:"Kernewek",kg:"KiKongo",sw:"Kiswahili",ht:"Kreyòl ayisyen",kj:"Kuanyama",ku:"Kurdî",la:"latine",lv:"latviešu valoda",lt:"lietuvių kalba",ro:"limba română",li:"Limburgs",ln:"Lingála",lg:"Luganda",lb:"Lëtzebuergesch",hu:"magyar",mt:"Malti",nl:"Nederlands",no:"Norsk",nb:"Norsk bokmål",nn:"Norsk nynorsk",uz:"O'zbek",oc:"occitan",ie:"Interlingue",hz:"Otjiherero",ng:"Owambo",pt:"português",ty:"Reo Tahiti",rm:"rumantsch grischun",qu:"Runa Simi",sc:"sardu",za:"Saɯ cueŋƅ",st:"Sesotho",tn:"Setswana",ss:"SiSwati",sl:"slovenski jezik",sk:"slovenčina",so:"Soomaaliga",fi:"suomi",sv:"Svenska",mi:"te reo Māori",vi:"Tiếng Việt",lu:"Tshiluba",ve:"Tshivenḓa",tw:"Twi",tk:"Türkmen",tr:"Türkçe",ug:"Uyƣurqə",vo:"Volapük",fj:"vosa Vakaviti",wa:"walon",tl:"Wikang Tagalog",wo:"Wollof",ts:"Xitsonga",yo:"Yorùbá",sg:"yângâ tî sängö",is:"Íslenska",cs:"čeština",el:"ελληνικά",av:"авар мацӀ",ab:"аҧсуа бызшәа",ba:"башҡорт теле",be:"беларуская мова",bg:"български език",os:"ирон æвзаг",kv:"коми кыв",ky:"Кыргызча",mk:"македонски јазик",mn:"монгол",ce:"нохчийн мотт",ru:"русский язык",sr:"српски језик",tt:"татар теле",tg:"тоҷикӣ",uk:"українська мова",cv:"чӑваш чӗлхи",cu:"ѩзыкъ словѣньскъ",kk:"қазақ тілі",hy:"Հայերեն",yi:"ייִדיש",he:"עברית",ur:"اردو",ar:"العربية",fa:"فارسی",ps:"پښتو",ks:"कश्मीरी",ne:"नेपाली",pi:"पाऴि",bh:"भोजपुरी",mr:"मराठी",sa:"संस्कृतम्",sd:"सिन्धी",hi:"हिन्दी",as:"অসমীয়া",bn:"বাংলা",pa:"ਪੰਜਾਬੀ",gu:"ગુજરાતી",or:"ଓଡ଼ିଆ",ta:"தமிழ்",te:"తెలుగు",kn:"ಕನ್ನಡ",ml:"മലയാളം",si:"සිංහල",th:"ไทย",lo:"ພາສາລາວ",bo:"བོད་ཡིག",dz:"རྫོང་ཁ",my:"ဗမာစာ",ka:"ქართული",ti:"ትግርኛ",am:"አማርኛ",iu:"ᐃᓄᒃᑎᑐᑦ",oj:"ᐊᓂᔑᓈᐯᒧᐎᓐ",cr:"ᓀᐦᐃᔭᐍᐏᐣ",km:"ខ្មែរ",zh:"中文 (Zhōngwén)",ja:"日本語 (にほんご)",ii:"ꆈꌠ꒿ Nuosuhxop",ko:"한국어 (韓國語)"},BFHPhoneFormatList={AF:"+93 0dd ddd dddd",AL:"+355 0dd ddd ddd",DZ:"+213 0ddd dd dd dd",AS:"+1 (ddd) ddd-dddd",AD:"+376 ddddddddd",AO:"+244 ddd ddd ddd",AI:"+1 (ddd) ddd-dddd",AQ:"+672 ddddddddd",AG:"+1 (ddd) ddd-dddd",AR:"+54 ddddddddd",AM:"+374 0dd dddddd",AW:"+297 ddd dddd",AU:"+61 ddd ddd ddd",AT:"+43 0dddd ddddddddd",AZ:"+994 ddddddddd",BH:"+973 ddddddddd",BD:"+880 ddddddddd",BB:"+1 ddddddddd",BY:"+375 ddddddddd",BE:"+32 ddddddddd",BZ:"+501 ddddddddd",BJ:"+229 ddddddddd",BM:"+1 (ddd) ddd-dddd",BT:"+975 ddddddddd",BO:"+591 ddddddddd",BA:"+387 ddddddddd",BW:"+267 ddddddddd",BV:"+0 ddddddddd",BR:"+55 ddddddddd",IO:"+0 ddddddddd",VG:"+1 (ddd) ddd-dddd",BN:"+673 ddddddddd",BG:"+359 ddddddddd",BF:"+226 ddddddddd",BI:"+257 ddddddddd",CI:"+225 ddddddddd",KH:"+855 ddddddddd",CM:"+237 ddddddddd",CA:"+1 (ddd) ddd-dddd",CV:"+238 ddddddddd",KY:"+1 (ddd) ddd-dddd",CF:"+236 ddddddddd",TD:"+235 ddddddddd",CL:"+56 ddddddddd",CN:"+86 ddddddddd",CX:"+61 ddddddddd",CC:"+61 ddddddddd",CO:"+57 ddddddddd",KM:"+269 ddddddddd",CG:"+242 ddddddddd",CK:"+682 ddddddddd",CR:"+506 ddddddddd",HR:"+385 ddddddddd",CU:"+53 ddddddddd",CY:"+357 ddddddddd",CZ:"+420 ddddddddd",CD:"+243 ddddddddd",DK:"+45 ddddddddd",DJ:"+253 ddddddddd",DM:"+1 (ddd) ddd-dddd",DO:"+1 (ddd) ddd-dddd",TL:"+670 ddddddddd",EC:"+593 ddddddddd",EG:"+20 ddddddddd",SV:"+503 ddddddddd",GQ:"+240 ddddddddd",ER:"+291 ddddddddd",EE:"+372 ddddddddd",ET:"+251 ddddddddd",FO:"+298 ddddddddd",FK:"+500 ddddddddd",FJ:"+679 ddddddddd",FI:"+358 ddddddddd",MK:"+389 ddddddddd",FR:"+33 d dd dd dd dd",GF:"+594 ddddddddd",PF:"+689 ddddddddd",TF:"+262 ddddddddd",GA:"+241 ddddddddd",GE:"+995 ddddddddd",DE:"+49 ddddddddd",GH:"+233 ddddddddd",GI:"+350 ddddddddd",GR:"+30 ddddddddd",GL:"+299 ddddddddd",GD:"+1 (ddd) ddd-dddd",GP:"+590 ddddddddd",GU:"+1 (ddd) ddd-dddd",GT:"+502 ddddddddd",GN:"+224 ddddddddd",GW:"+245 ddddddddd",GY:"+592 ddddddddd",HT:"+509 ddddddddd",HM:"+0 ddddddddd",HN:"+504 ddddddddd",HK:"+852 ddddddddd",HU:"+36 ddddddddd",IS:"+354 ddddddddd",IN:"+91 ddddddddd",ID:"+62 ddddddddd",IR:"+98 ddddddddd",IQ:"+964 ddddddddd",IE:"+353 ddddddddd",IL:"+972 ddddddddd",IT:"+39 ddddddddd",JM:"+1 (ddd) ddd-dddd",JP:"+81 ddddddddd",JO:"+962 ddddddddd",KZ:"+7 ddddddddd",KE:"+254 ddddddddd",KI:"+686 ddddddddd",KW:"+965 ddddddddd",KG:"+996 ddddddddd",LA:"+856 ddddddddd",LV:"+371 ddddddddd",LB:"+961 ddddddddd",LS:"+266 ddddddddd",LR:"+231 ddddddddd",LY:"+218 ddddddddd",LI:"+423 ddddddddd",LT:"+370 ddddddddd",LU:"+352 ddddddddd",MO:"+853 ddddddddd",MG:"+261 ddddddddd",MW:"+265 ddddddddd",MY:"+60 ddddddddd",MV:"+960 ddddddddd",ML:"+223 ddddddddd",MT:"+356 ddddddddd",MH:"+692 ddddddddd",MQ:"+596 ddddddddd",MR:"+222 ddddddddd",MU:"+230 ddddddddd",YT:"+262 ddddddddd",MX:"+52 ddddddddd",FM:"+691 ddddddddd",MD:"+373 ddddddddd",MC:"+377 ddddddddd",MN:"+976 ddddddddd",MS:"+1 (ddd) ddd-dddd",MA:"+212 ddddddddd",MZ:"+258 ddddddddd",MM:"+95 ddddddddd",NA:"+264 ddddddddd",NR:"+674 ddddddddd",NP:"+977 ddddddddd",NL:"+31 ddddddddd",AN:"+599 ddddddddd",NC:"+687 ddddddddd",NZ:"+64 ddddddddd",NI:"+505 ddddddddd",NE:"+227 ddddddddd",NG:"+234 ddddddddd",NU:"+683 ddddddddd",NF:"+672 ddddddddd",KP:"+850 ddddddddd",MP:"+1 (ddd) ddd-dddd",NO:"+47 ddddddddd",OM:"+968 ddddddddd",PK:"+92 ddddddddd",PW:"+680 ddddddddd",PA:"+507 ddddddddd",PG:"+675 ddddddddd",PY:"+595 ddddddddd",PE:"+51 ddddddddd",PH:"+63 ddddddddd",PN:"+870 ddddddddd",PL:"+48 ddddddddd",PT:"+351 ddddddddd",PR:"+1 (ddd) ddd-dddd",QA:"+974 ddddddddd",RE:"+262 ddddddddd",RO:"+40 ddddddddd",RU:"+7 ddddddddd",RW:"+250 ddddddddd",ST:"+239 ddddddddd",SH:"+290 ddddddddd",KN:"+1 (ddd) ddd-dddd",LC:"+1 (ddd) ddd-dddd",PM:"+508 ddddddddd",VC:"+1 (ddd) ddd-dddd",WS:"+685 ddddddddd",SM:"+378 ddddddddd",SA:"+966 ddddddddd",SN:"+221 ddddddddd",SC:"+248 ddddddddd",SL:"+232 ddddddddd",SG:"+65 ddddddddd",SK:"+421 ddddddddd",SI:"+386 ddddddddd",SB:"+677 ddddddddd",SO:"+252 ddddddddd",ZA:"+27 ddddddddd",GS:"+0 ddddddddd",KR:"+82 ddddddddd",ES:"+34 ddddddddd",LK:"+94 ddddddddd",SD:"+249 ddddddddd",SR:"+597 ddddddddd",SJ:"+0 ddddddddd",SZ:"+268 ddddddddd",SE:"+46 ddddddddd",CH:"+41 ddddddddd",SY:"+963 ddddddddd",TW:"+886 ddddddddd",TJ:"+992 ddddddddd",TZ:"+255 ddddddddd",TH:"+66 ddddddddd",BS:"+1 (ddd) ddd-dddd",GM:"+220 ddddddddd",TG:"+228 ddddddddd",TK:"+690 ddddddddd",TO:"+676 ddddddddd",TT:"+1 (ddd) ddd-dddd",TN:"+216 ddddddddd",TR:"+90 ddddddddd",TM:"+993 ddddddddd",TC:"+1 (ddd) ddd-dddd",TV:"+688 ddddddddd",VI:"+1 (ddd) ddd-dddd",UG:"+256 ddddddddd",UA:"+380 ddddddddd",AE:"+971 ddddddddd",GB:"+44 (ddd) dddd dddd",US:"+1 (ddd) ddd-dddd",UM:"+0 ddddddddd",UY:"+598 ddddddddd",UZ:"+998 ddddddddd",VU:"+678 ddddddddd",VA:"+39 ddddddddd",VE:"+58 ddddddddd",VN:"+84 ddddddddd",WF:"+681 ddddddddd",EH:"+0 ddddddddd",YE:"+967 ddddddddd",YU:"+0 ddddddddd",ZM:"+260 ddddddddd",ZW:"+263 ddddddddd"},BFHStatesList={AF:{1:{code:"BAL",name:"Balkh"},2:{code:"BAM",name:"Bamian"},3:{code:"BDG",name:"Badghis"},4:{code:"BDS",name:"Badakhshan"},5:{code:"BGL",name:"Baghlan"},6:{code:"FRA",name:"Farah"},7:{code:"FYB",name:"Faryab"},8:{code:"GHA",name:"Ghazni"},9:{code:"GHO",name:"Ghowr"},10:{code:"HEL",name:"Helmand"},11:{code:"HER",name:"Herat"},12:{code:"JOW",name:"Jowzjan"},13:{code:"KAB",name:"Kabul"},14:{code:"KAN",name:"Kandahar"},15:{code:"KAP",name:"Kapisa"},16:{code:"KDZ",name:"Kondoz"},17:{code:"KHO",name:"Khost"},18:{code:"KNR",name:"Konar"},19:{code:"LAG",name:"Laghman"},20:{code:"LOW",name:"Lowgar"},21:{code:"NAN",name:"Nangrahar"},22:{code:"NIM",name:"Nimruz"},23:{code:"NUR",name:"Nurestan"},24:{code:"ORU",name:"Oruzgan"},25:{code:"PAR",name:"Parwan"},26:{code:"PIA",name:"Paktia"},27:{code:"PKA",name:"Paktika"},28:{code:"SAM",name:"Samangan"},29:{code:"SAR",name:"Sar-e Pol"},30:{code:"TAK",name:"Takhar"},31:{code:"WAR",name:"Wardak"},32:{code:"ZAB",name:"Zabol"}},AL:{1:{code:"BR",name:"Berat"},2:{code:"BU",name:"Bulqize"},3:{code:"DI",name:"Diber"},4:{code:"DL",name:"Delvine"},5:{code:"DR",name:"Durres"},6:{code:"DV",name:"Devoll"},7:{code:"EL",name:"Elbasan"},8:{code:"ER",name:"Kolonje"},9:{code:"FR",name:"Fier"},10:{code:"GJ",name:"Gjirokaster"},11:{code:"GR",name:"Gramsh"},12:{code:"HA",name:"Has"},13:{code:"KA",name:"Kavaje"},14:{code:"KB",name:"Kurbin"},15:{code:"KC",name:"Kucove"},16:{code:"KO",name:"Korce"},17:{code:"KR",name:"Kruje"},18:{code:"KU",name:"Kukes"},19:{code:"LB",name:"Librazhd"},20:{code:"LE",name:"Lezhe"},21:{code:"LU",name:"Lushnje"},22:{code:"MK",name:"Mallakaster"},23:{code:"MM",name:"Malesi e Madhe"},24:{code:"MR",name:"Mirdite"},25:{code:"MT",name:"Mat"},26:{code:"PG",name:"Pogradec"},27:{code:"PQ",name:"Peqin"},28:{code:"PR",name:"Permet"},29:{code:"PU",name:"Puke"},30:{code:"SH",name:"Shkoder"},31:{code:"SK",name:"Skrapar"},32:{code:"SR",name:"Sarande"},33:{code:"TE",name:"Tepelene"},34:{code:"TP",name:"Tropoje"},35:{code:"TR",name:"Tirane"},36:{code:"VL",name:"Vlore"}},DZ:{1:{code:"ADE",name:"Ain Defla"},2:{code:"ADR",name:"Adrar"},3:{code:"ALG",name:"Alger"},4:{code:"ANN",name:"Annaba"},5:{code:"ATE",name:"Ain Temouchent"},6:{code:"BAT",name:"Batna"},7:{code:"BBA",name:"Bordj Bou Arreridj"},8:{code:"BEC",name:"Bechar"},9:{code:"BEJ",name:"Bejaia"},10:{code:"BIS",name:"Biskra"},11:{code:"BLI",name:"Blida"},12:{code:"BMD",name:"Boumerdes"},13:{code:"BOA",name:"Bouira"},14:{code:"CHL",name:"Chlef"},15:{code:"CON",name:"Constantine"},16:{code:"DJE",name:"Djelfa"},17:{code:"EBA",name:"El Bayadh"},18:{code:"EOU",name:"El Oued"},19:{code:"ETA",name:"El Tarf"},20:{code:"GHA",name:"Ghardaia"},21:{code:"GUE",name:"Guelma"},22:{code:"ILL",name:"Illizi"},23:{code:"JIJ",name:"Jijel"},24:{code:"KHE",name:"Khenchela"},25:{code:"LAG",name:"Laghouat"},26:{code:"MED",name:"Medea"},27:{code:"MIL",name:"Mila"},28:{code:"MOS",name:"Mostaganem"},29:{code:"MSI",name:"M'Sila"},30:{code:"MUA",name:"Muaskar"},31:{code:"NAA",name:"Naama"},32:{code:"OEB",name:"Oum el-Bouaghi"},33:{code:"ORA",name:"Oran"},34:{code:"OUA",name:"Ouargla"},35:{code:"REL",name:"Relizane"},36:{code:"SAH",name:"Souk Ahras"},37:{code:"SAI",name:"Saida"},38:{code:"SBA",name:"Sidi Bel Abbes"},39:{code:"SET",name:"Setif"},40:{code:"SKI",name:"Skikda"},41:{code:"TAM",name:"Tamanghasset"},42:{code:"TEB",name:"Tebessa"},43:{code:"TIA",name:"Tiaret"},44:{code:"TIN",name:"Tindouf"},45:{code:"TIP",name:"Tipaza"},46:{code:"TIS",name:"Tissemsilt"},47:{code:"TLE",name:"Tlemcen"},48:{code:"TOU",name:"Tizi Ouzou"}},AS:{1:{code:"E",name:"Eastern"},2:{code:"M",name:"Manu'a"},3:{code:"R",name:"Rose Island"},4:{code:"S",name:"Swains Island"},5:{code:"W",name:"Western"}},AD:{1:{code:"ALV",name:"Andorra la Vella"},2:{code:"CAN",name:"Canillo"},3:{code:"ENC",name:"Encamp"},4:{code:"ESE",name:"Escaldes-Engordany"},5:{code:"LMA",name:"La Massana"},6:{code:"ORD",name:"Ordino"},7:{code:"SJL",name:"Sant Julià de Lòria"}},AO:{1:{code:"BGO",name:"Bengo"},2:{code:"BGU",name:"Benguela"},3:{code:"BIE",name:"Bie"},4:{code:"CAB",name:"Cabinda"},5:{code:"CCU",name:"Cuando-Cubango"},6:{code:"CNO",name:"Cuanza Norte"},7:{code:"CUS",name:"Cuanza Sul"},8:{code:"CNN",name:"Cunene"},9:{code:"HUA",name:"Huambo"},10:{code:"HUI",name:"Huila"},11:{code:"LUA",name:"Luanda"},12:{code:"LNO",name:"Lunda Norte"},13:{code:"LSU",name:"Lunda Sul"},14:{code:"MAL",name:"Malange"},15:{code:"MOX",name:"Moxico"},16:{code:"NAM",name:"Namibe"},17:{code:"UIG",name:"Uige"},18:{code:"ZAI",name:"Zaire"}},AI:{1:{code:"ANG",name:"Anguillita"},2:{code:"ANG",name:"Anguila"},3:{code:"DOG",name:"Dog"},4:{code:"LIT",name:"Little Scrub"},5:{code:"PRI",name:"Prickly Pear"},6:{code:"SAN",name:"Sandy"},7:{code:"SCR",name:"Scrub"},8:{code:"SEA",name:"Seal"},9:{code:"SOM",name:"Sombrero"}},AQ:{1:{code:"ASG",name:"Saint George"},2:{code:"ASH",name:"Saint Philip"},3:{code:"ASJ",name:"Saint John"},4:{code:"ASL",name:"Saint Paul"},5:{code:"ASM",name:"Saint Mary"},6:{code:"ASR",name:"Saint Peter"},7:{code:"BAR",name:"Barbuda"},8:{code:"RED",name:"Redonda"}},AR:{1:{code:"AN",name:"Antartida e Islas del Atlantico"},2:{code:"BA",name:"Buenos Aires"},3:{code:"CA",name:"Catamarca"},4:{code:"CH",name:"Chaco"},5:{code:"CU",name:"Chubut"},6:{code:"CO",name:"Cordoba"},7:{code:"CR",name:"Corrientes"},8:{code:"CF",name:"Capital Federal"},9:{code:"ER",name:"Entre Rios"},10:{code:"FO",name:"Formosa"},11:{code:"JU",name:"Jujuy"},12:{code:"LP",name:"La Pampa"},13:{code:"LR",name:"La Rioja"},14:{code:"ME",name:"Mendoza"},15:{code:"MI",name:"Misiones"},16:{code:"NE",name:"Neuquen"},17:{code:"RN",name:"Rio Negro"},18:{code:"SA",name:"Salta"},19:{code:"SJ",name:"San Juan"},20:{code:"SL",name:"San Luis"},21:{code:"SC",name:"Santa Cruz"},22:{code:"SF",name:"Santa Fe"},23:{code:"SD",name:"Santiago del Estero"},24:{code:"TF",name:"Tierra del Fuego"},25:{code:"TU",name:"Tucuman"}},AM:{1:{code:"AGT",name:"Aragatsotn"},2:{code:"ARR",name:"Ararat"},3:{code:"ARM",name:"Armavir"},4:{code:"GEG",name:"Geghark 'unik'"},5:{code:"KOT",name:"Kotayk'"},6:{code:"LOR",name:"Lorri"},7:{code:"SHI",name:"Shirak"},8:{code:"SYU",name:"Syunik'"},9:{code:"TAV",name:"Tavush"},10:{code:"VAY",name:"Vayots' Dzor"},11:{code:"YER",name:"Yerevan"}},AW:{1:{code:"ARU",name:"Aruba"},2:{code:"DRU",name:"Druif Beach"},3:{code:"MAN",name:"Manchebo Beach"},4:{code:"NOO",name:"Noord"},5:{code:"ORA",name:"Oranjestad"},6:{code:"PAL",name:"Palm Beach"},7:{code:"ROO",name:"Rooi Thomas"},8:{code:"SIN",name:"Sint Nicolaas"},9:{code:"SIN",name:"Sint Nicolas"},10:{code:"WAY",name:"Wayaca"}},AU:{1:{code:"ACT",name:"Australian Capital Territory"},2:{code:"NSW",name:"New South Wales"},3:{code:"NT",name:"Northern Territory"},4:{code:"QLD",name:"Queensland"},5:{code:"SA",name:"South Australia"},6:{code:"TAS",name:"Tasmania"},7:{code:"VIC",name:"Victoria"},8:{code:"WA",name:"Western Australia"}},AT:{1:{code:"BUR",name:"Burgenland"},2:{code:"KAR",name:"Krnten"},3:{code:"NOS",name:"Niederöesterreich"},4:{code:"OOS",name:"Oberöesterreich"},5:{code:"SAL",name:"Salzburg"},6:{code:"STE",name:"Steiermark"},7:{code:"TIR",name:"Tirol"},8:{code:"VOR",name:"Vorarlberg"},9:{code:"WIE",name:"Wien"}},AZ:{1:{code:"AB",name:"Ali Bayramli"},2:{code:"ABS",name:"Abseron"},3:{code:"AGC",name:"AgcabAdi"},4:{code:"AGM",name:"Agdam"},5:{code:"AGS",name:"Agdas"},6:{code:"AGA",name:"Agstafa"},7:{code:"AGU",name:"Agsu"},8:{code:"AST",name:"Astara"},9:{code:"BA",name:"Baki"},10:{code:"BAB",name:"BabAk"},11:{code:"BAL",name:"BalakAn"},12:{code:"BAR",name:"BArdA"},13:{code:"BEY",name:"Beylaqan"},14:{code:"BIL",name:"Bilasuvar"},15:{code:"CAB",name:"Cabrayil"},16:{code:"CAL",name:"Calilabab"},17:{code:"CUL",name:"Culfa"},18:{code:"DAS",name:"Daskasan"},19:{code:"DAV",name:"Davaci"},20:{code:"FUZ",name:"Fuzuli"},21:{code:"GA",name:"Ganca"},22:{code:"GAD",name:"Gadabay"},23:{code:"GOR",name:"Goranboy"},24:{code:"GOY",name:"Goycay"},25:{code:"HAC",name:"Haciqabul"},26:{code:"IMI",name:"Imisli"},27:{code:"ISM",name:"Ismayilli"},28:{code:"KAL",name:"Kalbacar"},29:{code:"KUR",name:"Kurdamir"},30:{code:"LA",name:"Lankaran"},31:{code:"LAC",name:"Lacin"},32:{code:"LAN",name:"Lankaran"},33:{code:"LER",name:"Lerik"},34:{code:"MAS",name:"Masalli"},35:{code:"MI",name:"Mingacevir"},36:{code:"NA",name:"Naftalan"},37:{code:"NX",name:"Naxcivan"},38:{code:"NEF",name:"Neftcala"},39:{code:"OGU",name:"Oguz"},40:{code:"ORD",name:"Ordubad"},41:{code:"QAB",name:"Qabala"},42:{code:"QAX",name:"Qax"},43:{code:"QAZ",name:"Qazax"},44:{code:"QOB",name:"Qobustan"},45:{code:"QBA",name:"Quba"},46:{code:"QBI",name:"Qubadli"},47:{code:"QUS",name:"Qusar"},48:{code:"SA",name:"Saki"},49:{code:"SAT",name:"Saatli"},50:{code:"SAB",name:"Sabirabad"},51:{code:"SAD",name:"Sadarak"},52:{code:"SAH",name:"Sahbuz"},53:{code:"SAK",name:"Saki"},54:{code:"SAL",name:"Salyan"},55:{code:"SM",name:"Sumqayit"},56:{code:"SMI",name:"Samaxi"},57:{code:"SKR",name:"Samkir"},58:{code:"SMX",name:"Samux"},59:{code:"SAR",name:"Sarur"},60:{code:"SIY",name:"Siyazan"},61:{code:"SS",name:"Susa"},62:{code:"SUS",name:"Susa"},63:{code:"TAR",name:"Tartar"},64:{code:"TOV",name:"Tovuz"},65:{code:"UCA",name:"Ucar"},66:{code:"XA",name:"Xankandi"},67:{code:"XAC",name:"Xacmaz"},68:{code:"XAN",name:"Xanlar"},69:{code:"XIZ",name:"Xizi"},70:{code:"XCI",name:"Xocali"},71:{code:"XVD",name:"Xocavand"},72:{code:"YAR",name:"Yardimli"},73:{code:"YEV",name:"Yevlax"},74:{code:"ZAN",name:"Zangilan"},75:{code:"ZAQ",name:"Zaqatala"},76:{code:"ZAR",name:"Zardab"}},BS:{1:{code:"ACK",name:"Acklins"},2:{code:"BER",name:"Berry Islands"},3:{code:"BIM",name:"Bimini"},4:{code:"BLK",name:"Black Point"},5:{code:"CAT",name:"Cat Island"},6:{code:"CAB",name:"Central Abaco"},7:{code:"CAN",name:"Central Andros"},8:{code:"CEL",name:"Central Eleuthera"},9:{code:"FRE",name:"City of Freeport"},10:{code:"CRO",name:"Crooked Island"},11:{code:"EGB",name:"East Grand Bahama"},12:{code:"EXU",name:"Exuma"},13:{code:"GRD",name:"Grand Cay"},14:{code:"HAR",name:"Harbour Island"},15:{code:"HOP",name:"Hope Town"},16:{code:"INA",name:"Inagua"},17:{code:"LNG",name:"Long Island"},18:{code:"MAN",name:"Mangrove Cay"},19:{code:"MAY",name:"Mayaguana"},20:{code:"MOO",name:"Moore's Island"},21:{code:"NAB",name:"North Abaco"},22:{code:"NAN",name:"North Andros"},23:{code:"NEL",name:"North Eleuthera"},24:{code:"RAG",name:"Ragged Island"},25:{code:"RUM",name:"Rum Cay"},26:{code:"SAL",name:"San Salvador"},27:{code:"SAB",name:"South Abaco"},28:{code:"SAN",name:"South Andros"},29:{code:"SEL",name:"South Eleuthera"},30:{code:"SWE",name:"Spanish Wells"},31:{code:"WGB",name:"West Grand Bahama"}},BH:{1:{code:"CAP",name:"Capital"},2:{code:"CEN",name:"Central"},3:{code:"MUH",name:"Muharraq"},4:{code:"NOR",name:"Northern"},5:{code:"SOU",name:"Southern"}},BD:{1:{code:"BAR",name:"Barisal"},2:{code:"CHI",name:"Chittagong"},3:{code:"DHA",name:"Dhaka"},4:{code:"KHU",name:"Khulna"},5:{code:"RAJ",name:"Rajshahi"},6:{code:"SYL",name:"Sylhet"}},BB:{1:{code:"CC",name:"Christ Church"},2:{code:"AND",name:"Saint Andrew"},3:{code:"GEO",name:"Saint George"},4:{code:"JAM",name:"Saint James"},5:{code:"JOH",name:"Saint John"},6:{code:"JOS",name:"Saint Joseph"},7:{code:"LUC",name:"Saint Lucy"},8:{code:"MIC",name:"Saint Michael"},9:{code:"PET",name:"Saint Peter"},10:{code:"PHI",name:"Saint Philip"},11:{code:"THO",name:"Saint Thomas"}},BY:{1:{code:"BR",name:"Brestskaya (Brest)"},2:{code:"HO",name:"Homyel'skaya (Homyel')"},3:{code:"HM",name:"Horad Minsk"},4:{code:"HR",name:"Hrodzyenskaya (Hrodna)"},5:{code:"MA",name:"Mahilyowskaya (Mahilyow)"},6:{code:"MI",name:"Minskaya"},7:{code:"VI",name:"Vitsyebskaya (Vitsyebsk)"}},BE:{1:{code:"VAN",name:"Antwerpen"},2:{code:"WBR",name:"Brabant Wallon"},3:{code:"WHT",name:"Hainaut"},4:{code:"WLG",name:"Liege"},5:{code:"VLI",name:"Limburg"},6:{code:"WLX",name:"Luxembourg"},7:{code:"WNA",name:"Namur"},8:{code:"VOV",name:"Oost-Vlaanderen"},9:{code:"VBR",name:"Vlaams Brabant"},10:{code:"VWV",name:"West-Vlaanderen"}},BZ:{1:{code:"BZ",name:"Belize"},2:{code:"CY",name:"Cayo"},3:{code:"CR",name:"Corozal"},4:{code:"OW",name:"Orange Walk"},5:{code:"SC",name:"Stann Creek"},6:{code:"TO",name:"Toledo"}},BJ:{1:{code:"AL",name:"Alibori"},2:{code:"AK",name:"Atakora"},3:{code:"AQ",name:"Atlantique"},4:{code:"BO",name:"Borgou"},5:{code:"CO",name:"Collines"},6:{code:"DO",name:"Donga"},7:{code:"KO",name:"Kouffo"},8:{code:"LI",name:"Littoral"},9:{code:"MO",name:"Mono"},10:{code:"OU",name:"Oueme"},11:{code:"PL",name:"Plateau"},12:{code:"ZO",name:"Zou"}},BM:{1:{code:"DS",name:"Devonshire"},2:{code:"HC",name:"Hamilton City"},3:{code:"HA",name:"Hamilton"},4:{code:"PG",name:"Paget"},5:{code:"PB",name:"Pembroke"},6:{code:"GC",name:"Saint George City"},7:{code:"SG",name:"Saint George's"},8:{code:"SA",name:"Sandys"},9:{code:"SM",name:"Smith's"},10:{code:"SH",name:"Southampton"},11:{code:"WA",name:"Warwick"}},BT:{1:{code:"BUM",name:"Bumthang"},2:{code:"CHU",name:"Chukha"},3:{code:"DAG",name:"Dagana"},4:{code:"GAS",name:"Gasa"},5:{code:"HAA",name:"Haa"},6:{code:"LHU",name:"Lhuntse"},7:{code:"MON",name:"Mongar"},8:{code:"PAR",name:"Paro"},9:{code:"PEM",name:"Pemagatshel"},10:{code:"PUN",name:"Punakha"},11:{code:"SJO",name:"Samdrup Jongkhar"},12:{code:"SAT",name:"Samtse"},13:{code:"SAR",name:"Sarpang"},14:{code:"THI",name:"Thimphu"},15:{code:"TRG",name:"Trashigang"},16:{code:"TRY",name:"Trashiyangste"},17:{code:"TRO",name:"Trongsa"},18:{code:"TSI",name:"Tsirang"},19:{code:"WPH",name:"Wangdue Phodrang"},20:{code:"ZHE",name:"Zhemgang"}},BO:{1:{code:"BEN",name:"Beni"},2:{code:"CHU",name:"Chuquisaca"},3:{code:"COC",name:"Cochabamba"},4:{code:"LPZ",name:"La Paz"},5:{code:"ORU",name:"Oruro"},6:{code:"PAN",name:"Pando"},7:{code:"POT",name:"Potosi"},8:{code:"SCZ",name:"Santa Cruz"},9:{code:"TAR",name:"Tarija"}},BA:{1:{code:"BRO",name:"Brcko district"},2:{code:"FBP",name:"Bosanskopodrinjski Kanton"},3:{code:"FHN",name:"Hercegovacko-neretvanski Kanton"},4:{code:"FPO",name:"Posavski Kanton"},5:{code:"FSA",name:"Kanton Sarajevo"},6:{code:"FSB",name:"Srednjebosanski Kanton"},7:{code:"FTU",name:"Tuzlanski Kanton"},8:{code:"FUS",name:"Unsko-Sanski Kanton"},9:{code:"FZA",name:"Zapadnobosanska"},10:{code:"FZE",name:"Zenicko-Dobojski Kanton"},11:{code:"FZH",name:"Zapadnohercegovacka Zupanija"},12:{code:"SBI",name:"Bijeljina"},13:{code:"SBL",name:"Banja Luka"},14:{code:"SDO",name:"Doboj"},15:{code:"SFO",name:"Foca"},16:{code:"SSR",name:"Sarajevo-Romanija or Sokolac"},17:{code:"STR",name:"Trebinje"},18:{code:"SVL",name:"Vlasenica"}},BW:{1:{code:"CE",name:"Central"},2:{code:"GH",name:"Ghanzi"},3:{code:"KD",name:"Kgalagadi"},4:{code:"KT",name:"Kgatleng"},5:{code:"KW",name:"Kweneng"},6:{code:"NG",name:"Ngamiland"},7:{code:"NE",name:"North East"},8:{code:"NW",name:"North West"},9:{code:"SE",name:"South East"},10:{code:"SO",name:"Southern"}},BR:{1:{code:"AC",name:"Acre"},2:{code:"AL",name:"Alagoas"},3:{code:"AP",name:"Amapa"},4:{code:"AM",name:"Amazonas"},5:{code:"BA",name:"Bahia"},6:{code:"CE",name:"Ceara"},7:{code:"DF",name:"Distrito Federal"},8:{code:"ES",name:"Espirito Santo"},9:{code:"GO",name:"Goias"},10:{code:"MA",name:"Maranhao"},11:{code:"MT",name:"Mato Grosso"},12:{code:"MS",name:"Mato Grosso do Sul"},13:{code:"MG",name:"Minas Gerais"},14:{code:"PA",name:"Para"},15:{code:"PB",name:"Paraiba"},16:{code:"PR",name:"Parana"},17:{code:"PE",name:"Pernambuco"},18:{code:"PI",name:"Piaui"},19:{code:"RJ",name:"Rio de Janeiro"},20:{code:"RN",name:"Rio Grande do Norte"},21:{code:"RS",name:"Rio Grande do Sul"},22:{code:"RO",name:"Rondonia"},23:{code:"RR",name:"Roraima"},24:{code:"SC",name:"Santa Catarina"},25:{code:"SP",name:"Sao Paulo"},26:{code:"SE",name:"Sergipe"},27:{code:"TO",name:"Tocantins"}},IO:{1:{code:"DG",name:"Diego Garcia"},2:{code:"DI",name:"Danger Island"},3:{code:"EA",name:"Eagle Islands"},4:{code:"EG",name:"Egmont Islands"},5:{code:"NI",name:"Nelsons Island"},6:{code:"PB",name:"Peros Banhos"},7:{code:"SI",name:"Salomon Islands"},8:{code:"TB",name:"Three Brothers"}},BN:{1:{code:"BEL",name:"Belait"},2:{code:"BRM",name:"Brunei and Muara"},3:{code:"TEM",name:"Temburong"},4:{code:"TUT",name:"Tutong"}},BG:{1:{code:"BG-01",name:"Blagoevgrad"},2:{code:"BG-02",name:"Burgas"},3:{code:"BG-03",name:"Dobrich"},4:{code:"BG-04",name:"Gabrovo"},5:{code:"BG-05",name:"Haskovo"},6:{code:"BG-06",name:"Kardjali"},7:{code:"BG-07",name:"Kyustendil"},8:{code:"BG-08",name:"Lovech"},9:{code:"BG-09",name:"Montana"},10:{code:"BG-10",name:"Pazardjik"},11:{code:"BG-11",name:"Pernik"},12:{code:"BG-12",name:"Pleven"},13:{code:"BG-13",name:"Plovdiv"},14:{code:"BG-14",name:"Razgrad"},15:{code:"BG-15",name:"Shumen"},16:{code:"BG-16",name:"Silistra"},17:{code:"BG-17",name:"Sliven"},18:{code:"BG-18",name:"Smolyan"},19:{code:"BG-19",name:"Sofia"},20:{code:"BG-20",name:"Sofia - town"},21:{code:"BG-21",name:"Stara Zagora"},22:{code:"BG-22",name:"Targovishte"},23:{code:"BG-23",name:"Varna"},24:{code:"BG-24",name:"Veliko Tarnovo"},25:{code:"BG-25",name:"Vidin"},26:{code:"BG-26",name:"Vratza"},27:{code:"BG-27",name:"Yambol"}},BF:{1:{code:"BAL",name:"Bale"},2:{code:"BAM",name:"Bam"},3:{code:"BAN",name:"Banwa"},4:{code:"BAZ",name:"Bazega"},5:{code:"BOR",name:"Bougouriba"},6:{code:"BLG",name:"Boulgou"},7:{code:"BOK",name:"Boulkiemde"},8:{code:"COM",name:"Comoe"},9:{code:"GAN",name:"Ganzourgou"},10:{code:"GNA",name:"Gnagna"},11:{code:"GOU",name:"Gourma"},12:{code:"HOU",name:"Houet"},13:{code:"IOA",name:"Ioba"},14:{code:"KAD",name:"Kadiogo"},15:{code:"KEN",name:"Kenedougou"},16:{code:"KOD",name:"Komondjari"},17:{code:"KOP",name:"Kompienga"},18:{code:"KOS",name:"Kossi"},19:{code:"KOL",name:"Koulpelogo"},20:{code:"KOT",name:"Kouritenga"},21:{code:"KOW",name:"Kourweogo"},22:{code:"LER",name:"Leraba"},23:{code:"LOR",name:"Loroum"},24:{code:"MOU",name:"Mouhoun"},25:{code:"NAH",name:"Nahouri"},26:{code:"NAM",name:"Namentenga"},27:{code:"NAY",name:"Nayala"},28:{code:"NOU",name:"Noumbiel"},29:{code:"OUB",name:"Oubritenga"},30:{code:"OUD",name:"Oudalan"},31:{code:"PAS",name:"Passore"},32:{code:"PON",name:"Poni"},33:{code:"SAG",name:"Sanguie"},34:{code:"SAM",name:"Sanmatenga"},35:{code:"SEN",name:"Seno"},36:{code:"SIS",name:"Sissili"},37:{code:"SOM",name:"Soum"},38:{code:"SOR",name:"Sourou"},39:{code:"TAP",name:"Tapoa"},40:{code:"TUY",name:"Tuy"},41:{code:"YAG",name:"Yagha"},42:{code:"YAT",name:"Yatenga"},43:{code:"ZIR",name:"Ziro"},44:{code:"ZOD",name:"Zondoma"},45:{code:"ZOW",name:"Zoundweogo"}},BI:{1:{code:"BB",name:"Bubanza"},2:{code:"BJ",name:"Bujumbura"},3:{code:"BR",name:"Bururi"},4:{code:"CA",name:"Cankuzo"},5:{code:"CI",name:"Cibitoke"},6:{code:"GI",name:"Gitega"},7:{code:"KR",name:"Karuzi"},8:{code:"KY",name:"Kayanza"},9:{code:"KI",name:"Kirundo"},10:{code:"MA",name:"Makamba"},11:{code:"MU",name:"Muramvya"},12:{code:"MY",name:"Muyinga"},13:{code:"MW",name:"Mwaro"},14:{code:"NG",name:"Ngozi"},15:{code:"RT",name:"Rutana"},16:{code:"RY",name:"Ruyigi"}},KH:{1:{code:"BA",name:"Battambang"},2:{code:"BM",name:"Banteay Meanchey"},3:{code:"KB",name:"Keb"},4:{code:"KK",name:"Kaoh Kong"},5:{code:"KL",name:"Kandal"},6:{code:"KM",name:"Kampong Cham"},7:{code:"KN",name:"Kampong Chhnang"},8:{code:"KO",name:"Kampong Som"},9:{code:"KP",name:"Kampot"},10:{code:"KR",name:"Kratie"},11:{code:"KT",name:"Kampong Thom"},12:{code:"KU",name:"Kampong Speu"},13:{code:"MK",name:"Mondul Kiri"},14:{code:"OM",name:"Oddar Meancheay"},15:{code:"PA",name:"Pailin"},16:{code:"PG",name:"Prey Veng"},17:{code:"PP",name:"Phnom Penh"},18:{code:"PR",name:"Preah Vihear"},19:{code:"PS",name:"Preah Seihanu (Kompong Som or Si)"},20:{code:"PU",name:"Pursat"},21:{code:"RK",name:"Ratanak Kiri"},22:{code:"SI",name:"Siemreap"},23:{code:"SR",name:"Svay Rieng"},24:{code:"ST",name:"Stung Treng"},25:{code:"TK",name:"Takeo"}},CM:{1:{code:"ADA",name:"Adamawa (Adamaoua)"},2:{code:"CEN",name:"Centre"},3:{code:"EST",name:"East (Est)"},4:{code:"EXN",name:"Extrême-Nord"},5:{code:"LIT",name:"Littoral"},6:{code:"NOR",name:"North (Nord)"},7:{code:"NOT",name:"Northwest (Nord-Ouest)"},8:{code:"OUE",name:"West (Ouest)"},9:{code:"SUD",name:"South (Sud)"},10:{code:"SOU",name:"Southwest (Sud-Ouest)"}},CA:{1:{code:"AB",name:"Alberta"},2:{code:"BC",name:"British Columbia"},3:{code:"MB",name:"Manitoba"},4:{code:"NB",name:"New Brunswick"},5:{code:"NL",name:"Newfoundland and Labrador"},6:{code:"NT",name:"Northwest Territories"},7:{code:"NS",name:"Nova Scotia"},8:{code:"NU",name:"Nunavut"},9:{code:"ON",name:"Ontario"},10:{code:"PE",name:"Prince Edward Island"},11:{code:"QC",name:"Québec"},12:{code:"SK",name:"Saskatchewan"},13:{code:"YT",name:"Yukon Territory"}},CV:{1:{code:"BV",name:"Boa Vista"},2:{code:"BR",name:"Brava"},3:{code:"CS",name:"Calheta de Sao Miguel"},4:{code:"MA",name:"Maio"},5:{code:"MO",name:"Mosteiros"},6:{code:"PA",name:"Paul"},7:{code:"PN",name:"Porto Novo"},8:{code:"PR",name:"Praia"},9:{code:"RG",name:"Ribeira Grande"},10:{code:"SL",name:"Sal"},11:{code:"CA",name:"Santa Catarina"},12:{code:"CR",name:"Santa Cruz"},13:{code:"SD",name:"Sao Domingos"},14:{code:"SF",name:"Sao Filipe"},15:{code:"SN",name:"Sao Nicolau"},16:{code:"SV",name:"Sao Vicente"},17:{code:"TA",name:"Tarrafal"}},KY:{1:{code:"CR",name:"Creek"},2:{code:"EA",name:"Eastern"},3:{code:"ML",name:"Midland"},4:{code:"ST",name:"South Town"},5:{code:"SP",name:"Spot Bay"},6:{code:"SK",name:"Stake Bay"},7:{code:"WD",name:"West End"},8:{code:"WN",name:"Western"}},CF:{1:{code:"BAN",name:"Bangui"},2:{code:"BBA",name:"Bamingui-Bangoran"},3:{code:"BKO",name:"Basse-Kotto"},4:{code:"HKO",name:"Haute-Kotto"},5:{code:"HMB",name:"Haut-Mbomou"},6:{code:"KEM",name:"Kemo"},7:{code:"LOB",name:"Lobaye"},8:{code:"MBO",name:"Mbomou"},9:{code:"MKD",name:"Mambéré-Kadéï"},10:{code:"NGR",name:"Nana-Grebizi"},11:{code:"NMM",name:"Nana-Mambere"},12:{code:"OMP",name:"Ombella-M'Poko"},13:{code:"OPE",name:"Ouham-Pende"},14:{code:"OUH",name:"Ouham"},15:{code:"OUK",name:"Ouaka"},16:{code:"SMB",name:"Sangha-Mbaere"},17:{code:"VAK",name:"Vakaga"}},TD:{1:{code:"BA",name:"Batha"},2:{code:"BI",name:"Biltine"},3:{code:"BE",name:"Borkou-Ennedi-Tibesti"},4:{code:"CB",name:"Chari-Baguirmi"},5:{code:"GU",name:"Guera"},6:{code:"KA",name:"Kanem"},7:{code:"LA",name:"Lac"},8:{code:"LC",name:"Logone Occidental"},9:{code:"LR",name:"Logone Oriental"},10:{code:"MK",name:"Mayo-Kebbi"},11:{code:"MC",name:"Moyen-Chari"},12:{code:"OU",name:"Ouaddai"},13:{code:"SA",name:"Salamat"},14:{code:"TA",name:"Tandjile"}},CL:{1:{code:"AI",name:"Aisen del General Carlos Ibanez"},2:{code:"AN",name:"Antofagasta"},3:{code:"AR",name:"Araucania"},4:{code:"AT",name:"Atacama"},5:{code:"BI",name:"Bio-Bio"},6:{code:"CO",name:"Coquimbo"},7:{code:"LI",name:"Libertador General Bernardo O'Hi"},8:{code:"LL",name:"Los Lagos"},9:{code:"MA",name:"Magallanes y de la Antartica Chi"},10:{code:"ML",name:"Maule"},11:{code:"RM",name:"Region Metropolitana"},12:{code:"TA",name:"Tarapaca"},13:{code:"VS",name:"Valparaiso"}},CN:{1:{code:"AN",name:"Anhui"},2:{code:"BE",name:"Beijing"},3:{code:"CH",name:"Chongqing"},4:{code:"FU",name:"Fujian"},5:{code:"GA",name:"Gansu"},6:{code:"GU",name:"Guangdong"},7:{code:"GX",name:"Guangxi"},8:{code:"GZ",name:"Guizhou"},9:{code:"HA",name:"Hainan"},10:{code:"HB",name:"Hebei"},11:{code:"HL",name:"Heilongjiang"},12:{code:"HE",name:"Henan"},13:{code:"HK",name:"Hong Kong"},14:{code:"HU",name:"Hubei"},15:{code:"HN",name:"Hunan"},16:{code:"IM",name:"Inner Mongolia"},17:{code:"JI",name:"Jiangsu"},18:{code:"JX",name:"Jiangxi"},19:{code:"JL",name:"Jilin"},20:{code:"LI",name:"Liaoning"},21:{code:"MA",name:"Macau"},22:{code:"NI",name:"Ningxia"},23:{code:"SH",name:"Shaanxi"},24:{code:"SA",name:"Shandong"},25:{code:"SG",name:"Shanghai"},26:{code:"SX",name:"Shanxi"},27:{code:"SI",name:"Sichuan"},28:{code:"TI",name:"Tianjin"},29:{code:"XI",name:"Xinjiang"},30:{code:"YU",name:"Yunnan"},31:{code:"ZH",name:"Zhejiang"}},CC:{1:{code:"D",name:"Direction Island"},2:{code:"H",name:"Home Island"},3:{code:"O",name:"Horsburgh Island"},4:{code:"S",name:"South Island"},5:{code:"W",name:"West Island"}},CO:{1:{code:"AMZ",name:"Amazonas"},2:{code:"ANT",name:"Antioquia"},3:{code:"ARA",name:"Arauca"},4:{code:"ATL",name:"Atlantico"},5:{code:"BDC",name:"Bogota D.C."},6:{code:"BOL",name:"Bolivar"},7:{code:"BOY",name:"Boyaca"},8:{code:"CAL",name:"Caldas"},9:{code:"CAQ",name:"Caqueta"},10:{code:"CAS",name:"Casanare"},11:{code:"CAU",name:"Cauca"},12:{code:"CES",name:"Cesar"},13:{code:"CHO",name:"Choco"},14:{code:"COR",name:"Cordoba"},15:{code:"CAM",name:"Cundinamarca"},16:{code:"GNA",name:"Guainia"},17:{code:"GJR",name:"Guajira"},18:{code:"GVR",name:"Guaviare"},19:{code:"HUI",name:"Huila"},20:{code:"MAG",name:"Magdalena"},21:{code:"MET",name:"Meta"},22:{code:"NAR",name:"Narino"},23:{code:"NDS",name:"Norte de Santander"},24:{code:"PUT",name:"Putumayo"},25:{code:"QUI",name:"Quindio"},26:{code:"RIS",name:"Risaralda"},27:{code:"SAP",name:"San Andres y Providencia"},28:{code:"SAN",name:"Santander"},29:{code:"SUC",name:"Sucre"},30:{code:"TOL",name:"Tolima"},31:{code:"VDC",name:"Valle del Cauca"},32:{code:"VAU",name:"Vaupes"},33:{code:"VIC",name:"Vichada"}},KM:{1:{code:"G",name:"Grande Comore"},2:{code:"A",name:"Anjouan"},3:{code:"M",name:"Moheli"}},CG:{1:{code:"BO",name:"Bouenza"},2:{code:"BR",name:"Brazzaville"},3:{code:"CU",name:"Cuvette"},4:{code:"CO",name:"Cuvette-Ouest"},5:{code:"KO",name:"Kouilou"},6:{code:"LE",name:"Lekoumou"},7:{code:"LI",name:"Likouala"},8:{code:"NI",name:"Niari"},9:{code:"PL",name:"Plateaux"},10:{code:"PO",name:"Pool"},11:{code:"SA",name:"Sangha"}},CK:{1:{code:"AI",name:"Aitutaki"},2:{code:"AT",name:"Atiu"},3:{code:"MA",name:"Manuae"},4:{code:"MG",name:"Mangaia"},5:{code:"MK",name:"Manihiki"},6:{code:"MT",name:"Mitiaro"},7:{code:"MU",name:"Mauke"},8:{code:"NI",name:"Nassau Island"},9:{code:"PA",name:"Palmerston"},10:{code:"PE",name:"Penrhyn"},11:{code:"PU",name:"Pukapuka"},12:{code:"RK",name:"Rakahanga"},13:{code:"RR",name:"Rarotonga"},14:{code:"SU",name:"Surwarrow"},15:{code:"TA",name:"Takutea"}},CR:{1:{code:"AL",name:"Alajuela"},2:{code:"CA",name:"Cartago"},3:{code:"GU",name:"Guanacaste"},4:{code:"HE",name:"Heredia"},5:{code:"LI",name:"Limon"},6:{code:"PU",name:"Puntarenas"},7:{code:"SJ",name:"San Jose"}},CI:{1:{code:"ABE",name:"Abengourou"},2:{code:"ABI",name:"Abidjan"},3:{code:"ABO",name:"Aboisso"},4:{code:"ADI",name:"Adiake"},5:{code:"ADZ",name:"Adzope"},6:{code:"AGB",name:"Agboville"},7:{code:"AGN",name:"Agnibilekrou"},8:{code:"ALE",name:"Alepe"},9:{code:"BOC",name:"Bocanda"},10:{code:"BAN",name:"Bangolo"},11:{code:"BEO",name:"Beoumi"},12:{code:"BIA",name:"Biankouma"},13:{code:"BDK",name:"Bondoukou"},14:{code:"BGN",name:"Bongouanou"},15:{code:"BFL",name:"Bouafle"},16:{code:"BKE",name:"Bouake"},17:{code:"BNA",name:"Bouna"},18:{code:"BDL",name:"Boundiali"},19:{code:"DKL",name:"Dabakala"},20:{code:"DBU",name:"Dabou"},21:{code:"DAL",name:"Daloa"},22:{code:"DAN",name:"Danane"},23:{code:"DAO",name:"Daoukro"},24:{code:"DIM",name:"Dimbokro"},25:{code:"DIV",name:"Divo"},26:{code:"DUE",name:"Duekoue"},27:{code:"FER",name:"Ferkessedougou"},28:{code:"GAG",name:"Gagnoa"},29:{code:"GBA",name:"Grand-Bassam"},30:{code:"GLA",name:"Grand-Lahou"},31:{code:"GUI",name:"Guiglo"},32:{code:"ISS",name:"Issia"},33:{code:"JAC",name:"Jacqueville"},34:{code:"KAT",name:"Katiola"},35:{code:"KOR",name:"Korhogo"},36:{code:"LAK",name:"Lakota"},37:{code:"MAN",name:"Man"},38:{code:"MKN",name:"Mankono"},39:{code:"MBA",name:"Mbahiakro"},40:{code:"ODI",name:"Odienne"},41:{code:"OUM",name:"Oume"},42:{code:"SAK",name:"Sakassou"},43:{code:"SPE",name:"San-Pedro"},44:{code:"SAS",name:"Sassandra"},45:{code:"SEG",name:"Seguela"},46:{code:"SIN",name:"Sinfra"},47:{code:"SOU",name:"Soubre"},48:{code:"TAB",name:"Tabou"},49:{code:"TAN",name:"Tanda"},50:{code:"TIE",name:"Tiebissou"},51:{code:"TIN",name:"Tingrela"},52:{code:"TIA",name:"Tiassale"},53:{code:"TBA",name:"Touba"},54:{code:"TLP",name:"Toulepleu"},55:{code:"TMD",name:"Toumodi"},56:{code:"VAV",name:"Vavoua"},57:{code:"YAM",name:"Yamoussoukro"},58:{code:"ZUE",name:"Zuenoula"}},HR:{1:{code:"BB",name:"Bjelovar-Bilogora"},2:{code:"CZ",name:"City of Zagreb"},3:{code:"DN",name:"Dubrovnik-Neretva"},4:{code:"IS",name:"Istra"},5:{code:"KA",name:"Karlovac"},6:{code:"KK",name:"Koprivnica-Krizevci"},7:{code:"KZ",name:"Krapina-Zagorje"},8:{code:"LS",name:"Lika-Senj"},9:{code:"ME",name:"Medimurje"},10:{code:"OB",name:"Osijek-Baranja"},11:{code:"PS",name:"Pozega-Slavonia"},12:{code:"PG",name:"Primorje-Gorski Kotar"},13:{code:"SI",name:"Sibenik"},14:{code:"SM",name:"Sisak-Moslavina"},15:{code:"SB",name:"Slavonski Brod-Posavina"},16:{code:"SD",name:"Split-Dalmatia"},17:{code:"VA",name:"Varazdin"},18:{code:"VP",name:"Virovitica-Podravina"},19:{code:"VS",name:"Vukovar-Srijem"},20:{code:"ZK",name:"Zadar-Knin"},21:{code:"ZA",name:"Zagreb"}},CU:{1:{code:"CA",name:"Camaguey"},2:{code:"CD",name:"Ciego de Avila"},3:{code:"CI",name:"Cienfuegos"},4:{code:"CH",name:"Ciudad de La Habana"},5:{code:"GR",name:"Granma"},6:{code:"GU",name:"Guantanamo"},7:{code:"HO",name:"Holguin"},8:{code:"IJ",name:"Isla de la Juventud"},9:{code:"LH",name:"La Habana"},10:{code:"LT",name:"Las Tunas"},11:{code:"MA",name:"Matanzas"},12:{code:"PR",name:"Pinar del Rio"},13:{code:"SS",name:"Sancti Spiritus"},14:{code:"SC",name:"Santiago de Cuba"},15:{code:"VC",name:"Villa Clara"}},CY:{1:{code:"F",name:"Famagusta"},2:{code:"K",name:"Kyrenia"},3:{code:"A",name:"Larnaca"},4:{code:"I",name:"Limassol"},5:{code:"N",name:"Nicosia"},6:{code:"P",name:"Paphos"}},CZ:{1:{code:"A",name:"Hlavní město Praha"},2:{code:"B",name:"Jihomoravský"},3:{code:"C",name:"Jihočeský"},4:{code:"E",name:"Pardubický"},5:{code:"H",name:"Královéhradecký"},6:{code:"J",name:"Vysočina"},7:{code:"K",name:"Karlovarský"},8:{code:"L",name:"Liberecký"},9:{code:"M",name:"Olomoucký"},10:{code:"P",name:"Plzeňský"},11:{code:"S",name:"Středočeský"},12:{code:"T",name:"Moravskoslezský"},13:{code:"U",name:"Ústecký"},14:{code:"Z",name:"Zlínský"}},DK:{1:{code:"AR",name:"Arhus"},2:{code:"BH",name:"Bornholm"},3:{code:"CO",name:"Copenhagen"},4:{code:"FO",name:"Faroe Islands"},5:{code:"FR",name:"Frederiksborg"},6:{code:"FY",name:"Fyn"},7:{code:"KO",name:"Kobenhavn"},8:{code:"NO",name:"Nordjylland"},9:{code:"RI",name:"Ribe"},10:{code:"RK",name:"Ringkobing"},11:{code:"RO",name:"Roskilde"},12:{code:"SO",name:"Sonderjylland"},13:{code:"ST",name:"Storstrom"},14:{code:"VK",name:"Vejle"},15:{code:"VJ",name:"Vestjælland"},16:{code:"VB",name:"Viborg"}},DJ:{1:{code:"S",name:"'Ali Sabih"},2:{code:"K",name:"Dikhil"},3:{code:"J",name:"Djibouti"},4:{code:"O",name:"Obock"},5:{code:"T",name:"Tadjoura"}},DM:{1:{code:"AND",name:"Saint Andrew Parish"},2:{code:"DAV",name:"Saint David Parish"},3:{code:"GEO",name:"Saint George Parish"},4:{code:"JOH",name:"Saint John Parish"},5:{code:"JOS",name:"Saint Joseph Parish"},6:{code:"LUK",name:"Saint Luke Parish"},7:{code:"MAR",name:"Saint Mark Parish"},8:{code:"PAT",name:"Saint Patrick Parish"},9:{code:"PAU",name:"Saint Paul Parish"},10:{code:"PET",name:"Saint Peter Parish"}},DO:{1:{code:"DN",name:"Distrito Nacional"},2:{code:"AZ",name:"Azua"},3:{code:"BC",name:"Baoruco"},4:{code:"BH",name:"Barahona"},5:{code:"DJ",name:"Dajabon"},6:{code:"DU",name:"Duarte"},7:{code:"EL",name:"Elias Pina"},8:{code:"SY",name:"El Seybo"},9:{code:"ET",name:"Espaillat"},10:{code:"HM",name:"Hato Mayor"},11:{code:"IN",name:"Independencia"},12:{code:"AL",name:"La Altagracia"},13:{code:"RO",name:"La Romana"},14:{code:"VE",name:"La Vega"},15:{code:"MT",name:"Maria Trinidad Sanchez"},16:{code:"MN",name:"Monsenor Nouel"},17:{code:"MC",name:"Monte Cristi"},18:{code:"MP",name:"Monte Plata"},19:{code:"PD",name:"Pedernales"},20:{code:"PR",name:"Peravia (Bani)"},21:{code:"PP",name:"Puerto Plata"},22:{code:"SL",name:"Salcedo"},23:{code:"SM",name:"Samana"},24:{code:"SH",name:"Sanchez Ramirez"},25:{code:"SC",name:"San Cristobal"},26:{code:"JO",name:"San Jose de Ocoa"},27:{code:"SJ",name:"San Juan"},28:{code:"PM",name:"San Pedro de Macoris"},29:{code:"SA",name:"Santiago"},30:{code:"ST",name:"Santiago Rodriguez"},31:{code:"SD",name:"Santo Domingo"},32:{code:"VA",name:"Valverde"}},TP:{1:{code:"AL",name:"Aileu"},2:{code:"AN",name:"Ainaro"},3:{code:"BA",name:"Baucau"},4:{code:"BO",name:"Bobonaro"},5:{code:"CO",name:"Cova Lima"},6:{code:"DI",name:"Dili"},7:{code:"ER",name:"Ermera"},8:{code:"LA",name:"Lautem"},9:{code:"LI",name:"Liquica"},10:{code:"MT",name:"Manatuto"},11:{code:"MF",name:"Manufahi"},12:{code:"OE",name:"Oecussi"},13:{code:"VI",name:"Viqueque"}},EC:{1:{code:"AZU",name:"Azuay"},2:{code:"BOL",name:"Bolivar"},3:{code:"CAN",name:"Cañar"},4:{code:"CAR",name:"Carchi"},5:{code:"CHI",name:"Chimborazo"},6:{code:"COT",name:"Cotopaxi"},7:{code:"EOR",name:"El Oro"},8:{code:"ESM",name:"Esmeraldas"},9:{code:"GPS",name:"Galápagos"},10:{code:"GUA",name:"Guayas"},11:{code:"IMB",name:"Imbabura"},12:{code:"LOJ",name:"Loja"},13:{code:"LRO",name:"Los Ríos"},14:{code:"MAN",name:"Manabí"},15:{code:"MSA",name:"Morona Santiago"},16:{code:"NAP",name:"Napo"},17:{code:"ORE",name:"Orellana"},18:{code:"PAS",name:"Pastaza"},19:{code:"PIC",name:"Pichincha"},20:{code:"SUC",name:"Sucumbíos"},21:{code:"TUN",name:"Tungurahua"},22:{code:"ZCH",name:"Zamora Chinchipe"}},EG:{1:{code:"DHY",name:"Ad Daqahliyah"},2:{code:"BAM",name:"Al Bahr al Ahmar"},3:{code:"BHY",name:"Al Buhayrah"},4:{code:"FYM",name:"Al Fayyum"},5:{code:"GBY",name:"Al Gharbiyah"},6:{code:"IDR",name:"Al Iskandariyah"},7:{code:"IML",name:"Al Isma 'iliyah"},8:{code:"JZH",name:"Al Jizah"},9:{code:"MFY",name:"Al Minufiyah"},10:{code:"MNY",name:"Al Minya"},11:{code:"QHR",name:"Al Qahirah"},12:{code:"QLY",name:"Al Qalyubiyah"},13:{code:"WJD",name:"Al Wadi al Jadid"},14:{code:"SHQ",name:"Ash Sharqiyah"},15:{code:"SWY",name:"As Suways"},16:{code:"ASW",name:"Aswan"},17:{code:"ASY",name:"Asyut"},18:{code:"BSW",name:"Bani Suwayf"},19:{code:"BSD",name:"Bur Sa'id"},20:{code:"DMY",name:"Dumyat"},21:{code:"JNS",name:"Janub Sina'"},22:{code:"KSH",name:"Kafr ash Shaykh"},23:{code:"MAT",name:"Matruh"},24:{code:"QIN",name:"Qina"},25:{code:"SHS",name:"Shamal Sina'"},26:{code:"SUH",name:"Suhaj"}},SV:{1:{code:"AH",name:"Ahuachapan"},2:{code:"CA",name:"Cabanas"},3:{code:"CH",name:"Chalatenango"},4:{code:"CU",name:"Cuscatlan"},5:{code:"LB",name:"La Libertad"},6:{code:"PZ",name:"La Paz"},7:{code:"UN",name:"La Union"},8:{code:"MO",name:"Morazan"},9:{code:"SM",name:"San Miguel"},10:{code:"SS",name:"San Salvador"},11:{code:"SV",name:"San Vicente"},12:{code:"SA",name:"Santa Ana"},13:{code:"SO",name:"Sonsonate"},14:{code:"US",name:"Usulutan"}},GQ:{1:{code:"AN",name:"Provincia Annobon"},2:{code:"BN",name:"Provincia Bioko Norte"},3:{code:"BS",name:"Provincia Bioko Sur"},4:{code:"CS",name:"Provincia Centro Sur"},5:{code:"KN",name:"Provincia Kie-Ntem"},6:{code:"LI",name:"Provincia Litoral"},7:{code:"WN",name:"Provincia Wele-Nzas"}},ER:{1:{code:"MA",name:"Central (Maekel)"},2:{code:"KE",name:"Anseba (Keren)"},3:{code:"DK",name:"Southern Red Sea (Debub-Keih-Bah)"},4:{code:"SK",name:"Northern Red Sea (Semien-Keih-Ba)"},5:{code:"DE",name:"Southern (Debub)"},6:{code:"BR",name:"Gash-Barka (Barentu)"}},EE:{1:{code:"HA",name:"Harjumaa (Tallinn)"},2:{code:"HI",name:"Hiiumaa (Kardla)"},3:{code:"IV",name:"Ida-Virumaa (Johvi)"},4:{code:"JA",name:"Jarvamaa (Paide)"},5:{code:"JO",name:"Jogevamaa (Jogeva)"},6:{code:"LV",name:"Laane-Virumaa (Rakvere)"},7:{code:"LA",name:"Laanemaa (Haapsalu)"},8:{code:"PA",name:"Parnumaa (Parnu)"},9:{code:"PO",name:"Polvamaa (Polva)"},10:{code:"RA",name:"Raplamaa (Rapla)"},11:{code:"SA",name:"Saaremaa (Kuessaare)"},12:{code:"TA",name:"Tartumaa (Tartu)"},13:{code:"VA",name:"Valgamaa (Valga)"},14:{code:"VI",name:"Viljandimaa (Viljandi)"},15:{code:"VO",name:"Vorumaa (Voru)"}},ET:{1:{code:"AF",name:"Afar"},2:{code:"AH",name:"Amhara"},3:{code:"BG",name:"Benishangul-Gumaz"},4:{code:"GB",name:"Gambela"},5:{code:"HR",name:"Hariai"},6:{code:"OR",name:"Oromia"},7:{code:"SM",name:"Somali"},8:{code:"SN",name:"Southern Nations - Nationalities"},9:{code:"TG",name:"Tigray"},10:{code:"AA",name:"Addis Ababa"},11:{code:"DD",name:"Dire Dawa"}},FO:{1:{code:"TÛR",name:"Tûrshavnar Kommuna"},2:{code:"KLA",name:"Klaksvík"},3:{code:"RUN",name:"Runavík"},4:{code:"TVØ",name:"Tvøroyri"},5:{code:"FUG",name:"Fuglafjørður"},6:{code:"SUN",name:"Sunda Kommuna"},7:{code:"VáG",name:"Vágur"},8:{code:"NES",name:"Nes"},9:{code:"VES",name:"Vestmanna"},10:{code:"MIð",name:"Miðvágur"},11:{code:"SØR",name:"Sørvágur"},12:{code:"GØT",name:"Gøtu Kommuna"},13:{code:"SJû",name:"Sjûvar Kommuna"},14:{code:"LEI",name:"Leirvík"},15:{code:"SAN",name:"Sandavágur"},16:{code:"HVA",name:"Hvalba"},17:{code:"EIð",name:"Eiði"},18:{code:"KVí",name:"Kvívík"},19:{code:"SAN",name:"Sandur"},20:{code:"SKO",name:"Skopun"},21:{code:"HVA",name:"Hvannasund"},22:{code:"SUM",name:"Sumba"},23:{code:"VIð",name:"Viðareiði"},24:{code:"POR",name:"Porkeri"},25:{code:"SKá",name:"Skálavík"},26:{code:"KUN",name:"Kunoy"},27:{code:"HÚS",name:"HÚsavík"},28:{code:"HOV",name:"Hov"},29:{code:"FáM",name:"Fámjin"},30:{code:"FUN",name:"Funningur"},31:{code:"HÚS",name:"HÚsar"},32:{code:"SKÚ",name:"SkÚvoy"},33:{code:"SVí",name:"Svínoy"},34:{code:"FUG",name:"Fugloy"}},FJ:{1:{code:"C",name:"Central Division"},2:{code:"E",name:"Eastern Division"},3:{code:"N",name:"Northern Division"},4:{code:"R",name:"Rotuma"},5:{code:"W",name:"Western Division"}},FI:{1:{code:"AL",name:"Ahvenanmaan Laani"},2:{code:"ES",name:"Etela-Suomen Laani"},3:{code:"IS",name:"Ita-Suomen Laani"},4:{code:"LS",name:"Lansi-Suomen Laani"},5:{code:"LA",name:"Lapin Lanani"},6:{code:"OU",name:"Oulun Laani"}},FR:{1:{code:"AL",name:"Alsace"},2:{code:"AQ",name:"Aquitaine"},3:{code:"AU",name:"Auvergne"},4:{code:"BR",name:"Brittany"},5:{code:"BU",name:"Burgundy"},6:{code:"CE",name:"Center Loire Valley"},7:{code:"CH",name:"Champagne"},8:{code:"CO",name:"Corse"},9:{code:"FR",name:"France Comte"},10:{code:"LA",name:"Languedoc Roussillon"},11:{code:"LI",name:"Limousin"},12:{code:"LO",name:"Lorraine"},13:{code:"MI",name:"Midi Pyrenees"},14:{code:"NO",name:"Nord Pas de Calais"},15:{code:"NR",name:"Normandy"},16:{code:"PA",name:"Paris / Ile de France"},17:{code:"PI",name:"Picardie"},18:{code:"PO",name:"Poitou Charente"},19:{code:"PR",name:"Provence"},20:{code:"RH",name:"Rhone Alps"},21:{code:"RI",name:"Riviera"},22:{code:"WE",name:"Western Loire Valley"}},FX:{1:{code:"Et",name:"Etranger"},2:{code:"01",name:"Ain"},3:{code:"02",name:"Aisne"},4:{code:"03",name:"Allier"},5:{code:"04",name:"Alpes de Haute Provence"},6:{code:"05",name:"Hautes-Alpes"},7:{code:"06",name:"Alpes Maritimes"},8:{code:"07",name:"Ardèche"},9:{code:"08",name:"Ardennes"},10:{code:"09",name:"Ariège"},11:{code:"10",name:"Aube"},12:{code:"11",name:"Aude"},13:{code:"12",name:"Aveyron"},14:{code:"13",name:"Bouches du Rhône"},15:{code:"14",name:"Calvados"},16:{code:"15",name:"Cantal"},17:{code:"16",name:"Charente"},18:{code:"17",name:"Charente Maritime"},19:{code:"18",name:"Cher"},20:{code:"19",name:"Corrèze"},21:{code:"2A",name:"Corse du Sud"},22:{code:"2B",name:"Haute Corse"},23:{code:"21",name:"Côte d'or"},24:{code:"22",name:"Côtes d'Armor"},25:{code:"23",name:"Creuse"},26:{code:"24",name:"Dordogne"},27:{code:"25",name:"Doubs"},28:{code:"26",name:"Drôme"},29:{code:"27",name:"Eure"},30:{code:"28",name:"Eure et Loir"},31:{code:"29",name:"Finistère"},32:{code:"30",name:"Gard"},33:{code:"31",name:"Haute Garonne"},34:{code:"32",name:"Gers"},35:{code:"33",name:"Gironde"},36:{code:"34",name:"Hérault"},37:{code:"35",name:"Ille et Vilaine"},38:{code:"36",name:"Indre"},39:{code:"37",name:"Indre et Loire"},40:{code:"38",name:"Isére"},41:{code:"39",name:"Jura"},42:{code:"40",name:"Landes"},43:{code:"41",name:"Loir et Cher"},44:{code:"42",name:"Loire"},45:{code:"43",name:"Haute Loire"},46:{code:"44",name:"Loire Atlantique"},47:{code:"45",name:"Loiret"},48:{code:"46",name:"Lot"},49:{code:"47",name:"Lot et Garonne"},50:{code:"48",name:"Lozère"},51:{code:"49",name:"Maine et Loire"},52:{code:"50",name:"Manche"},53:{code:"51",name:"Marne"},54:{code:"52",name:"Haute Marne"},55:{code:"53",name:"Mayenne"},56:{code:"54",name:"Meurthe et Moselle"},57:{code:"55",name:"Meuse"},58:{code:"56",name:"Morbihan"},59:{code:"57",name:"Moselle"},60:{code:"58",name:"Nièvre"},61:{code:"59",name:"Nord"},62:{code:"60",name:"Oise"},63:{code:"61",name:"Orne"},64:{code:"62",name:"Pas de Calais"},65:{code:"63",name:"Puy de Dôme"},66:{code:"64",name:"Pyrenees Atlantique"},67:{code:"65",name:"Hautes Pyrenees"},68:{code:"66",name:"Pyrenees Orientale"},69:{code:"67",name:"Bas Rhin"},70:{code:"68",name:"Haut Rhin"},71:{code:"69",name:"Rhône"},72:{code:"70",name:"Haute Saône"},73:{code:"71",name:"Saône et Loire"},74:{code:"72",name:"Sarthe"},75:{code:"73",name:"Savoie"},76:{code:"74",name:"Haute Savoie"},77:{code:"75",name:"Paris"},78:{code:"76",name:"Seine Martitime"},79:{code:"77",name:"Seine et Marne"},80:{code:"78",name:"Yvelines"},81:{code:"79",name:"Deux Sèvres"},82:{code:"80",name:"Somme"},83:{code:"81",name:"Tarn"},84:{code:"82",name:"Tarn et Garonne"},85:{code:"83",name:"Var"},86:{code:"84",name:"Vaucluse"},87:{code:"85",name:"Vendée"},88:{code:"86",name:"Vienne"},89:{code:"87",name:"Haute Vienne"},90:{code:"88",name:"Vosges"},91:{code:"89",name:"Yonne"},92:{code:"90",name:"Territoire de Belfort"},93:{code:"91",name:"Essonne"},94:{code:"92",name:"Hauts de Seine"},95:{code:"93",name:"Seine St-Denis"},96:{code:"94",name:"Val de Marne"},97:{code:"95",name:"Val d'oise"}},GF:{1:{code:"AWA",name:"Awala-Yalimapo"},2:{code:"MAN",name:"Mana"},3:{code:"SAI",name:"Saint-Laurent-Du-Maroni"},4:{code:"APA",name:"Apatou"},5:{code:"GRA",name:"Grand-Santi"},6:{code:"PAP",name:"Papaïchton"},7:{code:"SAÜ",name:"SaÜl"},8:{code:"MAR",name:"Maripasoula"},9:{code:"CAM",name:"Camopi"},10:{code:"SAI",name:"Saint-Georges"},11:{code:"OUA",name:"Ouanary"},12:{code:"RéG",name:"Régina"},13:{code:"ROU",name:"Roura"},14:{code:"SAI",name:"Saint-élie"},15:{code:"IRA",name:"Iracoubo"},16:{code:"SIN",name:"Sinnamary"},17:{code:"KOU",name:"Kourou"},18:{code:"MAC",name:"Macouria"},19:{code:"MON",name:"Montsinéry-Tonnegrande"},20:{code:"MAT",name:"Matoury"},21:{code:"CAY",name:"Cayenne"},22:{code:"REM",name:"Remire-Montjoly"}},PF:{1:{code:"M",name:"Archipel des Marquises"},2:{code:"T",name:"Archipel des Tuamotu"},3:{code:"I",name:"Archipel des Tubuai"},4:{code:"V",name:"Iles du Vent"},5:{code:"S",name:"Iles Sous-le-Vent"}},TF:{1:{code:"C",name:"Iles Crozet"},2:{code:"K",name:"Iles Kerguelen"},3:{code:"A",name:"Ile Amsterdam"},4:{code:"P",name:"Ile Saint-Paul"},5:{code:"D",name:"Adelie Land"}},GA:{1:{code:"ES",name:"Estuaire"},2:{code:"HO",name:"Haut-Ogooue"},3:{code:"MO",name:"Moyen-Ogooue"},4:{code:"NG",name:"Ngounie"},5:{code:"NY",name:"Nyanga"},6:{code:"OI",name:"Ogooue-Ivindo"},7:{code:"OL",name:"Ogooue-Lolo"},8:{code:"OM",name:"Ogooue-Maritime"},9:{code:"WN",name:"Woleu-Ntem"}},GM:{1:{code:"BJ",name:"Banjul"},2:{code:"BS",name:"Basse"},3:{code:"BR",name:"Brikama"},4:{code:"JA",name:"Janjangbure"},5:{code:"KA",name:"Kanifeng"},6:{code:"KE",name:"Kerewan"},7:{code:"KU",name:"Kuntaur"},8:{code:"MA",name:"Mansakonko"},9:{code:"LR",name:"Lower River"},10:{code:"CR",name:"Central River"},11:{code:"NB",name:"North Bank"},12:{code:"UR",name:"Upper River"},13:{code:"WE",name:"Western"}},GE:{1:{code:"AB",name:"Abkhazia"},2:{code:"AJ",name:"Ajaria"},3:{code:"GU",name:"Guria"},4:{code:"IM",name:"Imereti"},5:{code:"KA",name:"Kakheti"},6:{code:"KK",name:"Kvemo Kartli"},7:{code:"MM",name:"Mtskheta-Mtianeti"},8:{code:"RL",name:"Racha Lechkhumi and Kvemo Svanet"},9:{code:"SJ",name:"Samtskhe-Javakheti"},10:{code:"SK",name:"Shida Kartli"},11:{code:"SZ",name:"Samegrelo-Zemo Svaneti"},12:{code:"TB",name:"Tbilisi"}},DE:{1:{code:"BAW",name:"Baden-Württemberg"},2:{code:"BAY",name:"Bayern"},3:{code:"BER",name:"Berlin"},4:{code:"BRG",name:"Brandenburg"},5:{code:"BRE",name:"Bremen"},6:{code:"HAM",name:"Hamburg"},7:{code:"HES",name:"Hessen"},8:{code:"MEC",name:"Mecklenburg-Vorpommern"},9:{code:"NDS",name:"Niedersachsen"},10:{code:"NRW",name:"Nordrhein-Westfalen"},11:{code:"RHE",name:"Rheinland-Pfalz"},12:{code:"SAR",name:"Saarland"},13:{code:"SAS",name:"Sachsen"},14:{code:"SAC",name:"Sachsen-Anhalt"},15:{code:"SCN",name:"Schleswig-Holstein"},16:{code:"THE",name:"Thüringen"}},GH:{1:{code:"AS",name:"Ashanti Region"},2:{code:"BA",name:"Brong-Ahafo Region"},3:{code:"CE",name:"Central Region"},4:{code:"EA",name:"Eastern Region"},5:{code:"GA",name:"Greater Accra Region"},6:{code:"NO",name:"Northern Region"},7:{code:"UE",name:"Upper East Region"},8:{code:"UW",name:"Upper West Region"},9:{code:"VO",name:"Volta Region"},10:{code:"WE",name:"Western Region"}},GI:{1:{code:"EAS",name:"East Side"},2:{code:"NOR",name:"North District"},3:{code:"REC",name:"Reclamation Areas"},4:{code:"SAN",name:"Sandpits Area"},5:{code:"SOU",name:"South District"},6:{code:"TOW",name:"Town Area"},7:{code:"UPP",name:"Upper Town"},8:{code:"OTH",name:"Other"}},GR:{1:{code:"AT",name:"Attica"},2:{code:"CN",name:"Central Greece"},3:{code:"CM",name:"Central Macedonia"},4:{code:"CR",name:"Crete"},5:{code:"EM",name:"East Macedonia and Thrace"},6:{code:"EP",name:"Epirus"},7:{code:"II",name:"Ionian Islands"},8:{code:"NA",name:"North Aegean"},9:{code:"PP",name:"Peloponnesos"},10:{code:"SA",name:"South Aegean"},11:{code:"TH",name:"Thessaly"},12:{code:"WG",name:"West Greece"},13:{code:"WM",name:"West Macedonia"}},GL:{1:{code:"A",name:"Avannaa"},2:{code:"T",name:"Tunu"},3:{code:"K",name:"Kitaa"}},86:{1:{code:"A",name:"Saint Andrew"},2:{code:"D",name:"Saint David"},3:{code:"G",name:"Saint George"},4:{code:"J",name:"Saint John"},5:{code:"M",name:"Saint Mark"},6:{code:"P",name:"Saint Patrick"},7:{code:"C",name:"Carriacou"},8:{code:"Q",name:"Petit Martinique"}},GP:{1:{code:"ARR",name:"Arrondissements Of The Guadeloup"},2:{code:"CAN",name:"Cantons Of The Guadeloup Depart"},3:{code:"COM",name:"Communes Of The Guadeloup Depart"}},GU:{1:{code:"AGA",name:"Agana Heights"},2:{code:"AGA",name:"Agat"},3:{code:"ASA",name:"Asan Maina"},4:{code:"BAR",name:"Barrigada"},5:{code:"CHA",name:"Chalan Pago Ordot"},6:{code:"DED",name:"Dededo"},7:{code:"HAG",name:"HagÅtña"},8:{code:"INA",name:"Inarajan"},9:{code:"MAN",name:"Mangilao"},10:{code:"MER",name:"Merizo"},11:{code:"MON",name:"Mongmong Toto Maite"},12:{code:"PIT",name:"Piti"},13:{code:"SAN",name:"Santa Rita"},14:{code:"SIN",name:"Sinajana"},15:{code:"TAL",name:"Talofofo"},16:{code:"TAM",name:"Tamuning"},17:{code:"UMA",name:"Umatac"},18:{code:"YIG",name:"Yigo"},19:{code:"YON",name:"Yona"}},GT:{1:{code:"AV",name:"Alta Verapaz"},2:{code:"BV",name:"Baja Verapaz"},3:{code:"CM",name:"Chimaltenango"},4:{code:"CQ",name:"Chiquimula"},5:{code:"PE",name:"El Peten"},6:{code:"PR",name:"El Progreso"},7:{code:"QC",name:"El Quiche"},8:{code:"ES",name:"Escuintla"},9:{code:"GU",name:"Guatemala"},10:{code:"HU",name:"Huehuetenango"},11:{code:"IZ",name:"Izabal"},12:{code:"JA",name:"Jalapa"},13:{code:"JU",name:"Jutiapa"},14:{code:"QZ",name:"Quetzaltenango"},15:{code:"RE",name:"Retalhuleu"},16:{code:"ST",name:"Sacatepequez"},17:{code:"SM",name:"San Marcos"},18:{code:"SR",name:"Santa Rosa"},19:{code:"SO",name:"Solola"},20:{code:"SU",name:"Suchitepequez"},21:{code:"TO",name:"Totonicapan"},22:{code:"ZA",name:"Zacapa"}},GN:{1:{code:"CNK",name:"Conakry"},2:{code:"BYL",name:"Beyla"},3:{code:"BFA",name:"Boffa"},4:{code:"BOK",name:"Boke"},5:{code:"COY",name:"Coyah"},6:{code:"DBL",name:"Dabola"},7:{code:"DLB",name:"Dalaba"},8:{code:"DGR",name:"Dinguiraye"},9:{code:"DBR",name:"Dubreka"},10:{code:"FRN",name:"Faranah"},11:{code:"FRC",name:"Forecariah"},12:{code:"FRI",name:"Fria"},13:{code:"GAO",name:"Gaoual"},14:{code:"GCD",name:"Gueckedou"},15:{code:"KNK",name:"Kankan"},16:{code:"KRN",name:"Kerouane"},17:{code:"KND",name:"Kindia"},18:{code:"KSD",name:"Kissidougou"},19:{code:"KBA",name:"Koubia"},20:{code:"KDA",name:"Koundara"},21:{code:"KRA",name:"Kouroussa"},22:{code:"LAB",name:"Labe"},23:{code:"LLM",name:"Lelouma"},24:{code:"LOL",name:"Lola"},25:{code:"MCT",name:"Macenta"},26:{code:"MAL",name:"Mali"},27:{code:"MAM",name:"Mamou"},28:{code:"MAN",name:"Mandiana"},29:{code:"NZR",name:"Nzerekore"},30:{code:"PIT",name:"Pita"},31:{code:"SIG",name:"Siguiri"},32:{code:"TLM",name:"Telimele"},33:{code:"TOG",name:"Tougue"},34:{code:"YOM",name:"Yomou"}},GW:{1:{code:"BF",name:"Bafata Region"},2:{code:"BB",name:"Biombo Region"},3:{code:"BS",name:"Bissau Region"},4:{code:"BL",name:"Bolama Region"},5:{code:"CA",name:"Cacheu Region"},6:{code:"GA",name:"Gabu Region"},7:{code:"OI",name:"Oio Region"},8:{code:"QU",name:"Quinara Region"},9:{code:"TO",name:"Tombali Region"}},GY:{1:{code:"BW",name:"Barima-Waini"},2:{code:"CM",name:"Cuyuni-Mazaruni"},3:{code:"DM",name:"Demerara-Mahaica"},4:{code:"EC",name:"East Berbice-Corentyne"},5:{code:"EW",name:"Essequibo Islands-West Demerara"},6:{code:"MB",name:"Mahaica-Berbice"},7:{code:"PM",name:"Pomeroon-Supenaam"},8:{code:"PI",name:"Potaro-Siparuni"},9:{code:"UD",name:"Upper Demerara-Berbice"},10:{code:"UT",name:"Upper Takutu-Upper Essequibo"}},HT:{1:{code:"AR",name:"Artibonite"},2:{code:"CE",name:"Centre"},3:{code:"GA",name:"Grand'Anse"},4:{code:"ND",name:"Nord"},5:{code:"NE",name:"Nord-Est"},6:{code:"NO",name:"Nord-Ouest"},7:{code:"OU",name:"Ouest"},8:{code:"SD",name:"Sud"},9:{code:"SE",name:"Sud-Est"}},HM:{1:{code:"F",name:"Flat Island"},2:{code:"M",name:"McDonald Island"},3:{code:"S",name:"Shag Island"},4:{code:"H",name:"Heard Island"}},HN:{1:{code:"AT",name:"Atlantida"},2:{code:"CH",name:"Choluteca"},3:{code:"CL",name:"Colon"},4:{code:"CM",name:"Comayagua"},5:{code:"CP",name:"Copan"},6:{code:"CR",name:"Cortes"},7:{code:"PA",name:"El Paraiso"},8:{code:"FM",name:"Francisco Morazan"},9:{code:"GD",name:"Gracias a Dios"},10:{code:"IN",name:"Intibuca"},11:{code:"IB",name:"Islas de la Bahia (Bay Islands)"},12:{code:"PZ",name:"La Paz"},13:{code:"LE",name:"Lempira"},14:{code:"OC",name:"Ocotepeque"},15:{code:"OL",name:"Olancho"},16:{code:"SB",name:"Santa Barbara"},17:{code:"VA",name:"Valle"},18:{code:"YO",name:"Yoro"}},HK:{1:{code:"HCW",name:"Central and Western Hong Kong Is"},2:{code:"HEA",name:"Eastern Hong Kong Island"},3:{code:"HSO",name:"Southern Hong Kong Island"},4:{code:"HWC",name:"Wan Chai Hong Kong Island"},5:{code:"KKC",name:"Kowloon City Kowloon"},6:{code:"KKT",name:"Kwun Tong Kowloon"},7:{code:"KSS",name:"Sham Shui Po Kowloon"},8:{code:"KWT",name:"Wong Tai Sin Kowloon"},9:{code:"KYT",name:"Yau Tsim Mong Kowloon"},10:{code:"NIS",name:"Islands New Territories"},11:{code:"NKT",name:"Kwai Tsing New Territories"},12:{code:"NNO",name:"North New Territories"},13:{code:"NSK",name:"Sai Kung New Territories"},14:{code:"NST",name:"Sha Tin New Territories"},15:{code:"NTP",name:"Tai Po New Territories"},16:{code:"NTW",name:"Tsuen Wan New Territories"},17:{code:"NTM",name:"Tuen Mun New Territories"},18:{code:"NYL",name:"Yuen Long New Territories"}},HU:{1:{code:"BK",name:"Bacs-Kiskun"},2:{code:"BA",name:"Baranya"},3:{code:"BE",name:"Bekes"},4:{code:"BS",name:"Bekescsaba"},5:{code:"BZ",name:"Borsod-Abauj-Zemplen"},6:{code:"BU",name:"Budapest"},7:{code:"CS",name:"Csongrad"},8:{code:"DE",name:"Debrecen"},9:{code:"DU",name:"Dunaujvaros"},10:{code:"EG",name:"Eger"},11:{code:"FE",name:"Fejer"},12:{code:"GY",name:"Gyor"},13:{code:"GM",name:"Gyor-Moson-Sopron"},14:{code:"HB",name:"Hajdu-Bihar"},15:{code:"HE",name:"Heves"},16:{code:"HO",name:"Hodmezovasarhely"},17:{code:"JN",name:"Jasz-Nagykun-Szolnok"},18:{code:"KA",name:"Kaposvar"},19:{code:"KE",name:"Kecskemet"},20:{code:"KO",name:"Komarom-Esztergom"},21:{code:"MI",name:"Miskolc"},22:{code:"NA",name:"Nagykanizsa"},23:{code:"NO",name:"Nograd"},24:{code:"NY",name:"Nyiregyhaza"},25:{code:"PE",name:"Pecs"},26:{code:"PS",name:"Pest"},27:{code:"SO",name:"Somogy"},28:{code:"SP",name:"Sopron"},29:{code:"SS",name:"Szabolcs-Szatmar-Bereg"},30:{code:"SZ",name:"Szeged"},31:{code:"SE",name:"Szekesfehervar"},32:{code:"SL",name:"Szolnok"},33:{code:"SM",name:"Szombathely"},34:{code:"TA",name:"Tatabanya"},35:{code:"TO",name:"Tolna"},36:{code:"VA",name:"Vas"},37:{code:"VE",name:"Veszprem"},38:{code:"ZA",name:"Zala"},39:{code:"ZZ",name:"Zalaegerszeg"}},IS:{1:{code:"AL",name:"Austurland"},2:{code:"HF",name:"Hofuoborgarsvaeoi"},3:{code:"NE",name:"Norourland eystra"},4:{code:"NV",name:"Norourland vestra"},5:{code:"SL",name:"Suourland"},6:{code:"SN",name:"Suournes"},7:{code:"VF",name:"Vestfiroir"},8:{code:"VL",name:"Vesturland"}},IN:{1:{code:"AN",name:"Andaman and Nicobar Islands"},2:{code:"AP",name:"Andhra Pradesh"},3:{code:"AR",name:"Arunachal Pradesh"},4:{code:"AS",name:"Assam"},5:{code:"BI",name:"Bihar"},6:{code:"CH",name:"Chandigarh"},7:{code:"DA",name:"Dadra and Nagar Haveli"},8:{code:"DM",name:"Daman and Diu"},9:{code:"DE",name:"Delhi"},10:{code:"GO",name:"Goa"},11:{code:"GU",name:"Gujarat"},12:{code:"HA",name:"Haryana"},13:{code:"HP",name:"Himachal Pradesh"},14:{code:"JA",name:"Jammu and Kashmir"},15:{code:"KA",name:"Karnataka"},16:{code:"KE",name:"Kerala"},17:{code:"LI",name:"Lakshadweep Islands"},18:{code:"MP",name:"Madhya Pradesh"},19:{code:"MA",name:"Maharashtra"},20:{code:"MN",name:"Manipur"},21:{code:"ME",name:"Meghalaya"},22:{code:"MI",name:"Mizoram"},23:{code:"NA",name:"Nagaland"},24:{code:"OR",name:"Orissa"},25:{code:"PO",name:"Pondicherry"},26:{code:"PU",name:"Punjab"},27:{code:"RA",name:"Rajasthan"},28:{code:"SI",name:"Sikkim"},29:{code:"TN",name:"Tamil Nadu"},30:{code:"TR",name:"Tripura"},31:{code:"UP",name:"Uttar Pradesh"},32:{code:"WB",name:"West Bengal"}},ID:{1:{code:"DA",name:"Daista Aceh"},2:{code:"SU",name:"Sumatera Utara"},3:{code:"SB",name:"Sumatera Barat"},4:{code:"SI",name:"Riau"},5:{code:"JA",name:"Jambi"},6:{code:"SS",name:"Sumatera Selatan"},7:{code:"BE",name:"Bengkulu"},8:{code:"LA",name:"Lampung"},9:{code:"JK",name:"Dki Jakarta"},10:{code:"JB",name:"Jawa Barat"},11:{code:"JT",name:"Jawa Tengah"},12:{code:"DY",name:"Daista Yogyakarta"},13:{code:"JT",name:"Jawa Timur"},14:{code:"KB",name:"Kalimantan Barat"},15:{code:"KT",name:"Kalimantan Tengah"},16:{code:"KI",name:"Kalimantan Timur"},17:{code:"KS",name:"Kalimantan Selatan"},18:{code:"BA",name:"Bali"},19:{code:"NB",name:"Nusa Tenggara Barat"},20:{code:"NT",name:"Nusa Tenggara Timur"},21:{code:"SN",name:"Sulawesi Selatan"},22:{code:"ST",name:"Sulawesi Tengah"},23:{code:"SA",name:"Sulawesi Utara"},24:{code:"SG",name:"Sulawesi Tenggara"},25:{code:"MA",name:"Maluku"},26:{code:"MU",name:"Maluku Utara"},27:{code:"IJ",name:"Irian Jaya Timur"},28:{code:"IT",name:"Irian Jaya Tengah"},29:{code:"IB",name:"Irian Jawa Barat"},30:{code:"BT",name:"Banten"},31:{code:"BB",name:"Bangka Belitung"},32:{code:"GO",name:"Gorontalo"}},IR:{1:{code:"ARD",name:"Ardabil"},2:{code:"BSH",name:"Bushehr"},3:{code:"CMB",name:"Chahar Mahaal and Bakhtiari"},4:{code:"EAZ",name:"East Azarbaijan"},5:{code:"EFH",name:"Esfahan"},6:{code:"FAR",name:"Fars"},7:{code:"GIL",name:"Gilan"},8:{code:"GLS",name:"Golestan"},9:{code:"HMD",name:"Hamadan"},10:{code:"HRM",name:"Hormozgan"},11:{code:"ILM",name:"Ilam"},12:{code:"KBA",name:"Kohkiluyeh and Buyer Ahmad"},13:{code:"KRB",name:"Kerman"},14:{code:"KRD",name:"Kurdistan"},15:{code:"KRM",name:"Kermanshah"},16:{code:"KZT",name:"Khuzestan"},17:{code:"LRS",name:"Lorestan"},18:{code:"MKZ",name:"Markazi"},19:{code:"MZD",name:"Mazandaran"},20:{code:"NKH",name:"North Khorasan"},21:{code:"QAZ",name:"Qazvin"},22:{code:"QOM",name:"Qom"},23:{code:"RKH",name:"Razavi Khorasan"},24:{code:"SBL",name:"Sistan and Baluchistan"},25:{code:"SKH",name:"South Khorasan"},26:{code:"SMN",name:"Semnan"},27:{code:"TEH",name:"Tehran"},28:{code:"WEZ",name:"West Azarbaijan"},29:{code:"YZD",name:"Yazd"},30:{code:"ZAN",name:"Zanjan"}},IQ:{1:{code:"AB",name:"Al Anbar"},2:{code:"AL",name:"Arbil"},3:{code:"BA",name:"Al Basrah"},4:{code:"BB",name:"Babil"},5:{code:"BD",name:"Baghdad"},6:{code:"DH",name:"Dahuk"},7:{code:"DQ",name:"Dhi Qar"},8:{code:"DY",name:"Diyala"},9:{code:"KB",name:"Al Karbala"},10:{code:"MU",name:"Al Muthanna"},11:{code:"MY",name:"Maysan"},12:{code:"NJ",name:"An Najaf"},13:{code:"NN",name:"Ninawa"},14:{code:"QA",name:"Al Qadisyah"},15:{code:"SD",name:"Salah ad Din"},16:{code:"SL",name:"As Sulaymaniyah"},17:{code:"TM",name:"At Ta'mim"},18:{code:"WS",name:"Wasit"}},IE:{1:{code:"CA",name:"Carlow"},2:{code:"CV",name:"Cavan"},3:{code:"CL",name:"Clare"},4:{code:"CO",name:"Cork"},5:{code:"DO",name:"Donegal"},6:{code:"DU",name:"Dublin"},7:{code:"GA",name:"Galway"},8:{code:"KE",name:"Kerry"},9:{code:"KI",name:"Kildare"},10:{code:"KL",name:"Kilkenny"},11:{code:"LA",name:"Laois"},12:{code:"LE",name:"Leitrim"},13:{code:"LI",name:"Limerick"},14:{code:"LO",name:"Longford"},15:{code:"LU",name:"Louth"},16:{code:"MA",name:"Mayo"},17:{code:"ME",name:"Meath"},18:{code:"MO",name:"Monaghan"},19:{code:"OF",name:"Offaly"},20:{code:"RO",name:"Roscommon"},21:{code:"SL",name:"Sligo"},22:{code:"TI",name:"Tipperary"},23:{code:"WA",name:"Waterford"},24:{code:"WE",name:"Westmeath"},25:{code:"WX",name:"Wexford"},26:{code:"WI",name:"Wicklow"}},IL:{1:{code:"BS",name:"Be'er Sheva"},2:{code:"BH",name:"Bika'at Hayarden"},3:{code:"EA",name:"Eilat and Arava"},4:{code:"GA",name:"Galil"},5:{code:"HA",name:"Haifa"},6:{code:"JM",name:"Jehuda Mountains"},7:{code:"JE",name:"Jerusalem"},8:{code:"NE",name:"Negev"},10:{code:"SE",name:"Semaria"},11:{code:"SH",name:"Sharon"},12:{code:"TA",name:"Tel Aviv (Gosh Dan)"}},IT:{1:{code:"AG",name:"Agrigento"},2:{code:"AL",name:"Alessandria"},3:{code:"AN",name:"Ancona"},4:{code:"AO",name:"Aosta"},5:{code:"AR",name:"Arezzo"},6:{code:"AP",name:"Ascoli Piceno"},7:{code:"AT",name:"Asti"},8:{code:"AV",name:"Avellino"},9:{code:"BA",name:"Bari"},10:{code:"BL",name:"Belluno"},11:{code:"BN",name:"Benevento"},12:{code:"BG",name:"Bergamo"},13:{code:"BI",name:"Biella"},14:{code:"BO",name:"Bologna"},15:{code:"BZ",name:"Bolzano"},16:{code:"BS",name:"Brescia"},17:{code:"BR",name:"Brindisi"},18:{code:"CA",name:"Cagliari"},19:{code:"CL",name:"Caltanissetta"},20:{code:"CB",name:"Campobasso"},21:{code:"CE",name:"Caserta"},22:{code:"CT",name:"Catania"},23:{code:"CZ",name:"Catanzaro"},24:{code:"CH",name:"Chieti"},25:{code:"CO",name:"Como"},26:{code:"CS",name:"Cosenza"},27:{code:"CR",name:"Cremona"},28:{code:"KR",name:"Crotone"},29:{code:"CN",name:"Cuneo"},30:{code:"EN",name:"Enna"},31:{code:"FE",name:"Ferrara"},32:{code:"FI",name:"Firenze"},33:{code:"FG",name:"Foggia"},34:{code:"FO",name:"Forlì"},35:{code:"FR",name:"Frosinone"},36:{code:"GE",name:"Genova"},37:{code:"GO",name:"Gorizia"},38:{code:"GR",name:"Grosseto"},39:{code:"IM",name:"Imperia"},40:{code:"IS",name:"Isernia"},41:{code:"AQ",name:"Aquila"},42:{code:"SP",name:"La Spezia"},43:{code:"LT",name:"Latina"},44:{code:"LE",name:"Lecce"},45:{code:"LC",name:"Lecco"},46:{code:"LI",name:"Livorno"},47:{code:"LO",name:"Lodi"},48:{code:"LU",name:"Lucca"},49:{code:"MC",name:"Macerata"},50:{code:"MN",name:"Mantova"},51:{code:"MS",name:"Massa-Carrara"},52:{code:"MT",name:"Matera"},53:{code:"ME",name:"Messina"},54:{code:"MI",name:"Milano"},55:{code:"MO",name:"Modena"},56:{code:"NA",name:"Napoli"},57:{code:"NO",name:"Novara"},58:{code:"NU",name:"Nuoro"},59:{code:"OR",name:"Oristano"},60:{code:"PD",name:"Padova"},61:{code:"PA",name:"Palermo"},62:{code:"PR",name:"Parma"},63:{code:"PG",name:"Perugia"},64:{code:"PV",name:"Pavia"},65:{code:"PU",name:"Pesaro Urbino"},66:{code:"PE",name:"Pescara"},67:{code:"PC",name:"Piacenza"},68:{code:"PI",name:"Pisa"},69:{code:"PT",name:"Pistoia"},70:{code:"PN",name:"Pordenone"},71:{code:"PZ",name:"Potenza"},72:{code:"PO",name:"Prato"},73:{code:"RG",name:"Ragusa"},74:{code:"RA",name:"Ravenna"},75:{code:"RC",name:"Reggio Calabria"},76:{code:"RE",name:"Reggio Emilia"},77:{code:"RI",name:"Rieti"},78:{code:"RN",name:"Rimini"},79:{code:"RM",name:"Roma"},80:{code:"RO",name:"Rovigo"},81:{code:"SA",name:"Salerno"},82:{code:"SS",name:"Sassari"},83:{code:"SV",name:"Savona"},84:{code:"SI",name:"Siena"},85:{code:"SR",name:"Siracusa"},86:{code:"SO",name:"Sondrio"},87:{code:"TA",name:"Taranto"},88:{code:"TE",name:"Teramo"},89:{code:"TR",name:"Terni"},90:{code:"TO",name:"Torino"},91:{code:"TP",name:"Trapani"},92:{code:"TN",name:"Trento"},93:{code:"TV",name:"Treviso"},94:{code:"TS",name:"Trieste"},95:{code:"UD",name:"Udine"},96:{code:"VA",name:"Varese"},97:{code:"VE",name:"Venezia"},98:{code:"VB",name:"Verbania"},99:{code:"VC",name:"Vercelli"},100:{code:"VR",name:"Verona"},101:{code:"VV",name:"Vibo Valentia"},102:{code:"VI",name:"Vicenza"},103:{code:"VT",name:"Viterbo"},104:{code:"CI",name:"Carbonia-Iglesias"},105:{code:"VS",name:"Medio Campidano"},106:{code:"OG",name:"Ogliastra"},107:{code:"OT",name:"Olbia-Tempio"},108:{code:"MB",name:"Monza e Brianza"},109:{code:"FM",name:"Fermo"},110:{code:"BT",name:"Barletta-Andria-Trani"}},JM:{1:{code:"CLA",name:"Clarendon Parish"},2:{code:"HAN",name:"Hanover Parish"},3:{code:"KIN",name:"Kingston Parish"},4:{code:"MAN",name:"Manchester Parish"},5:{code:"POR",name:"Portland Parish"},6:{code:"AND",name:"Saint Andrew Parish"},7:{code:"ANN",name:"Saint Ann Parish"},8:{code:"CAT",name:"Saint Catherine Parish"},9:{code:"ELI",name:"Saint Elizabeth Parish"},10:{code:"JAM",name:"Saint James Parish"},11:{code:"MAR",name:"Saint Mary Parish"},12:{code:"THO",name:"Saint Thomas Parish"},13:{code:"TRL",name:"Trelawny Parish"},14:{code:"WML",name:"Westmoreland Parish"}},JP:{1:{code:"AI",name:"Aichi"},2:{code:"AK",name:"Akita"},3:{code:"AO",name:"Aomori"},4:{code:"CH",name:"Chiba"},5:{code:"EH",name:"Ehime"},6:{code:"FK",name:"Fukui"},7:{code:"FU",name:"Fukuoka"},8:{code:"FS",name:"Fukushima"},9:{code:"GI",name:"Gifu"},10:{code:"GU",name:"Gumma"},11:{code:"HI",name:"Hiroshima"},12:{code:"HO",name:"Hokkaido"},13:{code:"HY",name:"Hyogo"},14:{code:"IB",name:"Ibaraki"},15:{code:"IS",name:"Ishikawa"},16:{code:"IW",name:"Iwate"},17:{code:"KA",name:"Kagawa"},18:{code:"KG",name:"Kagoshima"},19:{code:"KN",name:"Kanagawa"},20:{code:"KO",name:"Kochi"},21:{code:"KU",name:"Kumamoto"},22:{code:"KY",name:"Kyoto"},23:{code:"MI",name:"Mie"},24:{code:"MY",name:"Miyagi"},25:{code:"MZ",name:"Miyazaki"},26:{code:"NA",name:"Nagano"},27:{code:"NG",name:"Nagasaki"},28:{code:"NR",name:"Nara"},29:{code:"NI",name:"Niigata"},30:{code:"OI",name:"Oita"},31:{code:"OK",name:"Okayama"},32:{code:"ON",name:"Okinawa"},33:{code:"OS",name:"Osaka"},34:{code:"SA",name:"Saga"},35:{code:"SI",name:"Saitama"},36:{code:"SH",name:"Shiga"},37:{code:"SM",name:"Shimane"},38:{code:"SZ",name:"Shizuoka"},39:{code:"TO",name:"Tochigi"},40:{code:"TS",name:"Tokushima"},41:{code:"TK",name:"Tokyo"},42:{code:"TT",name:"Tottori"},43:{code:"TY",name:"Toyama"},44:{code:"WA",name:"Wakayama"},45:{code:"YA",name:"Yamagata"},46:{code:"YM",name:"Yamaguchi"},47:{code:"YN",name:"Yamanashi"}},JO:{1:{code:"AM",name:"'Amman"},2:{code:"AJ",name:"Ajlun"},3:{code:"AA",name:"Al'Aqabah"},4:{code:"AB",name:"Al Balqa'"},5:{code:"AK",name:"Al Karak"},6:{code:"AL",name:"Al Mafraq"},7:{code:"AT",name:"At Tafilah"},8:{code:"AZ",name:"Az Zarqa'"},9:{code:"IR",name:"Irbid"},10:{code:"JA",name:"Jarash"},11:{code:"MA",name:"Ma'an"},12:{code:"MD",name:"Madaba"}},KZ:{1:{code:"AL",name:"Almaty"},2:{code:"AC",name:"Almaty City"},3:{code:"AM",name:"Aqmola"},4:{code:"AQ",name:"Aqtobe"},5:{code:"AS",name:"Astana City"},6:{code:"AT",name:"Atyrau"},7:{code:"BA",name:"Batys Qazaqstan"},8:{code:"BY",name:"Bayqongyr City"},9:{code:"MA",name:"Mangghystau"},10:{code:"ON",name:"Ongtustik Qazaqstan"},11:{code:"PA",name:"Pavlodar"},12:{code:"QA",name:"Qaraghandy"},13:{code:"QO",name:"Qostanay"},14:{code:"QY",name:"Qyzylorda"},15:{code:"SH",name:"Shyghys Qazaqstan"},16:{code:"SO",name:"Soltustik Qazaqstan"},17:{code:"ZH",name:"Zhambyl"}},KE:{1:{code:"CE",name:"Central"},2:{code:"CO",name:"Coast"},3:{code:"EA",name:"Eastern"},4:{code:"NA",name:"Nairobi Area"},5:{code:"NE",name:"North Eastern"},6:{code:"NY",name:"Nyanza"},7:{code:"RV",name:"Rift Valley"},8:{code:"WE",name:"Western"}},KI:{1:{code:"AG",name:"Abaiang"},2:{code:"AM",name:"Abemama"},3:{code:"AK",name:"Aranuka"},4:{code:"AO",name:"Arorae"},5:{code:"BA",name:"Banaba"},6:{code:"BE",name:"Beru"},7:{code:"bT",name:"Butaritari"},8:{code:"KA",name:"Kanton"},9:{code:"KR",name:"Kiritimati"},10:{code:"KU",name:"Kuria"},11:{code:"MI",name:"Maiana"},12:{code:"MN",name:"Makin"},13:{code:"ME",name:"Marakei"},14:{code:"NI",name:"Nikunau"},15:{code:"NO",name:"Nonouti"},16:{code:"ON",name:"Onotoa"},17:{code:"TT",name:"Tabiteuea"},18:{code:"TR",name:"Tabuaeran"},19:{code:"TM",name:"Tamana"},20:{code:"TW",name:"Tarawa"},21:{code:"TE",name:"Teraina"}},KP:{1:{code:"CHA",name:"Chagang-do"},2:{code:"HAB",name:"Hamgyong-bukto"},3:{code:"HAN",name:"Hamgyong-namdo"},4:{code:"HWB",name:"Hwanghae-bukto"},5:{code:"HWN",name:"Hwanghae-namdo"},6:{code:"KAN",name:"Kangwon-do"},7:{code:"PYB",name:"P'yongan-bukto"},8:{code:"PYN",name:"P'yongan-namdo"},9:{code:"YAN",name:"Ryanggang-do (Yanggang-do)"},10:{code:"NAJ",name:"Rason Directly Governed City"},11:{code:"PYO",name:"P'yongyang Special City"}},KR:{1:{code:"CO",name:"Ch'ungch'ong-bukto"},2:{code:"CH",name:"Ch'ungch'ong-namdo"},3:{code:"CD",name:"Cheju-do"},4:{code:"CB",name:"Cholla-bukto"},5:{code:"CN",name:"Cholla-namdo"},6:{code:"IG",name:"Inch'on-gwangyoksi"},7:{code:"KA",name:"Kangwon-do"},8:{code:"KG",name:"Kwangju-gwangyoksi"},9:{code:"KD",name:"Kyonggi-do"},10:{code:"KB",name:"Kyongsang-bukto"},11:{code:"KN",name:"Kyongsang-namdo"},12:{code:"PG",name:"Pusan-gwangyoksi"},13:{code:"SO",name:"Soul-t'ukpyolsi"},14:{code:"TA",name:"Taegu-gwangyoksi"},15:{code:"TG",name:"Taejon-gwangyoksi"}},KW:{1:{code:"AL",name:"Al'Asimah"},2:{code:"AA",name:"Al Ahmadi"},3:{code:"AF",name:"Al Farwaniyah"},4:{code:"AJ",name:"Al Jahra'"},5:{code:"HA",name:"Hawalli"}},KG:{1:{code:"GB",name:"Bishkek"},2:{code:"B",name:"Batken"},3:{code:"C",name:"Chu"},4:{code:"J",name:"Jalal-Abad"},5:{code:"N",name:"Naryn"},6:{code:"O",name:"Osh"},7:{code:"T",name:"Talas"},8:{code:"Y",name:"Ysyk-Kol"}},LA:{1:{code:"VT",name:"Vientiane"},2:{code:"AT",name:"Attapu"},3:{code:"BK",name:"Bokeo"},4:{code:"BL",name:"Bolikhamxai"},5:{code:"CH",name:"Champasak"},6:{code:"HO",name:"Houaphan"},7:{code:"KH",name:"Khammouan"},8:{code:"LM",name:"Louang Namtha"},9:{code:"LP",name:"Louangphabang"},10:{code:"OU",name:"Oudomxai"},11:{code:"PH",name:"Phongsali"},12:{code:"SL",name:"Salavan"},13:{code:"SV",name:"Savannakhet"},14:{code:"VI",name:"Vientiane"},15:{code:"XA",name:"Xaignabouli"},16:{code:"XE",name:"Xekong"},17:{code:"XI",name:"Xiangkhoang"},18:{code:"XN",name:"Xaisomboun"}},LV:{1:{code:"AIZ",name:"Aizkraukles Rajons"},2:{code:"ALU",name:"Aluksnes Rajons"},3:{code:"BAL",name:"Balvu Rajons"},4:{code:"BAU",name:"Bauskas Rajons"},5:{code:"CES",name:"Cesu Rajons"},6:{code:"DGR",name:"Daugavpils Rajons"},7:{code:"DOB",name:"Dobeles Rajons"},8:{code:"GUL",name:"Gulbenes Rajons"},9:{code:"JEK",name:"Jekabpils Rajons"},10:{code:"JGR",name:"Jelgavas Rajons"},11:{code:"KRA",name:"Kraslavas Rajons"},12:{code:"KUL",name:"Kuldigas Rajons"},13:{code:"LPR",name:"Liepajas Rajons"},14:{code:"LIM",name:"Limbazu Rajons"},15:{code:"LUD",name:"Ludzas Rajons"},16:{code:"MAD",name:"Madonas Rajons"},17:{code:"OGR",name:"Ogres Rajons"},18:{code:"PRE",name:"Preilu Rajons"},19:{code:"RZR",name:"Rezeknes Rajons"},20:{code:"RGR",name:"Rigas Rajons"},21:{code:"SAL",name:"Saldus Rajons"},22:{code:"TAL",name:"Talsu Rajons"},23:{code:"TUK",name:"Tukuma Rajons"},24:{code:"VLK",name:"Valkas Rajons"},25:{code:"VLM",name:"Valmieras Rajons"},26:{code:"VSR",name:"Ventspils Rajons"},27:{code:"DGV",name:"Daugavpils"},28:{code:"JGV",name:"Jelgava"},29:{code:"JUR",name:"Jurmala"},30:{code:"LPK",name:"Liepaja"},31:{code:"RZK",name:"Rezekne"},32:{code:"RGA",name:"Riga"},33:{code:"VSL",name:"Ventspils"}},LB:{1:{code:"BIN",name:"Bint Jbeil"},2:{code:"HAS",name:"Hasbaya"},3:{code:"MAR",name:"Marjeyoun"},4:{code:"NAB",name:"Nabatieh"},5:{code:"BAA",name:"Baalbek"},6:{code:"HER",name:"Hermel"},7:{code:"RAS",name:"Rashaya"},8:{code:"WES",name:"Western Beqaa"},9:{code:"ZAH",name:"Zahle"},10:{code:"AKK",name:"Akkar"},11:{code:"BAT",name:"Batroun"},12:{code:"BSH",name:"Bsharri"},13:{code:"KOU",name:"Koura"},14:{code:"MIN",name:"Miniyeh-Danniyeh"},15:{code:"TRI",name:"Tripoli"},16:{code:"ZGH",name:"Zgharta"},17:{code:"ALE",name:"Aley"},18:{code:"BAA",name:"Baabda"},19:{code:"BYB",name:"Byblos"},20:{code:"CHO",name:"Chouf"},21:{code:"KES",name:"Kesrwan"},22:{code:"MAT",name:"Matn"},23:{code:"JEZ",name:"Jezzine"},24:{code:"SID",name:"Sidon"},25:{code:"TYR",name:"Tyre"}},LS:{1:{code:"BE",name:"Berea"},2:{code:"BB",name:"Butha-Buthe"},3:{code:"LE",name:"Leribe"},4:{code:"MF",name:"Mafeteng"},5:{code:"MS",name:"Maseru"},6:{code:"MH",name:"Mohale's Hoek"},7:{code:"MK",name:"Mokhotlong"},8:{code:"QN",name:"Qacha's Nek"},9:{code:"QT",name:"Quthing"},10:{code:"TT",name:"Thaba-Tseka"}},LR:{1:{code:"BI",name:"Bomi"},2:{code:"BG",name:"Bong"},3:{code:"GB",name:"Grand Bassa"},4:{code:"CM",name:"Grand Cape Mount"},5:{code:"GG",name:"Grand Gedeh"},6:{code:"GK",name:"Grand Kru"},7:{code:"LO",name:"Lofa"},8:{code:"MG",name:"Margibi"},9:{code:"ML",name:"Maryland"},10:{code:"MS",name:"Montserrado"},11:{code:"NB",name:"Nimba"},12:{code:"RC",name:"River Cess"},13:{code:"SN",name:"Sinoe"}},LY:{1:{code:"AJ",name:"Ajdabiya"},2:{code:"AZ",name:"Al 'Aziziyah"},3:{code:"FA",name:"Al Fatih"},4:{code:"JA",name:"Al Jabal al Akhdar"},5:{code:"JU",name:"Al Jufrah"},6:{code:"KH",name:"Al Khums"},7:{code:"KU",name:"Al Kufrah"},8:{code:"NK",name:"An Nuqat al Khams"},9:{code:"AS",name:"Ash Shati'"},10:{code:"AW",name:"Awbari"},11:{code:"ZA",name:"Az Zawiyah"},12:{code:"BA",name:"Banghazi"},13:{code:"DA",name:"Darnah"},14:{code:"GD",name:"Ghadamis"},15:{code:"GY",name:"Gharyan"},16:{code:"MI",name:"Misratah"},17:{code:"MZ",name:"Murzuq"},18:{code:"SB",name:"Sabha"},19:{code:"SW",name:"Sawfajjin"},20:{code:"SU",name:"Surt"},21:{code:"TL",name:"Tarabulus (Tripoli)"},22:{code:"TH",name:"Tarhunah"},23:{code:"TU",name:"Tubruq"},24:{code:"YA",name:"Yafran"},25:{code:"ZL",name:"Zlitan"}},LI:{1:{code:"V",name:"Vaduz"},2:{code:"A",name:"Schaan"},3:{code:"B",name:"Balzers"},4:{code:"N",name:"Triesen"},5:{code:"E",name:"Eschen"},6:{code:"M",name:"Mauren"},7:{code:"T",name:"Triesenberg"},8:{code:"R",name:"Ruggell"},9:{code:"G",name:"Gamprin"},10:{code:"L",name:"Schellenberg"},11:{code:"P",name:"Planken"}},LT:{1:{code:"AL",name:"Alytus"},2:{code:"KA",name:"Kaunas"},3:{code:"KL",name:"Klaipeda"},4:{code:"MA",name:"Marijampole"},5:{code:"PA",name:"Panevezys"},6:{code:"SI",name:"Siauliai"},7:{code:"TA",name:"Taurage"},8:{code:"TE",name:"Telsiai"},9:{code:"UT",name:"Utena"},10:{code:"VI",name:"Vilnius"}},LU:{1:{code:"DD",name:"Diekirch"},2:{code:"DC",name:"Clervaux"},3:{code:"DR",name:"Redange"},4:{code:"DV",name:"Vianden"},5:{code:"DW",name:"Wiltz"},6:{code:"GG",name:"Grevenmacher"},7:{code:"GE",name:"Echternach"},8:{code:"GR",name:"Remich"},9:{code:"LL",name:"Luxembourg"},10:{code:"LC",name:"Capellen"},11:{code:"LE",name:"Esch-sur-Alzette"},12:{code:"LM",name:"Mersch"}},MO:{1:{code:"OLF",name:"Our Lady Fatima Parish"},2:{code:"ANT",name:"St. Anthony Parish"},3:{code:"LAZ",name:"St. Lazarus Parish"},4:{code:"CAT",name:"Cathedral Parish"},5:{code:"LAW",name:"St. Lawrence Parish"}},MK:{1:{code:"AER",name:"Aerodrom"},2:{code:"ARA",name:"Aračinovo"},3:{code:"BER",name:"Berovo"},4:{code:"BIT",name:"Bitola"},5:{code:"BOG",name:"Bogdanci"},6:{code:"BOG",name:"Bogovinje"},7:{code:"BOS",name:"Bosilovo"},8:{code:"BRV",name:"Brvenica"},9:{code:"BUT",name:"Butel"},10:{code:"ČAI",name:"Čair"},11:{code:"ČAš",name:"Čaška"},12:{code:"CEN",name:"Centar"},13:{code:"CEN",name:"Centar Župa"},14:{code:"Češ",name:"Češinovo-Obleš"},15:{code:"ČUČ",name:"Čučer-Sandevo"},16:{code:"DEB",name:"Debar"},17:{code:"DEB",name:"Debarca"},18:{code:"DEL",name:"Delčevo"},19:{code:"DEM",name:"Demir Hisar"},20:{code:"DEM",name:"Demir Kapija"},21:{code:"DOL",name:"Dolneni"},22:{code:"DRU",name:"Drugovo"},23:{code:"GAZ",name:"Gazi Baba"},24:{code:"GEV",name:"Gevgelija"},25:{code:"GJO",name:"Gjorče Petrov"},26:{code:"GOS",name:"Gostivar"},27:{code:"GRA",name:"Gradsko"},28:{code:"ILI",name:"Ilinden"},29:{code:"JEG",name:"Jegunovce"},30:{code:"KAR",name:"Karbinci"},31:{code:"KAR",name:"Karpoš"},32:{code:"KAV",name:"Kavadarci"},33:{code:"KIČ",name:"Kičevo"},34:{code:"KIS",name:"Kisela Voda"},35:{code:"KOč",name:"Kočani"},36:{code:"KON",name:"Konče"},37:{code:"KRA",name:"Kratovo"},38:{code:"KRI",name:"Kriva Palanka"},39:{code:"KRI",name:"Krivogaštani"},40:{code:"KRU",name:"Kruševo"},41:{code:"KUM",name:"Kumanovo"},42:{code:"LIP",name:"Lipkovo"},43:{code:"LOZ",name:"Lozovo"},44:{code:"MAK",name:"Makedonska Kamenica"},45:{code:"MAK",name:"Makedonski Brod"},46:{code:"MAV",name:"Mavrovo and Rostuša"},47:{code:"MOG",name:"Mogila"},48:{code:"NEG",name:"Negotino"},49:{code:"NOV",name:"Novaci"},50:{code:"NOV",name:"Novo Selo"},51:{code:"OHR",name:"Ohrid"},52:{code:"OSL",name:"Oslomej"},53:{code:"PEH",name:"Pehčevo"},54:{code:"PET",name:"Petrovec"},55:{code:"PLA",name:"Plasnica"},56:{code:"PRI",name:"Prilep"},57:{code:"PRO",name:"Probištip"},58:{code:"RAD",name:"Radoviš"},59:{code:"RAN",name:"Rankovce"},60:{code:"RES",name:"Resen"},61:{code:"ROS",name:"Rosoman"},62:{code:"SAR",name:"Saraj"},63:{code:"SOP",name:"Sopište"},64:{code:"STA",name:"Star Dojran"},65:{code:"STA",name:"Staro Nagoričane"},66:{code:"ŠTI",name:"Štip"},67:{code:"STR",name:"Struga"},68:{code:"STR",name:"Strumica"},69:{code:"STU",name:"Studeničani"},70:{code:"ŠUT",name:"Šuto Orizari"},71:{code:"SVE",name:"Sveti Nikole"},72:{code:"TEA",name:"Tearce"},73:{code:"TET",name:"Tetovo"},74:{code:"VAL",name:"Valandovo"},75:{code:"VAS",name:"Vasilevo"},76:{code:"VEL",name:"Veles"},77:{code:"VEV",name:"Vevčani"},78:{code:"VIN",name:"Vinica"},79:{code:"VRA",name:"Vraneštica"},80:{code:"VRA",name:"Vrapčište"},81:{code:"ZAJ",name:"Zajas"},82:{code:"ZEL",name:"Zelenikovo"},83:{code:"ŽEL",name:"Želino"},84:{code:"ZRN",name:"Zrnovci"}},MG:{1:{code:"AN",name:"Antananarivo"},2:{code:"AS",name:"Antsiranana"},3:{code:"FN",name:"Fianarantsoa"},4:{code:"MJ",name:"Mahajanga"},5:{code:"TM",name:"Toamasina"},6:{code:"TL",name:"Toliara"}},MW:{1:{code:"BLK",name:"Balaka"},2:{code:"BLT",name:"Blantyre"},3:{code:"CKW",name:"Chikwawa"},4:{code:"CRD",name:"Chiradzulu"},5:{code:"CTP",name:"Chitipa"},6:{code:"DDZ",name:"Dedza"},7:{code:"DWA",name:"Dowa"},8:{code:"KRG",name:"Karonga"},9:{code:"KSG",name:"Kasungu"},10:{code:"LKM",name:"Likoma"},11:{code:"LLG",name:"Lilongwe"},12:{code:"MCG",name:"Machinga"},13:{code:"MGC",name:"Mangochi"},14:{code:"MCH",name:"Mchinji"},15:{code:"MLJ",name:"Mulanje"},16:{code:"MWZ",name:"Mwanza"},17:{code:"MZM",name:"Mzimba"},18:{code:"NTU",name:"Ntcheu"},19:{code:"NKB",name:"Nkhata Bay"},20:{code:"NKH",name:"Nkhotakota"},21:{code:"NSJ",name:"Nsanje"},22:{code:"NTI",name:"Ntchisi"},23:{code:"PHL",name:"Phalombe"},24:{code:"RMP",name:"Rumphi"},25:{code:"SLM",name:"Salima"},26:{code:"THY",name:"Thyolo"},27:{code:"ZBA",name:"Zomba"}},MY:{1:{code:"Johor",name:"Johor"},2:{code:"Kedah",name:"Kedah"},3:{code:"Kelantan",name:"Kelantan"},4:{code:"Labuan",name:"Labuan"},5:{code:"Melaka",name:"Melaka"},6:{code:"Negeri Sembilan",name:"Negeri Sembilan"},7:{code:"Pahang",name:"Pahang"},8:{code:"Perak",name:"Perak"},9:{code:"Perlis",name:"Perlis"},10:{code:"Pulau Pinang",name:"Pulau Pinang"},11:{code:"Sabah",name:"Sabah"},12:{code:"Sarawak",name:"Sarawak"},13:{code:"Selangor",name:"Selangor"},14:{code:"Terengganu",name:"Terengganu"},15:{code:"Kuala Lumpur",name:"Kuala Lumpur"}},MV:{1:{code:"AAD",name:"Ari Atoll Dheknu"},2:{code:"AAU",name:"Ari Atoll Uthuru"},3:{code:"ADD",name:"Addu"},4:{code:"FAA",name:"Faadhippolhu"},5:{code:"FEA",name:"Felidhe Atoll"},6:{code:"FMU",name:"Fua Mulaku"},7:{code:"HAD",name:"Huvadhu Atoll Dhekunu"},8:{code:"HAU",name:"Huvadhu Atoll Uthuru"},9:{code:"HDH",name:"Hadhdhunmathi"},10:{code:"KLH",name:"Kolhumadulu"},11:{code:"MAA",name:"Male Atoll"},12:{code:"MAD",name:"Maalhosmadulu Dhekunu"},13:{code:"MAU",name:"Maalhosmadulu Uthuru"},14:{code:"MLD",name:"Miladhunmadulu Dhekunu"},15:{code:"MLU",name:"Miladhunmadulu Uthuru"},16:{code:"MUA",name:"Mulaku Atoll"},17:{code:"NAD",name:"Nilandhe Atoll Dhekunu"},18:{code:"NAU",name:"Nilandhe Atoll Uthuru"},19:{code:"THD",name:"Thiladhunmathi Dhekunu"},20:{code:"THU",name:"Thiladhunmathi Uthuru"}},ML:{1:{code:"GA",name:"Gao"},2:{code:"KY",name:"Kayes"},3:{code:"KD",name:"Kidal"},4:{code:"KL",name:"Koulikoro"},5:{code:"MP",name:"Mopti"},6:{code:"SG",name:"Segou"},7:{code:"SK",name:"Sikasso"},8:{code:"TB",name:"Tombouctou"},9:{code:"CD",name:"Bamako Capital District"}},MT:{1:{code:"ATT",name:"Attard"},2:{code:"BAL",name:"Balzan"},3:{code:"BGU",name:"Birgu"},4:{code:"BKK",name:"Birkirkara"},5:{code:"BRZ",name:"Birzebbuga"},6:{code:"BOR",name:"Bormla"},7:{code:"DIN",name:"Dingli"},8:{code:"FGU",name:"Fgura"},9:{code:"FLO",name:"Floriana"},10:{code:"GDJ",name:"Gudja"},11:{code:"GZR",name:"Gzira"},12:{code:"GRG",name:"Gargur"},13:{code:"GXQ",name:"Gaxaq"},14:{code:"HMR",name:"Hamrun"},15:{code:"IKL",name:"Iklin"},16:{code:"ISL",name:"Isla"},17:{code:"KLK",name:"Kalkara"},18:{code:"KRK",name:"Kirkop"},19:{code:"LIJ",name:"Lija"},20:{code:"LUQ",name:"Luqa"},21:{code:"MRS",name:"Marsa"},22:{code:"MKL",name:"Marsaskala"},23:{code:"MXL",name:"Marsaxlokk"},24:{code:"MDN",name:"Mdina"},25:{code:"MEL",name:"Melliea"},26:{code:"MGR",name:"Mgarr"},27:{code:"MST",name:"Mosta"},28:{code:"MQA",name:"Mqabba"},29:{code:"MSI",name:"Msida"},30:{code:"MTF",name:"Mtarfa"},31:{code:"NAX",name:"Naxxar"},32:{code:"PAO",name:"Paola"},33:{code:"PEM",name:"Pembroke"},34:{code:"PIE",name:"Pieta"},35:{code:"QOR",name:"Qormi"},36:{code:"QRE",name:"Qrendi"},37:{code:"RAB",name:"Rabat"},38:{code:"SAF",name:"Safi"},39:{code:"SGI",name:"San Giljan"},40:{code:"SLU",name:"Santa Lucija"},41:{code:"SPB",name:"San Pawl il-Bahar"},42:{code:"SGW",name:"San Gwann"},43:{code:"SVE",name:"Santa Venera"},44:{code:"SIG",name:"Siggiewi"},45:{code:"SLM",name:"Sliema"},46:{code:"SWQ",name:"Swieqi"},47:{code:"TXB",name:"Ta Xbiex"},48:{code:"TRX",name:"Tarxien"},49:{code:"VLT",name:"Valletta"},50:{code:"XGJ",name:"Xgajra"},51:{code:"ZBR",name:"Zabbar"},52:{code:"ZBG",name:"Zebbug"},53:{code:"ZJT",name:"Zejtun"},54:{code:"ZRQ",name:"Zurrieq"},55:{code:"FNT",name:"Fontana"},56:{code:"GHJ",name:"Ghajnsielem"},57:{code:"GHR",name:"Gharb"},58:{code:"GHS",name:"Ghasri"},59:{code:"KRC",name:"Kercem"},60:{code:"MUN",name:"Munxar"},61:{code:"NAD",name:"Nadur"},62:{code:"QAL",name:"Qala"},63:{code:"VIC",name:"Victoria"},64:{code:"SLA",name:"San Lawrenz"},65:{code:"SNT",name:"Sannat"},66:{code:"ZAG",name:"Xagra"},67:{code:"XEW",name:"Xewkija"},68:{code:"ZEB",name:"Zebbug"}},MH:{1:{code:"ALG",name:"Ailinginae"},2:{code:"ALL",name:"Ailinglaplap"},3:{code:"ALK",name:"Ailuk"},4:{code:"ARN",name:"Arno"},5:{code:"AUR",name:"Aur"},6:{code:"BKR",name:"Bikar"},7:{code:"BKN",name:"Bikini"},8:{code:"BKK",name:"Bokak"},9:{code:"EBN",name:"Ebon"},10:{code:"ENT",name:"Enewetak"},11:{code:"EKB",name:"Erikub"},12:{code:"JBT",name:"Jabat"},13:{code:"JLT",name:"Jaluit"},14:{code:"JEM",name:"Jemo"},15:{code:"KIL",name:"Kili"},16:{code:"KWJ",name:"Kwajalein"},17:{code:"LAE",name:"Lae"},18:{code:"LIB",name:"Lib"},19:{code:"LKP",name:"Likiep"},20:{code:"MJR",name:"Majuro"},21:{code:"MLP",name:"Maloelap"},22:{code:"MJT",name:"Mejit"},23:{code:"MIL",name:"Mili"},24:{code:"NMK",name:"Namorik"},25:{code:"NAM",name:"Namu"},26:{code:"RGL",name:"Rongelap"},27:{code:"RGK",name:"Rongrik"},28:{code:"TOK",name:"Toke"},29:{code:"UJA",name:"Ujae"},30:{code:"UJL",name:"Ujelang"},31:{code:"UTK",name:"Utirik"},32:{code:"WTH",name:"Wotho"},33:{code:"WTJ",name:"Wotje"}},MQ:{1:{code:"LAJ",name:"L'Ajoupa-Bouillon"},2:{code:"LES",name:"Les Anses-d'Arlet"},3:{code:"BAS",name:"Basse-Pointe"},4:{code:"BEL",name:"Bellefontaine"},5:{code:"LE",name:"Le Carbet"},6:{code:"CAS",name:"Case-Pilote"},7:{code:"LE",name:"Le Diamant"},8:{code:"DUC",name:"Ducos"},9:{code:"FON",name:"Fonds-Saint-Denis"},10:{code:"FOR",name:"Fort-De-France"},11:{code:"LE",name:"Le François"},12:{code:"GRA",name:"Grand'Rivière"},13:{code:"GRO",name:"Gros-Morne"},14:{code:"LE",name:"Le Lamentin"},15:{code:"LE",name:"Le Lorrain"},16:{code:"MAC",name:"Macouba"},17:{code:"LE",name:"Le Marigot"},18:{code:"LE",name:"Le Marin"},19:{code:"LE",name:"Le Morne-Rouge"},20:{code:"LE",name:"Le Morne-Vert"},21:{code:"LE",name:"Le Prêcheur"},22:{code:"RIV",name:"Rivière-Pilote"},23:{code:"RIV",name:"Rivière-Salée"},24:{code:"LE",name:"Le Robert"},25:{code:"SAI",name:"Sainte-Anne"},26:{code:"SAI",name:"Sainte-Luce"},27:{code:"SAI",name:"Sainte-Marie"},28:{code:"SAI",name:"Saint-Esprit"},29:{code:"SAI",name:"Saint-Joseph"},30:{code:"SAI",name:"Saint-Pierre"},31:{code:"SCH",name:"Schœlcher"},32:{code:"LA",name:"La Trinité"},33:{code:"LES",name:"Les Trois-Îlets"},34:{code:"LE",name:"Le Vauclin"}},MR:{1:{code:"AD",name:"Adrar"},2:{code:"AS",name:"Assaba"},3:{code:"BR",name:"Brakna"},4:{code:"DN",name:"Dakhlet Nouadhibou"},5:{code:"GO",name:"Gorgol"},6:{code:"GM",name:"Guidimaka"},7:{code:"HC",name:"Hodh Ech Chargui"},8:{code:"HG",name:"Hodh El Gharbi"},9:{code:"IN",name:"Inchiri"},10:{code:"TA",name:"Tagant"},11:{code:"TZ",name:"Tiris Zemmour"},12:{code:"TR",name:"Trarza"},13:{code:"NO",name:"Nouakchott"}},MU:{1:{code:"AG",name:"Agalega Islands"},2:{code:"BL",name:"Black River"},3:{code:"BR",name:"Beau Bassin-Rose Hill"},4:{code:"CC",name:"Cargados Carajos Shoals (Saint B)"},5:{code:"CU",name:"Curepipe"},6:{code:"FL",name:"Flacq"},7:{code:"GP",name:"Grand Port"},8:{code:"MO",name:"Moka"},9:{code:"PA",name:"Pamplemousses"},10:{code:"PL",name:"Port Louis"},11:{code:"PU",name:"Port Louis"},12:{code:"PW",name:"Plaines Wilhems"},13:{code:"QB",name:"Quatre Bornes"},14:{code:"RO",name:"Rodrigues"},15:{code:"RR",name:"Riviere du Rempart"},16:{code:"SA",name:"Savanne"},17:{code:"VP",name:"Vacoas-Phoenix"}},YT:{1:{code:"DZA",name:"Dzaoudzi"},2:{code:"PAM",name:"Pamandzi"},3:{code:"MAM",name:"Mamoudzou"},4:{code:"DEM",name:"Dembeni"},5:{code:"BAN",name:"Bandrele"},6:{code:"KAN",name:"Kani-Kéli"},7:{code:"BOU",name:"Bouéni"},8:{code:"CHI",name:"Chirongui"},9:{code:"SAD",name:"Sada"},10:{code:"OUA",name:"Ouangani"},11:{code:"CHI",name:"Chiconi"},12:{code:"TSI",name:"Tsingoni"},13:{code:"MTS",name:"M'Tsangamouji"},14:{code:"ACO",name:"Acoua"},15:{code:"MTS",name:"Mtsamboro"},16:{code:"BAN",name:"Bandraboua"},17:{code:"KOU",name:"Koungou"}},MX:{1:{code:"AGU",name:"Aguascalientes"},2:{code:"BCN",name:"Baja California Norte"},3:{code:"BCS",name:"Baja California Sur"},4:{code:"CAM",name:"Campeche"},5:{code:"CHP",name:"Chiapas"},6:{code:"CHH",name:"Chihuahua"},7:{code:"COA",name:"Coahuila de Zaragoza"},8:{code:"COL",name:"Colima"},9:{code:"DIF",name:"Distrito Federal"},10:{code:"DUR",name:"Durango"},11:{code:"GUA",name:"Guanajuato"},12:{code:"GRO",name:"Guerrero"},13:{code:"HID",name:"Hidalgo"},14:{code:"JAL",name:"Jalisco"},15:{code:"MEX",name:"Mexico"},16:{code:"MIC",name:"Michoacan de Ocampo"},17:{code:"MOR",name:"Morelos"},18:{code:"NAY",name:"Nayarit"},19:{code:"NLE",name:"Nuevo Leon"},20:{code:"OAX",name:"Oaxaca"},21:{code:"PUE",name:"Puebla"},22:{code:"QUE",name:"Queretaro de Arteaga"},23:{code:"ROO",name:"Quintana Roo"},24:{code:"SLP",name:"San Luis Potosi"},25:{code:"SIN",name:"Sinaloa"},26:{code:"SON",name:"Sonora"},27:{code:"TAB",name:"Tabasco"},28:{code:"TAM",name:"Tamaulipas"},29:{code:"TLA",name:"Tlaxcala"},30:{code:"VER",name:"Veracruz-Llave"},31:{code:"YUC",name:"Yucatan"},32:{code:"ZAC",name:"Zacatecas"}},FM:{1:{code:"C",name:"Chuuk"},2:{code:"K",name:"Kosrae"},3:{code:"P",name:"Pohnpei"},4:{code:"Y",name:"Yap"}},MD:{1:{code:"GA",name:"Gagauzia"},2:{code:"CU",name:"Chisinau"},3:{code:"BA",name:"Balti"},4:{code:"CA",name:"Cahul"},5:{code:"ED",name:"Edinet"},6:{code:"LA",name:"Lapusna"},7:{code:"OR",name:"Orhei"},8:{code:"SO",name:"Soroca"},9:{code:"TI",name:"Tighina"},10:{code:"UN",name:"Ungheni"},11:{code:"SN",name:"Stânga Nistrului"}},MC:{1:{code:"FV",name:"Fontvieille"},2:{code:"LC",name:"La Condamine"},3:{code:"MV",name:"Monaco-Ville"},4:{code:"MC",name:"Monte-Carlo"}},MN:{1:{code:"1",name:"Ulanbaatar"},2:{code:"035",name:"Orhon"},3:{code:"037",name:"Darhan uul"},4:{code:"039",name:"Hentiy"},5:{code:"041",name:"Hovsgol"},6:{code:"043",name:"Hovd"},7:{code:"046",name:"Uvs"},8:{code:"047",name:"Tov"},9:{code:"049",name:"Selenge"},10:{code:"051",name:"Suhbaatar"},11:{code:"053",name:"Omnogovi"},12:{code:"055",name:"Ovorhangay"},13:{code:"057",name:"Dzavhan"},14:{code:"059",name:"DundgovL"},15:{code:"061",name:"Dornod"},16:{code:"063",name:"Dornogov"},17:{code:"064",name:"Govi-Sumber"},18:{code:"065",name:"Govi-Altay"},19:{code:"067",name:"Bulgan"},20:{code:"069",name:"Bayanhongor"},21:{code:"071",name:"Bayan-Olgiy"},22:{code:"073",name:"Arhangay"}},MS:{1:{code:"A",name:"Saint Anthony"},2:{code:"G",name:"Saint Georges"},3:{code:"P",name:"Saint Peter"}},MA:{1:{code:"AGD",name:"Agadir"},2:{code:"HOC",name:"Al Hoceima"},3:{code:"AZI",name:"Azilal"},4:{code:"BME",name:"Beni Mellal"},5:{code:"BSL",name:"Ben Slimane"},6:{code:"BLM",name:"Boulemane"},7:{code:"CBL",name:"Casablanca"},8:{code:"CHA",name:"Chaouen"},9:{code:"EJA",name:"El Jadida"},10:{code:"EKS",name:"El Kelaa des Sraghna"},11:{code:"ERA",name:"Er Rachidia"},12:{code:"ESS",name:"Essaouira"},13:{code:"FES",name:"Fes"},14:{code:"FIG",name:"Figuig"},15:{code:"GLM",name:"Guelmim"},16:{code:"IFR",name:"Ifrane"},17:{code:"KEN",name:"Kenitra"},18:{code:"KHM",name:"Khemisset"},19:{code:"KHN",name:"Khenifra"},20:{code:"KHO",name:"Khouribga"},21:{code:"LYN",name:"Laayoune"},22:{code:"LAR",name:"Larache"},23:{code:"MRK",name:"Marrakech"},24:{code:"MKN",name:"Meknes"},25:{code:"NAD",name:"Nador"},26:{code:"ORZ",name:"Ouarzazate"},27:{code:"OUJ",name:"Oujda"},28:{code:"RSA",name:"Rabat-Sale"},29:{code:"SAF",name:"Safi"},30:{code:"SET",name:"Settat"},31:{code:"SKA",name:"Sidi Kacem"},32:{code:"TGR",name:"Tangier"},33:{code:"TAN",name:"Tan-Tan"},34:{code:"TAO",name:"Taounate"},35:{code:"TRD",name:"Taroudannt"},36:{code:"TAT",name:"Tata"},37:{code:"TAZ",name:"Taza"},38:{code:"TET",name:"Tetouan"},39:{code:"TIZ",name:"Tiznit"},40:{code:"ADK",name:"Ad Dakhla"},41:{code:"BJD",name:"Boujdour"},42:{code:"ESM",name:"Es Smara"}},MZ:{1:{code:"CD",name:"Cabo Delgado"},2:{code:"GZ",name:"Gaza"},3:{code:"IN",name:"Inhambane"},4:{code:"MN",name:"Manica"},5:{code:"MC",name:"Maputo (city)"},6:{code:"MP",name:"Maputo"},7:{code:"NA",name:"Nampula"},8:{code:"NI",name:"Niassa"},9:{code:"SO",name:"Sofala"},10:{code:"TE",name:"Tete"},11:{code:"ZA",name:"Zambezia"}},MM:{1:{code:"AY",name:"Ayeyarwady"},2:{code:"BG",name:"Bago"},3:{code:"MG",name:"Magway"},4:{code:"MD",name:"Mandalay"},5:{code:"SG",name:"Sagaing"},6:{code:"TN",name:"Tanintharyi"},7:{code:"YG",name:"Yangon"},8:{code:"CH",name:"Chin State"},9:{code:"KC",name:"Kachin State"},10:{code:"KH",name:"Kayah State"},11:{code:"KN",name:"Kayin State"},12:{code:"MN",name:"Mon State"},13:{code:"RK",name:"Rakhine State"},14:{code:"SH",name:"Shan State"}},NA:{1:{code:"CA",name:"Caprivi"},2:{code:"ER",name:"Erongo"},3:{code:"HA",name:"Hardap"},4:{code:"KR",name:"Karas"},5:{code:"KV",name:"Kavango"},6:{code:"KH",name:"Khomas"},7:{code:"KU",name:"Kunene"},8:{code:"OW",name:"Ohangwena"},9:{code:"OK",name:"Omaheke"},10:{code:"OT",name:"Omusati"},11:{code:"ON",name:"Oshana"},12:{code:"OO",name:"Oshikoto"},13:{code:"OJ",name:"Otjozondjupa"}},NR:{1:{code:"AO",name:"Aiwo"},2:{code:"AA",name:"Anabar"},3:{code:"AT",name:"Anetan"},4:{code:"AI",name:"Anibare"},5:{code:"BA",name:"Baiti"},6:{code:"BO",name:"Boe"},7:{code:"BU",name:"Buada"},8:{code:"DE",name:"Denigomodu"},9:{code:"EW",name:"Ewa"},10:{code:"IJ",name:"Ijuw"},11:{code:"ME",name:"Meneng"},12:{code:"NI",name:"Nibok"},13:{code:"UA",name:"Uaboe"},14:{code:"YA",name:"Yaren"}},NP:{1:{code:"BA",name:"Bagmati"},2:{code:"BH",name:"Bheri"},3:{code:"DH",name:"Dhawalagiri"},4:{code:"GA",name:"Gandaki"},5:{code:"JA",name:"Janakpur"},6:{code:"KA",name:"Karnali"},7:{code:"KO",name:"Kosi"},8:{code:"LU",name:"Lumbini"},9:{code:"MA",name:"Mahakali"},10:{code:"ME",name:"Mechi"},11:{code:"NA",name:"Narayani"},12:{code:"RA",name:"Rapti"},13:{code:"SA",name:"Sagarmatha"},14:{code:"SE",name:"Seti"}},NL:{1:{code:"DR",name:"Drenthe"},2:{code:"FL",name:"Flevoland"},3:{code:"FR",name:"Friesland"},4:{code:"GE",name:"Gelderland"},5:{code:"GR",name:"Groningen"},6:{code:"LI",name:"Limburg"},7:{code:"NB",name:"Noord Brabant"},8:{code:"NH",name:"Noord Holland"},9:{code:"OV",name:"Overijssel"},10:{code:"UT",name:"Utrecht"},11:{code:"ZE",name:"Zeeland"},12:{code:"ZH",name:"Zuid Holland"}},AN:{1:{code:"BON",name:"Bonaire"},2:{code:"CUR",name:"Curaçao"},3:{code:"SAB",name:"Saba"},4:{code:"SEU",name:"Sint Eustatius"},5:{code:"SMA",name:"Sint Maarten"}},NC:{1:{code:"L",name:"Iles Loyaute"},2:{code:"N",name:"Nord"},3:{code:"S",name:"Sud"}},NZ:{1:{code:"AUK",name:"Auckland"},2:{code:"BOP",name:"Bay of Plenty"},3:{code:"CAN",name:"Canterbury"},4:{code:"COR",name:"Coromandel"},5:{code:"GIS",name:"Gisborne"},6:{code:"FIO",name:"Fiordland"},7:{code:"HKB",name:"Hawke's Bay"},8:{code:"MBH",name:"Marlborough"},9:{code:"MWT",name:"Manawatu-Wanganui"},10:{code:"MCM",name:"Mt Cook-Mackenzie"},11:{code:"NSN",name:"Nelson"},12:{code:"NTL",name:"Northland"},13:{code:"OTA",name:"Otago"},14:{code:"STL",name:"Southland"},15:{code:"TKI",name:"Taranaki"},16:{code:"WGN",name:"Wellington"},17:{code:"WKO",name:"Waikato"},18:{code:"WAI",name:"Wairprarapa"},19:{code:"WTC",name:"West Coast"}},NI:{1:{code:"AN",name:"Atlantico Norte"},2:{code:"AS",name:"Atlantico Sur"},3:{code:"BO",name:"Boaco"},4:{code:"CA",name:"Carazo"},5:{code:"CI",name:"Chinandega"},6:{code:"CO",name:"Chontales"},7:{code:"ES",name:"Esteli"},8:{code:"GR",name:"Granada"},9:{code:"JI",name:"Jinotega"},10:{code:"LE",name:"Leon"},11:{code:"MD",name:"Madriz"},12:{code:"MN",name:"Managua"},13:{code:"MS",name:"Masaya"},14:{code:"MT",name:"Matagalpa"},15:{code:"NS",name:"Nuevo Segovia"},16:{code:"RS",name:"Rio San Juan"},17:{code:"RI",name:"Rivas"}},NE:{1:{code:"AG",name:"Agadez"},2:{code:"DF",name:"Diffa"},3:{code:"DS",name:"Dosso"},4:{code:"MA",name:"Maradi"},5:{code:"NM",name:"Niamey"},6:{code:"TH",name:"Tahoua"},7:{code:"TL",name:"Tillaberi"},8:{code:"ZD",name:"Zinder"}},NG:{1:{code:"AB",name:"Abia"},2:{code:"CT",name:"Abuja Federal Capital Territory"},3:{code:"AD",name:"Adamawa"},4:{code:"AK",name:"Akwa Ibom"},5:{code:"AN",name:"Anambra"},6:{code:"BC",name:"Bauchi"},7:{code:"BY",name:"Bayelsa"},8:{code:"BN",name:"Benue"},9:{code:"BO",name:"Borno"},10:{code:"CR",name:"Cross River"},11:{code:"DE",name:"Delta"},12:{code:"EB",name:"Ebonyi"},13:{code:"ED",name:"Edo"},14:{code:"EK",name:"Ekiti"},15:{code:"EN",name:"Enugu"},16:{code:"GO",name:"Gombe"},17:{code:"IM",name:"Imo"},18:{code:"JI",name:"Jigawa"},19:{code:"KD",name:"Kaduna"},20:{code:"KN",name:"Kano"},21:{code:"KT",name:"Katsina"},22:{code:"KE",name:"Kebbi"},23:{code:"KO",name:"Kogi"},24:{code:"KW",name:"Kwara"},25:{code:"LA",name:"Lagos"},26:{code:"NA",name:"Nassarawa"},27:{code:"NI",name:"Niger"},28:{code:"OG",name:"Ogun"},29:{code:"ONG",name:"Ondo"},30:{code:"OS",name:"Osun"},31:{code:"OY",name:"Oyo"},32:{code:"PL",name:"Plateau"},33:{code:"RI",name:"Rivers"},34:{code:"SO",name:"Sokoto"},35:{code:"TA",name:"Taraba"},36:{code:"YO",name:"Yobe"},37:{code:"ZA",name:"Zamfara"}},NU:{1:{code:"MAK",name:"Makefu"},2:{code:"TUA",name:"Tuapa"},3:{code:"NAM",name:"Namukulu"},4:{code:"HIK",name:"Hikutavake"},5:{code:"TOI",name:"Toi"},6:{code:"MUT",name:"Mutalau"},7:{code:"LAK",name:"Lakepa"},8:{code:"LIK",name:"Liku"},9:{code:"HAK",name:"Hakupu"},10:{code:"VAI",name:"Vaiea"},11:{code:"AVA",name:"Avatele"},12:{code:"TAM",name:"Tamakautoga"},13:{code:"ALO",name:"Alofi South"},14:{code:"ALO",name:"Alofi North"}},NF:{1:{code:"NOR",name:"Norfolk Island"}},MP:{1:{code:"N",name:"Northern Islands"},2:{code:"R",name:"Rota"},3:{code:"S",name:"Saipan"},4:{code:"T",name:"Tinian"}},NO:{1:{code:"AK",name:"Akershus"},2:{code:"AA",name:"Aust-Agder"},3:{code:"BU",name:"Buskerud"},4:{code:"FM",name:"Finnmark"},5:{code:"HM",name:"Hedmark"},6:{code:"HL",name:"Hordaland"},7:{code:"MR",name:"Møre og Romsdal"},8:{code:"NL",name:"Nordland"},9:{code:"NT",name:"Nord-Trøndelag"},10:{code:"OP",name:"Oppland"},11:{code:"OL",name:"Oslo"},12:{code:"RL",name:"Rogaland"},13:{code:"SJ",name:"Sogn og Fjordane"},14:{code:"ST",name:"Sør-Trøndelag"},15:{code:"SV",name:"Svalbard"},16:{code:"TM",name:"Telemark"},17:{code:"TR",name:"Troms"},18:{code:"VA",name:"Vest-Agder"},19:{code:"VF",name:"Vestfold"},20:{code:"OF",name:"Østfold"}},OM:{1:{code:"DA",name:"Ad Dakhiliyah"},2:{code:"BA",name:"Al Batinah"},3:{code:"WU",name:"Al Wusta"},4:{code:"SH",name:"Ash Sharqiyah"},5:{code:"ZA",name:"Az Zahirah"},6:{code:"MA",name:"Masqat"},7:{code:"MU",name:"Musandam"},8:{code:"ZU",name:"Zufar"}},PK:{1:{code:"B",name:"Balochistan"},2:{code:"T",name:"Federally Administered Tribal Ar"},3:{code:"I",name:"Islamabad Capital Territory"},4:{code:"N",name:"North-West Frontier"},5:{code:"P",name:"Punjab"},6:{code:"S",name:"Sindh"}},PW:{1:{code:"AM",name:"Aimeliik"},2:{code:"AR",name:"Airai"},3:{code:"AN",name:"Angaur"},4:{code:"HA",name:"Hatohobei"},5:{code:"KA",name:"Kayangel"},6:{code:"KO",name:"Koror"},7:{code:"ME",name:"Melekeok"},8:{code:"NA",name:"Ngaraard"},9:{code:"NG",name:"Ngarchelong"},10:{code:"ND",name:"Ngardmau"},11:{code:"NT",name:"Ngatpang"},12:{code:"NC",name:"Ngchesar"},13:{code:"NR",name:"Ngeremlengui"},14:{code:"NW",name:"Ngiwal"},15:{code:"PE",name:"Peleliu"},16:{code:"SO",name:"Sonsorol"}},PA:{1:{code:"BT",name:"Bocas del Toro"},2:{code:"CH",name:"Chiriqui"},3:{code:"CC",name:"Cocle"},4:{code:"CL",name:"Colon"},5:{code:"DA",name:"Darien"},6:{code:"HE",name:"Herrera"},7:{code:"LS",name:"Los Santos"},8:{code:"PA",name:"Panama"},9:{code:"SB",name:"San Blas"},10:{code:"VG",name:"Veraguas"}},PG:{1:{code:"BV",name:"Bougainville"},2:{code:"CE",name:"Central"},3:{code:"CH",name:"Chimbu"},4:{code:"EH",name:"Eastern Highlands"},5:{code:"EB",name:"East New Britain"},6:{code:"ES",name:"East Sepik"},7:{code:"EN",name:"Enga"},8:{code:"GU",name:"Gulf"},9:{code:"MD",name:"Madang"},10:{code:"MN",name:"Manus"},11:{code:"MB",name:"Milne Bay"},12:{code:"MR",name:"Morobe"},13:{code:"NC",name:"National Capital"},14:{code:"NI",name:"New Ireland"},15:{code:"NO",name:"Northern"},16:{code:"SA",name:"Sandaun"},17:{code:"SH",name:"Southern Highlands"},18:{code:"WE",name:"Western"},19:{code:"WH",name:"Western Highlands"},20:{code:"WB",name:"West New Britain"}},PY:{1:{code:"AG",name:"Alto Paraguay"},2:{code:"AN",name:"Alto Parana"},3:{code:"AM",name:"Amambay"},4:{code:"AS",name:"Asuncion"},5:{code:"BO",name:"Boqueron"},6:{code:"CG",name:"Caaguazu"},7:{code:"CZ",name:"Caazapa"},8:{code:"CN",name:"Canindeyu"},9:{code:"CE",name:"Central"},10:{code:"CC",name:"Concepcion"},11:{code:"CD",name:"Cordillera"},12:{code:"GU",name:"Guaira"},13:{code:"IT",name:"Itapua"},14:{code:"MI",name:"Misiones"},15:{code:"NE",name:"Neembucu"},16:{code:"PA",name:"Paraguari"},17:{code:"PH",name:"Presidente Hayes"},18:{code:"SP",name:"San Pedro"}},PE:{1:{code:"AM",name:"Amazonas"},2:{code:"AN",name:"Ancash"},3:{code:"AP",name:"Apurimac"},4:{code:"AR",name:"Arequipa"},5:{code:"AY",name:"Ayacucho"},6:{code:"CJ",name:"Cajamarca"},7:{code:"CL",name:"Callao"},8:{code:"CU",name:"Cusco"},9:{code:"HV",name:"Huancavelica"},10:{code:"HO",name:"Huanuco"},11:{code:"IC",name:"Ica"},12:{code:"JU",name:"Junin"},13:{code:"LD",name:"La Libertad"},14:{code:"LY",name:"Lambayeque"},15:{code:"LI",name:"Lima"},16:{code:"LO",name:"Loreto"},17:{code:"MD",name:"Madre de Dios"},18:{code:"MO",name:"Moquegua"},19:{code:"PA",name:"Pasco"},20:{code:"PI",name:"Piura"},21:{code:"PU",name:"Puno"},22:{code:"SM",name:"San Martin"},23:{code:"TA",name:"Tacna"},24:{code:"TU",name:"Tumbes"},25:{code:"UC",name:"Ucayali"}},PH:{1:{code:"ABR",name:"Abra"},2:{code:"ANO",name:"Agusan del Norte"},3:{code:"ASU",name:"Agusan del Sur"},4:{code:"AKL",name:"Aklan"},5:{code:"ALB",name:"Albay"},6:{code:"ANT",name:"Antique"},7:{code:"APY",name:"Apayao"},8:{code:"AUR",name:"Aurora"},9:{code:"BAS",name:"Basilan"},10:{code:"BTA",name:"Bataan"},11:{code:"BTE",name:"Batanes"},12:{code:"BTG",name:"Batangas"},13:{code:"BLR",name:"Biliran"},14:{code:"BEN",name:"Benguet"},15:{code:"BOL",name:"Bohol"},16:{code:"BUK",name:"Bukidnon"},17:{code:"BUL",name:"Bulacan"},18:{code:"CAG",name:"Cagayan"},19:{code:"CNO",name:"Camarines Norte"},20:{code:"CSU",name:"Camarines Sur"},21:{code:"CAM",name:"Camiguin"},22:{code:"CAP",name:"Capiz"},23:{code:"CAT",name:"Catanduanes"},24:{code:"CAV",name:"Cavite"},25:{code:"CEB",name:"Cebu"},26:{code:"CMP",name:"Compostela"},27:{code:"DNO",name:"Davao del Norte"},28:{code:"DSU",name:"Davao del Sur"},29:{code:"DOR",name:"Davao Oriental"},30:{code:"ESA",name:"Eastern Samar"},31:{code:"GUI",name:"Guimaras"},32:{code:"IFU",name:"Ifugao"},33:{code:"INO",name:"Ilocos Norte"},34:{code:"ISU",name:"Ilocos Sur"},35:{code:"ILO",name:"Iloilo"},36:{code:"ISA",name:"Isabela"},37:{code:"KAL",name:"Kalinga"},38:{code:"LAG",name:"Laguna"},39:{code:"LNO",name:"Lanao del Norte"},40:{code:"LSU",name:"Lanao del Sur"},41:{code:"UNI",name:"La Union"},42:{code:"LEY",name:"Leyte"},43:{code:"MAG",name:"Maguindanao"},44:{code:"MRN",name:"Marinduque"},45:{code:"MSB",name:"Masbate"},46:{code:"MIC",name:"Mindoro Occidental"},47:{code:"MIR",name:"Mindoro Oriental"},48:{code:"MSC",name:"Misamis Occidental"},49:{code:"MOR",name:"Misamis Oriental"},50:{code:"MOP",name:"Mountain"},51:{code:"NOC",name:"Negros Occidental"},52:{code:"NOR",name:"Negros Oriental"},53:{code:"NCT",name:"North Cotabato"},54:{code:"NSM",name:"Northern Samar"},55:{code:"NEC",name:"Nueva Ecija"},56:{code:"NVZ",name:"Nueva Vizcaya"},57:{code:"PLW",name:"Palawan"},58:{code:"PMP",name:"Pampanga"},59:{code:"PNG",name:"Pangasinan"},60:{code:"QZN",name:"Quezon"},61:{code:"QRN",name:"Quirino"},62:{code:"RIZ",name:"Rizal"},63:{code:"ROM",name:"Romblon"},64:{code:"SMR",name:"Samar"},65:{code:"SRG",name:"Sarangani"},66:{code:"SQJ",name:"Siquijor"},67:{code:"SRS",name:"Sorsogon"},68:{code:"SCO",name:"South Cotabato"},69:{code:"SLE",name:"Southern Leyte"},70:{code:"SKU",name:"Sultan Kudarat"},71:{code:"SLU",name:"Sulu"},72:{code:"SNO",name:"Surigao del Norte"},73:{code:"SSU",name:"Surigao del Sur"},74:{code:"TAR",name:"Tarlac"},75:{code:"TAW",name:"Tawi-Tawi"},76:{code:"ZBL",name:"Zambales"},77:{code:"ZNO",name:"Zamboanga del Norte"},78:{code:"ZSU",name:"Zamboanga del Sur"},79:{code:"ZSI",name:"Zamboanga Sibugay"}},PN:{1:{code:"PIT",name:"Pitcairn Island"}},PL:{1:{code:"DO",name:"Dolnośląskie"},2:{code:"KP",name:"Kujawsko-Pomorskie"},3:{code:"LL",name:"Lubelskie"},4:{code:"LU",name:"Lubuskie"},5:{code:"LO",name:"Łódzkie"},6:{code:"ML",name:"Małopolskie"},7:{code:"MZ",name:"Mazowieckie"},8:{code:"OP",name:"Opolskie"},9:{code:"PP",name:"Podkarpackie"},10:{code:"PL",name:"Podlaskie"},11:{code:"PM",name:"Pomorskie"},12:{code:"SL",name:"Śląskie"},13:{code:"SW",name:"Świętokrzyskie"},14:{code:"WM",name:"Warmińsko-Mazurskie"},15:{code:"WP",name:"Wielkopolskie"},16:{code:"ZA",name:"Zachodniopomorskie"}},PT:{1:{code:"AC",name:"Açores"},2:{code:"AV",name:"Aveiro"},3:{code:"BE",name:"Beja"},4:{code:"BR",name:"Braga"},5:{code:"BA",name:"Bragança"},6:{code:"CB",name:"Castelo Branco"},7:{code:"CO",name:"Coimbra"},8:{code:"EV",name:"évora"},9:{code:"FA",name:"Faro"},10:{code:"GU",name:"Guarda"},12:{code:"LE",name:"Leiria"},13:{code:"LI",name:"Lisboa"},14:{code:"ME",name:"Madeira"},15:{code:"PO",name:"Portalegre"},16:{code:"PR",name:"Porto"},17:{code:"SA",name:"Santarém"},18:{code:"SE",name:"SetÚbal"},19:{code:"VC",name:"Viana do Castelo"},20:{code:"VR",name:"Vila Real"},21:{code:"VI",name:"Viseu"}},PR:{1:{code:"A-A",name:"Añasco"},2:{code:"ADJ",name:"Adjuntas"},3:{code:"AGU",name:"Aguada"},4:{code:"AGU",name:"Aguadilla"},5:{code:"AGU",name:"Aguas Buenas"},6:{code:"AIB",name:"Aibonito"},7:{code:"ARE",name:"Arecibo"},8:{code:"ARR",name:"Arroyo"},9:{code:"BAR",name:"Barceloneta"},10:{code:"BAR",name:"Barranquitas"},11:{code:"BAY",name:"Bayamón"},12:{code:"CAB",name:"Cabo Rojo"},13:{code:"CAG",name:"Caguas"},14:{code:"CAM",name:"Camuy"},15:{code:"CAN",name:"Canóvanas"},16:{code:"CAR",name:"Carolina"},17:{code:"CAT",name:"Cataño"},18:{code:"CAY",name:"Cayey"},19:{code:"CEI",name:"Ceiba"},20:{code:"CIA",name:"Ciales"},21:{code:"CID",name:"Cidra"},22:{code:"COA",name:"Coamo"},23:{code:"COM",name:"Comerío"},24:{code:"COR",name:"Corozal"},25:{code:"CUL",name:"Culebra"},26:{code:"DOR",name:"Dorado"},27:{code:"FAJ",name:"Fajardo"},28:{code:"FLO",name:"Florida"},29:{code:"GUA",name:"Guayama"},30:{code:"GUA",name:"Guayanilla"},31:{code:"GUA",name:"Guaynabo"},32:{code:"GUR",name:"Gurabo"},33:{code:"GU¡",name:"Guánica"},34:{code:"HAT",name:"Hatillo"},35:{code:"HOR",name:"Hormigueros"},36:{code:"HUM",name:"Humacao"},37:{code:"ISA",name:"Isabela"},38:{code:"JAY",name:"Jayuya"},39:{code:"JUA",name:"Juana Díaz"},40:{code:"JUN",name:"Juncos"},41:{code:"LAJ",name:"Lajas"},42:{code:"LAR",name:"Lares"},43:{code:"LAS",name:"Las Marías"},44:{code:"LAS",name:"Las Piedras"},45:{code:"LOÕ",name:"Loíza"},46:{code:"LUQ",name:"Luquillo"},47:{code:"MAN",name:"Manatí"},48:{code:"MAR",name:"Maricao"},49:{code:"MAU",name:"Maunabo"},50:{code:"MAY",name:"Mayagüez"},51:{code:"MOC",name:"Moca"},52:{code:"MOR",name:"Morovis"},53:{code:"NAG",name:"Naguabo"},54:{code:"NAR",name:"Naranjito"},55:{code:"ORO",name:"Orocovis"},56:{code:"PAT",name:"Patillas"},57:{code:"PE-",name:"Peñuelas"},58:{code:"PON",name:"Ponce"},59:{code:"QUE",name:"Quebradillas"},60:{code:"RIN",name:"Rincón"},61:{code:"RIO",name:"Rio Grande"},62:{code:"SAB",name:"Sabana Grande"},63:{code:"SAL",name:"Salinas"},64:{code:"SAN",name:"San Germàn"},65:{code:"SAN",name:"San Juan"},66:{code:"SAN",name:"San Lorenzo"},67:{code:"SAN",name:"San Sebastiàn"},68:{code:"SAN",name:"Santa Isabel"},69:{code:"TOA",name:"Toa Alta"},70:{code:"TOA",name:"Toa Baja"},71:{code:"TRU",name:"Trujillo Alto"},72:{code:"UTU",name:"Utuado"},73:{code:"VEG",name:"Vega Alta"},74:{code:"VEG",name:"Vega Baja"},75:{code:"VIE",name:"Vieques"},76:{code:"VIL",name:"Villalba"},77:{code:"YAB",name:"Yabucoa"},78:{code:"YAU",name:"Yauco"}},QA:{1:{code:"DW",name:"Ad Dawhah"},2:{code:"GW",name:"Al Ghuwayriyah"},3:{code:"JM",name:"Al Jumayliyah"},4:{code:"KR",name:"Al Khawr"},5:{code:"WK",name:"Al Wakrah"},6:{code:"RN",name:"Ar Rayyan"},7:{code:"JB",name:"Jarayan al Batinah"},8:{code:"MS",name:"Madinat ash Shamal"},9:{code:"UD",name:"Umm Sa'id"},10:{code:"UL",name:"Umm Salal"}},RO:{1:{code:"AB",name:"Alba"},2:{code:"AR",name:"Arad"},3:{code:"AG",name:"Arges"},4:{code:"BC",name:"Bacau"},5:{code:"BH",name:"Bihor"},6:{code:"BN",name:"Bistrita-Nasaud"},7:{code:"BT",name:"Botosani"},8:{code:"BV",name:"Brasov"},9:{code:"BR",name:"Braila"},10:{code:"B",name:"Bucuresti"},11:{code:"BZ",name:"Buzau"},12:{code:"CS",name:"Caras-Severin"},13:{code:"CL",name:"Calarasi"},14:{code:"CJ",name:"Cluj"},15:{code:"CT",name:"Constanta"},16:{code:"CV",name:"Covasna"},17:{code:"DB",name:"Dimbovita"},18:{code:"DJ",name:"Dolj"},19:{code:"GL",name:"Galati"},20:{code:"GR",name:"Giurgiu"},21:{code:"GJ",name:"Gorj"},22:{code:"HR",name:"Harghita"},23:{code:"HD",name:"Hunedoara"},24:{code:"IL",name:"Ialomita"},25:{code:"IS",name:"Iasi"},26:{code:"IF",name:"Ilfov"},27:{code:"MM",name:"Maramures"},28:{code:"MH",name:"Mehedinti"},29:{code:"MS",name:"Mures"},30:{code:"NT",name:"Neamt"},31:{code:"OT",name:"Olt"},32:{code:"PH",name:"Prahova"},33:{code:"SM",name:"Satu-Mare"},34:{code:"SJ",name:"Salaj"},35:{code:"SB",name:"Sibiu"},36:{code:"SV",name:"Suceava"},37:{code:"TR",name:"Teleorman"},38:{code:"TM",name:"Timis"},39:{code:"TL",name:"Tulcea"},40:{code:"VS",name:"Vaslui"},41:{code:"VL",name:"Valcea"},42:{code:"VN",name:"Vrancea"}},RU:{1:{code:"AB",name:"Abakan"},2:{code:"AG",name:"Aginskoye"},3:{code:"AN",name:"Anadyr"},4:{code:"AR",name:"Arkahangelsk"},5:{code:"AS",name:"Astrakhan"},6:{code:"BA",name:"Barnaul"},7:{code:"BE",name:"Belgorod"},8:{code:"BI",name:"Birobidzhan"},9:{code:"BL",name:"Blagoveshchensk"},10:{code:"BR",name:"Bryansk"},11:{code:"CH",name:"Cheboksary"},12:{code:"CL",name:"Chelyabinsk"},13:{code:"CR",name:"Cherkessk"},14:{code:"CI",name:"Chita"},15:{code:"DU",name:"Dudinka"},16:{code:"EL",name:"Elista"},17:{code:"GO",name:"Gomo-Altaysk"},18:{code:"GA",name:"Gorno-Altaysk"},19:{code:"GR",name:"Groznyy"},20:{code:"IR",name:"Irkutsk"},21:{code:"IV",name:"Ivanovo"},22:{code:"IZ",name:"Izhevsk"},23:{code:"KA",name:"Kalinigrad"},24:{code:"KL",name:"Kaluga"},25:{code:"KS",name:"Kasnodar"},26:{code:"KZ",name:"Kazan"},27:{code:"KE",name:"Kemerovo"},28:{code:"KH",name:"Khabarovsk"},29:{code:"KM",name:"Khanty-Mansiysk"},30:{code:"KO",name:"Kostroma"},31:{code:"KR",name:"Krasnodar"},32:{code:"KN",name:"Krasnoyarsk"},33:{code:"KU",name:"Kudymkar"},34:{code:"KG",name:"Kurgan"},35:{code:"KK",name:"Kursk"},36:{code:"KY",name:"Kyzyl"},37:{code:"LI",name:"Lipetsk"},38:{code:"MA",name:"Magadan"},39:{code:"MK",name:"Makhachkala"},40:{code:"MY",name:"Maykop"},41:{code:"MO",name:"Moscow"},42:{code:"MU",name:"Murmansk"},43:{code:"NA",name:"Nalchik"},44:{code:"NR",name:"Naryan Mar"},45:{code:"NZ",name:"Nazran"},46:{code:"NI",name:"Nizhniy Novgorod"},47:{code:"NO",name:"Novgorod"},48:{code:"NV",name:"Novosibirsk"},49:{code:"OM",name:"Omsk"},50:{code:"OR",name:"Orel"},51:{code:"OE",name:"Orenburg"},52:{code:"PA",name:"Palana"},53:{code:"PE",name:"Penza"},54:{code:"PR",name:"Perm"},55:{code:"PK",name:"Petropavlovsk-Kamchatskiy"},56:{code:"PT",name:"Petrozavodsk"},57:{code:"PS",name:"Pskov"},58:{code:"RO",name:"Rostov-na-Donu"},59:{code:"RY",name:"Ryazan"},60:{code:"SL",name:"Salekhard"},61:{code:"SA",name:"Samara"},62:{code:"SR",name:"Saransk"},63:{code:"SV",name:"Saratov"},64:{code:"SM",name:"Smolensk"},65:{code:"SP",name:"St. Petersburg"},66:{code:"ST",name:"Stavropol"},67:{code:"SY",name:"Syktyvkar"},68:{code:"TA",name:"Tambov"},69:{code:"TO",name:"Tomsk"},70:{code:"TU",name:"Tula"},71:{code:"TR",name:"Tura"},72:{code:"TV",name:"Tver"},73:{code:"TY",name:"Tyumen"},74:{code:"UF",name:"Ufa"},75:{code:"UL",name:"Ul'yanovsk"},76:{code:"UU",name:"Ulan-Ude"},77:{code:"US",name:"Ust'-Ordynskiy"},78:{code:"VL",name:"Vladikavkaz"},79:{code:"VA",name:"Vladimir"},80:{code:"VV",name:"Vladivostok"},81:{code:"VG",name:"Volgograd"},82:{code:"VD",name:"Vologda"},83:{code:"VO",name:"Voronezh"},84:{code:"VY",name:"Vyatka"},85:{code:"YA",name:"Yakutsk"},86:{code:"YR",name:"Yaroslavl"},87:{code:"YE",name:"Yekaterinburg"},88:{code:"YO",name:"Yoshkar-Ola"}},RW:{1:{code:"BU",name:"Butare"},2:{code:"BY",name:"Byumba"},3:{code:"CY",name:"Cyangugu"},4:{code:"GK",name:"Gikongoro"},5:{code:"GS",name:"Gisenyi"},6:{code:"GT",name:"Gitarama"},7:{code:"KG",name:"Kibungo"},8:{code:"KY",name:"Kibuye"},9:{code:"KR",name:"Kigali Rurale"},10:{code:"KV",name:"Kigali-ville"},11:{code:"RU",name:"Ruhengeri"},12:{code:"UM",name:"Umutara"}},KN:{1:{code:"CCN",name:"Christ Church Nichola Town"},2:{code:"SAS",name:"Saint Anne Sandy Point"},3:{code:"SGB",name:"Saint George Basseterre"},4:{code:"SGG",name:"Saint George Gingerland"},5:{code:"SJW",name:"Saint James Windward"},6:{code:"SJC",name:"Saint John Capesterre"},7:{code:"SJF",name:"Saint John Figtree"},8:{code:"SMC",name:"Saint Mary Cayon"},9:{code:"CAP",name:"Saint Paul Capesterre"},10:{code:"CHA",name:"Saint Paul Charlestown"},11:{code:"SPB",name:"Saint Peter Basseterre"},12:{code:"STL",name:"Saint Thomas Lowland"},13:{code:"STM",name:"Saint Thomas Middle Island"},14:{code:"TPP",name:"Trinity Palmetto Point"}},LC:{1:{code:"AR",name:"Anse-la-Raye"},2:{code:"CA",name:"Castries"},3:{code:"CH",name:"Choiseul"},4:{code:"DA",name:"Dauphin"},5:{code:"DE",name:"Dennery"},6:{code:"GI",name:"Gros-Islet"},7:{code:"LA",name:"Laborie"},8:{code:"MI",name:"Micoud"},9:{code:"PR",name:"Praslin"},10:{code:"SO",name:"Soufriere"},11:{code:"VF",name:"Vieux-Fort"}},VC:{1:{code:"C",name:"Charlotte"},2:{code:"R",name:"Grenadines"},3:{code:"A",name:"Saint Andrew"},4:{code:"D",name:"Saint David"},5:{code:"G",name:"Saint George"},6:{code:"P",name:"Saint Patrick"}},WS:{1:{code:"AN",name:"A'ana"},2:{code:"AI",name:"Aiga-i-le-Tai"},3:{code:"AT",name:"Atua"},4:{code:"FA",name:"Fa'asaleleaga"},5:{code:"GE",name:"Gaga'emauga"},6:{code:"GF",name:"Gagaifomauga"},7:{code:"PA",name:"Palauli"},8:{code:"SA",name:"Satupa'itea"},9:{code:"TU",name:"Tuamasaga"},10:{code:"VF",name:"Va'a-o-Fonoti"},11:{code:"VS",name:"Vaisigano"}},SM:{1:{code:"AC",name:"Acquaviva"},2:{code:"BM",name:"Borgo Maggiore"},3:{code:"CH",name:"Chiesanuova"},4:{code:"DO",name:"Domagnano"},5:{code:"FA",name:"Faetano"},6:{code:"FI",name:"Fiorentino"},7:{code:"MO",name:"Montegiardino"},8:{code:"SM",name:"Citta di San Marino"},9:{code:"SE",name:"Serravalle"}},ST:{1:{code:"S",name:"Sao Tome"},2:{code:"P",name:"Principe"}},SA:{1:{code:"BH",name:"Al Bahah"},2:{code:"HS",name:"Al Hudud ash Shamaliyah"},3:{code:"JF",name:"Al Jawf"},4:{code:"MD",name:"Al Madinah"},5:{code:"QS",name:"Al Qasim"},6:{code:"RD",name:"Ar Riyad"},7:{code:"AQ",name:"Ash Sharqiyah (Eastern)"},8:{code:"AS",name:"'Asir"},9:{code:"HL",name:"Ha'il"},10:{code:"JZ",name:"Jizan"},11:{code:"ML",name:"Makkah"},12:{code:"NR",name:"Najran"},13:{code:"TB",name:"Tabuk"}},SN:{1:{code:"DA",name:"Dakar"},2:{code:"DI",name:"Diourbel"},3:{code:"FA",name:"Fatick"},4:{code:"KA",name:"Kaolack"},5:{code:"KO",name:"Kolda"},6:{code:"LO",name:"Louga"},7:{code:"MA",name:"Matam"},8:{code:"SL",name:"Saint-Louis"},9:{code:"TA",name:"Tambacounda"},10:{code:"TH",name:"Thies"},11:{code:"ZI",name:"Ziguinchor"}},SC:{1:{code:"AP",name:"Anse aux Pins"},2:{code:"AB",name:"Anse Boileau"},3:{code:"AE",name:"Anse Etoile"},4:{code:"AL",name:"Anse Louis"},5:{code:"AR",name:"Anse Royale"},6:{code:"BL",name:"Baie Lazare"},7:{code:"BS",name:"Baie Sainte Anne"},8:{code:"BV",name:"Beau Vallon"},9:{code:"BA",name:"Bel Air"},10:{code:"BO",name:"Bel Ombre"},11:{code:"CA",name:"Cascade"},12:{code:"GL",name:"Glacis"},13:{code:"GM",name:"Grand' Anse (on Mahe)"},14:{code:"GP",name:"Grand' Anse (on Praslin)"},15:{code:"DG",name:"La Digue"},16:{code:"RA",name:"La Riviere Anglaise"},17:{code:"MB",name:"Mont Buxton"},18:{code:"MF",name:"Mont Fleuri"},19:{code:"PL",name:"Plaisance"},20:{code:"PR",name:"Pointe La Rue"},21:{code:"PG",name:"Port Glaud"},22:{code:"SL",name:"Saint Louis"},23:{code:"TA",name:"Takamaka"}},SL:{1:{code:"E",name:"Eastern"},2:{code:"N",name:"Northern"},3:{code:"S",name:"Southern"},4:{code:"W",name:"Western"}},SK:{1:{code:"BA",name:"Banskobystricky"},2:{code:"BR",name:"Bratislavsky"},3:{code:"KO",name:"Kosicky"},4:{code:"NI",name:"Nitriansky"},5:{code:"PR",name:"Presovsky"},6:{code:"TC",name:"Trenciansky"},7:{code:"TV",name:"Trnavsky"},8:{code:"ZI",name:"Zilinsky"}},SI:{1:{code:"4",name:"Štajerska"},2:{code:"2A",name:"Gorenjska"},3:{code:"5",name:"Prekmurje"},4:{code:"3",name:"Koroška"},5:{code:"2B",name:"Notranjska"},6:{code:"1",name:"Primorska"},7:{code:"2C",name:"Dolenjska"},8:{code:"2C",name:"Bela Krajina"}},SB:{1:{code:"CE",name:"Central"},2:{code:"CH",name:"Choiseul"},3:{code:"GC",name:"Guadalcanal"},4:{code:"HO",name:"Honiara"},5:{code:"IS",name:"Isabel"},6:{code:"MK",name:"Makira"},7:{code:"ML",name:"Malaita"},8:{code:"RB",name:"Rennell and Bellona"},9:{code:"TM",name:"Temotu"},10:{code:"WE",name:"Western"}},SO:{1:{code:"AW",name:"Awdal"},2:{code:"BK",name:"Bakool"},3:{code:"BN",name:"Banaadir"},4:{code:"BR",name:"Bari"},5:{code:"BY",name:"Bay"},6:{code:"GA",name:"Galguduud"},7:{code:"GE",name:"Gedo"},8:{code:"HI",name:"Hiiraan"},9:{code:"JD",name:"Jubbada Dhexe"},10:{code:"JH",name:"Jubbada Hoose"},11:{code:"MU",name:"Mudug"},12:{code:"NU",name:"Nugaal"},13:{code:"SA",name:"Sanaag"},14:{code:"SD",name:"Shabeellaha Dhexe"},15:{code:"SH",name:"Shabeellaha Hoose"},16:{code:"SL",name:"Sool"},17:{code:"TO",name:"Togdheer"},18:{code:"WG",name:"Woqooyi Galbeed"}},ZA:{1:{code:"EC",name:"Eastern Cape"},2:{code:"FS",name:"Free State"},3:{code:"GT",name:"Gauteng"},4:{code:"KN",name:"KwaZulu-Natal"},5:{code:"LP",name:"Limpopo"},6:{code:"MP",name:"Mpumalanga"},7:{code:"NW",name:"North West"},8:{code:"NC",name:"Northern Cape"},9:{code:"WC",name:"Western Cape"}},ES:{1:{code:"CA",name:"La Coruña"},2:{code:"AL",name:"Álava"},3:{code:"AB",name:"Albacete"},4:{code:"AC",name:"Alicante"},5:{code:"AM",name:"Almeria"},6:{code:"AS",name:"Asturias"},7:{code:"AV",name:"Ávila"},8:{code:"BJ",name:"Badajoz"},9:{code:"IB",name:"Baleares"},10:{code:"BA",name:"Barcelona"},11:{code:"BU",name:"Burgos"},12:{code:"CC",name:"Cáceres"},13:{code:"CZ",name:"Cádiz"},14:{code:"CT",name:"Cantabria"},15:{code:"CL",name:"Castellón"},16:{code:"CE",name:"Ceuta"},17:{code:"CR",name:"Ciudad Real"},18:{code:"CD",name:"Córdoba"},19:{code:"CU",name:"Cuenca"},20:{code:"GI",name:"Gerona"},21:{code:"GD",name:"Granada"},22:{code:"GJ",name:"Guadalajara"},23:{code:"GP",name:"Guipúzcoa"},24:{code:"HL",name:"Huelva"},25:{code:"HS",name:"Huesca"},26:{code:"JN",name:"Jaén"},27:{code:"RJ",name:"La Rioja"},28:{code:"PM",name:"Las Palmas"},29:{code:"LE",name:"León"},30:{code:"LL",name:"Lérida"},31:{code:"LG",name:"Lugo"},32:{code:"MD",name:"Madrid"},33:{code:"MA",name:"Málaga"},34:{code:"ML",name:"Melilla"},35:{code:"MU",name:"Murcia"},36:{code:"NV",name:"Navarra"},37:{code:"OU",name:"Ourense"},38:{code:"PL",name:"Palencia"},39:{code:"PO",name:"Pontevedra"},40:{code:"SL",name:"Salamanca"},41:{code:"SC",name:"Santa Cruz de Tenerife"},42:{code:"SG",name:"Segovia"},43:{code:"SV",name:"Sevilla"},44:{code:"SO",name:"Soria"},45:{code:"TA",name:"Tarragona"},46:{code:"TE",name:"Teruel"},47:{code:"TO",name:"Toledo"},48:{code:"VC",name:"Valencia"},49:{code:"VD",name:"Valladolid"},50:{code:"VZ",name:"Vizcaya"},51:{code:"ZM",name:"Zamora"},52:{code:"ZR",name:"Zaragoza"}},LK:{1:{code:"CE",name:"Central"},2:{code:"EA",name:"Eastern"},3:{code:"NC",name:"North Central"},4:{code:"NO",name:"Northern"},5:{code:"NW",name:"North Western"},6:{code:"SA",name:"Sabaragamuwa"},7:{code:"SO",name:"Southern"},8:{code:"UV",name:"Uva"},9:{code:"WE",name:"Western"}},SH:{1:{code:"A",name:"Ascension"},2:{code:"S",name:"Saint Helena"},3:{code:"T",name:"Tristan da Cunha"}},PM:{1:{code:"P",name:"Saint Pierre"},2:{code:"M",name:"Miquelon"}},SD:{1:{code:"ANL",name:"A'ali an Nil"},2:{code:"BAM",name:"Al Bahr al Ahmar"},3:{code:"BRT",name:"Al Buhayrat"},4:{code:"JZR",name:"Al Jazirah"},5:{code:"KRT",name:"Al Khartum"},6:{code:"QDR",name:"Al Qadarif"},7:{code:"WDH",name:"Al Wahdah"},8:{code:"ANB",name:"An Nil al Abyad"},9:{code:"ANZ",name:"An Nil al Azraq"},10:{code:"ASH",name:"Ash Shamaliyah"},11:{code:"BJA",name:"Bahr al Jabal"},12:{code:"GIS",name:"Gharb al Istiwa'iyah"},13:{code:"GBG",name:"Gharb Bahr al Ghazal"},14:{code:"GDA",name:"Gharb Darfur"},15:{code:"GKU",name:"Gharb Kurdufan"},16:{code:"JDA",name:"Janub Darfur"},17:{code:"JKU",name:"Janub Kurdufan"},18:{code:"JQL",name:"Junqali"},19:{code:"KSL",name:"Kassala"},20:{code:"NNL",name:"Nahr an Nil"},21:{code:"SBG",name:"Shamal Bahr al Ghazal"},22:{code:"SDA",name:"Shamal Darfur"},23:{code:"SKU",name:"Shamal Kurdufan"},24:{code:"SIS",name:"Sharq al Istiwa'iyah"},25:{code:"SNR",name:"Sinnar"},26:{code:"WRB",name:"Warab"}},SR:{1:{code:"BR",name:"Brokopondo"},2:{code:"CM",name:"Commewijne"},3:{code:"CR",name:"Coronie"},4:{code:"MA",name:"Marowijne"},5:{code:"NI",name:"Nickerie"},6:{code:"PA",name:"Para"},7:{code:"PM",name:"Paramaribo"},9:{code:"SA",name:"Saramacca"},10:{code:"SI",name:"Sipaliwini"},11:{code:"WA",name:"Wanica"}},SZ:{1:{code:"H",name:"Hhohho"},2:{code:"L",name:"Lubombo"},3:{code:"M",name:"Manzini"},4:{code:"S",name:"Shishelweni"}},SE:{1:{code:"K",name:"Blekinge"},2:{code:"W",name:"Dalama"},3:{code:"I",name:"Gotland"},4:{code:"X",name:"Gävleborg"},5:{code:"N",name:"Halland"},6:{code:"Z",name:"Jämtland"},7:{code:"F",name:"Jönköping"},8:{code:"H",name:"Kalmar"},9:{code:"G",name:"Kronoberg"},10:{code:"BD",name:"Norrbotten"},11:{code:"M",name:"Skåne"},12:{code:"AB",name:"Stockholm"},13:{code:"D",name:"Södermanland"},14:{code:"C",name:"Uppsala"},15:{code:"S",name:"Värmland"},16:{code:"AC",name:"Västerbotten"},17:{code:"Y",name:"Västernorrland"},18:{code:"U",name:"Västmanland"},19:{code:"O",name:"Västra Götaland"},20:{code:"T",name:"Örebro"},21:{code:"E",name:"Östergötland"}},CH:{1:{code:"AG",name:"Aargau"},2:{code:"AR",name:"Appenzell Ausserrhoden"},3:{code:"AI",name:"Appenzell Innerrhoden"},4:{code:"BS",name:"Basel-Stadt"},5:{code:"BL",name:"Basel-Landschaft"},6:{code:"BE",name:"Bern"},7:{code:"FR",name:"Fribourg"},8:{code:"GE",name:"Genève"},9:{code:"GL",name:"Glarus"},10:{code:"GR",name:"Graubünden"},11:{code:"JU",name:"Jura"},12:{code:"LU",name:"Lucerne"},13:{code:"NE",name:"Neuchâtel"},14:{code:"NW",name:"Nidwalden"},15:{code:"OW",name:"Obwalden"},16:{code:"SG",name:"St. Gallen"},17:{code:"SH",name:"Schaffhausen"},18:{code:"SZ",name:"Schwyz"},19:{code:"SO",name:"Solothurn"},20:{code:"TG",name:"Thurgau"},21:{code:"TI",name:"Ticino"},22:{code:"UR",name:"Uri"},23:{code:"VS",name:"Valais"},24:{code:"VD",name:"Vaud"},25:{code:"ZG",name:"Zug"},26:{code:"ZH",name:"Zürich"}},SY:{1:{code:"HA",name:"Al Hasakah"},2:{code:"LA",name:"Al Ladhiqiyah"},3:{code:"QU",name:"Al Qunaytirah"},4:{code:"RQ",name:"Ar Raqqah"},5:{code:"SU",name:"As Suwayda"},6:{code:"DA",name:"Dara"},7:{code:"DZ",name:"Dayr az Zawr"},8:{code:"DI",name:"Dimashq"},9:{code:"HL",name:"Halab"},10:{code:"HM",name:"Hamah"},11:{code:"HI",name:"Hims"},12:{code:"ID",name:"Idlib"},13:{code:"RD",name:"Rif Dimashq"},14:{code:"TA",name:"Tartus"}},TW:{1:{code:"CH",name:"Chang-hua"},2:{code:"CI",name:"Chia-i"},3:{code:"HS",name:"Hsin-chu"},4:{code:"HL",name:"Hua-lien"},5:{code:"IL",name:"I-lan"},6:{code:"KH",name:"Kao-hsiung county"},7:{code:"KM",name:"Kin-men"},8:{code:"LC",name:"Lien-chiang"},9:{code:"ML",name:"Miao-li"},10:{code:"NT",name:"Nan-t'ou"},11:{code:"PH",name:"P'eng-hu"},12:{code:"PT",name:"P'ing-tung"},13:{code:"TG",name:"T'ai-chung"},14:{code:"TA",name:"T'ai-nan"},15:{code:"TP",name:"T'ai-pei county"},16:{code:"TT",name:"T'ai-tung"},17:{code:"TY",name:"T'ao-yuan"},18:{code:"YL",name:"Yun-lin"},19:{code:"CC",name:"Chia-i city"},20:{code:"CL",name:"Chi-lung"},21:{code:"HC",name:"Hsin-chu"},22:{code:"TH",name:"T'ai-chung"},23:{code:"TN",name:"T'ai-nan"},24:{code:"KC",name:"Kao-hsiung city"},25:{code:"TC",name:"T'ai-pei city"}},TJ:{1:{code:"GB",name:"Gorno-Badakhstan"},2:{code:"KT",name:"Khatlon"},3:{code:"SU",name:"Sughd"}},TZ:{1:{code:"AR",name:"Arusha"},2:{code:"DS",name:"Dar es Salaam"},3:{code:"DO",name:"Dodoma"},4:{code:"IR",name:"Iringa"},5:{code:"KA",name:"Kagera"},6:{code:"KI",name:"Kigoma"},7:{code:"KJ",name:"Kilimanjaro"},8:{code:"LN",name:"Lindi"},9:{code:"MY",name:"Manyara"},10:{code:"MR",name:"Mara"},11:{code:"MB",name:"Mbeya"},12:{code:"MO",name:"Morogoro"},13:{code:"MT",name:"Mtwara"},14:{code:"MW",name:"Mwanza"},15:{code:"PN",name:"Pemba North"},16:{code:"PS",name:"Pemba South"},17:{code:"PW",name:"Pwani"},18:{code:"RK",name:"Rukwa"},19:{code:"RV",name:"Ruvuma"},20:{code:"SH",name:"Shinyanga"},21:{code:"SI",name:"Singida"},22:{code:"TB",name:"Tabora"},23:{code:"TN",name:"Tanga"},24:{code:"ZC",name:"Zanzibar Central/South"},25:{code:"ZN",name:"Zanzibar North"},26:{code:"ZU",name:"Zanzibar Urban/West"}},TH:{1:{code:"Amnat Charoen",name:"Amnat Charoen"},2:{code:"Ang Thong",name:"Ang Thong"},3:{code:"Ayutthaya",name:"Ayutthaya"},4:{code:"Bangkok",name:"Bangkok"},5:{code:"Buriram",name:"Buriram"},6:{code:"Chachoengsao",name:"Chachoengsao"},7:{code:"Chai Nat",name:"Chai Nat"},8:{code:"Chaiyaphum",name:"Chaiyaphum"},9:{code:"Chanthaburi",name:"Chanthaburi"},10:{code:"Chiang Mai",name:"Chiang Mai"},11:{code:"Chiang Rai",name:"Chiang Rai"},12:{code:"Chon Buri",name:"Chon Buri"},13:{code:"Chumphon",name:"Chumphon"},14:{code:"Kalasin",name:"Kalasin"},15:{code:"Kamphaeng Phet",name:"Kamphaeng Phet"},16:{code:"Kanchanaburi",name:"Kanchanaburi"},17:{code:"Khon Kaen",name:"Khon Kaen"},18:{code:"Krabi",name:"Krabi"},19:{code:"Lampang",name:"Lampang"},20:{code:"Lamphun",name:"Lamphun"},21:{code:"Loei",name:"Loei"},22:{code:"Lop Buri",name:"Lop Buri"},23:{code:"Mae Hong Son",name:"Mae Hong Son"},24:{code:"Maha Sarakham",name:"Maha Sarakham"},25:{code:"Mukdahan",name:"Mukdahan"},26:{code:"Nakhon Nayok",name:"Nakhon Nayok"},27:{code:"Nakhon Pathom",name:"Nakhon Pathom"},28:{code:"Nakhon Phanom",name:"Nakhon Phanom"},29:{code:"Nakhon Ratchasima",name:"Nakhon Ratchasima"},30:{code:"Nakhon Sawan",name:"Nakhon Sawan"},31:{code:"Nakhon Si Thammarat",name:"Nakhon Si Thammarat"},32:{code:"Nan",name:"Nan"},33:{code:"Narathiwat",name:"Narathiwat"},34:{code:"Nong Bua Lamphu",name:"Nong Bua Lamphu"},35:{code:"Nong Khai",name:"Nong Khai"},36:{code:"Nonthaburi",name:"Nonthaburi"},37:{code:"Pathum Thani",name:"Pathum Thani"},38:{code:"Pattani",name:"Pattani"},39:{code:"Phangnga",name:"Phangnga"},40:{code:"Phatthalung",name:"Phatthalung"},41:{code:"Phayao",name:"Phayao"},42:{code:"Phetchabun",name:"Phetchabun"},43:{code:"Phetchaburi",name:"Phetchaburi"},44:{code:"Phichit",name:"Phichit"},45:{code:"Phitsanulok",name:"Phitsanulok"},46:{code:"Phrae",name:"Phrae"},47:{code:"Phuket",name:"Phuket"},48:{code:"Prachin Buri",name:"Prachin Buri"},49:{code:"Prachuap Khiri Khan",name:"Prachuap Khiri Khan"},50:{code:"Ranong",name:"Ranong"},51:{code:"Ratchaburi",name:"Ratchaburi"},52:{code:"Rayong",name:"Rayong"},53:{code:"Roi Et",name:"Roi Et"},54:{code:"Sa Kaeo",name:"Sa Kaeo"},55:{code:"Sakon Nakhon",name:"Sakon Nakhon"},56:{code:"Samut Prakan",name:"Samut Prakan"},57:{code:"Samut Sakhon",name:"Samut Sakhon"},58:{code:"Samut Songkhram",name:"Samut Songkhram"},59:{code:"Sara Buri",name:"Sara Buri"},60:{code:"Satun",name:"Satun"},61:{code:"Sing Buri",name:"Sing Buri"},62:{code:"Sisaket",name:"Sisaket"},63:{code:"Songkhla",name:"Songkhla"},64:{code:"Sukhothai",name:"Sukhothai"},65:{code:"Suphan Buri",name:"Suphan Buri"},66:{code:"Surat Thani",name:"Surat Thani"},67:{code:"Surin",name:"Surin"},68:{code:"Tak",name:"Tak"},69:{code:"Trang",name:"Trang"},70:{code:"Trat",name:"Trat"},71:{code:"Ubon Ratchathani",name:"Ubon Ratchathani"},72:{code:"Udon Thani",name:"Udon Thani"},73:{code:"Uthai Thani",name:"Uthai Thani"},74:{code:"Uttaradit",name:"Uttaradit"},75:{code:"Yala",name:"Yala"},76:{code:"Yasothon",name:"Yasothon"}},TG:{1:{code:"K",name:"Kara"},2:{code:"P",name:"Plateaux"},3:{code:"S",name:"Savanes"},4:{code:"C",name:"Centrale"},5:{code:"M",name:"Maritime"}},TK:{1:{code:"A",name:"Atafu"},2:{code:"F",name:"Fakaofo"},3:{code:"N",name:"Nukunonu"}},TO:{1:{code:"H",name:"Ha'apai"},2:{code:"T",name:"Tongatapu"},3:{code:"V",name:"Vava'u"}},TT:{1:{code:"CT",name:"Couva/Tabaquite/Talparo"},2:{code:"DM",name:"Diego Martin"},3:{code:"MR",name:"Mayaro/Rio Claro"},4:{code:"PD",name:"Penal/Debe"},5:{code:"PT",name:"Princes Town"},6:{code:"SG",name:"Sangre Grande"},7:{code:"SL",name:"San Juan/Laventille"},8:{code:"SI",name:"Siparia"},9:{code:"TP",name:"Tunapuna/Piarco"},10:{code:"PS",name:"Port of Spain"},11:{code:"SF",name:"San Fernando"},12:{code:"AR",name:"Arima"},13:{code:"PF",name:"Point Fortin"},14:{code:"CH",name:"Chaguanas"},15:{code:"TO",name:"Tobago"}},TN:{1:{code:"AR",name:"Ariana"},2:{code:"BJ",name:"Beja"},3:{code:"BA",name:"Ben Arous"},4:{code:"BI",name:"Bizerte"},5:{code:"GB",name:"Gabes"},6:{code:"GF",name:"Gafsa"},7:{code:"JE",name:"Jendouba"},8:{code:"KR",name:"Kairouan"},9:{code:"KS",name:"Kasserine"},10:{code:"KB",name:"Kebili"},11:{code:"KF",name:"Kef"},12:{code:"MH",name:"Mahdia"},13:{code:"MN",name:"Manouba"},14:{code:"ME",name:"Medenine"},15:{code:"MO",name:"Monastir"},16:{code:"NA",name:"Nabeul"},17:{code:"SF",name:"Sfax"},18:{code:"SD",name:"Sidi"},19:{code:"SL",name:"Siliana"},20:{code:"SO",name:"Sousse"},21:{code:"TA",name:"Tataouine"},22:{code:"TO",name:"Tozeur"},23:{code:"TU",name:"Tunis"},24:{code:"ZA",name:"Zaghouan"}},TR:{1:{code:"ADA",name:"Adana"},2:{code:"ADI",name:"Adiyaman"},3:{code:"AFY",name:"Afyonkarahisar"},4:{code:"AGR",name:"Agri"},5:{code:"AKS",name:"Aksaray"},6:{code:"AMA",name:"Amasya"},7:{code:"ANK",name:"Ankara"},8:{code:"ANT",name:"Antalya"},9:{code:"ARD",name:"Ardahan"},10:{code:"ART",name:"Artvin"},11:{code:"AYI",name:"Aydin"},12:{code:"BAL",name:"Balikesir"},13:{code:"BAR",name:"Bartin"},14:{code:"BAT",name:"Batman"},15:{code:"BAY",name:"Bayburt"},16:{code:"BIL",name:"Bilecik"},17:{code:"BIN",name:"Bingol"},18:{code:"BIT",name:"Bitlis"},19:{code:"BOL",name:"Bolu"},20:{code:"BRD",name:"Burdur"},21:{code:"BRS",name:"Bursa"},22:{code:"CKL",name:"Canakkale"},23:{code:"CKR",name:"Cankiri"},24:{code:"COR",name:"Corum"},25:{code:"DEN",name:"Denizli"},26:{code:"DIY",name:"Diyarbakir"},27:{code:"DUZ",name:"Duzce"},28:{code:"EDI",name:"Edirne"},29:{code:"ELA",name:"Elazig"},30:{code:"EZC",name:"Erzincan"},31:{code:"EZR",name:"Erzurum"},32:{code:"ESK",name:"Eskisehir"},33:{code:"GAZ",name:"Gaziantep"},34:{code:"GIR",name:"Giresun"},35:{code:"GMS",name:"Gumushane"},36:{code:"HKR",name:"Hakkari"},37:{code:"HTY",name:"Hatay"},38:{code:"IGD",name:"Igdir"},39:{code:"ISP",name:"Isparta"},40:{code:"IST",name:"Istanbul"},41:{code:"IZM",name:"Izmir"},42:{code:"KAH",name:"Kahramanmaras"},43:{code:"KRB",name:"Karabuk"},44:{code:"KRM",name:"Karaman"},45:{code:"KRS",name:"Kars"},46:{code:"KAS",name:"Kastamonu"},47:{code:"KAY",name:"Kayseri"},48:{code:"KLS",name:"Kilis"},49:{code:"KRK",name:"Kirikkale"},50:{code:"KLR",name:"Kirklareli"},51:{code:"KRH",name:"Kirsehir"},52:{code:"KOC",name:"Kocaeli"},53:{code:"KON",name:"Konya"},54:{code:"KUT",name:"Kutahya"},55:{code:"MAL",name:"Malatya"},56:{code:"MAN",name:"Manisa"},57:{code:"MAR",name:"Mardin"},58:{code:"MER",name:"Mersin"},59:{code:"MUG",name:"Mugla"},60:{code:"MUS",name:"Mus"},61:{code:"NEV",name:"Nevsehir"},62:{code:"NIG",name:"Nigde"},63:{code:"ORD",name:"Ordu"},64:{code:"OSM",name:"Osmaniye"},65:{code:"RIZ",name:"Rize"},66:{code:"SAK",name:"Sakarya"},67:{code:"SAM",name:"Samsun"},68:{code:"SAN",name:"Sanliurfa"},69:{code:"SII",name:"Siirt"},70:{code:"SIN",name:"Sinop"},71:{code:"SIR",name:"Sirnak"},72:{code:"SIV",name:"Sivas"},73:{code:"TEL",name:"Tekirdag"},74:{code:"TOK",name:"Tokat"},75:{code:"TRA",name:"Trabzon"},76:{code:"TUN",name:"Tunceli"},77:{code:"USK",name:"Usak"},78:{code:"VAN",name:"Van"},79:{code:"YAL",name:"Yalova"},80:{code:"YOZ",name:"Yozgat"},81:{code:"ZON",name:"Zonguldak"}},TM:{1:{code:"A",name:"Ahal Welayaty"},2:{code:"B",name:"Balkan Welayaty"},3:{code:"D",name:"Dashhowuz Welayaty"},4:{code:"L",name:"Lebap Welayaty"},5:{code:"M",name:"Mary Welayaty"}},TC:{1:{code:"AC",name:"Ambergris Cays"},2:{code:"DC",name:"Dellis Cay"},3:{code:"FC",name:"French Cay"},4:{code:"LW",name:"Little Water Cay"},5:{code:"RC",name:"Parrot Cay"},6:{code:"PN",name:"Pine Cay"},7:{code:"SL",name:"Salt Cay"},8:{code:"GT",name:"Grand Turk"},9:{code:"SC",name:"South Caicos"},10:{code:"EC",name:"East Caicos"},11:{code:"MC",name:"Middle Caicos"},12:{code:"NC",name:"North Caicos"},13:{code:"PR",name:"Providenciales"},14:{code:"WC",name:"West Caicos"}},TV:{1:{code:"NMG",name:"Nanumanga"},2:{code:"NLK",name:"Niulakita"},3:{code:"NTO",name:"Niutao"},4:{code:"FUN",name:"Funafuti"},5:{code:"NME",name:"Nanumea"},6:{code:"NUI",name:"Nui"},7:{code:"NFT",name:"Nukufetau"},8:{code:"NLL",name:"Nukulaelae"},9:{code:"VAI",name:"Vaitupu"}},UG:{1:{code:"KAL",name:"Kalangala"},2:{code:"KMP",name:"Kampala"},3:{code:"KAY",name:"Kayunga"},4:{code:"KIB",name:"Kiboga"},5:{code:"LUW",name:"Luwero"},6:{code:"MAS",name:"Masaka"},7:{code:"MPI",name:"Mpigi"},8:{code:"MUB",name:"Mubende"},9:{code:"MUK",name:"Mukono"},10:{code:"NKS",name:"Nakasongola"},11:{code:"RAK",name:"Rakai"},12:{code:"SEM",name:"Sembabule"},13:{code:"WAK",name:"Wakiso"},14:{code:"BUG",name:"Bugiri"},15:{code:"BUS",name:"Busia"},16:{code:"IGA",name:"Iganga"},17:{code:"JIN",name:"Jinja"},18:{code:"KAB",name:"Kaberamaido"},19:{code:"KML",name:"Kamuli"},20:{code:"KPC",name:"Kapchorwa"},21:{code:"KTK",name:"Katakwi"},22:{code:"KUM",name:"Kumi"},23:{code:"MAY",name:"Mayuge"},24:{code:"MBA",name:"Mbale"},25:{code:"PAL",name:"Pallisa"},26:{code:"SIR",name:"Sironko"},27:{code:"SOR",name:"Soroti"},28:{code:"TOR",name:"Tororo"},29:{code:"ADJ",name:"Adjumani"},30:{code:"APC",name:"Apac"},31:{code:"ARU",name:"Arua"},32:{code:"GUL",name:"Gulu"},33:{code:"KIT",name:"Kitgum"},34:{code:"KOT",name:"Kotido"},35:{code:"LIR",name:"Lira"},36:{code:"MRT",name:"Moroto"},37:{code:"MOY",name:"Moyo"},38:{code:"NAK",name:"Nakapiripirit"},39:{code:"NEB",name:"Nebbi"},40:{code:"PAD",name:"Pader"},41:{code:"YUM",name:"Yumbe"},42:{code:"BUN",name:"Bundibugyo"},43:{code:"BSH",name:"Bushenyi"},44:{code:"HOI",name:"Hoima"},45:{code:"KBL",name:"Kabale"},46:{code:"KAR",name:"Kabarole"},47:{code:"KAM",name:"Kamwenge"},48:{code:"KAN",name:"Kanungu"},49:{code:"KAS",name:"Kasese"},50:{code:"KBA",name:"Kibaale"},51:{code:"KIS",name:"Kisoro"},52:{code:"KYE",name:"Kyenjojo"},53:{code:"MSN",name:"Masindi"},54:{code:"MBR",name:"Mbarara"},55:{code:"NTU",name:"Ntungamo"},56:{code:"RUK",name:"Rukungiri"}},UA:{1:{code:"CK",name:"Cherkasy"},2:{code:"CH",name:"Chernihiv"},3:{code:"CV",name:"Chernivtsi"},4:{code:"CR",name:"Crimea"},5:{code:"DN",name:"Dnipropetrovs'k"},6:{code:"DO",name:"Donets'k"},7:{code:"IV",name:"Ivano-Frankivs'k"},8:{code:"KL",name:"Kharkiv Kherson"},9:{code:"KM",name:"Khmel'nyts'kyy"},10:{code:"KR",name:"Kirovohrad"},11:{code:"KV",name:"Kiev"},12:{code:"KY",name:"Kyyiv"},13:{code:"LU",name:"Luhans'k"},14:{code:"LV",name:"L'viv"},15:{code:"MY",name:"Mykolayiv"},16:{code:"OD",name:"Odesa"},17:{code:"PO",name:"Poltava"},18:{code:"RI",name:"Rivne"},19:{code:"SE",name:"Sevastopol"},20:{code:"SU",name:"Sumy"},21:{code:"TE",name:"Ternopil'"},22:{code:"VI",name:"Vinnytsya"},23:{code:"VO",name:"Volyn'"},24:{code:"ZK",name:"Zakarpattya"},25:{code:"ZA",name:"Zaporizhzhya"},26:{code:"ZH",name:"Zhytomyr"}},AE:{1:{code:"AZ",name:"Abu Zaby"},2:{code:"AJ",name:"'Ajman"},3:{code:"FU",name:"Al Fujayrah"},4:{code:"SH",name:"Ash Shariqah"},5:{code:"DU",name:"Dubayy"},6:{code:"RK",name:"R'as al Khaymah"},7:{code:"UQ",name:"Umm al Qaywayn"}},GB:{1:{code:"ABN",name:"Aberdeen"},2:{code:"ABNS",name:"Aberdeenshire"},3:{code:"ANG",name:"Anglesey"},4:{code:"AGS",name:"Angus"},5:{code:"ARY",name:"Argyll and Bute"},6:{code:"BEDS",name:"Bedfordshire"},7:{code:"BERKS",name:"Berkshire"},8:{code:"BLA",name:"Blaenau Gwent"},9:{code:"BRI",name:"Bridgend"},10:{code:"BSTL",name:"Bristol"},11:{code:"BUCKS",name:"Buckinghamshire"},12:{code:"CAE",name:"Caerphilly"},13:{code:"CAMBS",name:"Cambridgeshire"},14:{code:"CDF",name:"Cardiff"},15:{code:"CARM",name:"Carmarthenshire"},16:{code:"CDGN",name:"Ceredigion"},17:{code:"CHES",name:"Cheshire"},18:{code:"CLACK",name:"Clackmannanshire"},19:{code:"CON",name:"Conwy"},20:{code:"CORN",name:"Cornwall"},21:{code:"DNBG",name:"Denbighshire"},22:{code:"DERBY",name:"Derbyshire"},23:{code:"DVN",name:"Devon"},24:{code:"DOR",name:"Dorset"},25:{code:"DGL",name:"Dumfries and Galloway"},26:{code:"DUND",name:"Dundee"},27:{code:"DHM",name:"Durham"},28:{code:"ARYE",name:"East Ayrshire"},29:{code:"DUNBE",name:"East Dunbartonshire"},30:{code:"LOTE",name:"East Lothian"},31:{code:"RENE",name:"East Renfrewshire"},32:{code:"ERYS",name:"East Riding of Yorkshire"},33:{code:"SXE",name:"East Sussex"},34:{code:"EDIN",name:"Edinburgh"},35:{code:"ESX",name:"Essex"},36:{code:"FALK",name:"Falkirk"},37:{code:"FFE",name:"Fife"},38:{code:"FLINT",name:"Flintshire"},39:{code:"GLAS",name:"Glasgow"},40:{code:"GLOS",name:"Gloucestershire"},41:{code:"LDN",name:"Greater London"},42:{code:"MCH",name:"Greater Manchester"},43:{code:"GDD",name:"Gwynedd"},44:{code:"HANTS",name:"Hampshire"},45:{code:"HWR",name:"Herefordshire"},46:{code:"HERTS",name:"Hertfordshire"},47:{code:"HLD",name:"Highlands"},48:{code:"IVER",name:"Inverclyde"},49:{code:"IOW",name:"Isle of Wight"},50:{code:"KNT",name:"Kent"},51:{code:"LANCS",name:"Lancashire"},52:{code:"LEICS",name:"Leicestershire"},53:{code:"LINCS",name:"Lincolnshire"},54:{code:"MSY",name:"Merseyside"},55:{code:"MERT",name:"Merthyr Tydfil"},56:{code:"MLOT",name:"Midlothian"},57:{code:"MMOUTH",name:"Monmouthshire"},58:{code:"MORAY",name:"Moray"},59:{code:"NPRTAL",name:"Neath Port Talbot"},60:{code:"NEWPT",name:"Newport"},61:{code:"NOR",name:"Norfolk"},62:{code:"ARYN",name:"North Ayrshire"},63:{code:"LANN",name:"North Lanarkshire"},64:{code:"YSN",name:"North Yorkshire"},65:{code:"NHM",name:"Northamptonshire"},66:{code:"NLD",name:"Northumberland"},67:{code:"NOT",name:"Nottinghamshire"},68:{code:"ORK",name:"Orkney Islands"},69:{code:"OFE",name:"Oxfordshire"},70:{code:"PEM",name:"Pembrokeshire"},71:{code:"PERTH",name:"Perth and Kinross"},72:{code:"PWS",name:"Powys"},73:{code:"REN",name:"Renfrewshire"},74:{code:"RHON",name:"Rhondda Cynon Taff"},75:{code:"RUT",name:"Rutland"},76:{code:"BOR",name:"Scottish Borders"},77:{code:"SHET",name:"Shetland Islands"},78:{code:"SPE",name:"Shropshire"},79:{code:"SOM",name:"Somerset"},80:{code:"ARYS",name:"South Ayrshire"},81:{code:"LANS",name:"South Lanarkshire"},82:{code:"YSS",name:"South Yorkshire"},83:{code:"SFD",name:"Staffordshire"},84:{code:"STIR",name:"Stirling"},85:{code:"SFK",name:"Suffolk"},86:{code:"SRY",name:"Surrey"},87:{code:"SWAN",name:"Swansea"},88:{code:"TORF",name:"Torfaen"},89:{code:"TWR",name:"Tyne and Wear"},90:{code:"VGLAM",name:"Vale of Glamorgan"},91:{code:"WARKS",name:"Warwickshire"},92:{code:"WDUN",name:"West Dunbartonshire"},93:{code:"WLOT",name:"West Lothian"},94:{code:"WMD",name:"West Midlands"},95:{code:"SXW",name:"West Sussex"},96:{code:"YSW",name:"West Yorkshire"},97:{code:"WIL",name:"Western Isles"},98:{code:"WLT",name:"Wiltshire"},99:{code:"WORCS",name:"Worcestershire"},100:{code:"WRX",name:"Wrexham"}},US:{1:{code:"AL",name:"Alabama"},2:{code:"AK",name:"Alaska"},3:{code:"AS",name:"American Samoa"},4:{code:"AZ",name:"Arizona"},5:{code:"AR",name:"Arkansas"},6:{code:"AF",name:"Armed Forces Africa"},7:{code:"AA",name:"Armed Forces Americas"},8:{code:"AC",name:"Armed Forces Canada"},9:{code:"AE",name:"Armed Forces Europe"},10:{code:"AM",name:"Armed Forces Middle East"},11:{code:"AP",name:"Armed Forces Pacific"},12:{code:"CA",name:"California"},13:{code:"CO",name:"Colorado"},14:{code:"CT",name:"Connecticut"},15:{code:"DE",name:"Delaware"},16:{code:"DC",name:"District of Columbia"},17:{code:"FM",name:"Federated States Of Micronesia"},18:{code:"FL",name:"Florida"},19:{code:"GA",name:"Georgia"},20:{code:"GU",name:"Guam"},21:{code:"HI",name:"Hawaii"},22:{code:"ID",name:"Idaho"},23:{code:"IL",name:"Illinois"},24:{code:"IN",name:"Indiana"},25:{code:"IA",name:"Iowa"},26:{code:"KS",name:"Kansas"},27:{code:"KY",name:"Kentucky"},28:{code:"LA",name:"Louisiana"},29:{code:"ME",name:"Maine"},30:{code:"MH",name:"Marshall Islands"},31:{code:"MD",name:"Maryland"},32:{code:"MA",name:"Massachusetts"},33:{code:"MI",name:"Michigan"},34:{code:"MN",name:"Minnesota"},35:{code:"MS",name:"Mississippi"},36:{code:"MO",name:"Missouri"},37:{code:"MT",name:"Montana"},38:{code:"NE",name:"Nebraska"},39:{code:"NV",name:"Nevada"},40:{code:"NH",name:"New Hampshire"},41:{code:"NJ",name:"New Jersey"},42:{code:"NM",name:"New Mexico"},43:{code:"NY",name:"New York"},44:{code:"NC",name:"North Carolina"},45:{code:"ND",name:"North Dakota"},46:{code:"MP",name:"Northern Mariana Islands"},47:{code:"OH",name:"Ohio"},48:{code:"OK",name:"Oklahoma"},49:{code:"OR",name:"Oregon"},50:{code:"PW",name:"Palau"},51:{code:"PA",name:"Pennsylvania"},52:{code:"PR",name:"Puerto Rico"},53:{code:"RI",name:"Rhode Island"},54:{code:"SC",name:"South Carolina"},55:{code:"SD",name:"South Dakota"},56:{code:"TN",name:"Tennessee"},57:{code:"TX",name:"Texas"},58:{code:"UT",name:"Utah"},59:{code:"VT",name:"Vermont"},60:{code:"VI",name:"Virgin Islands"},61:{code:"VA",name:"Virginia"},62:{code:"WA",name:"Washington"},63:{code:"WV",name:"West Virginia"},64:{code:"WI",name:"Wisconsin"},65:{code:"WY",name:"Wyoming"}},UM:{1:{code:"BI",name:"Baker Island"},2:{code:"HI",name:"Howland Island"},3:{code:"JI",name:"Jarvis Island"},4:{code:"JA",name:"Johnston Atoll"},5:{code:"KR",name:"Kingman Reef"},6:{code:"MA",name:"Midway Atoll"},7:{code:"NI",name:"Navassa Island"},8:{code:"PA",name:"Palmyra Atoll"},9:{code:"WI",name:"Wake Island"}},UY:{1:{code:"AR",name:"Artigas"},2:{code:"CA",name:"Canelones"},3:{code:"CL",name:"Cerro Largo"},4:{code:"CO",name:"Colonia"},5:{code:"DU",name:"Durazno"},6:{code:"FS",name:"Flores"},7:{code:"FA",name:"Florida"},8:{code:"LA",name:"Lavalleja"},9:{code:"MA",name:"Maldonado"},10:{code:"MO",name:"Montevideo"},11:{code:"PA",name:"Paysandu"},12:{code:"RN",name:"Rio Negro"},13:{code:"RV",name:"Rivera"},14:{code:"RO",name:"Rocha"},15:{code:"SL",name:"Salto"},16:{code:"SJ",name:"San Jose"},17:{code:"SO",name:"Soriano"},18:{code:"TA",name:"Tacuarembo"},19:{code:"TT",name:"Treinta y Tres"}},UZ:{1:{code:"AN",name:"Andijon"},2:{code:"BU",name:"Buxoro"},3:{code:"FA",name:"Farg'ona"},4:{code:"JI",name:"Jizzax"},5:{code:"NG",name:"Namangan"},6:{code:"NW",name:"Navoiy"},7:{code:"QA",name:"Qashqadaryo"},8:{code:"QR",name:"Qoraqalpog'iston Republikasi"},9:{code:"SA",name:"Samarqand"},10:{code:"SI",name:"Sirdaryo"},11:{code:"SU",name:"Surxondaryo"},12:{code:"TK",name:"Toshkent City"},13:{code:"TO",name:"Toshkent Region"},14:{code:"XO",name:"Xorazm"}},VU:{1:{code:"MA",name:"Malampa"},2:{code:"PE",name:"Penama"},3:{code:"SA",name:"Sanma"},4:{code:"SH",name:"Shefa"},5:{code:"TA",name:"Tafea"},6:{code:"TO",name:"Torba"}},VE:{1:{code:"AM",name:"Amazonas"},2:{code:"AN",name:"Anzoategui"},3:{code:"AP",name:"Apure"},4:{code:"AR",name:"Aragua"},5:{code:"BA",name:"Barinas"},6:{code:"BO",name:"Bolivar"},7:{code:"CA",name:"Carabobo"},8:{code:"CO",name:"Cojedes"},9:{code:"DA",name:"Delta Amacuro"},10:{code:"DF",name:"Dependencias Federales"},11:{code:"DI",name:"Distrito Federal"},12:{code:"FA",name:"Falcon"},13:{code:"GU",name:"Guarico"},14:{code:"LA",name:"Lara"},15:{code:"ME",name:"Merida"},16:{code:"MI",name:"Miranda"},17:{code:"MO",name:"Monagas"},18:{code:"NE",name:"Nueva Esparta"},19:{code:"PO",name:"Portuguesa"},20:{code:"SU",name:"Sucre"},21:{code:"TA",name:"Tachira"},22:{code:"TR",name:"Trujillo"},23:{code:"VA",name:"Vargas"},24:{code:"YA",name:"Yaracuy"},25:{code:"ZU",name:"Zulia"}},VN:{1:{code:"AG",name:"An Giang"},2:{code:"BG",name:"Bac Giang"},3:{code:"BK",name:"Bac Kan"},4:{code:"BL",name:"Bac Lieu"},5:{code:"BC",name:"Bac Ninh"},6:{code:"BR",name:"Ba Ria-Vung Tau"},7:{code:"BN",name:"Ben Tre"},8:{code:"BH",name:"Binh Dinh"},9:{code:"BU",name:"Binh Duong"},10:{code:"BP",name:"Binh Phuoc"},11:{code:"BT",name:"Binh Thuan"},12:{code:"CM",name:"Ca Mau"},13:{code:"CT",name:"Can Tho"},14:{code:"CB",name:"Cao Bang"},15:{code:"DL",name:"Dak Lak"},16:{code:"DG",name:"Dak Nong"},17:{code:"DN",name:"Da Nang"},18:{code:"DB",name:"Dien Bien"},19:{code:"DI",name:"Dong Nai"},20:{code:"DT",name:"Dong Thap"},21:{code:"GL",name:"Gia Lai"},22:{code:"HG",name:"Ha Giang"},23:{code:"HD",name:"Hai Duong"},24:{code:"HP",name:"Hai Phong"},25:{code:"HM",name:"Ha Nam"},26:{code:"HI",name:"Ha Noi"},27:{code:"HT",name:"Ha Tay"},28:{code:"HH",name:"Ha Tinh"},29:{code:"HB",name:"Hoa Binh"},30:{code:"HC",name:"Ho Chin Minh"},31:{code:"HU",name:"Hau Giang"},32:{code:"HY",name:"Hung Yen"}},VI:{1:{code:"C",name:"Saint Croix"},2:{code:"J",name:"Saint John"},3:{code:"T",name:"Saint Thomas"}},WF:{1:{code:"A",name:"Alo"},2:{code:"S",name:"Sigave"},3:{code:"W",name:"Wallis"}},YE:{1:{code:"AB",name:"Abyan"},2:{code:"AD",name:"Adan"},3:{code:"AM",name:"Amran"},4:{code:"BA",name:"Al Bayda"},5:{code:"DA",name:"Ad Dali"},6:{code:"DH",name:"Dhamar"},7:{code:"HD",name:"Hadramawt"},8:{code:"HJ",name:"Hajjah"},9:{code:"HU",name:"Al Hudaydah"},10:{code:"IB",name:"Ibb"},11:{code:"JA",name:"Al Jawf"},12:{code:"LA",name:"Lahij"},13:{code:"MA",name:"Ma'rib"},14:{code:"MR",name:"Al Mahrah"},15:{code:"MW",name:"Al Mahwit"},16:{code:"SD",name:"Sa'dah"},17:{code:"SN",name:"San'a"},18:{code:"SH",name:"Shabwah"},19:{code:"TA",name:"Ta'izz"}},YU:{1:{code:"KOS",name:"Kosovo"},2:{code:"MON",name:"Montenegro"},3:{code:"SER",name:"Serbia"},4:{code:"VOJ",name:"Vojvodina"}},ZR:{1:{code:"BC",name:"Bas-Congo"},2:{code:"BN",name:"Bandundu"},3:{code:"EQ",name:"Equateur"},4:{code:"KA",name:"Katanga"},5:{code:"KE",name:"Kasai-Oriental"},6:{code:"KN",name:"Kinshasa"},7:{code:"KW",name:"Kasai-Occidental"},8:{code:"MA",name:"Maniema"},9:{code:"NK",name:"Nord-Kivu"},10:{code:"OR",name:"Orientale"},11:{code:"SK",name:"Sud-Kivu"}},ZM:{1:{code:"CE",name:"Central"},2:{code:"CB",name:"Copperbelt"},3:{code:"EA",name:"Eastern"},4:{code:"LP",name:"Luapula"},5:{code:"LK",name:"Lusaka"},6:{code:"NO",name:"Northern"},7:{code:"NW",name:"North-Western"},8:{code:"SO",name:"Southern"},9:{code:"WE",name:"Western"}},ZW:{1:{code:"BU",name:"Bulawayo"},2:{code:"HA",name:"Harare"},3:{code:"ML",name:"Manicaland"},4:{code:"MC",name:"Mashonaland Central"},5:{code:"ME",name:"Mashonaland East"},6:{code:"MW",name:"Mashonaland West"},7:{code:"MV",name:"Masvingo"},8:{code:"MN",name:"Matabeleland North"},9:{code:"MS",name:"Matabeleland South"},10:{code:"MD",name:"Midlands"}}},BFHTimePickerDelimiter=":",BFHTimePickerModes={am:"AM",pm:"PM"},BFHTimezonesList={AF:{"Asia/Kabul":"Kabul"},AL:{"Europe/Tirane":"Tirane"},DZ:{"Africa/Algiers":"Algiers"},AS:{"Pacific/Pago_Pago":"Pago Pago"},AD:{"Europe/Andorra":"Andorra"},AO:{"Africa/Luanda":"Luanda"},AI:{"America/Anguilla":"Anguilla"},AQ:{"Antarctica/Casey":"Casey","Antarctica/Davis":"Davis","Antarctica/DumontDUrville":"DumontDUrville","Antarctica/Macquarie":"Macquarie","Antarctica/Mawson":"Mawson","Antarctica/McMurdo":"McMurdo","Antarctica/Palmer":"Palmer","Antarctica/Rothera":"Rothera","Antarctica/South_Pole":"South Pole","Antarctica/Syowa":"Syowa","Antarctica/Vostok":"Vostok"},AG:{"America/Antigua":"Antigua"},AR:{"America/Argentina/Buenos_Aires":"Argentina / Buenos Aires","America/Argentina/Catamarca":"Argentina / Catamarca","America/Argentina/Cordoba":"Argentina / Cordoba","America/Argentina/Jujuy":"Argentina / Jujuy","America/Argentina/La_Rioja":"Argentina / La Rioja","America/Argentina/Mendoza":"Argentina / Mendoza","America/Argentina/Rio_Gallegos":"Argentina / Rio Gallegos","America/Argentina/Salta":"Argentina / Salta","America/Argentina/San_Juan":"Argentina / San Juan","America/Argentina/San_Luis":"Argentina / San Luis","America/Argentina/Tucuman":"Argentina / Tucuman","America/Argentina/Ushuaia":"Argentina / Ushuaia"},AM:{"Asia/Yerevan":"Yerevan"},AW:{"America/Aruba":"Aruba"},AU:{"Australia/Adelaide":"Adelaide","Australia/Brisbane":"Brisbane","Australia/Broken_Hill":"Broken Hill","Australia/Currie":"Currie","Australia/Darwin":"Darwin","Australia/Eucla":"Eucla","Australia/Hobart":"Hobart","Australia/Lindeman":"Lindeman","Australia/Lord_Howe":"Lord Howe","Australia/Melbourne":"Melbourne","Australia/Perth":"Perth","Australia/Sydney":"Sydney"},AT:{"Europe/Vienna":"Vienna"},AZ:{"Asia/Baku":"Baku"},BH:{"Asia/Bahrain":"Bahrain"},BD:{"Asia/Dhaka":"Dhaka"},BB:{"America/Barbados":"Barbados"},BY:{"Europe/Minsk":"Minsk"},BE:{"Europe/Brussels":"Brussels"},BZ:{"America/Belize":"Belize"},BJ:{"Africa/Porto-Novo":"Porto-Novo"},BM:{"Atlantic/Bermuda":"Bermuda"},BT:{"Asia/Thimphu":"Thimphu"},BO:{"America/La_Paz":"La Paz"},BA:{"Europe/Sarajevo":"Sarajevo"},BW:{"Africa/Gaborone":"Gaborone"},BR:{"America/Araguaina":"Araguaina","America/Bahia":"Bahia","America/Belem":"Belem","America/Boa_Vista":"Boa Vista","America/Campo_Grande":"Campo Grande","America/Cuiaba":"Cuiaba","America/Eirunepe":"Eirunepe","America/Fortaleza":"Fortaleza","America/Maceio":"Maceio","America/Manaus":"Manaus","America/Noronha":"Noronha","America/Porto_Velho":"Porto Velho","America/Recife":"Recife","America/Rio_Branco":"Rio Branco","America/Santarem":"Santarem","America/Sao_Paulo":"Sao Paulo"},VG:{"America/Tortola":"Tortola"},BN:{"Asia/Brunei":"Brunei"},BG:{"Europe/Sofia":"Sofia"},BF:{"Africa/Ouagadougou":"Ouagadougou"},BI:{"Africa/Bujumbura":"Bujumbura"},CI:{"Africa/Abidjan":"Abidjan"},KH:{"Asia/Phnom_Penh":"Phnom Penh"},CM:{"Africa/Douala":"Douala"},CA:{"America/Atikokan":"Atikokan","America/Blanc-Sablon":"Blanc-Sablon","America/Cambridge_Bay":"Cambridge Bay","America/Creston":"Creston","America/Dawson":"Dawson","America/Dawson_Creek":"Dawson Creek","America/Edmonton":"Edmonton","America/Glace_Bay":"Glace Bay","America/Goose_Bay":"Goose Bay","America/Halifax":"Halifax","America/Inuvik":"Inuvik","America/Iqaluit":"Iqaluit","America/Moncton":"Moncton","America/Montreal":"Montreal","America/Nipigon":"Nipigon","America/Pangnirtung":"Pangnirtung","America/Rainy_River":"Rainy River","America/Rankin_Inlet":"Rankin Inlet","America/Regina":"Regina","America/Resolute":"Resolute","America/St_Johns":"St Johns","America/Swift_Current":"Swift Current","America/Thunder_Bay":"Thunder Bay","America/Toronto":"Toronto","America/Vancouver":"Vancouver","America/Whitehorse":"Whitehorse","America/Winnipeg":"Winnipeg","America/Yellowknife":"Yellowknife"},CV:{"Atlantic/Cape_Verde":"Cape Verde"},KY:{"America/Cayman":"Cayman"},CF:{"Africa/Bangui":"Bangui"},TD:{"Africa/Ndjamena":"Ndjamena"},CL:{"America/Santiago":"Santiago","Pacific/Easter":"Easter"},CN:{"Asia/Chongqing":"Chongqing","Asia/Harbin":"Harbin","Asia/Kashgar":"Kashgar","Asia/Shanghai":"Shanghai","Asia/Urumqi":"Urumqi"},CO:{"America/Bogota":"Bogota"},KM:{"Indian/Comoro":"Comoro"},CG:{"Africa/Brazzaville":"Brazzaville"},CR:{"America/Costa_Rica":"Costa Rica"},HR:{"Europe/Zagreb":"Zagreb"},CU:{"America/Havana":"Havana"},CY:{"Asia/Nicosia":"Nicosia"},CZ:{"Europe/Prague":"Prague"},CD:{"Africa/Kinshasa":"Kinshasa","Africa/Lubumbashi":"Lubumbashi"},DK:{"Europe/Copenhagen":"Copenhagen"},DJ:{"Africa/Djibouti":"Djibouti"},DM:{"America/Dominica":"Dominica"},DO:{"America/Santo_Domingo":"Santo Domingo"},TP:{},EC:{"America/Guayaquil":"Guayaquil","Pacific/Galapagos":"Galapagos"},EG:{"Africa/Cairo":"Cairo"},SV:{"America/El_Salvador":"El Salvador"},GQ:{"Africa/Malabo":"Malabo"},ER:{"Africa/Asmara":"Asmara"},EE:{"Europe/Tallinn":"Tallinn"},ET:{"Africa/Addis_Ababa":"Addis Ababa"},FO:{"Atlantic/Faroe":"Faroe"},FK:{"Atlantic/Stanley":"Stanley"},FJ:{"Pacific/Fiji":"Fiji"},FI:{"Europe/Helsinki":"Helsinki"},MK:{"Europe/Skopje":"Skopje"},FR:{"Europe/Paris":"Paris"},GA:{"Africa/Libreville":"Libreville"},GE:{"Asia/Tbilisi":"Tbilisi"},DE:{"Europe/Berlin":"Berlin"},GH:{"Africa/Accra":"Accra"},GR:{"Europe/Athens":"Athens"},GL:{"America/Danmarkshavn":"Danmarkshavn","America/Godthab":"Godthab","America/Scoresbysund":"Scoresbysund","America/Thule":"Thule"},GD:{"America/Grenada":"Grenada"},GU:{"Pacific/Guam":"Guam"},GT:{"America/Guatemala":"Guatemala"},GN:{"Africa/Conakry":"Conakry"},GW:{"Africa/Bissau":"Bissau"},GY:{"America/Guyana":"Guyana"},HT:{"America/Port-au-Prince":"Port-au-Prince"},HN:{"America/Tegucigalpa":"Tegucigalpa"},HK:{"Asia/Hong_Kong":"Hong Kong"},HU:{"Europe/Budapest":"Budapest"},IS:{"Atlantic/Reykjavik":"Reykjavik"},IN:{"Asia/Kolkata":"Kolkata"},ID:{"Asia/Jakarta":"Jakarta","Asia/Jayapura":"Jayapura","Asia/Makassar":"Makassar","Asia/Pontianak":"Pontianak"},IR:{"Asia/Tehran":"Tehran"},IQ:{"Asia/Baghdad":"Baghdad"},IE:{"Europe/Dublin":"Dublin"},IL:{"Asia/Jerusalem":"Jerusalem"},IT:{"Europe/Rome":"Rome"},JM:{"America/Jamaica":"Jamaica"},JP:{"Asia/Tokyo":"Tokyo"},JO:{"Asia/Amman":"Amman"},KZ:{"Asia/Almaty":"Almaty","Asia/Aqtau":"Aqtau","Asia/Aqtobe":"Aqtobe","Asia/Oral":"Oral","Asia/Qyzylorda":"Qyzylorda"},KE:{"Africa/Nairobi":"Nairobi"},KI:{"Pacific/Enderbury":"Enderbury","Pacific/Kiritimati":"Kiritimati","Pacific/Tarawa":"Tarawa"},KW:{"Asia/Kuwait":"Kuwait"},KG:{"Asia/Bishkek":"Bishkek"},LA:{"Asia/Vientiane":"Vientiane"},LV:{"Europe/Riga":"Riga"},LB:{"Asia/Beirut":"Beirut"},LS:{"Africa/Maseru":"Maseru"},LR:{"Africa/Monrovia":"Monrovia"},LY:{"Africa/Tripoli":"Tripoli"},LI:{"Europe/Vaduz":"Vaduz"},LT:{"Europe/Vilnius":"Vilnius"},LU:{"Europe/Luxembourg":"Luxembourg"},MO:{"Asia/Macau":"Macau"},MG:{"Indian/Antananarivo":"Antananarivo"},MW:{"Africa/Blantyre":"Blantyre"},MY:{"Asia/Kuala_Lumpur":"Kuala Lumpur","Asia/Kuching":"Kuching"},MV:{"Indian/Maldives":"Maldives"},ML:{"Africa/Bamako":"Bamako"},MT:{"Europe/Malta":"Malta"},MH:{"Pacific/Kwajalein":"Kwajalein","Pacific/Majuro":"Majuro"},MR:{"Africa/Nouakchott":"Nouakchott"},MU:{"Indian/Mauritius":"Mauritius"},MX:{"America/Bahia_Banderas":"Bahia Banderas","America/Cancun":"Cancun","America/Chihuahua":"Chihuahua","America/Hermosillo":"Hermosillo","America/Matamoros":"Matamoros","America/Mazatlan":"Mazatlan","America/Merida":"Merida","America/Mexico_City":"Mexico City","America/Monterrey":"Monterrey","America/Ojinaga":"Ojinaga","America/Santa_Isabel":"Santa Isabel","America/Tijuana":"Tijuana"},FM:{"Pacific/Chuuk":"Chuuk","Pacific/Kosrae":"Kosrae","Pacific/Pohnpei":"Pohnpei"},MD:{"Europe/Chisinau":"Chisinau"},MC:{"Europe/Monaco":"Monaco"},MN:{"Asia/Choibalsan":"Choibalsan","Asia/Hovd":"Hovd","Asia/Ulaanbaatar":"Ulaanbaatar"},ME:{"Europe/Podgorica":"Podgorica"},MS:{"America/Montserrat":"Montserrat"},MA:{"Africa/Casablanca":"Casablanca"},MZ:{"Africa/Maputo":"Maputo"},MM:{"Asia/Rangoon":"Rangoon"},NA:{"Africa/Windhoek":"Windhoek"},NR:{"Pacific/Nauru":"Nauru"},NP:{"Asia/Kathmandu":"Kathmandu"},NL:{"Europe/Amsterdam":"Amsterdam"},AN:{},NZ:{"Pacific/Auckland":"Auckland","Pacific/Chatham":"Chatham"},NI:{"America/Managua":"Managua"},NE:{"Africa/Niamey":"Niamey"},NG:{"Africa/Lagos":"Lagos"},NF:{"Pacific/Norfolk":"Norfolk"},KP:{"Asia/Pyongyang":"Pyongyang"},MP:{"Pacific/Saipan":"Saipan"},NO:{"Europe/Oslo":"Oslo"},OM:{"Asia/Muscat":"Muscat"},PK:{"Asia/Karachi":"Karachi"},PW:{"Pacific/Palau":"Palau"},PA:{"America/Panama":"Panama"},PG:{"Pacific/Port_Moresby":"Port Moresby"},PY:{"America/Asuncion":"Asuncion"},PE:{"America/Lima":"Lima"},PH:{"Asia/Manila":"Manila"},PN:{"Pacific/Pitcairn":"Pitcairn"},PL:{"Europe/Warsaw":"Warsaw"},PT:{"Atlantic/Azores":"Azores","Atlantic/Madeira":"Madeira","Europe/Lisbon":"Lisbon"},PR:{"America/Puerto_Rico":"Puerto Rico"},QA:{"Asia/Qatar":"Qatar"},RO:{"Europe/Bucharest":"Bucharest"},RU:{"Asia/Anadyr":"Anadyr","Asia/Irkutsk":"Irkutsk","Asia/Kamchatka":"Kamchatka","Asia/Krasnoyarsk":"Krasnoyarsk","Asia/Magadan":"Magadan","Asia/Novokuznetsk":"Novokuznetsk","Asia/Novosibirsk":"Novosibirsk","Asia/Omsk":"Omsk","Asia/Sakhalin":"Sakhalin","Asia/Vladivostok":"Vladivostok","Asia/Yakutsk":"Yakutsk","Asia/Yekaterinburg":"Yekaterinburg","Europe/Kaliningrad":"Kaliningrad","Europe/Moscow":"Moscow","Europe/Samara":"Samara","Europe/Volgograd":"Volgograd"},RW:{"Africa/Kigali":"Kigali"},ST:{"Africa/Sao_Tome":"Sao Tome"},SH:{"Atlantic/St_Helena":"St Helena"},KN:{"America/St_Kitts":"St Kitts"},LC:{"America/St_Lucia":"St Lucia"},VC:{"America/St_Vincent":"St Vincent"},WS:{"Pacific/Apia":"Apia"},SM:{"Europe/San_Marino":"San Marino"},SA:{"Asia/Riyadh":"Riyadh"},SN:{"Africa/Dakar":"Dakar"},RS:{"Europe/Belgrade":"Belgrade"},SC:{"Indian/Mahe":"Mahe"},SL:{"Africa/Freetown":"Freetown"},SG:{"Asia/Singapore":"Singapore"},SK:{"Europe/Bratislava":"Bratislava"},SI:{"Europe/Ljubljana":"Ljubljana"},SB:{"Pacific/Guadalcanal":"Guadalcanal"},SO:{"Africa/Mogadishu":"Mogadishu"},ZA:{"Africa/Johannesburg":"Johannesburg"},GS:{"Atlantic/South_Georgia":"South Georgia"},KR:{"Asia/Seoul":"Seoul"},ES:{"Africa/Ceuta":"Ceuta","Atlantic/Canary":"Canary","Europe/Madrid":"Madrid"},LK:{"Asia/Colombo":"Colombo"},SD:{"Africa/Khartoum":"Khartoum"},SR:{"America/Paramaribo":"Paramaribo"},SZ:{"Africa/Mbabane":"Mbabane"},SE:{"Europe/Stockholm":"Stockholm"},CH:{"Europe/Zurich":"Zurich"},SY:{"Asia/Damascus":"Damascus"},TW:{"Asia/Taipei":"Taipei"},TJ:{"Asia/Dushanbe":"Dushanbe"},TZ:{"Africa/Dar_es_Salaam":"Dar es Salaam"},TH:{"Asia/Bangkok":"Bangkok"},BS:{"America/Nassau":"Nassau"},GM:{"Africa/Banjul":"Banjul"},TG:{"Africa/Lome":"Lome"},TO:{"Pacific/Tongatapu":"Tongatapu"},TT:{"America/Port_of_Spain":"Port of Spain"},TN:{"Africa/Tunis":"Tunis"},TR:{"Europe/Istanbul":"Istanbul"},TM:{"Asia/Ashgabat":"Ashgabat"},TC:{"America/Grand_Turk":"Grand Turk"},TV:{"Pacific/Funafuti":"Funafuti"},VI:{"America/St_Thomas":"St Thomas"},UG:{"Africa/Kampala":"Kampala"},UA:{"Europe/Kiev":"Kiev","Europe/Simferopol":"Simferopol","Europe/Uzhgorod":"Uzhgorod","Europe/Zaporozhye":"Zaporozhye"},AE:{"Asia/Dubai":"Dubai"},GB:{"Europe/London":"London"},US:{"America/Adak":"Adak","America/Anchorage":"Anchorage","America/Boise":"Boise","America/Chicago":"Chicago","America/Denver":"Denver","America/Detroit":"Detroit","America/Indiana/Indianapolis":"Indiana / Indianapolis","America/Indiana/Knox":"Indiana / Knox","America/Indiana/Marengo":"Indiana / Marengo","America/Indiana/Petersburg":"Indiana / Petersburg","America/Indiana/Tell_City":"Indiana / Tell City","America/Indiana/Vevay":"Indiana / Vevay","America/Indiana/Vincennes":"Indiana / Vincennes","America/Indiana/Winamac":"Indiana / Winamac","America/Juneau":"Juneau","America/Kentucky/Louisville":"Kentucky / Louisville","America/Kentucky/Monticello":"Kentucky / Monticello","America/Los_Angeles":"Los Angeles","America/Menominee":"Menominee","America/Metlakatla":"Metlakatla","America/New_York":"New York","America/Nome":"Nome","America/North_Dakota/Beulah":"North Dakota / Beulah","America/North_Dakota/Center":"North Dakota / Center","America/North_Dakota/New_Salem":"North Dakota / New Salem","America/Phoenix":"Phoenix","America/Shiprock":"Shiprock","America/Sitka":"Sitka","America/Yakutat":"Yakutat","Pacific/Honolulu":"Honolulu"},UY:{"America/Montevideo":"Montevideo"},UZ:{"Asia/Samarkand":"Samarkand","Asia/Tashkent":"Tashkent"},VU:{"Pacific/Efate":"Efate"},VA:{"Europe/Vatican":"Vatican"},VE:{"America/Caracas":"Caracas"},VN:{"Asia/Ho_Chi_Minh":"Ho Chi Minh"},EH:{"Africa/El_Aaiun":"El Aaiun"},YE:{"Asia/Aden":"Aden"},ZM:{"Africa/Lusaka":"Lusaka"},ZW:{"Africa/Harare":"Harare"}};
-+function(a){"use strict";function b(a){var b=a.toString(16);return 1===b.length?"0"+b:b}function c(a,c,d){return"#"+b(a)+b(c)+b(d)}function d(){var b;a(f).each(function(c){return b=e(a(this)),b.hasClass("open")?(b.trigger(c=a.Event("hide.bfhcolorpicker")),c.isDefaultPrevented()?!0:(b.removeClass("open").trigger("hidden.bfhcolorpicker"),void 0)):!0})}function e(a){return a.closest(".bfh-colorpicker")}var f="[data-toggle=bfh-colorpicker]",g=function(b,c){this.options=a.extend({},a.fn.bfhcolorpicker.defaults,c),this.$element=a(b),this.initPopover()};g.prototype={constructor:g,initPalette:function(){var a,b,c;a=this.$element.find("canvas"),b=a[0].getContext("2d"),c=b.createLinearGradient(0,0,a.width(),0),c.addColorStop(0,"rgb(255, 255, 255)"),c.addColorStop(.1,"rgb(255,   0,   0)"),c.addColorStop(.25,"rgb(255,   0, 255)"),c.addColorStop(.4,"rgb(0,     0, 255)"),c.addColorStop(.55,"rgb(0,   255, 255)"),c.addColorStop(.7,"rgb(0,   255,   0)"),c.addColorStop(.85,"rgb(255, 255,   0)"),c.addColorStop(1,"rgb(255,   0,   0)"),b.fillStyle=c,b.fillRect(0,0,b.canvas.width,b.canvas.height),c=b.createLinearGradient(0,0,0,a.height()),c.addColorStop(0,"rgba(255, 255, 255, 1)"),c.addColorStop(.5,"rgba(255, 255, 255, 0)"),c.addColorStop(.5,"rgba(0,     0,   0, 0)"),c.addColorStop(1,"rgba(0,     0,   0, 1)"),b.fillStyle=c,b.fillRect(0,0,b.canvas.width,b.canvas.height)},initPopover:function(){var a,b;a="",b="","right"===this.options.align?b='<span class="input-group-addon"><span class="bfh-colorpicker-icon"></span></span>':a='<span class="input-group-addon"><span class="bfh-colorpicker-icon"></span></span>',this.$element.html('<div class="input-group bfh-colorpicker-toggle" data-toggle="bfh-colorpicker">'+a+'<input type="text" name="'+this.options.name+'" class="'+this.options.input+'" placeholder="'+this.options.placeholder+'" readonly>'+b+"</div>"+'<div class="bfh-colorpicker-popover">'+'<canvas class="bfh-colorpicker-palette" width="384" height="256"></canvas>'+"</div>"),this.$element.on("click.bfhcolorpicker.data-api touchstart.bfhcolorpicker.data-api",f,g.prototype.toggle).on("mousedown.bfhcolorpicker.data-api","canvas",g.prototype.mouseDown).on("click.bfhcolorpicker.data-api touchstart.bfhcolorpicker.data-api",".bfh-colorpicker-popover",function(){return!1}),this.initPalette(),this.$element.val(this.options.color)},updateVal:function(a,b){var d,e,f,g,h,i,j;h=5,d=this.$element.find("canvas"),e=d[0].getContext("2d"),f=a-d.offset().left,g=b-d.offset().top,f=Math.round(f/h)*h,g=Math.round(g/h)*h,0>f&&(f=0),f>=d.width()&&(f=d.width()-1),0>g&&(g=0),g>d.height()&&(g=d.height()),i=e.getImageData(f,g,1,1),j=c(i.data[0],i.data[1],i.data[2]),j!==this.$element.val()&&(this.$element.val(j),this.$element.trigger("change.bfhcolorpicker"))},mouseDown:function(){var b,c;b=a(this),c=e(b),a(document).on("mousemove.bfhcolorpicker.data-api",{colorpicker:c},g.prototype.mouseMove).one("mouseup.bfhcolorpicker.data-api",{colorpicker:c},g.prototype.mouseUp)},mouseMove:function(a){var b;b=a.data.colorpicker,b.data("bfhcolorpicker").updateVal(a.pageX,a.pageY)},mouseUp:function(b){var c;c=b.data.colorpicker,c.data("bfhcolorpicker").updateVal(b.pageX,b.pageY),a(document).off("mousemove.bfhcolorpicker.data-api"),c.data("bfhcolorpicker").options.close===!0&&d()},toggle:function(b){var c,f,g;if(c=a(this),f=e(c),f.is(".disabled")||void 0!==f.attr("disabled"))return!0;if(g=f.hasClass("open"),d(),!g){if(f.trigger(b=a.Event("show.bfhcolorpicker")),b.isDefaultPrevented())return!0;f.toggleClass("open").trigger("shown.bfhcolorpicker"),c.focus()}return!1}};var h=a.fn.bfhcolorpicker;a.fn.bfhcolorpicker=function(b){return this.each(function(){var c,d,e;c=a(this),d=c.data("bfhcolorpicker"),e="object"==typeof b&&b,this.type="bfhcolorpicker",d||c.data("bfhcolorpicker",d=new g(this,e)),"string"==typeof b&&d[b].call(c)})},a.fn.bfhcolorpicker.Constructor=g,a.fn.bfhcolorpicker.defaults={align:"left",input:"form-control",placeholder:"",name:"",color:"#000000",close:!0},a.fn.bfhcolorpicker.noConflict=function(){return a.fn.bfhcolorpicker=h,this};var i;a.valHooks.div&&(i=a.valHooks.div),a.valHooks.div={get:function(b){return a(b).hasClass("bfh-colorpicker")?a(b).find('input[type="text"]').val():i?i.get(b):void 0},set:function(b,c){if(a(b).hasClass("bfh-colorpicker"))a(b).find(".bfh-colorpicker-icon").css("background-color",c),a(b).find('input[type="text"]').val(c);else if(i)return i.set(b,c)}},a(document).ready(function(){a("div.bfh-colorpicker").each(function(){var b;b=a(this),b.bfhcolorpicker(b.data())})}),a(document).on("click.bfhcolorpicker.data-api",d)}(window.jQuery),+function(a){"use strict";var b=function(b,c){this.options=a.extend({},a.fn.bfhcountries.defaults,c),this.$element=a(b),this.$element.is("select")&&this.addCountries(),this.$element.hasClass("bfh-selectbox")&&this.addBootstrapCountries(),this.$element.is("span")&&this.displayCountry()};b.prototype={constructor:b,getCountries:function(){var b,c;if(this.options.available){if("string"==typeof this.options.available){c=[],this.options.available=this.options.available.split(",");for(b in BFHCountriesList)BFHCountriesList.hasOwnProperty(b)&&a.inArray(b,this.options.available)>=0&&(c[b]=BFHCountriesList[b])}else c=this.options.available;return c}return BFHCountriesList},addCountries:function(){var a,b,c;a=this.options.country,c=this.getCountries(),this.$element.html(""),this.options.blank===!0&&this.$element.append('<option value=""></option>');for(b in c)c.hasOwnProperty(b)&&this.$element.append('<option value="'+b+'">'+c[b]+"</option>");this.$element.val(a)},addBootstrapCountries:function(){var a,b,c,d,e,f;d=this.options.country,a=this.$element.find('input[type="hidden"]'),b=this.$element.find(".bfh-selectbox-option"),c=this.$element.find("[role=option]"),f=this.getCountries(),c.html(""),this.options.blank===!0&&c.append('<li><a tabindex="-1" href="#" data-option=""></a></li>');for(e in f)f.hasOwnProperty(e)&&(this.options.flags===!0?c.append('<li><a tabindex="-1" href="#" data-option="'+e+'"><i class="glyphicon bfh-flag-'+e+'"></i>'+f[e]+"</a></li>"):c.append('<li><a tabindex="-1" href="#" data-option="'+e+'">'+f[e]+"</a></li>"));this.$element.val(d)},displayCountry:function(){var a;a=this.options.country,this.options.flags===!0?this.$element.html('<i class="glyphicon bfh-flag-'+a+'"></i> '+BFHCountriesList[a]):this.$element.html(BFHCountriesList[a])}};var c=a.fn.bfhcountries;a.fn.bfhcountries=function(c){return this.each(function(){var d,e,f;d=a(this),e=d.data("bfhcountries"),f="object"==typeof c&&c,e||d.data("bfhcountries",e=new b(this,f)),"string"==typeof c&&e[c].call(d)})},a.fn.bfhcountries.Constructor=b,a.fn.bfhcountries.defaults={country:"",available:"",flags:!1,blank:!0},a.fn.bfhcountries.noConflict=function(){return a.fn.bfhcountries=c,this},a(document).ready(function(){a("form select.bfh-countries, span.bfh-countries, div.bfh-countries").each(function(){var b;b=a(this),b.hasClass("bfh-selectbox")&&b.bfhselectbox(b.data()),b.bfhcountries(b.data())})})}(window.jQuery),+function(a){"use strict";var b=function(b,c){this.options=a.extend({},a.fn.bfhcurrencies.defaults,c),this.$element=a(b),this.$element.is("select")&&this.addCurrencies(),this.$element.hasClass("bfh-selectbox")&&this.addBootstrapCurrencies(),this.$element.is("span")&&this.displayCurrency()};b.prototype={constructor:b,getCurrencies:function(){var b,c;if(this.options.available){c=[],this.options.available=this.options.available.split(",");for(b in BFHCurrenciesList)BFHCurrenciesList.hasOwnProperty(b)&&a.inArray(b,this.options.available)>=0&&(c[b]=BFHCurrenciesList[b]);return c}return BFHCurrenciesList},addCurrencies:function(){var a,b,c;a=this.options.currency,c=this.getCurrencies(),this.$element.html(""),this.options.blank===!0&&this.$element.append('<option value=""></option>');for(b in c)c.hasOwnProperty(b)&&this.$element.append('<option value="'+b+'">'+c[b].label+"</option>");this.$element.val(a)},addBootstrapCurrencies:function(){var a,b,c,d,e,f,g;d=this.options.currency,a=this.$element.find('input[type="hidden"]'),b=this.$element.find(".bfh-selectbox-option"),c=this.$element.find("[role=option]"),f=this.getCurrencies(),c.html(""),this.options.blank===!0&&c.append('<li><a tabindex="-1" href="#" data-option=""></a></li>');for(e in f)f.hasOwnProperty(e)&&(this.options.flags===!0?(g=f[e].currencyflag?f[e].currencyflag:e.substr(0,2),c.append('<li><a tabindex="-1" href="#" data-option="'+e+'"><i class="glyphicon bfh-flag-'+g+'"></i>'+f[e].label+"</a></li>")):c.append('<li><a tabindex="-1" href="#" data-option="'+e+'">'+f[e].label+"</a></li>"));this.$element.val(d)},displayCurrency:function(){var a,b;a=this.options.currency,this.options.flags===!0?(b=BFHCurrenciesList[a].currencyflag?BFHCurrenciesList[a].currencyflag:a.substr(0,2),this.$element.html('<i class="glyphicon bfh-flag-'+b+'"></i> '+BFHCurrenciesList[a].label)):this.$element.html(BFHCurrenciesList[a].label)}};var c=a.fn.bfhcurrencies;a.fn.bfhcurrencies=function(c){return this.each(function(){var d,e,f;d=a(this),e=d.data("bfhcurrencies"),f="object"==typeof c&&c,e||d.data("bfhcurrencies",e=new b(this,f)),"string"==typeof c&&e[c].call(d)})},a.fn.bfhcurrencies.Constructor=b,a.fn.bfhcurrencies.defaults={currency:"",available:"",flags:!1,blank:!0},a.fn.bfhcurrencies.noConflict=function(){return a.fn.bfhcurrencies=c,this},a(document).ready(function(){a("form select.bfh-currencies, span.bfh-currencies, div.bfh-currencies").each(function(){var b;b=a(this),b.hasClass("bfh-selectbox")&&b.bfhselectbox(b.data()),b.bfhcurrencies(b.data())})})}(window.jQuery),+function(a){"use strict";function b(a,b){return new Date(b,a,0).getDate()}function c(a,b,c){return new Date(b,a,c).getDay()}function d(a,b,c,d){return b+=1,b=String(b),d=String(d),1===b.length&&(b="0"+b),1===d.length&&(d="0"+d),a.replace("m",b).replace("y",c).replace("d",d)}function e(a,b,c){var d,e,f;d=[{part:"m",position:a.indexOf("m")},{part:"y",position:a.indexOf("y")},{part:"d",position:a.indexOf("d")}],d.sort(function(a,b){return a.position-b.position}),f=b.match(/(\d+)/g);for(e in d)if(d.hasOwnProperty(e)&&d[e].part===c)return Number(f[e]).toString()}function f(){var b;a(h).each(function(c){return b=g(a(this)),b.hasClass("open")?(b.trigger(c=a.Event("hide.bfhdatepicker")),c.isDefaultPrevented()?!0:(b.removeClass("open").trigger("hidden.bfhdatepicker"),void 0)):!0})}function g(a){return a.closest(".bfh-datepicker")}var h="[data-toggle=bfh-datepicker]",i=function(b,c){this.options=a.extend({},a.fn.bfhdatepicker.defaults,c),this.$element=a(b),this.initCalendar()};i.prototype={constructor:i,setDate:function(){var a,b,c;a=this.options.date,c=this.options.format,""===a||"today"===a||void 0===a?(b=new Date,"today"===a&&this.$element.val(d(c,b.getMonth(),b.getFullYear(),b.getDate())),this.$element.data("month",b.getMonth()),this.$element.data("year",b.getFullYear())):(this.$element.val(a),this.$element.data("month",Number(e(c,a,"m")-1)),this.$element.data("year",Number(e(c,a,"y"))))},setDateLimit:function(a,b){var c,d;d=this.options.format,""!==a?(this.$element.data(b+"limit",!0),"today"===a?(c=new Date,this.$element.data(b+"day",c.getDate()),this.$element.data(b+"month",c.getMonth()),this.$element.data(b+"year",c.getFullYear())):(this.$element.data(b+"day",Number(e(d,a,"d"))),this.$element.data(b+"month",Number(e(d,a,"m")-1)),this.$element.data(b+"year",Number(e(d,a,"y"))))):this.$element.data(b+"limit",!1)},initCalendar:function(){var a,b,c;a="",b="",c="",""!==this.options.icon&&("right"===this.options.align?b='<span class="input-group-addon"><i class="'+this.options.icon+'"></i></span>':a='<span class="input-group-addon"><i class="'+this.options.icon+'"></i></span>',c="input-group"),this.$element.html('<div class="'+c+' bfh-datepicker-toggle" data-toggle="bfh-datepicker">'+a+'<input type="text" name="'+this.options.name+'" class="'+this.options.input+'" placeholder="'+this.options.placeholder+'" readonly>'+b+"</div>"+'<div class="bfh-datepicker-calendar">'+'<table class="calendar table table-bordered">'+"<thead>"+'<tr class="months-header">'+'<th class="month" colspan="4">'+'<a class="previous" href="#"><i class="glyphicon glyphicon-chevron-left"></i></a>'+"<span></span>"+'<a class="next" href="#"><i class="glyphicon glyphicon-chevron-right"></i></a>'+"</th>"+'<th class="year" colspan="3">'+'<a class="previous" href="#"><i class="glyphicon glyphicon-chevron-left"></i></a>'+"<span></span>"+'<a class="next" href="#"><i class="glyphicon glyphicon-chevron-right"></i></a>'+"</th>"+"</tr>"+'<tr class="days-header">'+"</tr>"+"</thead>"+"<tbody>"+"</tbody>"+"</table>"+"</div>"),this.$element.on("click.bfhdatepicker.data-api touchstart.bfhdatepicker.data-api",h,i.prototype.toggle).on("click.bfhdatepicker.data-api touchstart.bfhdatepicker.data-api",".bfh-datepicker-calendar > table.calendar .month > .previous",i.prototype.previousMonth).on("click.bfhdatepicker.data-api touchstart.bfhdatepicker.data-api",".bfh-datepicker-calendar > table.calendar .month > .next",i.prototype.nextMonth).on("click.bfhdatepicker.data-api touchstart.bfhdatepicker.data-api",".bfh-datepicker-calendar > table.calendar .year > .previous",i.prototype.previousYear).on("click.bfhdatepicker.data-api touchstart.bfhdatepicker.data-api",".bfh-datepicker-calendar > table.calendar .year > .next",i.prototype.nextYear).on("click.bfhdatepicker.data-api touchstart.bfhdatepicker.data-api",".bfh-datepicker-calendar > table.calendar td:not(.off)",i.prototype.select).on("click.bfhdatepicker.data-api touchstart.bfhdatepicker.data-api",".bfh-datepicker-calendar > table.calendar",function(){return!1}),this.setDate(),this.setDateLimit(this.options.min,"lower"),this.setDateLimit(this.options.max,"higher"),this.updateCalendar()},updateCalendarHeader:function(a,b,c){var d,e;for(a.find("table > thead > tr > th.month > span").text(BFHMonthsList[b]),a.find("table > thead > tr > th.year > span").text(c),d=a.find("table > thead > tr.days-header"),d.html(""),e=BFHDayOfWeekStart;e<BFHDaysList.length;e+=1)d.append("<th>"+BFHDaysList[e]+"</th>");for(e=0;BFHDayOfWeekStart>e;e+=1)d.append("<th>"+BFHDaysList[e]+"</th>")},checkMinDate:function(a,b,c){var d,e,f,g;return d=this.$element.data("lowerlimit"),d===!0&&(e=this.$element.data("lowerday"),f=this.$element.data("lowermonth"),g=this.$element.data("loweryear"),e>a&&b===f&&c===g||f>b&&c===g||g>c)?!0:!1},checkMaxDate:function(a,b,c){var d,e,f,g;return d=this.$element.data("higherlimit"),d===!0&&(e=this.$element.data("higherday"),f=this.$element.data("highermonth"),g=this.$element.data("higheryear"),a>e&&b===f&&c===g||b>f&&c===g||c>g)?!0:!1},checkToday:function(a,b,c){var d;return d=new Date,a===d.getDate()&&b===d.getMonth()&&c===d.getFullYear()?!0:!1},updateCalendarDays:function(a,d,e){var f,g,h,i,j,k,l;for(f=a.find("table > tbody").html(""),g=b(d,e),h=b(d+1,e),i=c(d,e,1),j=c(d,e,h),k="",l=0;(i-BFHDayOfWeekStart+7)%7>l;l+=1)k+='<td class="off">'+(g-(i-BFHDayOfWeekStart+7)%7+l+1)+"</td>";for(l=1;h>=l;l+=1)k+=this.checkMinDate(l,d,e)?'<td data-day="'+l+'" class="off">'+l+"</td>":this.checkMaxDate(l,d,e)?'<td data-day="'+l+'" class="off">'+l+"</td>":this.checkToday(l,d,e)?'<td data-day="'+l+'" class="today">'+l+"</td>":'<td data-day="'+l+'">'+l+"</td>",c(d,e,l)===(6+BFHDayOfWeekStart)%7&&(f.append("<tr>"+k+"</tr>"),k="");for(l=1;(7-(j+1-BFHDayOfWeekStart+7)%7)%7+1>=l;l+=1)k+='<td class="off">'+l+"</td>",l===(7-(j+1-BFHDayOfWeekStart+7)%7)%7&&f.append("<tr>"+k+"</tr>")},updateCalendar:function(){var a,b,c;a=this.$element.find(".bfh-datepicker-calendar"),b=this.$element.data("month"),c=this.$element.data("year"),this.updateCalendarHeader(a,b,c),this.updateCalendarDays(a,b,c)},previousMonth:function(){var b,c,d;return b=a(this),c=g(b),0===Number(c.data("month"))?(c.data("month",11),c.data("year",Number(c.data("year"))-1)):c.data("month",Number(c.data("month"))-1),d=c.data("bfhdatepicker"),d.updateCalendar(),!1},nextMonth:function(){var b,c,d;return b=a(this),c=g(b),11===Number(c.data("month"))?(c.data("month",0),c.data("year",Number(c.data("year"))+1)):c.data("month",Number(c.data("month"))+1),d=c.data("bfhdatepicker"),d.updateCalendar(),!1},previousYear:function(){var b,c,d;return b=a(this),c=g(b),c.data("year",Number(c.data("year"))-1),d=c.data("bfhdatepicker"),d.updateCalendar(),!1},nextYear:function(){var b,c,d;return b=a(this),c=g(b),c.data("year",Number(c.data("year"))+1),d=c.data("bfhdatepicker"),d.updateCalendar(),!1},select:function(b){var c,e,h,i,j,k;c=a(this),b.preventDefault(),b.stopPropagation(),e=g(c),h=e.data("bfhdatepicker"),i=e.data("month"),j=e.data("year"),k=c.data("day"),e.val(d(h.options.format,i,j,k)),e.trigger("change.bfhdatepicker"),h.options.close===!0&&f()},toggle:function(b){var c,d,e;if(c=a(this),d=g(c),d.is(".disabled")||void 0!==d.attr("disabled"))return!0;if(e=d.hasClass("open"),f(),!e){if(d.trigger(b=a.Event("show.bfhdatepicker")),b.isDefaultPrevented())return!0;d.toggleClass("open").trigger("shown.bfhdatepicker"),c.focus()}return!1}};var j=a.fn.bfhdatepicker;a.fn.bfhdatepicker=function(b){return this.each(function(){var c,d,e;c=a(this),d=c.data("bfhdatepicker"),e="object"==typeof b&&b,this.type="bfhdatepicker",d||c.data("bfhdatepicker",d=new i(this,e)),"string"==typeof b&&d[b].call(c)})},a.fn.bfhdatepicker.Constructor=i,a.fn.bfhdatepicker.defaults={icon:"glyphicon glyphicon-calendar",align:"left",input:"form-control",placeholder:"",name:"",date:"today",format:"m/d/y",min:"",max:"",close:!0},a.fn.bfhdatepicker.noConflict=function(){return a.fn.bfhdatepicker=j,this};var k;a.valHooks.div&&(k=a.valHooks.div),a.valHooks.div={get:function(b){return a(b).hasClass("bfh-datepicker")?a(b).find('input[type="text"]').val():k?k.get(b):void 0},set:function(b,c){if(a(b).hasClass("bfh-datepicker"))a(b).find('input[type="text"]').val(c);else if(k)return k.set(b,c)}},a(document).ready(function(){a("div.bfh-datepicker").each(function(){var b;b=a(this),b.bfhdatepicker(b.data())})}),a(document).on("click.bfhdatepicker.data-api",f)}(window.jQuery),+function(a){"use strict";var b=function(b,c){this.options=a.extend({},a.fn.bfhfonts.defaults,c),this.$element=a(b),this.$element.is("select")&&this.addFonts(),this.$element.hasClass("bfh-selectbox")&&this.addBootstrapFonts()};b.prototype={constructor:b,getFonts:function(){var b,c;if(this.options.available){c=[],this.options.available=this.options.available.split(",");for(b in BFHFontsList)BFHFontsList.hasOwnProperty(b)&&a.inArray(b,this.options.available)>=0&&(c[b]=BFHFontsList[b]);return c}return BFHFontsList},addFonts:function(){var a,b,c;a=this.options.font,c=this.getFonts(),this.$element.html(""),this.options.blank===!0&&this.$element.append('<option value=""></option>');for(b in c)c.hasOwnProperty(b)&&this.$element.append('<option value="'+b+'">'+b+"</option>");this.$element.val(a)},addBootstrapFonts:function(){var a,b,c,d,e,f;d=this.options.font,a=this.$element.find('input[type="hidden"]'),b=this.$element.find(".bfh-selectbox-option"),c=this.$element.find("[role=option]"),f=this.getFonts(),c.html(""),this.options.blank===!0&&c.append('<li><a tabindex="-1" href="#" data-option=""></a></li>');for(e in f)f.hasOwnProperty(e)&&c.append('<li><a tabindex="-1" href="#" style=\'font-family: '+f[e]+"' data-option=\""+e+'">'+e+"</a></li>");this.$element.val(d)}};var c=a.fn.bfhfonts;a.fn.bfhfonts=function(c){return this.each(function(){var d,e,f;d=a(this),e=d.data("bfhfonts"),f="object"==typeof c&&c,e||d.data("bfhfonts",e=new b(this,f)),"string"==typeof c&&e[c].call(d)})},a.fn.bfhfonts.Constructor=b,a.fn.bfhfonts.defaults={font:"",available:"",blank:!0},a.fn.bfhfonts.noConflict=function(){return a.fn.bfhfonts=c,this},a(document).ready(function(){a("form select.bfh-fonts, span.bfh-fonts, div.bfh-fonts").each(function(){var b;b=a(this),b.hasClass("bfh-selectbox")&&b.bfhselectbox(b.data()),b.bfhfonts(b.data())})})}(window.jQuery),+function(a){"use strict";var b=function(b,c){this.options=a.extend({},a.fn.bfhfontsizes.defaults,c),this.$element=a(b),this.$element.is("select")&&this.addFontSizes(),this.$element.hasClass("bfh-selectbox")&&this.addBootstrapFontSizes()};b.prototype={constructor:b,getFontsizes:function(){var b,c;if(this.options.available){c=[],this.options.available=this.options.available.split(",");for(b in BFHFontSizesList)BFHFontSizesList.hasOwnProperty(b)&&a.inArray(b,this.options.available)>=0&&(c[b]=BFHFontSizesList[b]);return c}return BFHFontSizesList},addFontSizes:function(){var a,b,c;a=this.options.fontsize,c=this.getFontsizes(),this.$element.html(""),this.options.blank===!0&&this.$element.append('<option value=""></option>');for(b in c)c.hasOwnProperty(b)&&this.$element.append('<option value="'+b+'">'+c[b]+"</option>");this.$element.val(a)},addBootstrapFontSizes:function(){var a,b,c,d,e,f;d=this.options.fontsize,a=this.$element.find('input[type="hidden"]'),b=this.$element.find(".bfh-selectbox-option"),c=this.$element.find("[role=option]"),f=this.getFontsizes(),c.html(""),this.options.blank===!0&&c.append('<li><a tabindex="-1" href="#" data-option=""></a></li>');for(e in f)f.hasOwnProperty(e)&&c.append('<li><a tabindex="-1" href="#" data-option="'+e+'">'+f[e]+"</a></li>");this.$element.val(d)}};var c=a.fn.bfhfontsizes;a.fn.bfhfontsizes=function(c){return this.each(function(){var d,e,f;d=a(this),e=d.data("bfhfontsizes"),f="object"==typeof c&&c,e||d.data("bfhfontsizes",e=new b(this,f)),"string"==typeof c&&e[c].call(d)})},a.fn.bfhfontsizes.Constructor=b,a.fn.bfhfontsizes.defaults={fontsize:"",available:"",blank:!0},a.fn.bfhfontsizes.noConflict=function(){return a.fn.bfhfontsizes=c,this},a(document).ready(function(){a("form select.bfh-fontsizes, span.bfh-fontsizes, div.bfh-fontsizes").each(function(){var b;b=a(this),b.hasClass("bfh-selectbox")&&b.bfhselectbox(b.data()),b.bfhfontsizes(b.data())})})}(window.jQuery),+function(a){"use strict";var b=function(b,c){this.options=a.extend({},a.fn.bfhgooglefonts.defaults,c),this.$element=a(b),this.$element.is("select")&&this.addFonts(),this.$element.hasClass("bfh-selectbox")&&this.addBootstrapFonts()};b.prototype={constructor:b,getFonts:function(){var b,c;if(c=[],this.options.subset)for(b in BFHGoogleFontsList.items)BFHGoogleFontsList.items.hasOwnProperty(b)&&a.inArray(this.options.subset,BFHGoogleFontsList.items[b].subsets)>=0&&(c[BFHGoogleFontsList.items[b].family]={info:BFHGoogleFontsList.items[b],index:parseInt(b,10)});else if(this.options.available){this.options.available=this.options.available.split(",");for(b in BFHGoogleFontsList.items)BFHGoogleFontsList.items.hasOwnProperty(b)&&a.inArray(BFHGoogleFontsList.items[b].family,this.options.available)>=0&&(c[BFHGoogleFontsList.items[b].family]={info:BFHGoogleFontsList.items[b],index:parseInt(b,10)})}else for(b in BFHGoogleFontsList.items)BFHGoogleFontsList.items.hasOwnProperty(b)&&(c[BFHGoogleFontsList.items[b].family]={info:BFHGoogleFontsList.items[b],index:parseInt(b,10)});return c},addFonts:function(){var a,b,c;a=this.options.font,c=this.getFonts(),this.$element.html(""),this.options.blank===!0&&this.$element.append('<option value=""></option>');for(b in c)c.hasOwnProperty(b)&&this.$element.append('<option value="'+c[b].info.family+'">'+c[b].info.family+"</option>");this.$element.val(a)},addBootstrapFonts:function(){var a,b,c,d,e,f;d=this.options.font,a=this.$element.find('input[type="hidden"]'),b=this.$element.find(".bfh-selectbox-option"),c=this.$element.find("[role=option]"),f=this.getFonts(),c.html(""),this.options.blank===!0&&c.append('<li><a tabindex="-1" href="#" data-option="" style="background-image: none;"></a></li>');for(e in f)f.hasOwnProperty(e)&&c.append('<li><a tabindex="-1" href="#" style="background-position: 0 -'+(30*f[e].index-2)+'px;" data-option="'+f[e].info.family+'">'+f[e].info.family+"</a></li>");this.$element.val(d)}};var c=a.fn.bfhgooglefonts;a.fn.bfhgooglefonts=function(c){return this.each(function(){var d,e,f;d=a(this),e=d.data("bfhgooglefonts"),f="object"==typeof c&&c,e||d.data("bfhgooglefonts",e=new b(this,f)),"string"==typeof c&&e[c].call(d)})},a.fn.bfhgooglefonts.Constructor=b,a.fn.bfhgooglefonts.defaults={font:"",available:"",subset:"",blank:!0},a.fn.bfhgooglefonts.noConflict=function(){return a.fn.bfhgooglefonts=c,this},a(document).ready(function(){a("form select.bfh-googlefonts, span.bfh-googlefonts, div.bfh-googlefonts").each(function(){var b;b=a(this),b.hasClass("bfh-selectbox")&&b.bfhselectbox(b.data()),b.bfhgooglefonts(b.data())})})}(window.jQuery),+function(a){"use strict";var b=function(b,c){this.options=a.extend({},a.fn.bfhlanguages.defaults,c),this.$element=a(b),this.$element.is("select")&&this.addLanguages(),this.$element.is("span")&&this.displayLanguage(),this.$element.hasClass("bfh-selectbox")&&this.addBootstrapLanguages()};b.prototype={constructor:b,getLanguages:function(){var a,b,c;if(this.options.available){c=[],this.options.available=this.options.available.split(",");for(b in this.options.available)this.options.available.hasOwnProperty(b)&&(-1!==this.options.available[b].indexOf("_")?(a=this.options.available[b].split("_"),c[a[0]]={name:BFHLanguagesList[a[0]],country:a[1]}):c[this.options.available[b]]=BFHLanguagesList[this.options.available[b]]);return c}return BFHLanguagesList},addLanguages:function(){var a,b,c;a=this.options.language,b=this.getLanguages(),this.$element.html(""),this.options.blank===!0&&this.$element.append('<option value=""></option>');for(c in b)b.hasOwnProperty(c)&&(b[c].hasOwnProperty("name")?this.$element.append('<option value="'+c+"_"+b[c].country+'">'+b[c].name.toProperCase()+" ("+BFHCountriesList[b[c].country]+")</option>"):this.$element.append('<option value="'+c+'">'+b[c].toProperCase()+"</option>"));this.$element.val(a)},addBootstrapLanguages:function(){var a,b,c,d,e,f;d=this.options.language,a=this.$element.find('input[type="hidden"]'),b=this.$element.find(".bfh-selectbox-option"),c=this.$element.find("[role=option]"),e=this.getLanguages(),c.html(""),this.options.blank===!0&&c.append('<li><a tabindex="-1" href="#" data-option=""></a></li>');for(f in e)e.hasOwnProperty(f)&&(e[f].hasOwnProperty("name")?this.options.flags===!0?c.append('<li><a tabindex="-1" href="#" data-option="'+f+"_"+e[f].country+'"><i class="glyphicon bfh-flag-'+e[f].country+'"></i>'+e[f].name.toProperCase()+"</a></li>"):c.append('<li><a tabindex="-1" href="#" data-option="'+f+"_"+e[f].country+'">'+e[f].name.toProperCase()+" ("+BFHCountriesList[e[f].country]+")</a></li>"):c.append('<li><a tabindex="-1" href="#" data-option="'+f+'">'+e[f]+"</a></li>"));this.$element.val(d)},displayLanguage:function(){var a;a=this.options.language,-1!==a.indexOf("_")?(a=a.split("_"),this.options.flags===!0?this.$element.html('<i class="glyphicon bfh-flag-'+a[1]+'"></i> '+BFHLanguagesList[a[0]].toProperCase()):this.$element.html(BFHLanguagesList[a[0]].toProperCase()+" ("+BFHCountriesList[a[1]]+")")):this.$element.html(BFHLanguagesList[a].toProperCase())}};var c=a.fn.bfhlanguages;a.fn.bfhlanguages=function(c){return this.each(function(){var d,e,f;d=a(this),e=d.data("bfhlanguages"),f="object"==typeof c&&c,e||d.data("bfhlanguages",e=new b(this,f)),"string"==typeof c&&e[c].call(d)})},a.fn.bfhlanguages.Constructor=b,a.fn.bfhlanguages.defaults={language:"",available:"",flags:!1,blank:!0},a.fn.bfhlanguages.noConflict=function(){return a.fn.bfhlanguages=c,this},a(document).ready(function(){a("form select.bfh-languages, span.bfh-languages, div.bfh-languages").each(function(){var b;b=a(this),b.hasClass("bfh-selectbox")&&b.bfhselectbox(b.data()),b.bfhlanguages(b.data())})}),String.prototype.toProperCase=function(){return this.replace(/\w\S*/g,function(a){return a.charAt(0).toUpperCase()+a.substr(1).toLowerCase()})}}(window.jQuery),+function(a){"use strict";var b=function(b,c){this.options=a.extend({},a.fn.bfhnumber.defaults,c),this.$element=a(b),this.initInput()};b.prototype={constructor:b,initInput:function(){this.options.buttons===!0&&(this.$element.wrap('<div class="input-group"></div>'),this.$element.parent().append('<span class="input-group-addon bfh-number-btn inc"><span class="glyphicon glyphicon-chevron-up"></span></span>'),this.$element.parent().append('<span class="input-group-addon bfh-number-btn dec"><span class="glyphicon glyphicon-chevron-down"></span></span>')),this.$element.on("change.bfhnumber.data-api",b.prototype.change),this.options.keyboard===!0&&this.$element.on("keydown.bfhnumber.data-api",b.prototype.keydown),this.options.buttons===!0&&this.$element.parent().on("mousedown.bfhnumber.data-api",".inc",b.prototype.btninc).on("mousedown.bfhnumber.data-api",".dec",b.prototype.btndec),this.formatNumber()},keydown:function(b){var c;if(c=a(this).data("bfhnumber"),c.$element.is(".disabled")||void 0!==c.$element.attr("disabled"))return!0;switch(b.which){case 38:c.increment();break;case 40:c.decrement()}return!0},mouseup:function(a){var b,c,d;b=a.data.btn,c=b.$element.data("timer"),d=b.$element.data("interval"),clearTimeout(c),clearInterval(d)},btninc:function(){var c,d;return c=a(this).parent().find(".bfh-number").data("bfhnumber"),c.$element.is(".disabled")||void 0!==c.$element.attr("disabled")?!0:(c.increment(),d=setTimeout(function(){var a;a=setInterval(function(){c.increment()},80),c.$element.data("interval",a)},750),c.$element.data("timer",d),a(document).one("mouseup",{btn:c},b.prototype.mouseup),!0)},btndec:function(){var c,d;return c=a(this).parent().find(".bfh-number").data("bfhnumber"),c.$element.is(".disabled")||void 0!==c.$element.attr("disabled")?!0:(c.decrement(),d=setTimeout(function(){var a;a=setInterval(function(){c.decrement()},80),c.$element.data("interval",a)},750),c.$element.data("timer",d),a(document).one("mouseup",{btn:c},b.prototype.mouseup),!0)},change:function(){var b;return b=a(this).data("bfhnumber"),b.$element.is(".disabled")||void 0!==b.$element.attr("disabled")?!0:(b.formatNumber(),!0)},increment:function(){var a;a=this.getValue(),a+=1,this.$element.val(a).change()},decrement:function(){var a;a=this.getValue(),a-=1,this.$element.val(a).change()},getValue:function(){var a;return a=this.$element.val(),"-1"!==a&&(a=String(a).replace(/\D/g,"")),0===String(a).length&&(a=this.options.min),parseInt(a)},formatNumber:function(){var a,b,c,d;if(a=this.getValue(),a>this.options.max&&(a=this.options.wrap===!0?this.options.min:this.options.max),a<this.options.min&&(a=this.options.wrap===!0?this.options.max:this.options.min),this.options.zeros===!0)for(b=String(this.options.max).length,c=String(a).length,d=c;b>d;d+=1)a="0"+a;a!==this.$element.val()&&this.$element.val(a)}};var c=a.fn.bfhnumber;a.fn.bfhnumber=function(c){return this.each(function(){var d,e,f;d=a(this),e=d.data("bfhnumber"),f="object"==typeof c&&c,e||d.data("bfhnumber",e=new b(this,f)),"string"==typeof c&&e[c].call(d)})},a.fn.bfhnumber.Constructor=b,a.fn.bfhnumber.defaults={min:0,max:9999,zeros:!1,keyboard:!0,buttons:!0,wrap:!1},a.fn.bfhnumber.noConflict=function(){return a.fn.bfhnumber=c,this},a(document).ready(function(){a('form input[type="text"].bfh-number, form input[type="number"].bfh-number').each(function(){var b;b=a(this),b.bfhnumber(b.data())})})}(window.jQuery),+function(a){"use strict";function b(a,b){var c,d,e,f;for(c="",b=String(b).replace(/\D/g,""),d=0,e=0;d<a.length;d+=1)/\d/g.test(a.charAt(d))?a.charAt(d)===b.charAt(e)?(c+=b.charAt(e),e+=1):c+=a.charAt(d):"d"!==a.charAt(d)?(""!==b.charAt(e)||"+"===a.charAt(d))&&(c+=a.charAt(d)):""===b.charAt(e)?c+="":(c+=b.charAt(e),e+=1);return f=a.charAt(c.length),"d"!==f&&(c+=f),c}function c(a){var b,c=0;return document.selection?(a.focus(),b=document.selection.createRange(),b.moveStart("character",-a.value.length),c=b.text.length):(a.selectionStart||0===a.selectionStart)&&(c=a.selectionStart),c}function d(a,b){var c;document.selection?(a.focus(),c=document.selection.createRange(),c.moveStart("character",-a.value.length),c.moveStart("character",b),c.moveEnd("character",0),c.select()):(a.selectionStart||0===a.selectionStart)&&(a.selectionStart=b,a.selectionEnd=b,a.focus())}var e=function(b,c){this.options=a.extend({},a.fn.bfhphone.defaults,c),this.$element=a(b),(this.$element.is('input[type="text"]')||this.$element.is('input[type="tel"]'))&&this.addFormatter(),this.$element.is("span")&&this.displayFormatter()
-};e.prototype={constructor:e,addFormatter:function(){var b;""!==this.options.country&&(b=a(document).find("#"+this.options.country),0!==b.length?(this.options.format=BFHPhoneFormatList[b.val()],b.on("change",{phone:this},this.changeCountry)):this.options.format=BFHPhoneFormatList[this.options.country]),this.$element.on("keyup.bfhphone.data-api",e.prototype.change),this.loadFormatter()},loadFormatter:function(){var a;a=b(this.options.format,this.$element.val()),this.$element.val(a)},displayFormatter:function(){var a;""!==this.options.country&&(this.options.format=BFHPhoneFormatList[this.options.country]),a=b(this.options.format,this.options.number),this.$element.html(a)},changeCountry:function(b){var c,d;c=a(this),d=b.data.phone,d.$element.val(String(d.$element.val()).replace(/\+\d*/g,"")),d.options.format=BFHPhoneFormatList[c.val()],d.loadFormatter()},change:function(e){var f,g,h,i;return f=a(this).data("bfhphone"),f.$element.is(".disabled")||void 0!==f.$element.attr("disabled")?!0:(g=c(f.$element[0]),h=!1,g===f.$element.val().length&&(h=!0),8===e.which&&"d"!==f.options.format.charAt(f.$element.val().length)&&f.$element.val(String(f.$element.val()).substring(0,f.$element.val().length-1)),i=b(f.options.format,f.$element.val()),i===f.$element.val()?!0:(f.$element.val(i),h&&(g=f.$element.val().length),d(f.$element[0],g),!0))}};var f=a.fn.bfhphone;a.fn.bfhphone=function(b){return this.each(function(){var c,d,f;c=a(this),d=c.data("bfhphone"),f="object"==typeof b&&b,d||c.data("bfhphone",d=new e(this,f)),"string"==typeof b&&d[b].call(c)})},a.fn.bfhphone.Constructor=e,a.fn.bfhphone.defaults={format:"",number:"",country:""},a.fn.bfhphone.noConflict=function(){return a.fn.bfhphone=f,this},a(document).ready(function(){a('form input[type="text"].bfh-phone, form input[type="tel"].bfh-phone, span.bfh-phone').each(function(){var b;b=a(this),b.bfhphone(b.data())})})}(window.jQuery),+function(a){"use strict";function b(){var b;a(d).each(function(d){return b=c(a(this)),b.hasClass("open")?(b.trigger(d=a.Event("hide.bfhselectbox")),d.isDefaultPrevented()?!0:(b.removeClass("open").trigger("hidden.bfhselectbox"),void 0)):!0})}function c(a){return a.closest(".bfh-selectbox")}var d="[data-toggle=bfh-selectbox]",e=function(b,c){this.options=a.extend({},a.fn.bfhselectbox.defaults,c),this.$element=a(b),this.initSelectBox()};e.prototype={constructor:e,initSelectBox:function(){var b;b="",this.$element.find("div").each(function(){b=b+'<li><a tabindex="-1" href="#" data-option="'+a(this).data("value")+'">'+a(this).html()+"</a></li>"}),this.$element.html('<input type="hidden" name="'+this.options.name+'" value="">'+'<a class="bfh-selectbox-toggle '+this.options.input+'" role="button" data-toggle="bfh-selectbox" href="#">'+'<span class="bfh-selectbox-option"></span>'+'<span class="'+this.options.icon+' selectbox-caret"></span>'+"</a>"+'<div class="bfh-selectbox-options">'+'<div role="listbox">'+'<ul role="option">'+"</ul>"+"</div>"+"</div>"),this.$element.find("[role=option]").html(b),this.options.filter===!0&&this.$element.find(".bfh-selectbox-options").prepend('<div class="bfh-selectbox-filter-container"><input type="text" class="bfh-selectbox-filter form-control"></div>'),this.$element.val(this.options.value),this.$element.on("click.bfhselectbox.data-api touchstart.bfhselectbox.data-api",d,e.prototype.toggle).on("keydown.bfhselectbox.data-api",d+", [role=option]",e.prototype.keydown).on("mouseenter.bfhselectbox.data-api","[role=option] > li > a",e.prototype.mouseenter).on("click.bfhselectbox.data-api","[role=option] > li > a",e.prototype.select).on("click.bfhselectbox.data-api",".bfh-selectbox-filter",function(){return!1}).on("propertychange.bfhselectbox.data-api change.bfhselectbox.data-api input.bfhselectbox.data-api paste.bfhselectbox.data-api",".bfh-selectbox-filter",e.prototype.filter)},toggle:function(d){var e,f,g;if(e=a(this),f=c(e),f.is(".disabled")||void 0!==f.attr("disabled"))return!0;if(g=f.hasClass("open"),b(),!g){if(f.trigger(d=a.Event("show.bfhselectbox")),d.isDefaultPrevented())return!0;f.toggleClass("open").trigger("shown.bfhselectbox").find('[role=option] > li > [data-option="'+f.val()+'"]').focus()}return!1},filter:function(){var b,d,e;b=a(this),d=c(b),e=a("[role=option] li a",d),e.hide().filter(function(){return-1!==a(this).text().toUpperCase().indexOf(b.val().toUpperCase())}).show()},keydown:function(b){var f,g,h,i,j;return/(38|40|27)/.test(b.keyCode)?(f=a(this),b.preventDefault(),b.stopPropagation(),h=c(f),i=h.hasClass("open"),!i||i&&27===b.keyCode?(27===b.which&&h.find(d).focus(),f.click()):(g=a("[role=option] li:not(.divider) a:visible",h),g.length?(a("body").off("mouseenter.bfh-selectbox.data-api","[role=option] > li > a",e.prototype.mouseenter),j=g.index(g.filter(":focus")),38===b.keyCode&&j>0&&(j-=1),40===b.keyCode&&j<g.length-1&&(j+=1),j||(j=0),g.eq(j).focus(),a("body").on("mouseenter.bfh-selectbox.data-api","[role=option] > li > a",e.prototype.mouseenter),void 0):!0)):!0},mouseenter:function(){var b;b=a(this),b.focus()},select:function(d){var e,f;return e=a(this),d.preventDefault(),d.stopPropagation(),e.is(".disabled")||void 0!==e.attr("disabled")?!0:(f=c(e),f.val(e.data("option")),f.trigger("change.bfhselectbox"),b(),void 0)}};var f=a.fn.bfhselectbox;a.fn.bfhselectbox=function(b){return this.each(function(){var c,d,f;c=a(this),d=c.data("bfhselectbox"),f="object"==typeof b&&b,this.type="bfhselectbox",d||c.data("bfhselectbox",d=new e(this,f)),"string"==typeof b&&d[b].call(c)})},a.fn.bfhselectbox.Constructor=e,a.fn.bfhselectbox.defaults={icon:"caret",input:"form-control",name:"",value:"",filter:!1},a.fn.bfhselectbox.noConflict=function(){return a.fn.bfhselectbox=f,this};var g;a.valHooks.div&&(g=a.valHooks.div),a.valHooks.div={get:function(b){return a(b).hasClass("bfh-selectbox")?a(b).find('input[type="hidden"]').val():g?g.get(b):void 0},set:function(b,c){var d,e;if(a(b).hasClass("bfh-selectbox"))d=a(b),d.find("li a[data-option='"+c+"']").length>0?e=d.find("li a[data-option='"+c+"']").html():d.find("li a").length>0?e=d.find("li a").eq(0).html():(c="",e=""),d.find('input[type="hidden"]').val(c),d.find(".bfh-selectbox-option").html(e);else if(g)return g.set(b,c)}},a(document).ready(function(){a("div.bfh-selectbox").each(function(){var b;b=a(this),b.bfhselectbox(b.data())})}),a(document).on("click.bfhselectbox.data-api",b)}(window.jQuery),+function(a){"use strict";var b=function(b,c){this.options=a.extend({},a.fn.bfhslider.defaults,c),this.$element=a(b),this.initSlider()};b.prototype={constructor:b,initSlider:function(){""===this.options.value&&(this.options.value=this.options.min),this.$element.html('<input type="hidden" name="'+this.options.name+'" value="">'+'<div class="bfh-slider-handle"><div class="bfh-slider-value"></div></div>'),this.$element.find('input[type="hidden"]').val(this.options.value),this.updateHandle(this.options.value),this.$element.on("mousedown.bfhslider.data-api",b.prototype.mouseDown)},updateHandle:function(a){var b,c,d,e;e=this.options.max-this.options.min,c=this.$element.width(),d=this.$element.position().left,b=Math.round((a-this.options.min)*(c-20)/e+d),this.$element.find(".bfh-slider-handle").css("left",b+"px"),this.$element.find(".bfh-slider-value").text(a)},updateVal:function(a){var b,c,d,e,f;return f=this.options.max-this.options.min,b=this.$element.width(),c=this.$element.offset().left,d=c+b,c>a&&(a=c),a+20>d&&(a=d),e=(a-c)/b,e=Math.ceil(e*f+this.options.min),e===this.$element.val()?!0:(this.$element.val(e),this.$element.trigger("change.bfhslider"),void 0)},mouseDown:function(){var c;return c=a(this),c.is(".disabled")||void 0!==c.attr("disabled")?!0:(a(document).on("mousemove.bfhslider.data-api",{slider:c},b.prototype.mouseMove).one("mouseup.bfhslider.data-api",{slider:c},b.prototype.mouseUp),void 0)},mouseMove:function(a){var b;b=a.data.slider,b.data("bfhslider").updateVal(a.pageX)},mouseUp:function(b){var c;c=b.data.slider,c.data("bfhslider").updateVal(b.pageX),a(document).off("mousemove.bfhslider.data-api")}};var c=a.fn.bfhslider;a.fn.bfhslider=function(c){return this.each(function(){var d,e,f;d=a(this),e=d.data("bfhslider"),f="object"==typeof c&&c,this.type="bfhslider",e||d.data("bfhslider",e=new b(this,f)),"string"==typeof c&&e[c].call(d)})},a.fn.bfhslider.Constructor=b,a.fn.bfhslider.defaults={name:"",value:"",min:0,max:100},a.fn.bfhslider.noConflict=function(){return a.fn.bfhslider=c,this};var d;a.valHooks.div&&(d=a.valHooks.div),a.valHooks.div={get:function(b){return a(b).hasClass("bfh-slider")?a(b).find('input[type="hidden"]').val():d?d.get(b):void 0},set:function(b,c){if(a(b).hasClass("bfh-slider"))a(b).find('input[type="hidden"]').val(c),a(b).data("bfhslider").updateHandle(c);else if(d)return d.set(b,c)}},a(document).ready(function(){a("div.bfh-slider").each(function(){var b;b=a(this),b.bfhslider(b.data())})})}(window.jQuery),+function(a){"use strict";var b=function(b,c){this.options=a.extend({},a.fn.bfhstates.defaults,c),this.$element=a(b),this.$element.is("select")&&this.addStates(),this.$element.hasClass("bfh-selectbox")&&this.addBootstrapStates(),this.$element.is("span")&&this.displayState()};b.prototype={constructor:b,addStates:function(){var b,c;b=this.options.country,""!==b&&(c=a(document).find("#"+b),0!==c.length&&(b=c.val(),c.on("change",{state:this},this.changeCountry))),this.loadStates(b)},loadStates:function(a){var b,c;b=this.options.state,this.$element.html(""),this.options.blank===!0&&this.$element.append('<option value=""></option>');for(c in BFHStatesList[a])BFHStatesList[a].hasOwnProperty(c)&&this.$element.append('<option value="'+BFHStatesList[a][c].code+'">'+BFHStatesList[a][c].name+"</option>");this.$element.val(b)},changeCountry:function(b){var c,d,e;c=a(this),d=b.data.state,e=c.val(),d.loadStates(e)},addBootstrapStates:function(){var b,c;b=this.options.country,""!==b&&(c=a(document).find("#"+b),0!==c.length&&(b=c.find('input[type="hidden"]').val(),c.on("change.bfhselectbox",{state:this},this.changeBootstrapCountry))),this.loadBootstrapStates(b)},loadBootstrapStates:function(a){var b,c,d,e,f,g;e=this.options.state,f="",b=this.$element.find('input[type="hidden"]'),c=this.$element.find(".bfh-selectbox-option"),d=this.$element.find("[role=option]"),d.html(""),this.options.blank===!0&&d.append('<li><a tabindex="-1" href="#" data-option=""></a></li>');for(g in BFHStatesList[a])BFHStatesList[a].hasOwnProperty(g)&&(d.append('<li><a tabindex="-1" href="#" data-option="'+BFHStatesList[a][g].code+'">'+BFHStatesList[a][g].name+"</a></li>"),BFHStatesList[a][g].code===e&&(f=BFHStatesList[a][g].name));this.$element.val(e)},changeBootstrapCountry:function(b){var c,d,e;c=a(this),d=b.data.state,e=c.val(),d.loadBootstrapStates(e)},displayState:function(){var a,b,c,d;a=this.options.country,b=this.options.state,c="";for(d in BFHStatesList[a])if(BFHStatesList[a].hasOwnProperty(d)&&BFHStatesList[a][d].code===b){c=BFHStatesList[a][d].name;break}this.$element.html(c)}};var c=a.fn.bfhstates;a.fn.bfhstates=function(c){return this.each(function(){var d,e,f;d=a(this),e=d.data("bfhstates"),f="object"==typeof c&&c,e||d.data("bfhstates",e=new b(this,f)),"string"==typeof c&&e[c].call(d)})},a.fn.bfhstates.Constructor=b,a.fn.bfhstates.defaults={country:"",state:"",blank:!0},a.fn.bfhstates.noConflict=function(){return a.fn.bfhstates=c,this},a(document).ready(function(){a("form select.bfh-states, span.bfh-states, div.bfh-states").each(function(){var b;b=a(this),b.hasClass("bfh-selectbox")&&b.bfhselectbox(b.data()),b.bfhstates(b.data())})})}(window.jQuery),+function(a){"use strict";function b(a,b){return a=String(a),1===a.length&&(a="0"+a),b=String(b),1===b.length&&(b="0"+b),a+BFHTimePickerDelimiter+b}function c(){var b;a(e).each(function(c){return b=d(a(this)),b.hasClass("open")?(b.trigger(c=a.Event("hide.bfhtimepicker")),c.isDefaultPrevented()?!0:(b.removeClass("open").trigger("hidden.bfhtimepicker"),void 0)):!0})}function d(a){return a.closest(".bfh-timepicker")}var e="[data-toggle=bfh-timepicker]",f=function(b,c){this.options=a.extend({},a.fn.bfhtimepicker.defaults,c),this.$element=a(b),this.initPopover()};f.prototype={constructor:f,setTime:function(){var a,c,d,e,f,g,h;a=this.options.time,g="",h="",""===a||"now"===a||void 0===a?(c=new Date,e=c.getHours(),f=c.getMinutes(),"12h"===this.options.mode&&(e>12?(e-=12,g=" "+BFHTimePickerModes.pm,h="pm"):(g=" "+BFHTimePickerModes.am,h="am")),"now"===a&&this.$element.find('.bfh-timepicker-toggle > input[type="text"]').val(b(e,f)+g),this.$element.data("hour",e),this.$element.data("minute",f),this.$element.data("mode",h)):(d=String(a).split(BFHTimePickerDelimiter),e=d[0],f=d[1],"12h"===this.options.mode&&(d=String(f).split(" "),f=d[0],h=d[1]===BFHTimePickerModes.pm?"pm":"am"),this.$element.find('.bfh-timepicker-toggle > input[type="text"]').val(a),this.$element.data("hour",e),this.$element.data("minute",f),this.$element.data("mode",h))},initPopover:function(){var b,c,d,g,h;b="",c="",d="",""!==this.options.icon&&("right"===this.options.align?c='<span class="input-group-addon"><i class="'+this.options.icon+'"></i></span>':b='<span class="input-group-addon"><i class="'+this.options.icon+'"></i></span>',d="input-group"),g="",h="23","12h"===this.options.mode&&(g='<td><div class="bfh-selectbox" data-input="'+this.options.input+'" data-value="am">'+'<div data-value="am">'+BFHTimePickerModes.am+"</div>"+'<div data-value="pm">'+BFHTimePickerModes.pm+"</div>"+"</div>",h="11"),this.$element.html('<div class="'+d+' bfh-timepicker-toggle" data-toggle="bfh-timepicker">'+b+'<input type="text" name="'+this.options.name+'" class="'+this.options.input+'" placeholder="'+this.options.placeholder+'" readonly>'+c+"</div>"+'<div class="bfh-timepicker-popover">'+'<table class="table">'+"<tbody>"+"<tr>"+'<td class="hour">'+'<input type="text" class="'+this.options.input+' bfh-number"  data-min="0" data-max="'+h+'" data-zeros="true" data-wrap="true">'+"</td>"+'<td class="separator">'+BFHTimePickerDelimiter+"</td>"+'<td class="minute">'+'<input type="text" class="'+this.options.input+' bfh-number"  data-min="0" data-max="59" data-zeros="true" data-wrap="true">'+"</td>"+g+"</tr>"+"</tbody>"+"</table>"+"</div>"),this.$element.on("click.bfhtimepicker.data-api touchstart.bfhtimepicker.data-api",e,f.prototype.toggle).on("click.bfhtimepicker.data-api touchstart.bfhtimepicker.data-api",".bfh-timepicker-popover > table",function(){return!1}),this.$element.find(".bfh-number").each(function(){var b;b=a(this),b.bfhnumber(b.data()),b.on("change",f.prototype.change)}),this.$element.find(".bfh-selectbox").each(function(){var b;b=a(this),b.bfhselectbox(b.data()),b.on("change.bfhselectbox",f.prototype.change)}),this.setTime(),this.updatePopover()},updatePopover:function(){var a,b,c;a=this.$element.data("hour"),b=this.$element.data("minute"),c=this.$element.data("mode"),this.$element.find(".hour input[type=text]").val(a).change(),this.$element.find(".minute input[type=text]").val(b).change(),this.$element.find(".bfh-selectbox").val(c)},change:function(){var b,c,e,f;return b=a(this),c=d(b),e=c.data("bfhtimepicker"),e&&"undefined"!==e&&(f="","12h"===e.options.mode&&(f=" "+BFHTimePickerModes[c.find(".bfh-selectbox").val()]),c.find('.bfh-timepicker-toggle > input[type="text"]').val(c.find(".hour input[type=text]").val()+BFHTimePickerDelimiter+c.find(".minute input[type=text]").val()+f),c.trigger("change.bfhtimepicker")),!1},toggle:function(b){var e,f,g;if(e=a(this),f=d(e),f.is(".disabled")||void 0!==f.attr("disabled"))return!0;if(g=f.hasClass("open"),c(),!g){if(f.trigger(b=a.Event("show.bfhtimepicker")),b.isDefaultPrevented())return!0;f.toggleClass("open").trigger("shown.bfhtimepicker"),e.focus()}return!1}};var g=a.fn.bfhtimepicker;a.fn.bfhtimepicker=function(b){return this.each(function(){var c,d,e;c=a(this),d=c.data("bfhtimepicker"),e="object"==typeof b&&b,this.type="bfhtimepicker",d||c.data("bfhtimepicker",d=new f(this,e)),"string"==typeof b&&d[b].call(c)})},a.fn.bfhtimepicker.Constructor=f,a.fn.bfhtimepicker.defaults={icon:"glyphicon glyphicon-time",align:"left",input:"form-control",placeholder:"",name:"",time:"now",mode:"24h"},a.fn.bfhtimepicker.noConflict=function(){return a.fn.bfhtimepicker=g,this};var h;a.valHooks.div&&(h=a.valHooks.div),a.valHooks.div={get:function(b){return a(b).hasClass("bfh-timepicker")?a(b).find('.bfh-timepicker-toggle > input[type="text"]').val():h?h.get(b):void 0},set:function(b,c){var d;if(a(b).hasClass("bfh-timepicker"))d=a(b).data("bfhtimepicker"),d.options.time=c,d.setTime(),d.updatePopover();else if(h)return h.set(b,c)}},a(document).ready(function(){a("div.bfh-timepicker").each(function(){var b;b=a(this),b.bfhtimepicker(b.data())})}),a(document).on("click.bfhtimepicker.data-api",c)}(window.jQuery),+function(a){"use strict";var b=function(b,c){this.options=a.extend({},a.fn.bfhtimezones.defaults,c),this.$element=a(b),this.$element.is("select")&&this.addTimezones(),this.$element.hasClass("bfh-selectbox")&&this.addBootstrapTimezones()};b.prototype={constructor:b,addTimezones:function(){var b,c;b=this.options.country,""!==b&&(c=a(document).find("#"+b),0!==c.length&&(b=c.val(),c.on("change",{timezone:this},this.changeCountry))),this.loadTimezones(b)},loadTimezones:function(a){var b,c;b=this.options.timezone,this.$element.html(""),this.options.blank===!0&&this.$element.append('<option value=""></option>');for(c in BFHTimezonesList[a])BFHTimezonesList[a].hasOwnProperty(c)&&this.$element.append('<option value="'+c+'">'+BFHTimezonesList[a][c]+"</option>");this.$element.val(b)},changeCountry:function(b){var c,d,e;c=a(this),d=b.data.timezone,e=c.val(),d.loadTimezones(e)},addBootstrapTimezones:function(){var b,c;b=this.options.country,""!==b&&(c=a(document).find("#"+b),0!==c.length&&(b=c.find('input[type="hidden"]').val(),c.on("change.bfhselectbox",{timezone:this},this.changeBootstrapCountry))),this.loadBootstrapTimezones(b)},loadBootstrapTimezones:function(a){var b,c,d,e,f;e=this.options.timezone,b=this.$element.find('input[type="hidden"]'),c=this.$element.find(".bfh-selectbox-option"),d=this.$element.find("[role=option]"),d.html(""),this.options.blank===!0&&d.append('<li><a tabindex="-1" href="#" data-option=""></a></li>');for(f in BFHTimezonesList[a])BFHTimezonesList[a].hasOwnProperty(f)&&d.append('<li><a tabindex="-1" href="#" data-option="'+f+'">'+BFHTimezonesList[a][f]+"</a></li>");this.$element.val(e)},changeBootstrapCountry:function(b){var c,d,e;c=a(this),d=b.data.timezone,e=c.val(),d.loadBootstrapTimezones(e)}};var c=a.fn.bfhtimezones;a.fn.bfhtimezones=function(c){return this.each(function(){var d,e,f;d=a(this),e=d.data("bfhtimezones"),f="object"==typeof c&&c,e||d.data("bfhtimezones",e=new b(this,f)),"string"==typeof c&&e[c].call(d)})},a.fn.bfhtimezones.Constructor=b,a.fn.bfhtimezones.defaults={country:"",timezone:"",blank:!0},a.fn.bfhtimezones.noConflict=function(){return a.fn.bfhtimezones=c,this},a(document).ready(function(){a("form select.bfh-timezones, div.bfh-timezones").each(function(){var b;b=a(this),b.hasClass("bfh-selectbox")&&b.bfhselectbox(b.data()),b.bfhtimezones(b.data())})})}(window.jQuery);
\ No newline at end of file
diff --git a/gui/slick/js/lib/bootstrap-hover-dropdown.min.js b/gui/slick/js/lib/bootstrap-hover-dropdown.min.js
deleted file mode 100644
index 0f5f1d1318116a86b4af68eb28adff332f4fe62d..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 1501
zcmdPb(&AFkQgA3JN-a(;DoX`%0*dmpQj<%p6rA$&ONvX15(^YO^2<_-6kLk(3sUmS
z^FWFmOG`5Hi>wr!6LV9G^79me3sMt{KoVi8Ma7x<c~%N#MtTN%hK3+9=lr~qqRgby
zlKi4#D+S-gl9J3s1)s#C)Vz|+Vvqut)PmH!l+?WB%+z8ed)15Kb}AI)l%{9q=_q6c
zmZla}LNpa87iAWdfNgVBD9+3+$Vr8&Qz*$-NX<)3%1K4?MGDmY#UR<l<dV#?RE7LJ
zg$%Ig67y0N3X1Z}GE-6&5*6|?lT#H+i&KjfQY#8li!xL5l2i3SmilBSr{)!>S}FK?
zhJg4U`MIeDiRr0U3K=CO1y=g{$&dgk28D-Sa(=FUQcixleiAGwbzzRs&Ck;X+pG)m
znLd|-mOhtaT4`P~$VVC~I(a&&n$=~AMGE=0DjJ&BDtc*odNAGK2(g7LPSva~N-ZfZ
z%2UeEE6FcS&L}QPEGkjT%u`6oPcF?(%`34l$;d3W(#W^X*Go)E(E#!E3cxX-p{c0@
z=B6elXK28U)U1Xv6-qQxHLLUW(lYZ>G?c8;@{>!8l{EE|a!QLdG<7ocGV_W{67x!O
zDxGuki&OneGE$3*ZEbB84b;@~^@>t+^UG45a}tY-HI(uTQuCBFb@KF*b5awFLNaqx
z^Gi!Kk~MWQL5@OIRHRo@l$oBMTBMPvSqln<B3l)(vo&=xZHwS;*GaLhPD#y4th6#U
zFwnu~6e~r8TAgB;DySKHDTyVC8cJZDN}Aa9p(;%Vc}_PU>^mjRTAf5&rQ(eIa=oNt
zc%&%ll-ep~WTvE|3TD`<=%rSaq~@h)C>rQg*XpF`r0NuF>Lgod>VZ=LBGB_-@u-lg
zmyuYE5+XG<MS7XV8hLspiACwDC7SkS`I#vSB^r5}U?0L_OGC3d*)~tFIJE>8zDP2e
zSmOf`)TNrWIvIN4P|>W_)F~p(eVKUN2a01z0)hvZZgFW+ZfahslBOPd(gVeJDm=dP
zty9q*qFIfWi1IacQuUHEGILUjQu8#F5SBn~0L7ICNKJ8OQch-Gda;HkKINcT)X=Qe
zK?*yNn@Vi)Sz?`!GvG_~U?w7hw^p-OQ?ph_MFW;cHT8;86H_V?$w9MPMMFIrlvE)_
gg{=}S|0~6+Yr_2qE(|m@Yc*>%Af+QXKWkb806ez}@&Et;

diff --git a/gui/slick/js/lib/bootstrap.min.js b/gui/slick/js/lib/bootstrap.min.js
deleted file mode 100644
index 133aeecb98aa2b05d2dc1fcd623afcb37204828a..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 36816
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

diff --git a/gui/slick/js/lib/bootstrap3-typeahead.min.js b/gui/slick/js/lib/bootstrap3-typeahead.min.js
deleted file mode 100644
index 89959ab83d2f84143b287846dcf0c5c41d39200d..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 6878
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

diff --git a/gui/slick/js/lib/jquery-2.1.4.min.js b/gui/slick/js/lib/jquery-2.1.4.min.js
deleted file mode 100644
index 49990d6e14503798f142dcb0d5b23cb0c8f80244..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 84345
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

diff --git a/gui/slick/js/lib/jquery.confirm.js b/gui/slick/js/lib/jquery.confirm.js
deleted file mode 100644
index 7eb120243..000000000
--- a/gui/slick/js/lib/jquery.confirm.js
+++ /dev/null
@@ -1,56 +0,0 @@
-(function($){
-	
-	$.confirm = function(params){
-		
-		if($('#confirmOverlay').length){
-			// A confirm is already shown on the page:
-			return false;
-		}
-		
-		var buttonHTML = '';
-		$.each(params.buttons,function(name,obj){
-			
-			// Generating the markup for the buttons:
-			
-			buttonHTML += '<a href="#" class="button '+obj['class']+'">'+name+'<span></span></a>';
-			
-			if(!obj.action){
-				obj.action = function(){};
-			}
-		});
-		
-		var markup = [
-			'<div id="confirmOverlay">',
-			'<div id="confirmBox">',
-			'<h1>',params.title,'</h1>',
-			'<p>',params.message,'</p>',
-			'<div id="confirmButtons">',
-			buttonHTML,
-			'</div></div></div>'
-		].join('');
-		
-		$(markup).hide().appendTo('body').fadeIn();
-		
-		var buttons = $('#confirmBox .button'),
-			i = 0;
-
-		$.each(params.buttons,function(name,obj){
-			buttons.eq(i++).click(function(){
-				
-				// Calling the action attribute when a
-				// click occurs, and hiding the confirm.
-				
-				obj.action();
-				$.confirm.hide();
-				return false;
-			});
-		});
-	}
-
-	$.confirm.hide = function(){
-		$('#confirmOverlay').fadeOut(function(){
-			$(this).remove();
-		});
-	}
-	
-})(jQuery);
\ No newline at end of file
diff --git a/gui/slick/js/lib/jquery.cookie.js b/gui/slick/js/lib/jquery.cookie.js
deleted file mode 100644
index dc031611f..000000000
--- a/gui/slick/js/lib/jquery.cookie.js
+++ /dev/null
@@ -1,47 +0,0 @@
-/**
- * jQuery Cookie plugin
- *
- * Copyright (c) 2010 Klaus Hartl (stilbuero.de)
- * Dual licensed under the MIT and GPL licenses:
- * http://www.opensource.org/licenses/mit-license.php
- * http://www.gnu.org/licenses/gpl.html
- *
- */
-(function($) {
-    $.cookie = function(key, value, options) {
-
-        // key and at least value given, set cookie...
-        if (arguments.length > 1 && (!/Object/.test(Object.prototype.toString.call(value)) || value === null || value === undefined)) {
-            options = $.extend({}, options);
-
-            if (value === null || value === undefined) {
-                options.expires = -1;
-            }
-
-            if (typeof options.expires === 'number') {
-                var days = options.expires, t = options.expires = new Date();
-                t.setDate(t.getDate() + days);
-            }
-
-            value = String(value);
-
-            return (document.cookie = [
-                encodeURIComponent(key), '=', options.raw ? value : encodeURIComponent(value),
-                options.expires ? '; expires=' + options.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE
-                options.path    ? '; path=' + options.path : '',
-                options.domain  ? '; domain=' + options.domain : '',
-                options.secure  ? '; secure' : ''
-            ].join(''));
-        }
-
-        // key and possibly options given, get cookie...
-        options = value || {};
-        var decode = options.raw ? function(s) { return s; } : decodeURIComponent;
-
-        var pairs = document.cookie.split('; ');
-        for (var i = 0, pair; pair = pairs[i] && pairs[i].split('='); i++) {
-            if (decode(pair[0]) === key) return decode(pair[1] || ''); // IE saves cookies with empty string as "c; ", e.g. without "=" as opposed to EOMB, thus pair[1] may be undefined
-        }
-        return null;
-    };
-})(jQuery);
diff --git a/gui/slick/js/lib/jquery.timeago.js b/gui/slick/js/lib/jquery.timeago.js
deleted file mode 100644
index a8ad067eb..000000000
--- a/gui/slick/js/lib/jquery.timeago.js
+++ /dev/null
@@ -1,223 +0,0 @@
-/**
- * Timeago is a jQuery plugin that makes it easy to support automatically
- * updating fuzzy timestamps (e.g. "4 minutes ago" or "about 1 day ago").
- *
- * @name timeago
- * @version 1.4.2
- * @requires jQuery v1.2.3+
- * @author Ryan McGeary
- * @license MIT License - http://www.opensource.org/licenses/mit-license.php
- *
- * For usage and examples, visit:
- * http://timeago.yarp.com/
- *
- * Copyright (c) 2008-2015, Ryan McGeary (ryan -[at]- mcgeary [*dot*] org)
- */
-
-(function (factory) {
-  if (typeof define === 'function' && define.amd) {
-    // AMD. Register as an anonymous module.
-    define(['jquery'], factory);
-  } if (typeof module === 'object' && typeof module.exports === 'object') {
-    factory(require('jquery'));
-  } else {
-    // Browser globals
-    factory(jQuery);
-  }
-}(function ($) {
-  $.timeago = function(timestamp) {
-    if (timestamp instanceof Date) {
-      return inWords(timestamp);
-    } else if (typeof timestamp === "string") {
-      return inWords($.timeago.parse(timestamp));
-    } else if (typeof timestamp === "number") {
-      return inWords(new Date(timestamp));
-    } else {
-      return inWords($.timeago.datetime(timestamp));
-    }
-  };
-  var $t = $.timeago;
-
-  $.extend($.timeago, {
-    settings: {
-      refreshMillis: 60000,
-      allowPast: true,
-      allowFuture: false,
-      localeTitle: false,
-      cutoff: 0,
-      strings: {
-        prefixAgo: null,
-        prefixFromNow: null,
-        suffixAgo: "ago",
-        suffixFromNow: "from now",
-        inPast: 'any moment now',
-        seconds: "less than a minute",
-        minute: "about a minute",
-        minutes: "%d minutes",
-        hour: "about an hour",
-        hours: "about %d hours",
-        day: "a day",
-        days: "%d days",
-        month: "about a month",
-        months: "%d months",
-        year: "about a year",
-        years: "%d years",
-        wordSeparator: " ",
-        numbers: []
-      }
-    },
-
-    inWords: function(distanceMillis) {
-      if(!this.settings.allowPast && ! this.settings.allowFuture) {
-          throw 'timeago allowPast and allowFuture settings can not both be set to false.';
-      }
-
-      var $l = this.settings.strings;
-      var prefix = $l.prefixAgo;
-      var suffix = $l.suffixAgo;
-      if (this.settings.allowFuture) {
-        if (distanceMillis < 0) {
-          prefix = $l.prefixFromNow;
-          suffix = $l.suffixFromNow;
-        }
-      }
-
-      if(!this.settings.allowPast && distanceMillis >= 0) {
-        return this.settings.strings.inPast;
-      }
-
-      var seconds = Math.abs(distanceMillis) / 1000;
-      var minutes = seconds / 60;
-      var hours = minutes / 60;
-      var days = hours / 24;
-      var years = days / 365;
-
-      function substitute(stringOrFunction, number) {
-        var string = $.isFunction(stringOrFunction) ? stringOrFunction(number, distanceMillis) : stringOrFunction;
-        var value = ($l.numbers && $l.numbers[number]) || number;
-        return string.replace(/%d/i, value);
-      }
-
-      var words = seconds < 45 && substitute($l.seconds, Math.round(seconds)) ||
-        seconds < 90 && substitute($l.minute, 1) ||
-        minutes < 45 && substitute($l.minutes, Math.round(minutes)) ||
-        minutes < 90 && substitute($l.hour, 1) ||
-        hours < 24 && substitute($l.hours, Math.round(hours)) ||
-        hours < 42 && substitute($l.day, 1) ||
-        days < 30 && substitute($l.days, Math.round(days)) ||
-        days < 45 && substitute($l.month, 1) ||
-        days < 365 && substitute($l.months, Math.round(days / 30)) ||
-        years < 1.5 && substitute($l.year, 1) ||
-        substitute($l.years, Math.round(years));
-
-      var separator = $l.wordSeparator || "";
-      if ($l.wordSeparator === undefined) { separator = " "; }
-      return $.trim([prefix, words, suffix].join(separator));
-    },
-
-    parse: function(iso8601) {
-      var s = $.trim(iso8601);
-      s = s.replace(/\.\d+/,""); // remove milliseconds
-      s = s.replace(/-/,"/").replace(/-/,"/");
-      s = s.replace(/T/," ").replace(/Z/," UTC");
-      s = s.replace(/([\+\-]\d\d)\:?(\d\d)/," $1$2"); // -04:00 -> -0400
-      s = s.replace(/([\+\-]\d\d)$/," $100"); // +09 -> +0900
-      return new Date(s);
-    },
-    datetime: function(elem) {
-      var iso8601 = $t.isTime(elem) ? $(elem).attr("datetime") : $(elem).attr("title");
-      return $t.parse(iso8601);
-    },
-    isTime: function(elem) {
-      // jQuery's `is()` doesn't play well with HTML5 in IE
-      return $(elem).get(0).tagName.toLowerCase() === "time"; // $(elem).is("time");
-    }
-  });
-
-  // functions that can be called via $(el).timeago('action')
-  // init is default when no action is given
-  // functions are called with context of a single element
-  var functions = {
-    init: function(){
-      var refresh_el = $.proxy(refresh, this);
-      refresh_el();
-      var $s = $t.settings;
-      if ($s.refreshMillis > 0) {
-        this._timeagoInterval = setInterval(refresh_el, $s.refreshMillis);
-      }
-    },
-    update: function(time){
-      var parsedTime = $t.parse(time);
-      $(this).data('timeago', { datetime: parsedTime });
-      if($t.settings.localeTitle) $(this).attr("title", parsedTime.toLocaleString());
-      refresh.apply(this);
-    },
-    updateFromDOM: function(){
-      $(this).data('timeago', { datetime: $t.parse( $t.isTime(this) ? $(this).attr("datetime") : $(this).attr("title") ) });
-      refresh.apply(this);
-    },
-    dispose: function () {
-      if (this._timeagoInterval) {
-        window.clearInterval(this._timeagoInterval);
-        this._timeagoInterval = null;
-      }
-    }
-  };
-
-  $.fn.timeago = function(action, options) {
-    var fn = action ? functions[action] : functions.init;
-    if(!fn){
-      throw new Error("Unknown function name '"+ action +"' for timeago");
-    }
-    // each over objects here and call the requested function
-    this.each(function(){
-      fn.call(this, options);
-    });
-    return this;
-  };
-
-  function refresh() {
-    //check if it's still visible
-    if(!$.contains(document.documentElement,this)){
-      //stop if it has been removed
-      $(this).timeago("dispose");
-      return this;
-    }
-
-    var data = prepareData(this);
-    var $s = $t.settings;
-
-    if (!isNaN(data.datetime)) {
-      if ( $s.cutoff == 0 || Math.abs(distance(data.datetime)) < $s.cutoff) {
-        $(this).text(inWords(data.datetime));
-      }
-    }
-    return this;
-  }
-
-  function prepareData(element) {
-    element = $(element);
-    if (!element.data("timeago")) {
-      element.data("timeago", { datetime: $t.datetime(element) });
-      var text = $.trim(element.text());
-      if ($t.settings.localeTitle) {
-        element.attr("title", element.data('timeago').datetime.toLocaleString());
-      } else if (text.length > 0 && !($t.isTime(element) && element.attr("title"))) {
-        element.attr("title", text);
-      }
-    }
-    return element.data("timeago");
-  }
-
-  function inWords(date) {
-    return $t.inWords(distance(date));
-  }
-
-  function distance(date) {
-    return (new Date().getTime() - date.getTime());
-  }
-
-  // fix for IE6 suckage
-  document.createElement("abbr");
-  document.createElement("time");
-}));
diff --git a/gui/slick/js/lib/jquery.tokeninput.js b/gui/slick/js/lib/jquery.tokeninput.js
deleted file mode 100644
index 5eec491e1..000000000
--- a/gui/slick/js/lib/jquery.tokeninput.js
+++ /dev/null
@@ -1,861 +0,0 @@
-/*
- * jQuery Plugin: Tokenizing Autocomplete Text Entry
- * Version 1.6.0
- *
- * Copyright (c) 2009 James Smith (http://loopj.com)
- * Licensed jointly under the GPL and MIT licenses,
- * choose which one suits your project best!
- *
- */
-
-(function ($) {
-// Default settings
-var DEFAULT_SETTINGS = {
-	// Search settings
-    method: "GET",
-    contentType: "json",
-    queryParam: "q",
-    searchDelay: 300,
-    minChars: 1,
-    propertyToSearch: "name",
-    jsonContainer: null,
-
-	// Display settings
-    hintText: "Type in a search term",
-    noResultsText: "No results",
-    searchingText: "Searching...",
-    deleteText: "&times;",
-    animateDropdown: true,
-
-	// Tokenization settings
-    tokenLimit: null,
-    tokenDelimiter: ",",
-    preventDuplicates: false,
-
-	// Output settings
-    tokenValue: "id",
-
-	// Prepopulation settings
-    prePopulate: null,
-    processPrePopulate: true,
-
-	// Manipulation settings
-    idPrefix: "token-input-",
-
-	// Formatters
-    resultsFormatter: function(item){ return "<li><img src='"+srRoot+"/images/subtitles/flags/"+item["id"]+".png' onError=this.onerror=null;this.src='"+srRoot+"/images/flags/unknown.png'; /> " + item[this.propertyToSearch]+ "</li>" },
-    tokenFormatter: function(item) { return "<li><img src='"+srRoot+"/images/subtitles/flags/"+item["id"]+".png' onError=this.onerror=null;this.src='"+srRoot+"/images/flags/unknown.png'; /> <p>" + item[this.propertyToSearch] + "</p></li>" },
-    flag: "flag",
-
-	// Callbacks
-    onResult: null,
-    onAdd: null,
-    onDelete: null,
-    onReady: null
-};
-
-// Default classes to use when theming
-var DEFAULT_CLASSES = {
-    tokenList: "token-input-list",
-    token: "token-input-token",
-    tokenDelete: "token-input-delete-token",
-    selectedToken: "token-input-selected-token",
-    highlightedToken: "token-input-highlighted-token",
-    dropdown: "token-input-dropdown",
-    dropdownItem: "token-input-dropdown-item",
-    dropdownItem2: "token-input-dropdown-item2",
-    selectedDropdownItem: "token-input-selected-dropdown-item",
-    inputToken: "token-input-input-token"
-};
-
-// Input box position "enum"
-var POSITION = {
-    BEFORE: 0,
-    AFTER: 1,
-    END: 2
-};
-
-// Keys "enum"
-var KEY = {
-    BACKSPACE: 8,
-    TAB: 9,
-    ENTER: 13,
-    ESCAPE: 27,
-    SPACE: 32,
-    PAGE_UP: 33,
-    PAGE_DOWN: 34,
-    END: 35,
-    HOME: 36,
-    LEFT: 37,
-    UP: 38,
-    RIGHT: 39,
-    DOWN: 40,
-    NUMPAD_ENTER: 108,
-    COMMA: 188
-};
-
-// Additional public (exposed) methods
-var methods = {
-    init: function(url_or_data_or_function, options) {
-        var settings = $.extend({}, DEFAULT_SETTINGS, options || {});
-
-        return this.each(function () {
-            $(this).data("tokenInputObject", new $.TokenList(this, url_or_data_or_function, settings));
-        });
-    },
-    clear: function() {
-        this.data("tokenInputObject").clear();
-        return this;
-    },
-    add: function(item) {
-        this.data("tokenInputObject").add(item);
-        return this;
-    },
-    remove: function(item) {
-        this.data("tokenInputObject").remove(item);
-        return this;
-    },
-    get: function() {
-    	return this.data("tokenInputObject").getTokens();
-   	}
-}
-
-// Expose the .tokenInput function to jQuery as a plugin
-$.fn.tokenInput = function (method) {
-    // Method calling and initialization logic
-    if(methods[method]) {
-        return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
-    } else {
-        return methods.init.apply(this, arguments);
-    }
-};
-
-// TokenList class for each input
-$.TokenList = function (input, url_or_data, settings) {
-    //
-    // Initialization
-    //
-
-    // Configure the data source
-    if($.type(url_or_data) === "string" || $.type(url_or_data) === "function") {
-        // Set the url to query against
-        settings.url = url_or_data;
-
-        // If the URL is a function, evaluate it here to do our initalization work
-        var url = computeURL();
-
-        // Make a smart guess about cross-domain if it wasn't explicitly specified
-        if(settings.crossDomain === undefined) {
-            if(url.indexOf("://") === -1) {
-                settings.crossDomain = false;
-            } else {
-                settings.crossDomain = (location.href.split(/\/+/g)[1] !== url.split(/\/+/g)[1]);
-            }
-        }
-    } else if(typeof(url_or_data) === "object") {
-        // Set the local data to search through
-        settings.local_data = url_or_data;
-    }
-
-    // Build class names
-    if(settings.classes) {
-        // Use custom class names
-        settings.classes = $.extend({}, DEFAULT_CLASSES, settings.classes);
-    } else if(settings.theme) {
-        // Use theme-suffixed default class names
-        settings.classes = {};
-        $.each(DEFAULT_CLASSES, function(key, value) {
-            settings.classes[key] = value + "-" + settings.theme;
-        });
-    } else {
-        settings.classes = DEFAULT_CLASSES;
-    }
-
-
-    // Save the tokens
-    var saved_tokens = [];
-
-    // Keep track of the number of tokens in the list
-    var token_count = 0;
-
-    // Basic cache to save on db hits
-    var cache = new $.TokenList.Cache();
-
-    // Keep track of the timeout, old vals
-    var timeout;
-    var input_val;
-
-    // Create a new text input an attach keyup events
-    var input_box = $("<input type=\"text\"  autocomplete=\"off\" >")
-        .css({
-            outline: "none"
-        })
-        .attr("id", settings.idPrefix + input.id)
-        .focus(function () {
-            if (settings.tokenLimit === null || settings.tokenLimit !== token_count) {
-                show_dropdown_hint();
-            }
-        })
-        .blur(function () {
-            hide_dropdown();
-            $(this).val("");
-        })
-        .bind("keyup keydown blur update", resize_input)
-        .keydown(function (event) {
-            var previous_token;
-            var next_token;
-
-            switch(event.keyCode) {
-                case KEY.LEFT:
-                case KEY.RIGHT:
-                case KEY.UP:
-                case KEY.DOWN:
-                    if(!$(this).val()) {
-                        previous_token = input_token.prev();
-                        next_token = input_token.next();
-
-                        if((previous_token.length && previous_token.get(0) === selected_token) || (next_token.length && next_token.get(0) === selected_token)) {
-                            // Check if there is a previous/next token and it is selected
-                            if(event.keyCode === KEY.LEFT || event.keyCode === KEY.UP) {
-                                deselect_token($(selected_token), POSITION.BEFORE);
-                            } else {
-                                deselect_token($(selected_token), POSITION.AFTER);
-                            }
-                        } else if((event.keyCode === KEY.LEFT || event.keyCode === KEY.UP) && previous_token.length) {
-                            // We are moving left, select the previous token if it exists
-                            select_token($(previous_token.get(0)));
-                        } else if((event.keyCode === KEY.RIGHT || event.keyCode === KEY.DOWN) && next_token.length) {
-                            // We are moving right, select the next token if it exists
-                            select_token($(next_token.get(0)));
-                        }
-                    } else {
-                        var dropdown_item = null;
-
-                        if(event.keyCode === KEY.DOWN || event.keyCode === KEY.RIGHT) {
-                            dropdown_item = $(selected_dropdown_item).next();
-                        } else {
-                            dropdown_item = $(selected_dropdown_item).prev();
-                        }
-
-                        if(dropdown_item.length) {
-                            select_dropdown_item(dropdown_item);
-                        }
-                        return false;
-                    }
-                    break;
-
-                case KEY.BACKSPACE:
-                    previous_token = input_token.prev();
-
-                    if(!$(this).val().length) {
-                        if(selected_token) {
-                            delete_token($(selected_token));
-                            hidden_input.change();
-                        } else if(previous_token.length) {
-                            select_token($(previous_token.get(0)));
-                        }
-
-                        return false;
-                    } else if($(this).val().length === 1) {
-                        hide_dropdown();
-                    } else {
-                        // set a timeout just long enough to let this function finish.
-                        setTimeout(function(){do_search();}, 5);
-                    }
-                    break;
-
-                case KEY.TAB:
-                case KEY.ENTER:
-                case KEY.NUMPAD_ENTER:
-                case KEY.COMMA:
-                  if(selected_dropdown_item) {
-                    add_token($(selected_dropdown_item).data("tokeninput"));
-                    hidden_input.change();
-                    return false;
-                  }
-                  break;
-
-                case KEY.ESCAPE:
-                  hide_dropdown();
-                  return true;
-
-                default:
-                    if(String.fromCharCode(event.which)) {
-                        // set a timeout just long enough to let this function finish.
-                        setTimeout(function(){do_search();}, 5);
-                    }
-                    break;
-            }
-        });
-
-    // Keep a reference to the original input box
-    var hidden_input = $(input)
-                           .hide()
-                           .val("")
-                           .focus(function () {
-                               input_box.focus();
-                           })
-                           .blur(function () {
-                               input_box.blur();
-                           });
-
-    // Keep a reference to the selected token and dropdown item
-    var selected_token = null;
-    var selected_token_index = 0;
-    var selected_dropdown_item = null;
-
-    // The list to store the token items in
-    var token_list = $("<ul />")
-        .addClass(settings.classes.tokenList)
-        .click(function (event) {
-            var li = $(event.target).closest("li");
-            if(li && li.get(0) && $.data(li.get(0), "tokeninput")) {
-                toggle_select_token(li);
-            } else {
-                // Deselect selected token
-                if(selected_token) {
-                    deselect_token($(selected_token), POSITION.END);
-                }
-
-                // Focus input box
-                input_box.focus();
-            }
-        })
-        .mouseover(function (event) {
-            var li = $(event.target).closest("li");
-            if(li && selected_token !== this) {
-                li.addClass(settings.classes.highlightedToken);
-            }
-        })
-        .mouseout(function (event) {
-            var li = $(event.target).closest("li");
-            if(li && selected_token !== this) {
-                li.removeClass(settings.classes.highlightedToken);
-            }
-        })
-        .insertBefore(hidden_input);
-
-    // The token holding the input box
-    var input_token = $("<li />")
-        .addClass(settings.classes.inputToken)
-        .appendTo(token_list)
-        .append(input_box);
-
-    // The list to store the dropdown items in
-    var dropdown = $("<div>")
-        .addClass(settings.classes.dropdown)
-        .appendTo("body")
-        .hide();
-
-    // Magic element to help us resize the text input
-    var input_resizer = $("<tester/>")
-        .insertAfter(input_box)
-        .css({
-            position: "absolute",
-            top: -9999,
-            left: -9999,
-            width: "auto",
-            fontSize: input_box.css("fontSize"),
-            fontFamily: input_box.css("fontFamily"),
-            fontWeight: input_box.css("fontWeight"),
-            letterSpacing: input_box.css("letterSpacing"),
-            whiteSpace: "nowrap"
-        });
-
-    // Pre-populate list if items exist
-    hidden_input.val("");
-    var li_data = settings.prePopulate || hidden_input.data("pre");
-    if(settings.processPrePopulate && $.isFunction(settings.onResult)) {
-        li_data = settings.onResult.call(hidden_input, li_data);
-    }
-    if(li_data && li_data.length) {
-        $.each(li_data, function (index, value) {
-            insert_token(value);
-            checkTokenLimit();
-        });
-    }
-
-    // Initialization is done
-    if($.isFunction(settings.onReady)) {
-        settings.onReady.call();
-    }
-
-    //
-    // Public functions
-    //
-
-    this.clear = function() {
-        token_list.children("li").each(function() {
-            if ($(this).children("input").length === 0) {
-                delete_token($(this));
-            }
-        });
-    }
-
-    this.add = function(item) {
-        add_token(item);
-    }
-
-    this.remove = function(item) {
-        token_list.children("li").each(function() {
-            if ($(this).children("input").length === 0) {
-                var currToken = $(this).data("tokeninput");
-                var match = true;
-                for (var prop in item) {
-                    if (item[prop] !== currToken[prop]) {
-                        match = false;
-                        break;
-                    }
-                }
-                if (match) {
-                    delete_token($(this));
-                }
-            }
-        });
-    }
-    
-    this.getTokens = function() {
-   		return saved_tokens;
-   	}
-
-    //
-    // Private functions
-    //
-
-    function checkTokenLimit() {
-        if(settings.tokenLimit !== null && token_count >= settings.tokenLimit) {
-            input_box.hide();
-            hide_dropdown();
-            return;
-        }
-    }
-
-    function resize_input() {
-        if(input_val === (input_val = input_box.val())) {return;}
-
-        // Enter new content into resizer and resize input accordingly
-        var escaped = input_val.replace(/&/g, '&amp;').replace(/\s/g,' ').replace(/</g, '&lt;').replace(/>/g, '&gt;');
-        input_resizer.html(escaped);
-        input_box.width(input_resizer.width() + 30);
-    }
-
-    function is_printable_character(keycode) {
-        return ((keycode >= 48 && keycode <= 90) ||     // 0-1a-z
-                (keycode >= 96 && keycode <= 111) ||    // numpad 0-9 + - / * .
-                (keycode >= 186 && keycode <= 192) ||   // ; = , - . / ^
-                (keycode >= 219 && keycode <= 222));    // ( \ ) '
-    }
-
-    // Inner function to a token to the list
-    function insert_token(item) {
-        var this_token = settings.tokenFormatter(item);
-        this_token = $(this_token)
-          .addClass(settings.classes.token)
-          .insertBefore(input_token);
-
-        // The 'delete token' button
-        $("<span>" + settings.deleteText + "</span>")
-            .addClass(settings.classes.tokenDelete)
-            .appendTo(this_token)
-            .click(function () {
-                delete_token($(this).parent());
-                hidden_input.change();
-                return false;
-            });
-
-        // Store data on the token
-        var token_data = {"id": item.id};
-        token_data[settings.propertyToSearch] = item[settings.propertyToSearch];
-        $.data(this_token.get(0), "tokeninput", item);
-
-        // Save this token for duplicate checking
-        saved_tokens = saved_tokens.slice(0,selected_token_index).concat([token_data]).concat(saved_tokens.slice(selected_token_index));
-        selected_token_index++;
-
-        // Update the hidden input
-        update_hidden_input(saved_tokens, hidden_input);
-
-        token_count += 1;
-
-        // Check the token limit
-        if(settings.tokenLimit !== null && token_count >= settings.tokenLimit) {
-            input_box.hide();
-            hide_dropdown();
-        }
-
-        return this_token;
-    }
-
-    // Add a token to the token list based on user input
-    function add_token (item) {
-        var callback = settings.onAdd;
-
-        // See if the token already exists and select it if we don't want duplicates
-        if(token_count > 0 && settings.preventDuplicates) {
-            var found_existing_token = null;
-            token_list.children().each(function () {
-                var existing_token = $(this);
-                var existing_data = $.data(existing_token.get(0), "tokeninput");
-                if(existing_data && existing_data.id === item.id) {
-                    found_existing_token = existing_token;
-                    return false;
-                }
-            });
-
-            if(found_existing_token) {
-                select_token(found_existing_token);
-                input_token.insertAfter(found_existing_token);
-                input_box.focus();
-                return;
-            }
-        }
-
-        // Insert the new tokens
-        if(settings.tokenLimit == null || token_count < settings.tokenLimit) {
-            insert_token(item);
-            checkTokenLimit();
-        }
-
-        // Clear input box
-        input_box.val("");
-
-        // Don't show the help dropdown, they've got the idea
-        hide_dropdown();
-
-        // Execute the onAdd callback if defined
-        if($.isFunction(callback)) {
-            callback.call(hidden_input,item);
-        }
-    }
-
-    // Select a token in the token list
-    function select_token (token) {
-        token.addClass(settings.classes.selectedToken);
-        selected_token = token.get(0);
-
-        // Hide input box
-        input_box.val("");
-
-        // Hide dropdown if it is visible (eg if we clicked to select token)
-        hide_dropdown();
-    }
-
-    // Deselect a token in the token list
-    function deselect_token (token, position) {
-        token.removeClass(settings.classes.selectedToken);
-        selected_token = null;
-
-        if(position === POSITION.BEFORE) {
-            input_token.insertBefore(token);
-            selected_token_index--;
-        } else if(position === POSITION.AFTER) {
-            input_token.insertAfter(token);
-            selected_token_index++;
-        } else {
-            input_token.appendTo(token_list);
-            selected_token_index = token_count;
-        }
-
-        // Show the input box and give it focus again
-        input_box.focus();
-    }
-
-    // Toggle selection of a token in the token list
-    function toggle_select_token(token) {
-        var previous_selected_token = selected_token;
-
-        if(selected_token) {
-            deselect_token($(selected_token), POSITION.END);
-        }
-
-        if(previous_selected_token === token.get(0)) {
-            deselect_token(token, POSITION.END);
-        } else {
-            select_token(token);
-        }
-    }
-
-    // Delete a token from the token list
-    function delete_token (token) {
-        // Remove the id from the saved list
-        var token_data = $.data(token.get(0), "tokeninput");
-        var callback = settings.onDelete;
-
-        var index = token.prevAll().length;
-        if(index > selected_token_index) index--;
-
-        // Delete the token
-        token.remove();
-        selected_token = null;
-
-        // Show the input box and give it focus again
-        input_box.focus();
-
-        // Remove this token from the saved list
-        saved_tokens = saved_tokens.slice(0,index).concat(saved_tokens.slice(index+1));
-        if(index < selected_token_index) selected_token_index--;
-
-        // Update the hidden input
-        update_hidden_input(saved_tokens, hidden_input);
-
-        token_count -= 1;
-
-        if(settings.tokenLimit !== null) {
-            input_box
-                .show()
-                .val("")
-                .focus();
-        }
-
-        // Execute the onDelete callback if defined
-        if($.isFunction(callback)) {
-            callback.call(hidden_input,token_data);
-        }
-    }
-
-    // Update the hidden input box value
-    function update_hidden_input(saved_tokens, hidden_input) {
-        var token_values = $.map(saved_tokens, function (el) {
-            return el[settings.tokenValue];
-        });
-        hidden_input.val(token_values.join(settings.tokenDelimiter));
-
-    }
-
-    // Hide and clear the results dropdown
-    function hide_dropdown () {
-        dropdown.hide().empty();
-        selected_dropdown_item = null;
-    }
-
-    function show_dropdown() {
-        dropdown
-            .css({
-                position: "absolute",
-                top: $(token_list).offset().top + $(token_list).outerHeight(),
-                left: $(token_list).offset().left,
-                zindex: 999
-            })
-            .show();
-    }
-
-    function show_dropdown_searching () {
-        if(settings.searchingText) {
-            dropdown.html("<p>"+settings.searchingText+"</p>");
-            show_dropdown();
-        }
-    }
-
-    function show_dropdown_hint () {
-        if(settings.hintText) {
-            dropdown.html("<p>"+settings.hintText+"</p>");
-            show_dropdown();
-        }
-    }
-
-    // Highlight the query part of the search term
-    function highlight_term(value, term) {
-        return value.replace(new RegExp("(?![^&;]+;)(?!<[^<>]*)(" + term + ")(?![^<>]*>)(?![^&;]+;)", "gi"), "<b>$1</b>");
-    }
-    
-    function find_value_and_highlight_term(template, value, term) {
-        return template.replace(new RegExp("(?![^&;]+;)(?!<[^<>]*)(" + value + ")(?![^<>]*>)(?![^&;]+;)", "g"), highlight_term(value, term));
-    }
-
-    // Populate the results dropdown with some results
-    function populate_dropdown (query, results) {
-        if(results && results.length) {
-            dropdown.empty();
-            var dropdown_ul = $("<ul>")
-                .appendTo(dropdown)
-                .mouseover(function (event) {
-                    select_dropdown_item($(event.target).closest("li"));
-                })
-                .mousedown(function (event) {
-                    add_token($(event.target).closest("li").data("tokeninput"));
-                    hidden_input.change();
-                    return false;
-                })
-                .hide();
-
-            $.each(results, function(index, value) {
-                var this_li = settings.resultsFormatter(value);
-                
-                this_li = find_value_and_highlight_term(this_li ,value[settings.propertyToSearch], query);            
-                
-                this_li = $(this_li).appendTo(dropdown_ul);
-                
-                if(index % 2) {
-                    this_li.addClass(settings.classes.dropdownItem);
-                } else {
-                    this_li.addClass(settings.classes.dropdownItem2);
-                }
-
-                if(index === 0) {
-                    select_dropdown_item(this_li);
-                }
-
-                $.data(this_li.get(0), "tokeninput", value);
-            });
-
-            show_dropdown();
-
-            if(settings.animateDropdown) {
-                dropdown_ul.slideDown("fast");
-            } else {
-                dropdown_ul.show();
-            }
-        } else {
-            if(settings.noResultsText) {
-                dropdown.html("<p>"+settings.noResultsText+"</p>");
-                show_dropdown();
-            }
-        }
-    }
-
-    // Highlight an item in the results dropdown
-    function select_dropdown_item (item) {
-        if(item) {
-            if(selected_dropdown_item) {
-                deselect_dropdown_item($(selected_dropdown_item));
-            }
-
-            item.addClass(settings.classes.selectedDropdownItem);
-            selected_dropdown_item = item.get(0);
-        }
-    }
-
-    // Remove highlighting from an item in the results dropdown
-    function deselect_dropdown_item (item) {
-        item.removeClass(settings.classes.selectedDropdownItem);
-        selected_dropdown_item = null;
-    }
-
-    // Do a search and show the "searching" dropdown if the input is longer
-    // than settings.minChars
-    function do_search() {
-        var query = input_box.val().toLowerCase();
-
-        if(query && query.length) {
-            if(selected_token) {
-                deselect_token($(selected_token), POSITION.AFTER);
-            }
-
-            if(query.length >= settings.minChars) {
-                show_dropdown_searching();
-                clearTimeout(timeout);
-
-                timeout = setTimeout(function(){
-                    run_search(query);
-                }, settings.searchDelay);
-            } else {
-                hide_dropdown();
-            }
-        }
-    }
-
-    // Do the actual search
-    function run_search(query) {
-        var cache_key = query + computeURL();
-        var cached_results = cache.get(cache_key);
-        if(cached_results) {
-            populate_dropdown(query, cached_results);
-        } else {
-            // Are we doing an ajax search or local data search?
-            if(settings.url) {
-                var url = computeURL();
-                // Extract exisiting get params
-                var ajax_params = {};
-                ajax_params.data = {};
-                if(url.indexOf("?") > -1) {
-                    var parts = url.split("?");
-                    ajax_params.url = parts[0];
-
-                    var param_array = parts[1].split("&");
-                    $.each(param_array, function (index, value) {
-                        var kv = value.split("=");
-                        ajax_params.data[kv[0]] = kv[1];
-                    });
-                } else {
-                    ajax_params.url = url;
-                }
-
-                // Prepare the request
-                ajax_params.data[settings.queryParam] = query;
-                ajax_params.type = settings.method;
-                ajax_params.dataType = settings.contentType;
-                if(settings.crossDomain) {
-                    ajax_params.dataType = "jsonp";
-                }
-
-                // Attach the success callback
-                ajax_params.success = function(results) {
-                  if($.isFunction(settings.onResult)) {
-                      results = settings.onResult.call(hidden_input, results);
-                  }
-                  cache.add(cache_key, settings.jsonContainer ? results[settings.jsonContainer] : results);
-
-                  // only populate the dropdown if the results are associated with the active search query
-                  if(input_box.val().toLowerCase() === query) {
-                      populate_dropdown(query, settings.jsonContainer ? results[settings.jsonContainer] : results);
-                  }
-                };
-
-                // Make the request
-                $.ajax(ajax_params);
-            } else if(settings.local_data) {
-                // Do the search through local data
-                var results = $.grep(settings.local_data, function (row) {
-                    return row[settings.propertyToSearch].toLowerCase().indexOf(query.toLowerCase()) > -1;
-                });
-
-                if($.isFunction(settings.onResult)) {
-                    results = settings.onResult.call(hidden_input, results);
-                }
-                cache.add(cache_key, results);
-                populate_dropdown(query, results);
-            }
-        }
-    }
-
-    // compute the dynamic URL
-    function computeURL() {
-        var url = settings.url;
-        if(typeof settings.url == 'function') {
-            url = settings.url.call();
-        }
-        return url;
-    }
-};
-
-// Really basic cache for the results
-$.TokenList.Cache = function (options) {
-    var settings = $.extend({
-        max_size: 500
-    }, options);
-
-    var data = {};
-    var size = 0;
-
-    var flush = function () {
-        data = {};
-        size = 0;
-    };
-
-    this.add = function (query, results) {
-        if(size > settings.max_size) {
-            flush();
-        }
-
-        if(!data[query]) {
-            size += 1;
-        }
-
-        data[query] = results;
-    };
-
-    this.get = function (query) {
-        return data[query];
-    };
-};
-}(jQuery));
-- 
GitLab


From 7f52fce2aa50e5814caca7a1dfb88e85644349a8 Mon Sep 17 00:00:00 2001
From: Alexis Tyler <xo@wvvw.me>
Date: Sat, 14 Nov 2015 16:13:31 +1030
Subject: [PATCH 184/215] remove refs to old libs

---
 gui/slick/js/_bower.min.js          | Bin 502722 -> 0 bytes
 gui/slick/views/config_general.mako |   1 -
 gui/slick/views/editShow.mako       |   5 ++---
 gui/slick/views/home_newShow.mako   |   1 -
 gui/slick/views/layouts/main.mako   |   5 +----
 gui/slick/views/manage.mako         |   1 -
 6 files changed, 3 insertions(+), 10 deletions(-)
 delete mode 100644 gui/slick/js/_bower.min.js

diff --git a/gui/slick/js/_bower.min.js b/gui/slick/js/_bower.min.js
deleted file mode 100644
index aad0ddf1ce56d0457e6d9e1978f112a66e0d3d3e..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 502722
zcmc~y(?~1LOD@UG&(lcMNz$xV%1_ElO)gQgwJoVENX<`E$jwhF%}G^L!y%!UT2YW+
zR8njYQ3vDNChDc+Czs}?=9SndX(Z|>8faP}EYhsbOw&+ADA6p*D9SHa$V)9(a4jmz
zFVaxT3M@@6s#GXSEiBC}N-b7MR4C8POUW-+D9<d(P)JmO8Lp&hU6fi<T9l`dq>-pu
zYXv4XluGkbQqwZ?Qd5)^Vg7*Vw}((xB^jB;ItT}Wd=BF&Bx@vUR+l9fDJ0n{<)r4N
zmt-hq<|!nqsU_+`xH`$U@p_=((MW_@uLRSrWNT}iTvHRTmsuPRcCkjHroEz}m7%Sz
zZK7UYeoAUcWkIT%T9Un@ft6BXQBh(gREvSFt!+|GjZ$7|Zc=IyA_9`s)ROEB)YOu6
z4HZD{sD)XjkOGP_on&xmf-H1{#blDECNxyy_0o${3p5gu{hFd#4Utt;OwvnE%*oM6
z)Jf4v)Ks*!O|I3n&P>xtf;$wCIWSWc5<w0}XjUpNDay=CNAdvJff<Q<C8@<F8pv)-
z%giZBEz(HRNz_T!v`(^(*F%VC)<PVqfW-@Nt3x5~Ptr-$w6isUxB(G9si5%DtWL`>
z(y-P@v`vgoiq%w8GgL&532RskDkLH_rXf;5eqwZDtZj8IESbgYr6wk4Xe8?8CYB^;
zXyheo*3?ADA_s4>W_40@a;&YQL9M1v62j1Q4bAE(y`t3I{IXQnvedj1pUmQt)V$Op
z4J8+UU+4V15|CJaVoGX?l1{pgqM@cvB6j6D`H65P@p?t6i7AyDnh1+BG&HOI!MRuu
zk_!Tg@(WUnN-8x#sa`KRF*zgEwz^iwK&LuAwFHqZVWC=GTU)EC16G?_QIMFIl5ZOi
z%GV&4c7|SQW{S2p!nRCMAcGPiD95CLQcqcaW{LtRH7Bd7p(cCH%ruP@Tcwo5l0;o4
z?IgXT)PkJE<W!B)L>(nv6+<OWy^?&N{PNTy=fvVv4NaY7+eE$e)Dp*%lA_F{(vnn-
z6ipqB<dv*hT~bt8oouUAQdF7>&P?FEm6n)O4C5MFDdm;s<Uk}rEGz9~Z6yd-JK3rP
znl_U)?c?<d5{rscy@LJyG?F!~l53N}@tmqzU0a-}SDab`^=@ryPI0P2vMt23u+))^
z2$w7kSa>QLAVjkfqJ{|391Vycpea5|FEP0!vn<s$ClyqHLY<JPSzU|Jk_&PN%m#&c
zaEA3u%mpQRrIN&?oKz)EH8mt*Lr}6u<ZJsRt0cX&%%b8F=Zwsp6dk3KA|*|GaA-qq
zEq1C5NlXVDsZ^4bpHiu$8Ep_-Q<JEdSWu9fmjc$Ok*Jqno|jtW0xj$Hl8aIkOJEMy
zfN9jULdslupv(pJX(G57wbcMc2{>D##I_Qsj8)Rq)K=10(uOG2K{6;GWDqFTCE0o>
z>ZMksCTl<x!LxLdJw(7ZDcUgB3YMD?$q8x!vZ0`|G6_;<fQ(MIHPA`1g%$kPDR#-$
z$=ceQMbM-WogAy9l%A8Hl$hgMmYAcYqnK1vQv?o14NxI~BB_a#M+-H;wJq2RofMr^
zoiv?voeZ5!oh(oe0_7S+T!D+vqC~xn#A27kl0=O}O*J)*G~1#?y~O0?)Z$`|L`|J^
z5Eqm>lXTKFb+T;J^in}ZOtGeBbxLYZYDua>x?V<NUP?}?PC8TyRH%W9##B(PlBEe^
zLVTMQof-?R>EIrYhiKAEOi9s5(n-|;sfkXG)dXb<6nACV79+bW6I^tZq~@h)RM+Zc
zXzD;SQIbxkrY2HyE<y?qNT$a~hW6lK#Sqp2)tOpKnpTN=g`hS=aB5C!a!G!XV@{4e
zrVw0pbSx~-LUJ&u4y&n2Ldi3rD6)^&%S|mxPt}M{jMV`b2=MB+7}?E`=mKRI)H2Lk
zDKoF26x5!wO;%H@gcdZAWT|PNq?eqLnw*^qN@7r!l?IZIni{2&)QXbCqSQoiVFil$
zBv7fISejE3mY7qTYMY3{MM`2N8cFbCStr#tULzSTcP43SLi2J+zDBYhD35FEq(MU8
zB{dCXg>!yxL1{^9N^nUfs12wAa%XyK2{u`c)M$fPO-=h0y_C%2f}F%kt9ZTS;$pC{
zjuKQ1(OgT_OGzyO)ufs_X^2v-6p^K)bdqiTL6t8oo|0>7G?Hz><*%lWQeJ*usuHNe
zS5pH?_$AtE_$AiV#A_(oWTq7*=B6ru$)x<El++?ybpv&U^30Ty3@|GrH8VY<1jN+0
zQ$h}eBzU70n#?qHl5G7FqYYy9k|Fgotf13L(km~@ECE$gNqWgS`OxYL>N-DAq(FS9
zsRQ<eZL+2gQsqzvN;*if1IhljiF(DLfQI`R)RGJWWq6%rH8qWN+hkB}2&>J((XWxD
zSyPh?YS@64D1m|`9n|~;xi>L0uNb|A)&VtGG}3M3Ay$Fhp{c182u+vinrdnRP<9e1
zv8C8%=z#-HC)GAXFE=wU92AN=X&_Ew1%!hTM-qkUvrX3lxf@~z)GXT+9V9)eAP&?l
z+cZs09Y}^$w6#sQPuEsbvPws!k8-ekt0A=q_STC+qK2kD*a&FB2X4rK8aj~XPkL&J
zZ4x-)=Rg`nI*CQ;;EqbMW-U^QQ~|LH)EWjAkcqICaFR8sqy!h-wn?CrQIa28PylPP
zXea3v=VT_QY8Yzjq}V3uq}oQnE00uNU29MaD9JV=F*-F?J6R_Q&18tb6jBf#t^~OP
zo=|K<p!Hl5yoyV)_f0Ix(92D%&@j+Ri8hSY)kv<XG0@c1)<}sqimj<pDyUG>v_fi!
zRzZx^Nzq9~)N^UJ$+ot(8Y%WlkQ}3Ar36Yrsd*(zn)W7EO5ped6+ub%hE@hT>9z*e
zCU$AoY1+0%no7BeMd_J&AX#uS)wYG?{6w8(?efIvv{)TQ1D#Y&O`Q~b4Y;YGZW1U>
z>%tW)6(pvlfI1GSnqa0w^14Pkk_M<#A?mf2z^PFQYMG{$MmoYFSk2afi^9xC(ty`&
zSO!H(nU0W9g>)QKY(YM@MGmz@z5KMa;?xqbBduUO4{%AOlV%Ia<>|K2;MYycuK<N7
zEFhJV@+*Qft3aWnqiCp;2JWR9*x9Dm)PR~!wzjF@MnbABq+m(Y)X^}oLy}Ze(*V^J
z;L-(LSimxTD!iwdYMo-6uBN6DsRy?!C^aV&)RffFtf@%__g@hPq}qbp$!<CMi6t7T
znl&{Bu>M-AHZ+CR)M%t*OHVo}I%%5Ppmd2y=T4yDLnOy!Q0ml4vyF}gB{iK4L<=m#
zF5Nm^TU#^5HZeLqRwo5gjDZ?N(dn_EMo@ZciAIW!QhrVfyw1@{wuP#L)lE7{_8Mu?
z>7eWZuSjZYG|*JpDk*8|fO`pO5^8D{i5e-O@)2YR$W~}e4Ao+tQjHXN!(3BSQ`1T#
z)fTK1T7N+@K`OY(2x`2cX-~CJhE}2}NHwUYrY5)u0_8!Rp^>Df2CpJ991pG~&_uEL
zKFJ>ByP6s$B`b(on($HwsTJ-Fia8x{gu%Nbpn)7`y@I0rl6+7TUN18*6I?Swl_8?t
z1>PM}C{8U2$;?g7FD*fgNNH9_CPI5ywVFDSiMF5)O*wL3*A-+tB-179q}Uqhq}o<P
zs&}izT5vEW*@BBKYZJQ^>lAHUBi$s;WZUw@=#*HU)M!}YqMaOTn;H!-4?x^RSSC*b
zWgfl!g2d#^l1kfDNOfqNsHu~R@P`}78K7bsRyU;Rq}pmECq*a4f`$h)LCuHc#1fE*
zl9o~|sF?*SL{nkS>~wHhstu|gQfyPB(_$gx8p%4KkqubQgH$cJ!|VgqLnz$`oot;P
zTTqp!lMCwO=fT<(I{7HWPZi)+MFA-3f-+2^j#64haYlZ*lBRXCUSVl!X=+W4Muu&?
zUObrNk)NLpYVInfRVZodK#H6Uz0y3eWQv-a27+U2pp$8vp_iIlP*Mr%VS=i61jiQE
zde+daM(C-j$<)xS)zm?VXlv`_=q2WqCsr0CCkJd|2u-@WI`I(4Yk)nZqzMh*ni^yW
zfvl?4)YJj>vXF=5G?XAI2Q=CT>Qq4Lyv#fWa7!pzFTX6cC@m+y+%`H7&elONBaqmU
zu{v3ZiVaZ^W!pk>lC7<6mOZqen21_f)zp+~KwJgtOlVqV=_qC9<z(i8hcdEZ+1l0?
zVSE~>3<h=gHS%EPn=Mq2Zc<Kua<-DDrVhgSYHAt?N82i8WTvE~<|$zfZX|UG{m}-o
zNIs3QMUpW@mWf1`F^a8)7F#KxHct{LrKj2^fpVb=v`v$$39iGStv0Y!nr&K5jZ#T|
zdU_7n`>8shYDgpB9^~p&B`YOJk_GF7uoZ1Vb)sTHO%1pS2pWYdh)#*s1T|(d^GZ{#
z^FiZsxzQ=HwgqZxASqB|8C<P_MnN?p!#Y{eLI>0r2Mw&cf)X=iNKGSGQxh7vpbA<8
zDL&ES4OBfKA|y-G8Z=^5T>y4FD8w`K6bjVTH1cf=^dNDdX$8)Y(5eKSg2DdNsjk)3
zNmEnPfGM<9%-7V(w~yCI)YJp1(9pEX(M!qCOGVBqVA+h!lvGf1*TIwrl^jXdMX*5;
zNR9!SrUa>8z-`l9O{9K;PA;hFPz#X;M`NyLx~-c=zC9=$tqgQhbaFIxz!C*DH5wp6
z+jPC+lEk7CoqSMRPcJnu1ug=WL24wW)YQOopslTK3aFupGDhG5D)iuGJ!H%TT*N1X
zl2jrnNu_{tMPhDh4tM}DSyKm^#?ovPK|?j5xO4;!xof0>Vkgx$E!r>^)a3<@*QSB`
zuR6(!wzi-G4OBtcrs+UaBS<%BkOkZx0~dy%l$)-mrUV%w1r-_Tn$>Bx>Ck~vjWkV!
z-jrB`Gt)F7uC1xj02ykV267i@sK_=In)pB|-xjHE@dSArRJVX)3|!XRg6fW>BxvEL
z11hFnQqxk4ic(WFG_jPLP)}s)rRJpO)@tfxBA3FMX&R}}8b;9&>`st9Nw$%RH8n2a
zF<7JyMiwMGK^3)jmR?F}Q6gyONH+=8*-6$%h}6^==%m>i>ZX93Z<)4PdL`wlsd>dv
zCtGJiTX8V)==4~<qS8E#G<XXmLoYACBr~ltJhLQ2BT*+hOD9byIaX80&@N3)Ez>^P
zN+UzBD7830rz{n&BvunNYF?|8Wt#zNeB@>pr)pG#{A`t|Q&5y&P;3Pn$A%3?C28v9
z7nC50DH`Zh7Z;=^XC~&jCKhMrrCU|k*6Ji{>f{$?rf23Q=0JPinW@EANpL~`0#FbX
zTP5p&Q#vSUtYBdW3m~gxcv$H`0>UafRtGXx8UhL!#2`Fk%*Hle4=ksVsFS4!a;Z*|
zPBN6KhvH6fD+8iNFBR-^crd~OSg)Y8I0H0%o>Hq*T#{daWFa(1*@6Z-lkDLdAX8md
z2B0z!mOvCh4GVA@NwrlpfDaDB^h75^V$l$8eUd$9Ea@c0YFdGWLGz68xC4oT=Nv$D
z581X^pa?7|2HWMKk&V^cn${@IrlcfzyD3X2Q3s|6-oZ(MHR$5?auW+QvUS{avNUx-
zMFM=@3>t>uh}2Y5L*_ynWQh<hX%%`UnYpP&8u0X#sRK)BiFuj1R#`gWmXQ_I1TY8G
z<N$jsy$CdD3zaG;$_Mi`Aq6;86jYeQ{G6PhTL2ot)znK%%*@e%ssOR!c^xVSX)hrS
z0eXRk)1ZS2@P-#Sg~4V~;M1d^R&KIwl1`GXl9rODHK+^#wP8WoI7ts>Rt9zE3zR%i
z!Z2AAJd|vmVw)D7s;wPst*N99swq>V4PxyzQb0X1=m1Ggjgpp<jt01-1rd;za%o<1
zMrK-xMlz_o1QNCd5fC|WB2GpgH}-}Ujyfrt)i4h#q-tb9(sU*)#?zuRVnJPU*yLSw
z2Dn*{JZlHll4Y9#8aCBQfhA##fXb?=Nw29%i_VI*Pq$ap$h6JUw1TuXtTdAJKvP?w
z3EpBom_M>Kby795ASIKgPG&7AWYa)R^K@I##A!(q%#o?c+Cg<uO^sq&G^o3vrk1J!
ziWNkE!w2MTh$q24FWY#%#H_@M;M9_m%)Insy|kRf5@^9xQ&SD;2!ZRJBu$806>V)n
zm5!R4hDK_1a;$x#RSKvFXj@&YsR^nKL6Wc_P)Grdil<h93r<A?okX1!P2?#PUyx%!
z6%<nE2R@()YIvpQl@#k_f<~$nOA^7MW38kGN)wsU2C>$fnR<{IhmHJ!Dt|RK@K|$h
zW-fTXyrw1zH1rviT3nEySDfmRnwSEbH-%1`>VnKv(gY8Rq<~W&cupe&)FQ};PK{Ml
z1CfyF=M+#Y6COFKn$}50sfpROnQ0mz$7JRyBx|PGf|!uz8pumv!yvQliXa)#99VLG
zURi2UNorAXbgH(Jf|52!A{NvFNQIi14jTRdRqEhIY&vXoB+XtUP0<!?gPK|<+#zY2
zI?2&#v9P3sh-p7a;DQo3DCHnc6oJxEHgcdsM;^h!kR5Fp3l52NaN7vf|Ae|%Gb=hB
zHABbRCL+m4r$bsRX|~z0c(G0ck6VJ8ijeSk%S_ElDUMEyRa4VQj>aM$Yn!C0qnN3t
zmI7Ke0m>9^;HiE!HH{>wlOY12xqo=3(F8Y5bdYQY#ULc9q=BLZ9488yX`tKy3Pd%v
zOhsGUG;sSr-8L&a6C4$3u{AYW(MnnhO4^{Y$8>NwfFm&rWL}1Cs$OwHPG*UQl7f<^
zPDZq0tgWprsC|tvA|u)$7GVmQr>R+;Zfk3+XkZUgmKtjXngUY<34jKlY(Z*tvf=Rw
zGF1~PaixP*f~-$hQ%j6i0xx(eR*Kb3vQ5`Wg7gg(K-1U|K6J`A2R5QoU0jk_l4_*{
z9&;;71+9@$(g9Oe>GnBRN`CnYkQ7;*nV+YSR+OI$N|M@23MKiVP^hhiCO?=t#iihx
zLnR$h)L11U4SV~er8ijl4rw+gX=*~t&?H3RnFJb0POhn`OoC*wL`{3p%9K=1D}Rkd
zZKY@>Z4HdYL#g&jR!T~m+DfrXI;o&xA<bH7AY`U#B-hlyG$?}lxu7v5(7F+jsj#qu
zXUrr`m@TPb(~_c7V<85@D}(@~Y7kUcAr|H&T3Ld}H4*D_Kr=Vssjsli)N*iP9S9nQ
z46+S`WG|gy+dxomNlq-$39$_Xx2tqQZ3Fc(^HNeP{L^&8K>0G<HcYQ1KN!3aMkm5H
zOfMs`*uOjv+JLOoi3BN%0_6ng#JP@&t&)+Rp`MA7PCTM@4w`_3PIiD7N5$)<<-rHj
zG;4Jd6K(b5qGO6<O5I%D++r#m4Pv!x(D*9)={iXub-KC5y81fFiMIN>8qqN+iMmy>
zn)>OPIw^_REd*8jNHZI?)*#z$<3SBG$grMmbryKW)k;MtIX|zsq^J}$?`jpVQw*Jg
zwNg^jfi)v_O7g);2+{C_rEP^ENZSh3w$!ZE0nOCFVh$<ZKx0mdwu$xzc8T^NmC=dX
zAPU-{hy^d`icXBRLNyH3U<fWrOwLAF3t!s>o7e>#gX94XO&$2ME`=n$f}+$iNY@`S
ztd<0debA&Vm<!|RB-QGG76u{N16orCZF@oU49F%OP@LB4<R&6D!4u&@0a5`@Qea1G
zKw7FGLFC+)3|F2A3ArSlWSu0<T20Mb9q{B6!Vz$lATy8*4$@03D8QWm(yY}1uL;3r
zKx(0efo82vPGT{ZWkcZ3fnI8%hOVJztxjqo!Vq|ngIxhh5jx4X+KJj4py*7pGJrQV
zz$)OerjcxC3tIVRmuw#ml8H`^jkSu71sR{0f-oP=m+%OysR3yMMG-7<f)|=-*6M(4
zunN&B&Mzvl3e*EpI-n{cITge!0JTqRbzp6K(5kdNJxKEhky9XzuS9U44BRQ#Nw<Yh
zB!U;pfYv+M8iLwAu=z!3V%5pAh4!?SlJfI&QWHT_XP`1JKTQEN1Cs@wGesB%YOI0`
z)7IA1ft8E!<(c5g-ppcn7baa3-0lDk8D-eo+Gc{rUBD?-Cqq|P(>l{G!#YD7JkSiu
zQJ{5kF!x1g#6lYH;IW@X&1Bp3=%iTC`WFxds=`1cBU#{DT?15*2IM4W=0P%tMheK{
zR9lcRIHPN%XliQOYoyw1q}qa}tU${j5R%E7_Q{}_v`T}CBbx=5t*+GpS&vvi0vZBH
z(S$XTpyM=PB`JuRiF8E7X;h~|makbsmy;@KYp7_0M>C2*YuR!&G&SK%(DY+m^wV`f
z6F!;6L7)|NR-h?7P(_PKXNj8C;CdTe7DE=QCTiB|<mDsxr!}i<brA7^q8U;epez-I
zuOkI%0*9LwnAFQG2GcsQWu#aPQh>xDXkjY25`!#l1sUX5nwwgbnT$n`A|eVv%ZL(n
z!7U2NEMB6fwxOM^0muNP$iQL<ED<6qXV9Vo$e=Z-DGnM^g}EEL{1x27gyljtHN^->
z$%P_}s9AKBGK&LXvq%1EO5hc=ieQ%^4aK6k4AeM=OwB_RFC?%P4WZpDkZw>OL(v3L
z0}e-9+eG_B&}svi=ioUkv8Dz&%0PzXrzs@bhed}&J)sGjM})4Mwt~sm>LAvIp;!ub
zsZO$OYFT2AHE2q!q$o32BT-W)QB6$)GA99TOK2#S7N;tJmeVGKrr|Y`Y@^VY@F*20
z7iAWdC~4||+FlhUwuw4XdKsySDWLKlzDO@g6SSx?HLt`kKP45qq!hAzFG*9=3bfo=
zvsNb=Hf)OGSZD}=n)r~Vnn{T|O1Z_lN{F13oT!rm$p$H@peYL^{YX_HBz1t~K|KOc
zdke%y?TCQZV4;d&sZ^1ALf~;w*zyXU3|o*-K<(8OaEBlR-0laB5rHP~Y?DAil2fSx
zUXYNYsgnw7ksE4Sr)g_LTb`gMWg57<1Zt<JV(I`j{|z-E9Y)Y#KBy;xVGCqIHE7jC
znhwY=;%vgA3&}QU8dgZG)d3|Iq!5NzeW0=cl!ld*tU!%!r1(ip1QlzbCP#KExJ*IP
z4vHX9dQ1VWJVz{v0~w}h3rdg48qnfBQ4_Q_7P1sB1#=N@qCKebm8fYI0?8Ag_2im5
zDYZJ8d6;&B#tNVb3uKe6ZIZpNp%r2+w@$KVtq#~KG^c`M2;|&kTW$F0H)PTmmI|zs
z!PC6jnu*b%!6)zx6Fl^w^{;KJPGYSNXk9#t@gP^hEC3CCfmU^+r!d82P<jHVnG{>a
zBuHWc4fQM9+GeP!rGlGSU{QFBCKVL&$c;UnBmzlTC(|}M7L<+=X$x#)sx8by&;Sf5
z<P>dFL4ydO){I6fW-2DA0U8Ox(5w+1tCI<8ftO~cSQ&yw%quEULI~340S`Dq!xT0;
z1}`ij!-$}j_Bu(ni8_g(b#I_52i`tO)C3IzLR;zZHja)FXsQO@?1!gn@M7bfO3<oJ
zP*YAP1=N@WO{Ak6pb2XHrs}1aW`dU}A}CN@1QONO)=7mm9Y9rfxs^*|Nvd96ez{I@
zX#r>pi&bPTXgC<uiq}wbf;7w&{J@(r6d*l01(+`sz-d|mWP(CaYPxGhfdV9(K(?<a
zA&)P>Jq2p`SBFI_MMG)|1tskyP=__v7Sz!~TJ>HF8GTJf?v^2qZi05xfExTMkk~*P
z5Yoxf$<xW#DF7uMjU@Xd)TP-qHAz<fpgkV$YHDs8NuZUDNi{X@I?13#hS9M)8Mcrm
zte^@Up1<M4!-+LDiitHfphe^vYHF5{<PKg_o&lXaQb-2btC*su<_Ru-A(G&tw-`FZ
zo2aP?Dp}KQQ$eFs)tPA;px$=|Sb3T)c!UqS?$W8!Gesj^Q%5lkGzf}Rd!bmCrk9yw
zYipYh7ldR#&{!H|9v8HD4>c6PV>M_Y0~%RGwO3P3%~vBy2Q*1Y$PSP%QlpJxVQx@?
z=A~pEWd9&7rcVS-#)E=N0~8L%pdBe?NG>RLs&vjtEG`Dsjs(qwtJFvbnF<=kEYmA2
z1{K_jUNtp}Ua$cf(4c3UMxJest)EW5ZIVubEi@(*!K)xL)Zp8@Km)_@HA|?KF=TmG
zmTeWNv7(U!i7=$a^qDD2nws``wmI-dHE3T)OpJ;eXaOQ<?*yu1ojgsQJX@vc%oJO7
zCG9+ICG}VZB^}UYA*73Foe5ennH8NGYn!K?s{vwYTIbusHfw;|uh|+&$cdw-2IRFY
zy{!DqJPjosB~4I>6lj9R)u2TkB6{*cD@BSbk(P^V6o3N}vf-mpv${47H0hU9S)BtK
zeuiw^LG=M>!6?*VCk;d!DKk+=3ACF9(m6z$k4e@*%E*Zt$)Jh=sy_*mc9TIPn3{Iw
zkX<@H;N53xYS0PX#ONg0kZi0@Vl-H7tZfQ-lqv~SXF$zDTAh`GG=!2E?FXI(L6S}d
zNrP(CBwKg%re#WInUbb8BJ30u6E%`Fp(B&<F$hINcrYPHg_;^N53S9qlVl63y=oDo
z+-aauM@{ffEs$%HL93P^L$ozYpt)su^_~Js66Jb{B_%~3;Oz|2$<ZmXv9?I-Thk$C
zLCi@~Q%lrI0rfE<Eo)H26I8-Mb|xW8JT*0qx+J~g{L-T2R8P=IUQJDyrmjX^BDxqT
z=cd3iW(tUx3~6U3+a~MfrB;*#XC~!j=B0y2%t32vlc0)qVLcIrM0-OkU8LPV8K6jj
zMjgDiNP-ma$<R_6R2-n@MpzAuyuBa^vYp1(HW4XoGbu41Z8JhrX-P>wXt=^QSrZh+
zpw14c?}=nx7Ls)-hy^K0@H#!oRy#=tNd}w?U=6QS&}s|~(BwF@v8Iy*T6d8K<yohL
z;y*bWv~nXo7Bc;i8f&YlkrJI6YnvRM8mp;U3xcq4RLDkhPNJF`ww<Ba_m!xrA>|X$
z1}#Kt1@+e8X*J2#0K88PQfBF-*eWSmC)*`iCxI5JYJ)c&>Xm_ZYCt0ld385<&n>9k
z2}-Ofwn=&^nMFFOpwtQ)>4$dMKoeytI%&3n+S)K9pj)@>VZH=US*Ahqk988H(F>|+
zL1`Y5#%pTe^Z1ES9kqz|9jHx_4oP(2eMq*^0Xk{mW+-T3OMa0CvccefDyqq9Y7j%y
zVH56(29Qb^6t&2DF&zb}Lo;oYqWxlPYBWF;Xc|&SBf~Zmv~&wJduI@9Yik<-VnHTr
zpm|CmE7~a5HY3^y>`sts+bkWh7^Yj0l4w41nt-M(J44ja1WhRC7ioYZCKa*z7`B98
z5ww6G9EK@y@51u8qCu?{Xv+v9y@2+Vp{8<M(7bvw)N1QAyHx8`ZEa0Z(+-q|5wp+8
ziKP%!u7PGYK+`RtKn1xiO(z{RJ&^%kbqOmab+W+atD<cZe7sKsv;ryv)Y#BaOs=U(
z)<^@bu+{{vf=Y+fJfLl3pezmUOk^MrsKHX10(g^_PBLWW6+Azus;McaM*D#>W2$YD
zMye)wv6^BUL@3R+NFz-L)I34T@+pwbZjjWL1zNJIlMC`j9*D@dO@{`IPLXX&O-%u)
z^$%Jp09q0R**<L_oe^u5p%WdesZ(qVYL|kVok{jZR)rcxI=MQDpq+G@IwiKr_GzG5
zZTm#4d{E-IkB+rUw<-n~+G=Xa8pS##5S6LmB0S5sP@@FYC`r}G(gC%Ibuu+|Kub{|
zS=%}rRQ71(*k(m%g9EZ8Ixjjq7F7BaLs>bnIcQLdPOGU&gfwj-88Zvyxoq1KsOR9u
zl|YQkf<!}cbat$5j;3`Qc&J*Z1f(eo)GY(WIBwk<S+;5RiHRDZC3sf3AQSC$4MCIW
z(ODn|rh}*)&}usHxJ3!br=XUzeF?a$lANlMuLE<Krd5fiPMST`0qHs=I+>bQuy#|r
zP6<l!3fg>#C<-B|6P{gk(rnB1ic)hDL7Q2lL3sjPKY`Ztr`6OTNhv8PfjS^*pe27g
znYMX|Y6CGf0$MDQR14Y|Z2;Qfh+PdR+b3$;=^DZmX4^)?lCMT0$a#=7mujmBn($4j
zsR6C`a|R7vYb4nwYl2(8p!R`1Xj?NV&st?c^}##zkj9HnYHh4_Dq=J}8P%&9u@J9n
zX4^*RY2<5UYw9Fx#)9XsL1_b|8nV?rIx!li7TR+FHH~z@qTns&sl}kB0e+yh1^Go9
zDYn|$8P=(GDQaqpNC601A_K9|It4VI1#L|fX=K<Ls;Pmk2eWcD5+T!=8U{KUx`yy|
z>DAyG%1TKARM{j(XXqM1+;6X>rDUa~REsoF4sYBh>!jFasHuT=n1N@VG%|EjG&Oa=
zZYu^&D?n|63xcXm&Dv~8I!}i0?+3XKQC5QX2_(ZJ306Ydfr?95>1GF7{Rod#Xi=h*
z1<{kOlcSTXlV@w7lW(hJprlg(TFe<8t5XEZN5!_zIwhbYB~4AOTrVv%FGVlJ(H*py
z0JN;D)HXmHTyEOh7TX(Iq0AH1)aV)Nlp*piC^KfMscAUdf@VeB)zs28t@9OaZOhcu
zK+&gYtC4M65}hBbX`QdF4JicF)UqMvK#r|}b*^n<bPjlNRA!n+u0}SfJOuU8AYqdY
zTQ~r+BEYs(vo;m9P$%0~F&AWtnp&Q&u1<=YS^-QsxSx}!ZJV!?s-^~VM;@|O$xy3u
zH41c!z&3$OK*%6zo}B@>?6b}X6>bI5`LQ)MMPO0`MA=3{hVwE(^?_}nMv-PMtR%?P
zDbm!*Qd0vJy+zP64RlOJo;Ezz3_<ltX<lYwX=-qOQHe$-JkFsW({Z*f*3>D0AFhyU
z59;+>rGtAkr8;Fg<vJBQl{!^Ajyg^{&N?nSt~zcy?m8Yio;qGS-a0-yzB+!kO2wH~
zRXM3j+J;)7eJ7wn86AIH#Ni@30k#G@fwl%ZLAJ>nnmWN?G6YP9BIfhJqchNK11@UR
z)HGae6%90X3~F`4Yz=K}j16_dZL4e1r}85}DJ#-8La!jdKqm@BmlkK}sK6NUwh@qg
z0Gh0ar&_RWphN_!!y&t_VaXf5sxmVTvO?I_7S@GONQO25LFHRgqOB5i%Ww^3!aX&m
zCb76OFS#bMv?M<*Ke@CR%mVGjtpP2=D$36(u1Ntc6s}3hECy}tN~y^Jul}#eEY3|V
zsL9FCFQ~~a%_+$&$VsiqFG$U+0Ua)ppO;fv13if)rKUJJzW{VXMRKC8QglpAg^@u_
zOi4^kQA|u;OiWs=5@<bvl7_uiOiWCSUQKjNOu24sO>|sLOof4gZcI!?qCu>twvtY2
zqHPMI$E;MYq@z@>tfZ-vmT0RK6BDhZot&txq@|&xosy`nq^V(V1rv$Zic_gktc$g`
z)r1MzTd8XxY>WfhtRAbWrKw&Mql7LIqXd$PQL52U(oO{#tyu#zCnhFVNhdwgR>=y<
z+L#y(4Gq$b*Q`OeSVJ>9CMGtvMoBvjWUZEFjh>cfObp0+os2|VP|}4AC2D|tuC1h_
zl&++ylZhgu6bJFLHrVtyaInV2#Danc<Y_%kEvR3#RiOH_u<F;+ftaJEq^XmQU4=%p
zopv3_wIJ6(O$8~>K~-)GHAn*#!?EfyO0in@FxBAj1p6WvMN@jBrcNG;2*_Wc$WT$z
z)X7h@t@d=WLJAM1IAvIbC~4|A`#1&%qe{ob=piWxadbzO2Ft<6q##L63$*q~Q%O_D
zF(f1iRXHevG<5=kT|-^`(PcnRclPk~L35v#1~`v^*G|-cR!7w2m1KahE{LP4tC0*k
zWTPfOO&8Q*hD4VJEaX53HPqy%q||6=L~HBD)@W+P#H46x=E2jYhP@S32Bsw@CPiDb
zMiUXx;8diP37QAY&(A@1H8}4ifzli(QGnFsrKYA7gV#=0l%T4GS^$ZAD-F2QQVVO+
zOKNgTKz^!0coWSh8unJYF)=Bc_FxY{%>pNJ4SU<@INjJ96-^}_kTYv_3P4MeH0-Uw
z!xzv3tOm5K26Waz4P=}_Q$;^hrx2ttBPIpJE&{Qm<Emq|W2$3{wPK?4z)eeqm~wrc
zVvwAMy_K>?G^ohY)~wNpDc9DliP3`zXsYPzlqA~fM{C!`>g$vy+Ul#<#Kh>Q>y)7;
z#+aCx7>(!{&=RS%*lI%^vs#E(>_KG)I6Ktnf&Br>pykNJ^q>JhNIN9OR>`13Njpi`
z%+%D_3|ed}q<|JJ)YK%~Cs`TTrPxDe74$&M^_(*ji=6XQQZ-Vv!8$apuu9t585-1>
zni^S}=@=Rq8LOq#n3@?If!5?yAh|=c+D${V7CdwZtF0q!;~_P<zaBU(`sJs98kVTM
zh-hR!v`&wOw~3)cf0c=v)hf2t-~~ih5l~f#&NH}bi-NXg6Lp~0CTVISjWvMPAgVuD
z)d$+ZX$>0J)Q$y>VSw95)-XxiWL?AB+S)SPBt7Va4QLHrrEQX4W^shC4^mAIiGd{W
z{3Y7?G@vdS`WX+f$VswS@(A(u0iB=#8QB1hxmhV1*6O%{>`X0zo&A7m6{uqYT0ej~
z*HBZFXyp$x9TfHMYHFYf56GTiP%lGGEd|{*_8RWCDLNju7!o?5P0T5&@U@Ac^BzE*
zmt?(?e9%6!WYF0xDCbJqV+w&zMuVIlRgnnVD`S<cmskQir~<4}O$~*sp_HFjng>&^
zsj1^>t5^xzLsACP1UZqZ*cNHi8B%9WFBvw8VXKs>q@xHPV?!D|hf6Dg_I;vFfI!b3
z!eun_`9mqtQETV?+}zZ>5)CELUPp*+&?z0HsTa^1dT4sB)zm?=)EVyJBIp4aDY&L(
zAX-6lRM?&90ZRSw)fb7HplK>U9Yr+rK*_772AimcA8g|)%$Xp&>@~_EeHKp_q!b96
z!3Qmf#&Y5v@&pvf0PxHlq``?UrGZ%Sm<&n<1&Kw_(MS8}WYChk+FBiu?V#h@^ib@F
zXEt~RTb8I(jxY|<<b@9yp{E7Vyb);WM{TX9l?HUG17ulVik_zn6|9AL8Ry6^JXM0q
zM9|_C<TI#1Vj4;y7s4_!IDEj}WvH9MF3baWC2i5t6f_~D6^@Wz1~&H~M++j|+G7{i
zNYu0f&-U3TVNPX%<nlqsu%VZ_;K0yH0d-nZ!K08k4F`1+A#3jwA-zfKWcZdI&=_tq
zykY<qW8h)KWcVOS3UtA_LK-CD<fZ6=8*b<!1kZJ9YKW8qO4E=)Qt(9gJX{0V`w%bc
zc!Rv-1tK)SA!3Wj!r&FkNRxcvAy3pY3p2as<)s#Z>H=FOn?wc3^rWA*lDeIZexjWX
zq_c$(){RMvRaeL@PRz;4FHcS^C@C#UwN+QQv&k<2?F>|as83A+i|IoI?QHZR!gfkJ
zSPrRDibgdq&Q@JL7QUNZP0b6^@mB)%g<|1NaC<9tP>&}@3DmB|YAVFe)D(nSH8n7^
zkUCxVR^aqqqofUPHY$M*B18{I4bZ%8ovo6#pSF@NHuLIiap<#x_FCcoLAU`Sg*8+X
zmBH3&Yhlr<r>v(9YS@A66V&(xCHW*<SWN+~7GM)wn$}5ZGt;0Zx{{6(q-PBF19F9v
zq=}|HFEKY&Nk_>AtP)Eof#hwGLL3o$AQ?!@QVSH3kWMWQW2{p1z#VohK8H)`C|SY!
z^*Bt?(y;=a-vEnp9X%~8P<UzTXp}*A^`#cWvI;y4`Ph2E<Z5a>^vY9{vNKD3L5CtD
z6oVvk^Q*9k=3^1dEk+Xr<w>+C107_LoS&DMnp~2a0#<J818Kk}f{sEdQ_|Ey@S}?r
zK^X+>H*aXxP_za0<w1=LFIz8YrLU%j)T{J@t`evLwHUl@y|JnBMplyq4-yYO(4Nf1
zqEuLmFd)A;6O`9Ab$me!>0qS~NL^kD=oBtZv?>6UB$I7HjX}t|NKj+Y9x-GEO`}$z
zscX>juSjbgVAT+4j4Gw3Mo~jC1+pv$(W(TACW97AfvvVjFf~#@r{v*qyPBGznHp$4
zZZ4?uNB0?cH8*-)0$N@J89hw0MV{^l&wVF>=7pj2bczO0XM<YPp|(kAp#d7{0#&9^
z)e4|-Hys1;9@J!8MVxNZ1sz|TkJY(Q>lBhf8^x1t(GNibbpt@hU7;-ms;NoRw8v?k
zMv|tLp^hQwxH-i#@SXt|@CkOQDWG9a9HFX_sA+3!n`{q_F0}55t*xy;XsMCEPNF7g
z2_z`YQb3DMP!82Zs7lhbH?(pA&GWeEBx>p=CTh6oBxzb1Sed9LgY+9>bh7XTtq!CC
zkcgDJz^lMO@t+4?D-2qRm<T$`BsvK^!wO!G1z+$5_7liju(RzAt<pf84D3z>wI<SR
zZEfMYA<Hzt8@!Wk6RknZClD5cHig1A&?Z9;oJh7!!cde2-){$1WSt3G2ViRp+M8#s
znTnV(Pqk0i0Lg(5uGF*wF+sr!axh3Om~CifP^*)oY2{w4lLRaBkXzdDH7}sEroo5c
zKnT!kRk#Lt`H9q=f$SZ{mIxJXZNba&5<zF(Cc~T1If*(-w(2T|ph{l{qi9xB^HfvQ
zQ1q^;QS^o^@Ja@ipc;xuOTLmdHNnfCKm|<-qUcNpZw^hVsVT!OU_skjQ=r??)YQPs
z_Yfr#ysZbzqbbnQ0MNm>(6(BVMzW4OBuJtYV_{twI|EQ~g2tag1tD^H!k2^)2pRDH
zVoi`Kpk+U3Cg9f#EkjTi452Nz1nqB0R#Stn<wsTtT2qgF9I>W-GI$DJ(G#|i6jsc@
z_f)6Yr&uBPj%#WZJ?+u@J4v8k4&;<gl&%M8ha;#Z4L;f-Ei*O6J_WLH#0oT}1oA$3
z!zYseF}I^A1y|;kBvvSZRq7~|<`tzT=cngoR;8vWq*fGw4j#zN&$Cic(gv;APtrq7
z&Y&0zN;OG3$)E-`WO+6C6bM&a#WK*TovFzsE~TJNQi&z0#X2q^QP2*mVDPcSpbivd
zI?w>rYy?SYglg)zLc0)2wvdI{)|#L~1GI_)G)Zln45_tKp=ShHgO_<F!sezyOT2Up
z;gd%$;8{A*8tw|n8pM#)iW02uS5g8EDd~U~aKILRfyyDsVR@iFOlnOHs1i=CsWAj|
z!Bce@i<&{>0Tm_S0n@w^SO!251Q%n8wuztvuZkf@DqAO7g9MP4glQ&g+g4~KYC@L9
zWTt5t+k#IkG67KtV?izjpX~`z2O1``1_fIRcsvYjMiRWAm0YV+4j!F?9C}-9TMa(m
z8?tcF%G3aQ$VfnOYH3QoRf-OHO4%wuQ3sTjAS>vsszJN{@=`!FY_i^}TFFkysyZdJ
z2)ySQIu@V=-5m(pOQWQKMZQ)?NgFO)lv<XVUs?=Z4~L?+4ws_ZTAhNTRLItFt7`Dr
zJfa*$3?P8EY$rw=#=;9s$e4ppVzhCrtp<p!sY#4B0i9MIZ3^0)gR~t2s#K}Y7Bbgu
z1X{QP(qaqR#t&kEmtg83Cdy4TYjq%l{&?Mja!7`bQeH_0!~(-u$ONE<fsV1JJ=Aqc
zdf+Uo0a_HHsRMGWt+ob;vQLaQjRi5yVryy)HLZ-aG?YNY@DQ_%L7vG^NrCY+L3&MN
z!FtVOwG*Q)FcesUyaZ~YpjcQ7o8Un95-i&*CPtgZs;MP{)>T2v_WVRWa1cQ18?dYG
zLB*04*gy6lrM4jFgTfsW;#SFOYPq0HQVcrF1HAFSN+TI`5d>(_QIc&kY{#^QlBSXl
zY|dCWNmCcb2B`ztWD6qTVVDH+vQeyUGLi_mqyg>P1c$L^Ehs^QhN`TpL6bokUbIC_
zJVH_f_LY_3BPtRRZB<zM11<1EHWL~|kd{1XR1Z`Jf^sp4jcPQgm0Md2ox?&l103|W
zLD7kz#0Ni`ItjEM4tZ)&Nh7WX(q+_C(oWP?f=(iV=2bvVfFP8M9$@ZO0PPJcF44eJ
zuEB?4K~9EqYHF|zPN7y~APvX^Wg1Fg?Mj-U^CCe@gdj6(2tR_x$l)%63#UTH4?(N{
zK_!w#D$?F-Q2Mg9O|w^01ZUM`t7LnPG;LcYB^@P*fIX-|nPLT#w+9`pkz%D32bE1x
zQv;p<mIhB~DVkPFS_nyG2|HawD<u_VIY=d@n*!|@f|~IuR?t!-*&cLugmxOd{K-hv
z0Uag*iabpu>%gYgKurZZwx%Wxo^D}AYa4<M*H+S1vQjkEv{EzxB@yr}BRrho8;xP%
z1ukE}N9IEu3MyQ5(ruMM6ON!M3|R4{Yoe)>VXFk4dIXgl@B?Q+H6ApKQW2>fK8UZV
zh}<(k>idCKie^IG0bRQX*>_?K3jcI_C8R1($w~>de;%bCD6~cHE9w-1HclZXTu}21
zXn9|znwnw;sM;<B*UqqIt_9YRCPj{Il68)4PILk2B$+gg4Er2#TNP{GD*|7`0#N|!
zaziU!MMLX++X7o9&?GJ>gc8-%6!SqREh3h4D?!II6%9aJ3i55E)9nk9DtoI!Jy5`d
zH&w>!q^qeFLmZcFTL@Xz3ZlTPTC;4kqZ1*g59QfrMZ*@hW`Pc(%S90|iq*-n%~Mk=
zM4GXS&Wp9qvDMbjQ&Y=PQv-RrrbZ*zHqX{Tv!*6ruOPobLlfNl2E{GHpK5B_+PP|K
zIiTW4vl`?8(CXeio!nUHVKtDZMrN8uv6`AjmMwS@E~xAQ?HB+b36uz0@d$ISCdi?N
zkkxDoX`rRS8iX7LD$DW2jiRk>kril53c}5rH8qOb+PO6~U^i*xK*AA3fx=M}bSq1A
zfKG0#rcMrM&x)p|HM~)jt81I8lM6aVsHP@Y6|_ajKus-IKLxb8xfV;!2U~#+T6|uv
zR{(A+6@z1`95mPmX^s>}C!(g!SWrhDQmHDH=0WEqQ&SWm`XOy>SO+03+Ar2V4RoOh
zY$dy$A!uWKbfOMuccxBqtPZkOXlsl>*IJ-<M3C0fqRgd&_AP?;QY3>G%_B~i1+DE$
zu}w_WNYqJ<PLBoEpedkbp^&2nK_a!N*E2z@G>}oCqq{+}pr#olWUQ+5@=L6cod78e
zKwD5CorY9fM=aZ6;PC@mEo_ghA2e?c+6x0pOQ4z%w5l0&lL@E>&`ANW^F=-a8sr^~
zG~0C0c?D`}8lbh3wu%}_phLdWK<obzi`o;xXH8c_y#qR~-8NAtRU-+~OHBhE?gthG
zTcnr_$v~hJ=rR(E(R>Is170Gdjs_$nb$4quLFb`>2j8%p0qPgPuD*dZK#-32fYp&2
zpjsQ=>j0&-OwhChsIOB~QvvEM!Ydlciq~3Aot(tHbnI5<L0e*=&Fr8$8rJ?qNx5L{
z;J%>_rV~*UKZ=7vQI>3-k`LMsooox5vH_a}o>_u-aW#}Ga&xRe5)k`Q8xIh1XnCvv
z8Vo{hPJ?#RB-Ye`>T^WHF%eW{YFd|PWagx5XrPWkf-ZUj6?fpu09@8X^P-|5D1J*4
zi%<@lfp51-)XT|F2A^sPYT>}xpbVJ-H9!G80|=>g!8Lc1US>+IPEme7(xE8uS`>Uc
zmPf4)cs(9c!h}ULSl%7=!XMD+jyuRoH}E398U$Md)XGy-1QiIC1*xDBn~b8=w3?c_
zM7@&4B=E*1@Zl)nxdN=VfyRBnvf%CIwK}jF1Hy_8YIUG9Hz;aBkq<i43wwhX8fJ(q
zO_J2qKn)A1Ni{V}kO?tRwF{MkO;XiD&k;&RI_U)|Sdm68K{16GJJf?201ggNKMs5x
zQ7Wh&0QFqKhf$+=0aWaO5<GZe6Sxk?(s>7sq{0)EjTtnlqMR=QaRZ9ckWxbtUaLUP
z#Rd%m=zxxCNG-ymTA>h@S;6*!S~8lTjr0YjSQA(QHr0>?R49g%9#KjVQ$TS8xv-|D
z21zKXRtL0R3)2paI7jr1Pzw<?HSp~=2=hTlQ<vuC*xG_mi9;<Rz|(S?pza08R*)XF
zfjs!(MOldL1F&2cZ4e7C9*aw?kYvGCCnScVlXMM1N>U5a6oA?WP$dR-$@a<GNmj{V
zg=MLEXi6bXK2R_x+ZtFWfv<|PHPTFkjBO$2#uIBbb@EeE@aQ%qpgRZM8z5JLQZdN#
z6kE7Mt#x%ljUH>58&cp^Fvtz*#G0b5onn)O-4O7)5J-!sSTC<6!xkx}7g~dyRH~4f
zS6!5tl9>-WQ3sswlkzJ-?6l0BR1jT|SX^A5Uz7r3XXYlRg9K|e;RZ#Q#@c3RltN|!
zz@`<KCgo<9fRq=d7N>$3Xv#A|$|13)kb^i@#<m=KzhE)KnJDcpa92A=rwY6!KRXpP
zZi+Onr~}=X06p#rv~@@)ODEel7}jggOw-7QmJ15W_6Anju&y4&?HRU-pa~Vwd`h_<
ze3;8R!&<W%Jd3B1YMTY!DW9PUD(E#p%l<QLGoZ$RE?9!~Mr&#^G<7l|DGPK>2IzJb
z&@oFIskYe&Gr(i3sjxl6I%yE~(9IqxI-o3N1vVAd8UbzYPykH{>maO!byJ~Zv+1A{
zQeXk8si=`^n-98)19Jab1}KAOMW@HAsexobEYOB9&?YR<sf*x)T{W@0BONj}nOba>
z3c3jZ?rS9LL6?T6K+j)+#%{8G1~f>lGVEcEnnX>jV2wnbOigIO8EDq(INE{^Zp$sm
z%t=L#QdqqYTM+|3^dkf*LKUI?O~_CTXzM#@ss?uYh;=fkEt+Oq48HA6QwQA6Pk{t;
znx+->JdiX^>onUCjYORija2X+nKWn}m0x6=2<=#c7RormM{-e|2pKs6Wo@Lx9&E9l
zNd(&LoMQ{xkx`|QXqyGM1vK9Y>OsTKdVur}A=}y@ood@0P*)U0z{5-j-c>PDQ&aME
z0TsC#>9*iw(!qO;)YQPsoghogK*Q*eUOcF=1)icp+MkpL8mt8+w^*=sNw$c!Y#QmX
zxi-*cO0a|oZ5D%Ww~CGhT|B6xh_nj=w0#7vxd(2sLK<ahumlg8K7pnW&00`t1WK)X
z$m^e>1Dcxl239ctTBqvjf{#s0105xayv-`ZHXZEqSV$*ZBNJSr<fTA6A}O|+czpvq
zxd0S|U~@Fp)G$vl&;)G+O4CS#&3>fnfNlb{h2;Y^wOr8Q@`~^asbEWdLA%v-l3^Ws
zNdC~ss;L3pOq8Rksga_Sq@(DmldJ=C2KECKK=+jCK<2k0Gdi|@V3&Z`R)VL!H9|F^
z>mrmu16O`Jn6pB*ii)l}ZW^FPmY^9R*hD$@<&uVYmK|U}l>oG?19ia&#JdWKdf-ly
zM~JTvc<mObb!@Ay3|YCQq@$z^O2o*sG@vD(NL>_=dQkCKQ<J6vz8ta!BvJ#p7o-Mq
zAqb-D10IxvH8B*DA-9ehSfLJ-Y9#4^O#<1B)?%?Yv@!yD1$o90bk;MxkBQveMfMnY
z(Y!u*?HHoX3L2_F@(OqfmlEjcC&(2>czg{}s#&WE_BMov)0Z_h(8fG?@DY2f9}yC;
z1<Rlf@U@_mu(9|J)cFQo$&1?FgLO<`(UF95hcWmNb5M~8Kh+%({Lx9E-QtP{_GrOv
z1wK+5*%t8X&LmJ(n*upeA9LCjbcHWybu8#=;=B~wRM3ic&`hdrD(DJO=&T#~tjL0*
zXeBG9Snzp;1x2u7B%OHZBr8Y*V!Bl)UJula1qr67mVi3-;FIVhe0^N<lR={3MeU%~
z^ZAe!L?AKPBszFjI}LPn9LOb*;uED%1MOnckFx=9fB@~2(6_hKu(z^_(T_2-s{w6;
z$N+7Y(2I_<QjUp^(bI|5Qqcz;?+QMn8LjStjP0a=@4ADw>_I(X4bVQRy!;Xk@H_-)
z#UZFtfz^wU<24XVlI$VD2XQK5-IxaGm@xb36wnG|D^w*KpnwLQ(FHn(2X?PDB0qpE
zgLErE)eZRQQ_%6W&|^9^s?#!&4+w=FK&q1rJ_-|BBf#o>(8*HPT%bkNpriKk(h+xt
z!^>EZ5^${!J(m@9^9p4DE^=Q3RKX<K8o-Z#$V}6Shp)rZNCh3D2{H(NVt@hcP8?)S
zkYE6h)Pc_4gtypJAWjFZvxPV!+0M`&mbgGGyHYekx1oXiy7@&A#gLwGei8V@TzG2$
zG)tkK2wGeQpC`kTD?u(r@^T9J_C%dT&_Vp5ode)=FR}JV@oF>xozs<BjM8a@l--Jo
zP%AK}snpccV0~Oo@U1siaA!cHvKD%1R%W737AR?hb^{h`Y1l-^l*fd}YTIc>$Jxbd
z)j;<KX=#G;KsG1?LC;f0N%N2tpR5Bu-33w4g8T()L}9uQ+@?vkRk8t<@u0~{H8mwW
z2phJ0Mb{8Cp$c`aovpEbG^o_mNdyl>##+JJ{fU}7pyL@7lcPcEVJ#lerNT*iki(Yk
zL8l>PCTfDW0)W;)gPa9QWU#|EHIm?RAlHIS0=qBC7IZLXaY<rca%z5>LcBd_;L|Ee
z2l*Ie9q8@Xp!!n-q*DjH`VdsegR&X6BgLY?GrBtI&<Fx)0$)6xS&VdsC}^}2lsS??
zeTO7Xlmp>F?g!l@3{Iob$+3`@H26Gc@HP{TWF3^t2tev#ZRQl)C{P6sT`mb~h-xH*
z&f)@Xj!r=tAOfdeXz<$_f-f2YHF#5?_nd=DR?s4nD6kAXr`RTf`7rAc1&%$$JeW3+
zn?S}vl%rasX@%n5L`{2aldGAaDe1(NN_!Xs6t#&O@tRf|@Wn-l3P(*1Vm~Z@gN{pr
zW_+-NLFoZpy?_=o=7CtClkIX7p$9;MdLkK_#hRM6*4c?j-D6M*3fgfRuMq_~gDwY}
zmmmXM#WkS0JPmuR(7ck&oEpcR98FDqo!ms*YVek_qSQQ4mmC}>c_qalHfSagM1%B!
zrZuf$XDVxemzE$(9nb^-V)z8QI|1(TWNXlI0?|pJIVjN4bBK6=&vhY$z==IoO)VZ&
zMrRg-?h#1>UGZQI?Up6N*AaoP!hsytgj5`X_8x$eDyVG%S^$M*BoMXkQBz9<%|C&6
z&4BLML2P|V1`RZW!W3RBfo2sDo`#e&Nw)E@_|O5J_5|sb!D?Di%7PABpw~1Y7bb#h
zn?&nG$dS%SwGBw4P7-Jx9&|)P(V!M|$}8xqV&v1i!DC=>4?~wrfiy!?G3*jfL<w9|
z11kX$rvrjYWt}9%dE4M5XJr67r~-T-1;_$O-5Z?}YYiGe2Zb5hdQQ-ZMTku$Hin?{
zOVaJrA=4Zh$)ICB!1K2VHK2P*Ks7x^yCPW!bk<-sbigAScAf&Hrhyz(j;Kgs{XXRS
zG)>bg4Ls<Yl3Ib3I^d1{M0;2u*xG{nwcrzhp(mJvQXV)Pf-Z4^9cu~-Qk_ItAr7h}
ztP(ZBrChW@teP4~8r1)V<TOyb6kHxcrkFJ}LBmC5jyX9RuxTdH0b)9dDab?Ppp=W<
zgYZ@Ya#;^5I5jkNK#4C2bT?@&$T%nTqw<jr1l|1(s<lAJ%!1qtb`<2?ORz_f_^>3K
z2s&~GRQ7;R)vSj24kbK6sTeeU0FeTD9G3Kxpo>ruqYCy((4~+N#n@UA3h|&bv_O~H
zLDYZ@R019N4&KmK3@*8l?1z*)P)}mh3O<S!T#O;-Tc`%m6eY@P2arWYsbxqOz!MBu
zEvOtsUJC(gM5R`gIOgPF(*k!7$bQ%|I;a(dwBWFbIR7Kt2Mz#`X~by-sYLc6SbH&~
zl*JKWP+1KP<mD!yTZ=&Lm?G$EN*&O8Rd_XnB`)IiVCEoqbU`H^<l=U$mP4z@yb{=U
z2heG;;Dd)jN6;lAExZ7)DT8-IKv@k`u!9yMz}*5Gf2jr~XV4+|pc}?Oc?6umpeb4j
z9E3{XelujGO4k&$E+WM?SrgP^!6;Ecr|p9bgZ4B)7j{G2E09V8bheL1ZX$T40z8kW
zf~J9CqgtRNiHlOpQj0+M(?j(l3cgfLSi3nd(N;euSX)0GeEb6Fst@PHoSdY@<m_Uk
zrm<#qqAi9a6YcXME=U74Sr8R`txh7O5dm5*1R63=2Mw5mmK0~%DkkdX=Ow4AsYS=?
zWFstq4Yk@P>gA^9<`-3}sio;8gD&pM0Nv^dy4)9Z_D?3PY64xeZJnv6mX0`vDHC*>
z5_oI6256K`2Q=^q8l+M*1WgixZoc!+b4$!APSvbV0^Py@ZW`34fQHUNS0!ZGXF&}I
zjm%}i1`;)`lI%f;GJ~$!gq)nB0qV!(*jA$y!QiF`bY)bsEzFtLim)W2kfxEOSq;4m
z1myx9*vx`0^ge)OO>5-wUE37<MCdSrnpzHMW>_Oxv!(_*{-3M~T5AbgHL0csiz3ir
z18QoZRVTHYwHolVmO=Nhr^8)m1v;@g)izlt8`MaLwRAyAw^j#o<SC+Pf){3)po$k<
zq{B@`881RK<&v#6l0kPuKu!VINYcsFN!A3_<kp~Tzd(z~Q#F!71Dv3=o^A&^`Y>Hr
zS0@9^0^L|q3rV%LI_PaDXc?SnAFr1QH61kM4_b1ksG*oyQ=<rr0MLv$=mJ-49s#At
zbXx;(bq${k$Eq;PHVJwwEUIFpDi{_%ikY=KpnG?*m;<|67SveEfz8Eh!2Af(ggo61
zH!us-Q!fJFbcrw&+;oEk1IWM0YHEsEH8r4h5a3RFl5KRNP7-7|-yTY9Xj*{=73`sh
z%_V7CfukMjqqNMTRD|&`%N24!tq`!?;9iFgJkDXx2I<2V42sFM@S~k_kniPy-ByaQ
z3^qbz8y&3#z1CAnM=2#gFI7n=UJqUvfsQ0dPE~-E4xr1~p=wi<Vs$_oL03vD=_r9N
zM<k>Vq%;+xFAsdvsFIEn>@r3)y)f%yV|9{kl?qbxQZn<>L0b!;*J;7>H{vq$<XRob
zWsC?P!h<sva?>Ls6e0IIBKXkQD9K38L)H$eS`ra=%s?v@g?K$!Xd*fY$=FMoG)Rvl
z9h4!9VP~0ZfDUWd1g-W?inUIS1{IjG2$LW>5^dAf)Y3tx8st=>rvd9kP+@?$@dQ+j
z7v+QQUIp!?D}XRHpx0Z1wm5<BY}JH#8pH=h1gL=vxd&4N)Vc><{Hke{91SYMwUxp%
zOEQ#V!S;gI^w}qax~w1zG$0LVopi|M1F&msK&y{6brQk5L~6k%LllGd7Jwaw2vx*@
zBB)^tx?c)jfq`y0v`VS11>GnQPsJ&E1(^k@wkdj`$N`P|CMJXKi-aeDL>+h-r$rlq
z&oqoSj<rsK1gmX2=!_1X3~*ScAT5B?tWLJgsMSe|HjGP*jW&vf6%0B_(MDiCs9@04
z0mY6%Y%HR}M5HOKL6vHs0&bXN=2(bHu%NX~hv)EG&>$i#(o(^9l0Yw+O4UgPU3srl
zj*={4`4%)s3EfYKaWub9x-G1WrIP_Zcs#wP22ZL<w*p-u59(!S*e6;crEk!=k4Qlc
zZg4@$KLxmOs%CXEs96T8!E{nUEO^F(*6enM_83mIO4R`^4@$DnM80+yWPz2gZU(5P
zg%&iRv<N=8yS5fIx|VKd2;Kmj1YS7+z7+s;Y<)5+HwA@joen+j6*RqwmUloxu+*(-
zkIaMRpe)c7vQC;NGy`So6{VtOAdre=9nj4#y1MW+YZ!h=(Mba@Ab{mhSWB=V5i}8y
zr&k2J0|}AR5E&&NA_a3L%w37F$^f2$sxx61DH-a3O$$%VEU_}w$;i)1f!weJkF-S1
zYEV56SEa3O1+_*)(LfW_5J^lyzKTM#S_8ECRMEg*R~M=fY&dA74Qw>%Ku<Ua)PMwy
z(I^_IsiCO1GXPyv4jOp_mr3BbjnavZj|KHu)AIC6iZavFQ=tcq7pbXffCk3UL^YJa
zu2ur|q@y(T^3&4bBA`1dz*kCuRloua5vK6{j|v5eV29YEq;)0GmSWJwzo3!iC`hOW
zgRX(JFHS81T{E3uTA~5<y{45$6sT+gALHYbSzMBu2f82C#orgYYt1J=F$HvLUpi>)
zUMCTYTF5y+V0leVodWQ<Ah_I2(gaoAD1Oj@wCoE(Bj}Lp>Jh#IPl|#L7Y1Dc3#mS^
zo=$9Q3%)P{aorN4?W<W0zFrzMXp{jOF;3Qu*MnFC-hY{)lN_B9tD|TDwgJ9$9X?zL
zYD$6(0MDqwt2yxfWa;1&9YM<n((N^pU<V4MfG)!TRREe+8d=~wkP#^p+<}8FAkKp5
z01xmagD%_yWiya7;pZ%aZfMB>-9MRbpJJ5)Q4U(4tdpSwlhOp8rI}h%T9l`dYM*G8
zWe;<Qrd6grNRdITPO_#|8mJcr@^wLpOJWJq>0XGe2r42G1D}wsjL3XNZ3M4YCqoZ(
zD~h2`1~@DWN{T_31}7({Ld@3zUzrZO*fBd5HM@aU-oW)~B*JE}6d;@QlRzhNCEF%O
zg9=?e=%s6r4dcn+stshbwl?@cvLsYRw$Q~$$+bF=ktDs8)U?dJROn5anW@E~DA$B;
zHcrv3M%SMVs)Zp}6NB2ru!~M1V|?JfkkQGYW5vNvgYiK-2y~J`3rvw`upm(lYG#3!
z(StQ)r&ektYU-pxrqdwWQ^7uib+X{Ye@U8Ypo!;X@EO0LmC&H_2kEvljWqDxsSu}v
z4Tl-0gM6oH3Mj#Y%t`^Dfd=0SmWF;aCTI)-<W|VAD&)QhNZ3Lg4c7_D7ofG!_Q_Vs
z(MhqjI-q1#j65QO<aJoP5}~c8CJE80MEF-t4Xz{^bf*v4PwA<k1ALQUS2=^apwLDL
zc)SrbsSCeo4AkM&v;w#5Kx-F35e-_94>48I))sVl1E}yp?}mcn89dMezKIAHIS^m#
zq$5Wa<otSwfuI1;1iKLu?rE{M)wSTrss_arr0!1Av<Dr-pPZiux?~8nslNa;g$uhH
z4Rj?rXg~(p3p$`_HHCEh6x-+|ozz&+A_Guk0vwO&;JNJ-$ndmA9_W_5=vdGtBk<Kc
z;3blfRb<eUuhOGaK-XN>f_uE6oR6io3cke;Ic*{N3oRGMf=AN8UEAcuBBWj#sLq9?
z7g&ac-!p>8wAxzm;)9|@aFZqjbm}7LOqC4q!HRL9Y1eAVoU2w$ZB0xxj2#P_a0Q*X
zs1fa`8wI*|7HKLdBe58VKNX4-L4zG2Sq)I&6(MtLb-<Sw<0z_&6T!t?F}VByk3vF{
z5y&j05C!F;Vo(bpH@^%tL<>r9@%YRw!Z0@;r@=+227}uIX|StAHL5YJfz+1BsXE#K
zd|0}gS{isRG&8BRBo%yqJv>cAj+h6>7-UcocH<H#C#GqFulGp<uOkP|;Hs%97J-*1
zX{6~WLBk!iW~f*RwCW60lO@AX--o2i^yp;J2I&-A5JL}iWRVVN6GjSTR>nU~LkZ*!
zT_wmsCg`-s+|(TB#Nt$q6v)tnhAHS;Z^(TEpz9n!wI66EvjoElpqXUY08}cJfoLAU
zXIa301rI*Kqh7PR7-A$y4m4D(X;qjAE?5x5Qb;R3kzJVxJ`p1gsW3|d591}<7Q+H6
z5vepwhR&uzZo5KKl!8Z5CfN6oD8s4@(uM&!UJu=4kRl%H7LW?i<q*ieO#$7Iq6^wP
z2U`4=0=k1*LkS!o5DP&CshS$H4p8|CnhONAcyy8wokMv42)rl(92?LfK(tH)?{<RR
zgW+OCb^=L*V*@e~3b{g8qq?v(wG?Tb3EW_WBz^c|u0(r{BwNr*2c@(M&`G^uEuaw>
zXzB%d0dxQ+c-=Ij_)Z2D->5khbcHf(+B;cO(+WBZoD5np4H_nc9pzE0ladOy1+8#M
z0v+fCas{~D1C3>ZRe>ri(8WZsQCHBdEwIsIoiy8cy?C%PkNo^>a0vw3kB5|8<Mp7n
zfz7G41}&*8f((FwTKk}N->J6Aa063xbu~dpyK8_P0;<SBv(2#cagg<D>OgCeG(FH*
zw@xaw1*(${>N4tpRtBem3KQ@i7;vXw1Jt@lxE0O!kkpr?t%Oja1ZyC`qXIM(jU4F7
zI@MtFt#A+Af%+fFgG|UJWi-q>C7tA0@K_Ec`5={?VAo)Esu9$6N*GJIz$XxZZX^VS
zp-wU=MA1hEY?AHcK}RW;rh>~3P~i(dM-de2;3-+~hzdrchXfR|Ztz9l)~E>qnjv&R
zP5>Q`rKW})d7zvMo(x8$4yXoDZiOZoBwypthFA?r&Ph!y3Pj6)sOEsfRs*z8Fs(uf
zwDl6(uo<Y@1bbO0#nw;<)FgrrLc&_hu$CC4R?^8p^bj?xb#+r}YCt#9BKqBFI?-vd
znzi8e5T3|`lxd*RJ*W$zH$s8VW&_uF(dn@|i74q+6I4(nLpEN4HbiJ^>p*$nRETud
zO@@Z1PAaUQ4!Y|Mx~i-Ud}y?8tUaiGlcE))SECt|qOD<X6`krD3p%sgJ|;!GMpGYp
zSC~$DqHVNNNPdBmj#5x&dPa$oj*?S;NlAXLl8%y3YFdd>tPb*V&7i^z*27E$6*q}G
zN_n7>Z(Cc?sm<Ufj8aNwG3X$F(B4T!q-7px2a178Tb)YisvX!~n;P)$8_;3eh^Z(I
zNP(LOzfl-A1L{_km<~Qk7t|+C1P%GZ53<F$d>DK~9B4ZPh75RtvXZ8CGN@q>YG8m{
zE|4YFN;*nl2PtXlpi6^Y3>v0@-E4qG4X6pCq@x76^BDPL#$-*MNIkF#&N=ycpzC{+
zK{RLu0B96R50wYst`E_Ynxd10vUVJ_f(3LGxm|^gKAf$j6RDS%4>sO8BQ-fYHN{pD
zbO;@aJqVLg7C%GBOsW!Xk=B1%N9ut$hGynDl_n+Sq!xn?A%Kb~W#%a)f@>W|P=scu
zR_g0Gfmj;$R=N45#i=y~`I&hosYT$+9a1Ywa#Qn4HEWV{GLy6Qb)2Cpp@xB}8Zen(
zT9TAgS_Ep5yMPr%$LYmtfsb<6)6fH*D-T`_3_5hC#I_o8i8bhKAe5<2aHS0z<$<K5
zG|;soI+>vDP>>5)K=+X96vA>Pq>)t!9x6@N%K%^82O3XHvrX1XwoQYH=%m^rcE*5G
z2k7F~ni`E{$i1%dU`ktCQ%57ywoni3z+%uyAA$$&*lVQQ7D9~#$s%}&A_y_`25nZx
zE85ytfybo5#=-{qQbEUdLvGcxkB8U@8k;Ww9e)YR8=(875e+DKTLP4Kz^xZ0O_aW$
zk`ie17i^KVbrxvzP=>7wbi-CsbXKe;s7<1iXIo&K0Xh*P-&O;3yBYXQ71%BeJta-Z
zHVjRjJT*0q9MFREveZ1#O-`xFnTa{kdEh>uPM)nss(p?gs6mjPSdt2A{#)hfC1vKN
zfS8&!HF-KX^=5+%g$z|xgF?tEPba@9GaaPSssPgOO3{JFqgApFD4wh!u>{?;n_py=
zs)M}G#tO6~4>UGZ1PKw8_3Du23aOxLA#ziT3lfu4t@5E;O!PpjchWR<G;(b-qw_%F
z17(3`Zgb(jbIvc#E3q}u$pIBOr3Ii_^5WEz(gIlfCq*Y;CmnSAt)d}l*K}e^3d&F^
zXmJ3#m_{DxvMEDNO`RN2MF9$G5DhaiTT>?+n#zj63A3g~169Bl5+a~Gk?eE9v6q~x
zf#zgwZ5;!hY)z|N@KS5gHBqo+2FZBQd9k1&OVAKFsE3MF`-6sTh{}M_Zk`5cyAQ0*
z2JZ9}s;MDoB*>&awAoEW!p%(6peXG^?8BJ^^K3Oz2qa%fk^twJ4Dc<0YRCt?g3d~c
ziP6(k(uSp_m>4|`dn-LH(8V;Gpl*c*h@}GBypV32W}6G`09mJj@@2MdF6a_>#Z)!5
z0!3TfY&}>8sHp+1Uj#=vSR9o2Yicq;r_?~waW=S{3{J+HH8m+}YM??S8@{MmO-(~d
zOAE9N2y}icLL5|9!IMcEXiWq{PE8Fh-RSD-fUemEr3p}4hYUd=lBTA0x|*6I%tPR$
zTaubsl#*W#IypuU#)fIg*MS$9ing|(ECQNW02vO>B^rr3c?cD-E(SO|LVB*CfrC8I
zz-6W;EcrrQ1k$MuD%ZgCgNg>4)}YQB^2k*tc;FxvG|!;`bA%3ZcL03)SqW%>qPA8C
zIwOO~2GGStSZg8M=#-k8s92pm+X#q9VLP!jK|6yg3sS9;bn=npKrIV!tSNyMz<J=D
zTcV+)r=)2GxtBfNHp4c>7G$`NF=&JnX?Vo~jj!koT^OII4GS5lA5v35KF>ppqv$DV
z+SwYYscGcf<{{aslV_U`?+E5YOMcKyD3VqyB~2RxH8rLDJSFWs9nb}!pjo(r#JrUJ
zSkR)$)N+M*JxEmM>0k`0fY$hHf|@_YA&?0#+f;iaD`TA`L^`&GWg$J#6*CC&_##j{
z3m#PVps_&cEk>kdKk%|nog}@Y)Z)^d64)}EBt6I}9iTNWP^N7PsJRImxUjWNwvSGV
zwL<CN>wwmX<F3_GYibm8U{!lf4V($B$y0QaAvFYK112cvD}v4=f;7$4)WD;z;hA|U
z`Q@PFkipj;X4<0Gu%KEM7Uh}Rd7wO<Zkvv@6+zQF-5N~<TK1=d4(dv`&Hx=uoPvIn
zNR%e12mmeJ)5ri#ktCMpl!Rrbme<r|Kn;gD47Af1ywNqy*1%dL9aM&CYlGI!D}wGx
z0nMr;rh`v62`<SmC`e5K9Tx>@-`J+v8QNzewGcpF$+p#iRvGC!@Qer^QI3Y_id9oX
zD1bBwlr(j+)zq?~ftn5)($BWdQd0xnL5U;-n)wFJLqMjVG}1x20iFU-bi+kKMHA>G
zL(n4A)VvaxRPbde8lVxyRPcNn#7(w&I;r6Ea*ClU0zgY3^GZOz1;u(iv|SD=IALt4
zYjYtd0KpPMO^qUC<`L>h&>UhG$l*xKT~a`;67<BOrlyf$n-ZNB3tH@<0b+nxqk!g>
z(b|``c{(5yKr6AK?Mrz10Lup%pk6EJ0?!OhP&S2Rl3MVPKDZ%@C=Eel`k<B@xH*`X
z2|8>P+<}0WlA!rgP_rq+7GnW~P9{92!D9|+kqtTi19EIx7TgB#NwtYNpo6h03sS+Y
zPSB!=49HfPM0n#Y1bo;Icw$CJF$=Uz+$FOZ?DU!%6fUHg20I`Tniavh476ei5^j(r
zR#c3v5_C-~Xa}7}s%?675;VCd>SY#VPwt?~Dp4=Fv<P&?3Djw+dZ{_7xjLY8J2cX4
zQ(^78;^<@~<2-Y7Q&Tb%OTd$pnAu1}F%hL;1hq5aC1ZS1Dx`6chEN0Acd7xJ(a1~5
zN%c?4vQ5)T)B}yC+opjjofKOQ4Op!K3+ps^I|Llwnoy_K)WCaDn$WZi^-~7Yh%;zr
z95g2ZE@e|->tewxw!py)%`Y0@^E6BH3y=a(18LeiORpfmxC9o5YHFx_<fs7|1W&K9
zxI;>>NaIM5TZJLXGYOt_!0mdSOk2?TMxYa$!0Ag(4YW)LauqP>tfWLe$U!wVHA>*#
zFQ{z=NwJ#XE~j;-qAfV}S!dd2LW@hk{FGG4eihKRlT1*r4ty*UsQqJr#UOAx1aC|N
zC6WyA;V#;mX||xfX(;_x(C$hd$S@UXwOVv4c=`l%EO{DApT|C4BNe>T4|-svMkc8G
zhwg%fN<jwVqch=$X>00$E;?6JgN|aSX<8$W1%Te;Tn$ReR++HgS+P}0EqupQh7GLm
z30i^%u1z4y!C4L-Kd{B38KBMS>9slqMfnBAR!WIECElr(3Q3TW3Wa3QPQn~epeZDm
z6y<=VP%@PQI7tO$Bo>1fY?dT~6oAhcPECR2I)!4;c_1KRNIkDml9`(tT#}eupiq{X
zTCPx@k(r#K1ZxT@fG&s3tN@RwgN7rrQ!AltsPmFD5{nc-1n3?$h3wQy5C*Z)i~t`D
z3m=O|9(;qeD-!j<7K09!gRsCww<75LkPOHrZJ-q!P^MLqUUq6F$QDhV#M)XN@W2eJ
zyC7*(0YVikB<EzN=9NT1=}3kAw6x;Xk_adrsZfxZo*DrrBNd91i&9hbBA|4nLP<V!
zt0Q4AK}Tmnxym*Pnm?dp;|ef;f~``6-dLNY2X&d6nnp4_zhSgPbW&`S(eEq+Pktoj
zr&Q{Iws54UMu5T!;!SN0Q2$4-IJqc4CkHh4SyPh=+LVASV4$fBQ3Y`Tk}6~Y@NwcG
z7e~TPk3=y&B)<T~a4;XuY_J&E0T83Xd;`!a%8;n8se$KQ(9Pk{q+n~P2D+NsNG;9Y
z*vdpL&ECig<QniX!>GH%K!=1yBii1u$wJ659<&w)g>7X4=&Z>^*cf>lG+jrh#)1dH
z(`#zLGZ1=661M5KPSCzYswQ|QLJujiIig7+atCNdC#VGq%EJ(C;QRvGA_`jLkPaH}
zE+~eqq=m3SOJ|XK3~8XzELbsPodoI|C)=igHnS&2C&${RMJL0Tn!rlwni|jvb&y&=
zN>c}P&N)m9sjq}k1D8Z>+S1ekElLIDReKl%bhxpmRbs6Uv@W!&2CZ2Gokj_1p@Vjq
zLeJT&hBl%QRSn7{hoY@*j)o>=*BxX47P_GqJV2_U30fp)1xX2@dBL1i_yC#`SVd-@
zQmqbX5Y>u+MYhNmfiytv0Wk?%lV4h*RI3B7((qUW87oi9uK>*)f(ml*(K1lafi;6#
zte`#Ipp)dl=}HGQ?NnN#qzQEnSQVOkU@c=r5F!?y#e-uJY#c1=bd(a6K%1nJQq%H_
zQX$s{T2&*r6Hp9-1TJ_h6r_Cs8i50iuw>>X=74*u;PMwmL=Upo7koB8_y})MGe)zv
zwpOP&Gq*G+u>^fmStkWDE&!UJf=)hzI;haDuuifLWNb50C$l&hY6AEWG89{_szFO*
zQ{cnD(3GW-3aOlvK>NGFH65r40dCYn8bC?l_0oEoSUMq~*<18JOf6)QC49^UF;)#8
zYS*j=wcFsbuqB?LP=k!LfWr(XtN|)&6b(UByO3@_ifJfWK_N2_aV7vnvAsqj$Xw94
zFEo9i1PF9fJUErX$}(`W!}KcX7H&u<4c-MqDq%q#1aJ=yE(x+0Ig&vgKKm@IY-s5O
za*=H!=u84o5nGa)2R$(&39|NB58i$NUHzGe;DUDb<>i-yjw8y?gy=ykq(S4Wn&4}2
zp$P*rC$9tLfyzYKvPeuHT4n2C>t}$4@$?t0vO)J8fVyeWCO0B;K$2`CxV;K)>%((|
zHLg(3(g8;pYLWtlC8`K$svoo}0I5|^inU1Epo0gtP>azF1=)-y1hX1jkdWdAZ2GY{
z2AeXNtFXyIH(-I+Odxqv15}_vx9e4dE8A4ie4CXLn4MpiTBHPN@a3c?mZidkOG}h=
zpfht&<xn0(1C#^R0_8zUdelZKde1L0*0vgDGABtV2|Af$l>}|>Bf=88F(X+Aa&C-H
zD!9Z16_U`_w@#WZQr{EWG}KT`t*J=`jbVaEG(cxLfNt&40B=17m&o8ei0FhOPv1fN
zouE{TG$*D5>517UY3d}`f>v^%PkDlJCwSFUHMnlIf>*JS8WzIE7C_)8E>g(`-t+{@
zQ+lxaKqCocJGdPJS|$vZgA9v+S2uyyAcDo94GPfu-D>c(5h5HR*%1<m=#62pPg89X
zYhOTXv8+>TYEnQGMW`imq7L}(3((LuXw<8?SOat(n?`C)je({%sHBFC$x~ppuAz0R
zJ&J2|QbCsu>0zrPkQ@Y&1~~|{T_1g!Vm{I?G;m#nGV28DkYkJ}Cu&w>tl<FdGX<YN
zn4|;SNT~^F?1Cl^5+O@-^Yb*)!4q4cBPDfG;fEiALK<}NKBVW84C%Aj+NOZk9fK|^
zf}02)Nw&2G4RpX<fLO5%QVp7LhBQ7vAp@R&Msg5nNf)Tn(M++;2CoeUE#y{Afwkj7
z&Vc3=1<>Mq&^oO&+Z3G?lvD_*!4%>(AlpGe>&LNYjar=)@HCQb8knl7(SR^)<H3Aw
zZB1y!2F@Pv(gBgqK_@bR+@u3K=R8>_3A9>DCqEBcI|%A1kZQgBJWv$}o{|Bjy!^B@
zM4|)7Ff`HYq=I4>N8JJ$E$~muf(1?ra(MzeR{}nW1L^KVLL&t+{$-y6uHQhD%GyeL
zO4>+LRtPDiL#=dDprc(ykZ=LH4qMs-jqs%+r>e9xja1M|$LQ2p)FcH76%Ei`RG?We
z<UQA*f-XNzAqg}toebU-0!=nLptHz9`^hzuZL=W`!B`FkE4!gN3l!=)pbQ6zA!rj4
zCD2hCWjM`)>I6q0$WU;ELj@tXIUye?4If<tHzuMD;QchvIyXq06{;6(Ah>{nb$g&o
zpIj4d^=&ll6+ug3YLY-pO>$~dbCXh2YBGvyGIP^wz$<-fax(L>YjRUd5^D+)ixP7+
zH8i4Q%B^CxA?I#s#^~GWr)TQ8fenMo=<B$HxHW3Z_A%w!*7`agAg+eJRdI4rW<g0!
zaY<!PD%fC6{Y)LtL|c9E+Md*um|`u^(yKVz*c#iIVlCME9X*gTFVKP(m6{lR4STDs
z#InSi)a2YmO^Av5nL6Ge>5`(-)EIpYJuOXr9UqWDOtF@YB4}w>w6lw2h+|B2jjpa{
z4M-q1CKklDiz(Jp(NEX$O|-3s99M1?ZK$IJy9qeAG^Zr9AScyU9mZ0(Q_@jFT=5&L
zQvy2d8=?t(OBzHT%8b=X&d;%mHqueDfr!{7=jWss<(C#fl)-s6`Ve`gSe=q06b&Vy
z(HDqn2oqUpidD2R!fdE~NfA_ek)4e`R19G}yz>`rpaZ&ZM=7?}+BZ=zzn}!{E?WpY
zGe1wqH&G9)8zfYcmY-h&V!&JsW+#HLK?X6wp#avA0p_NFDrM*@6Y%ORlpKL^+_G&V
z>KZPcOwjT;==q4~_W*)Up8)Mz(m-Fa1-UI1u`vpI$_zpP)E)t!zUY#l4BF}h9zssH
zEz-yUEp05)NCZ_9ptC4on_A(g92IM%MW@8-q=S~ZgUY5P(9m)+Sbv&rT1^dDZ@O(d
zh?RlUltN@vQgez^6$&*Hbu!=u7uYE}N{~dY1R5uSEU~mRP*W?=NY_!!R8uPgoqz*V
zp{WDfTU?r%lLA}ZhZfGDeln=c1U0CTju_U-292~8r6!iZFS>;pprNUg0~)H&wKdSm
zvxOaUXPsx4Yn=-@iYnDMF*-LEG!X~dE|3Ze2}Ds1+v=AJ+7bmhZzV@36+EZ_stxR;
zQ)8`CHQ^PoJA7~pvStJvnBXZw_}auIy=1UMq2r?(O3<~5>9!hf(B)OBptV(y#H<NE
zju`n$6&+BDj82cOsqszJgQb2Q&<#<rtH43)v9wd+H$J&0>L}T$7~0wBs~FiSX=;O(
zY3XFyg66&;>$=iFo1PPkOCa|Nz)oJu(Mdx-RYoVxHXF1I8>&nv4SXsnbkC-(k`iQj
zMGj<f5X_ID(?UVh7od~1!7Zq4G+jEmwg%RzwmH$c;41?&(=@>A<aI$!7Q|^8;G?L)
zOMsBplcu7!aY17kX|_cgsDYiTiIn^@L8&fH6LhQxC=F$Stxk*10$c3`i#hOU0eBf3
zc<=*sP#U6jmkk=^N=?ke*k%AS5R@oE!x^9>WIzk+A@vrt#jcZXYhVqjmlbVoLF3k-
z%WSOEwY4>?!KZJ6+S<^`+hkBpo@$#MT?9%Hki`+;MfKo|ogtgTQe#2;U_kd8LndR3
z!I>Almn#V_5}gtY9}R+5@Zg=|sB30G+jx?o?G;VyBG4}S<cw7CbP%W)SCXoLBvuO*
zDuyXbjxI*HG8Wu#0v$L6KS>U>Bo!$a!&?s++g=cZc938KEjzb|96k#k3WN@=fEVm*
zXks)xG(c$v)Y5=wPUuycXkwt_zfpuhfejV_xfGV56T$5jP$OO^5z$42F1ymK)qyPM
zMfeNuEwD)``MJJ{d6@->qihhndlJF%O}1mf+X<6wbHPCZsydQDEp~Y6k_b8|2{aFu
z3Of8_aJVlsuQ;`+#0fmyssTFa1#uEI#I=x-STY?84sgV1JajY}A)tq5JxDz`aud@^
zQjyxAB*h@e5Txl@qAb-zI;;%r07#BRcpE&y2P;TG!y%xP2B0TuLC))hWC76W71p4n
zsR$}ZK+~+6)~VXsnn{ob1L#;1$c!_neE`}=0WPjIia-ZU>LjB$TO$cH;tn4?Nk%JE
zK?P9(NF$;Y1ub?)3S5XEz%>WRcvzPc6h5^&;H--9AEZhIm6C}%Nwx+sFF*zmLF=Kc
zleD!pK{*4_#8FcN?P|?|7P%Tl8i}A8571;ia&A>pg10#!He<HY;L!^?Z3T2PprWA_
z$RVJRw6#sLPqa$X0qNEQors3ig@yFI6yhOGI%vLw_Fywga<LwWhplh}c{~Z$zX7dG
z0xjZz4thZg7En_RQTRcQrbZkp2<yHgE&m5;z!*IMT?*&{t<FG8X%&4Fqv34}(B{-=
zTy2Y3(79=#;roJ|#N<>Bw3Y*SS3D?vTBkr46+pcM+O}R@3*Nwqa4km6B|%~i$@R90
zn$}6S2GA|@p!>ONlb~4%oOCq63q(MJ=ZT>62TOBubg&l2(5o22GfOg%QyVD2k&Yok
z>Q#cH8DAlt1PTbSDnwcb9dVA75J9q_=~&QcEz|*!Yye3`paltu;BiPun-{#sCLfY7
zA(Ntz?OBiv1R8ZtNi9iCM)ClnJ_K0>9T@|qf6zH2FvlbO3obnpZG%D8K~5$3R6xkt
z7oh4L-d46X(8&U)L1>E8$p-Uua%{774RvzC7uf0)pdP!F3tod=P*am-XNYBceXg3C
zBJy??H8oFY;>(4fz5w<C>evwcAh~S4)IyD9P3r<sXn_`F<wB;VKzcwUKYE}{23pjk
zlcERnHmDlWtOdIZbVLSdvttr+w*h)iE$E!m{PMiiBG{fG9Yx5A%AhVyGIDbkRO%!n
zwRfSx172YOI<8z3Qh0&p=Rn0nkw!A2NYu##b+_Pm7-rdJT4!o&Yo^;K>wuQ?<bZGJ
zfE6F<pwmDU4K#JqKqW7vN0F*iq>+v=54?6RIWZ>(T-HQq#_FW&WP<&g25#hK*rrCq
zY|}N2MJuyG%S;P2Qg!k*buw)YtkdAGNd=h%Yvw|32Z1(oK|8HM&ClXukTW35`CZEr
zb3j|Aky_jtI^d;`>3YRQpkbN#)Uw2!(4riWKVWPPuq0@r5n+l(I&z~Q-YxL~T_*`T
zcm`U&f}$HV=nk93fV8ke@~xC0EG5u96sS=H5-KPHw{MhmkSlj9B}hX8Ch7>T;FZAj
zypj$ykAjXPRf4iX1%^^BQqv4H3<YYuf(~PX*8qu-s0WoMph`J97PN~H)VBsLzk_6M
zT|;p5KF!WH9o(W%woSJM-3JWv6C|61D<sh7E}eJ{@WqzVNwFHqnmQrS?3$vJ3_f-O
zu|gE27u=hIoS~lrYAS)3Nctt}_$PwSF$n+-3FRghrDx{p>jXm1Ie;x`j?+-mE=$x_
z($uh5EU3_oPSmYZjn!6B(oxD(($on;I-~`$!6*qeB_S`~)yppcozsJUtU8L4^wbjP
z{M>@llGK!7(1;lH?n+I_EhAW^YEicN!9rXiNkg+bT@O60rk7k?4C+PND(RM|CS_-q
z=qBY?=oV*IW#*+@CFK{Tq!xihtaWqqt3V7aQrI;>cPUyWfetLQhJ>PSNq&Kqp{g~M
zf*5aQSWsbIkeC8GNe|2h->qV00us$H&Me8y&$CKQD$dU-ElE|<Nk`tAr=*h#ie7l*
zJPlGHgANhK2&{DQB)z6}vaOP#Dri|C=t__RofKOolLGL1i6lL+#X6vlJ!p0vQrV<w
z)<P4ePO5Db#&V}L_^wIR;Rc;_91_;ha0iuH&=>%ntqK}T%S&<2$t<u{0<{)X^S}`S
z@-H}LgFE?(2AVjufOaE-8lpwu4T<2?fohJetu54IJyh#-K-<GBb5arM02(U>*5Kf<
zGO&hRd1GY&jy419oYb@uD_u)VOUr@^lz7D+VQDBaln!cHqQ?!WfJ=o8{zd9k7i3nX
z<^;fE9+qYi2P!6MfTj<1lJYBp!KpMTH766a^bk=~!<(XzmS>8Z8b}Z5Vos=1UvQoV
zZ^%W~1&V0U6cYG&LwKUX*wG3ZPlC0?lc7-p%SW(ahVilGE2J34$XLj7NI45x7+cn|
zGO&h694s>#D1o-sf{F?~Nd5!+7<8BbSPUG$wn_$|L<T7fpdy9^6_`0oC&^Z^AhD=8
z)h#DKu|xxWA_i)ilMKmW$aaA?Q9~MFu-v4R4sB>b1d>6Q>VWQS0k3*5E>A2#nm+?i
z|G^gSfLE+nLw1Fyfo61)G}EKgVnO#EfP4empp^)T3Xo`0bXu%6=-dRz0l<kmDWJV!
zkXc5kZY0$pgJAKQ3OUv$7*zIafc9S3fJfRj>=kvBqf--OHTASL^>spU)dqT6ny^YB
z6kQEyf4HVCtm1%H6=8|CptVtua!v_R(3NEtXC`IlWR_G~DP?4)q@?C4fo^C8?fkY<
z0vD=EwL0O6w$(YQB_*jv!3BxQpduR-ooV@bCE=-{?dDcWCI$vdwK@@?ZRp|P@?A+s
z$zMrF$v3}BNk=KSSSc1X^$p2<)yc)h&;_gcAmd6Zt*TM3#sxQlK|^AYS;1u6GSJ{M
zR4u%Vs03PlmTa$NsAL72=C9RBE-v;f%}q)zvZ_wb&neB#125$U-3F1CnUmuWwF-2I
zTTW_)dr^KlSSlyAA~>TcGcOy=LwHHiKqn_NFVzF$K}7={sQn;i;Q9)}D9A|61K&JR
zo|%$g4rWz>uYm<gSLNsDg4YNp7lXG36kAm*rGe75l9f_&aWOcFE7j_Na|NP=08fbO
zq=3hl64lf|8@`Y`(x44r$b4u5gM<~dg8-VQfE^*FkpyZ%LRG<%UlK?K)KSqHpySHo
zK}9oYDM~TuR_h9lOdZhX570gcSad}v#ezp7ps@!!5f9$UO}0;0Q&UP$EdlKzPlugt
z0~#SswM_@Nh(H~F&{c%?saBcMNwHQMX|QVyKuz$HBG3W1pvD&XG@($?P-JQ{Xea{Q
zbk|6YHjLFa)YM9iHj33oDj&eE2KORBZFi+SaQrK2f{O@6(AmzQsncZ821uxsqAh4%
z1gs5`SRlSn*0xnDs89lL=m(uxfvDg>ZEMgu88tNqpc^C*yXO!U9O#Gy4Ung7l```(
zQj0P{M+JbwqZlnbKpU+<#~l@e&nyEC;exhnfpvn8hk=A9XbDg<##w2g^Z=?jutzZQ
z(F#om#6&L02Z$I2?R9}gqycE`9kJyAv?w7JoJo^FF$_9Oq9`{p2b4ck)zrYJm4$=)
z(5bfJiJ<Wz$n|i^H8sih8fmsjv6%|mYiDb#XaGuQnV{U9T9lcrk)~;%R#RhOm8xl#
ziqy4;R)RDclysE9HHuO!Mi&4n>Dr=~F`(dw9fFZ;9}Mm5f>Q>lxPjJwN}xS6pb4c!
z&`F!csU_i=DJ2>9@p_<2L?clr4C#_Mc!L0R0U{_UYBjB3OxP^94(R$=cxxjO)G>zU
zT+kAdphVEkZ_u7pr3P5qz6zASby9ScAT=+jc?=3#xJ%(p6eUo%7<6W?rj-F`l`3fS
z7c2yjt4rH*jYz#B%ti`Y@IjrCgz#)NG*GORGV?%%qb{t1DAS2f)KNmJ{gq;ojwXP0
z1tIcQN=iDgrh}4_4#ZPdO5kwC(u;$6AUaVyDb}_ca&#P`uuMku>QZb$bEMU^I%$}9
z1|-`jBW>%j0<9o7u}cBp6q6dAs9l~Ioe~Q&A2gj>Q<D~*qH7cjq7f??Qfq5<0-%Wm
zH29_g4u5bx26h_g7y#Q!P4u-)=s6jlMlgpKLG2JoT7b+vRo8-hqu^Pk%wor)qQpwj
z0fx|hLExmK1KJD=>APB|+Ce(4Y0*j1>9L?&0h5c1K}iR6K#igy=oBw#jHW@4I#YlY
zIH1xE6vv?U4M;ucEKsoLKpfB<31}e;?5Jz#fQp@=X01+fMt(UWCg47E0*`lq*SqOt
zWTqgk4MJ0*S*uf$pPrtBqyj!zrj(SQ4;rOYf-j~@v`>WWCIDFrJ&0QmWIl|IIxeMI
zT>&|e4RnDUs1vTK2h|u4cAq9xZ!M@pt`n~pQl6TcXX~uvjJ*6dIX@3}%bAt4PG(*v
z`stlI;Hc8923Y{!(Fa?r4BGNwn+zF<PE9P%%uBaT1>Iv*4yxxM!jOd>#kP=vM!n*a
z#G(@LD4t$kemR7ZTv`NMDVmy>Vw(cdSelnv0;<IzNf26%CCAz;DOrIlv09zvQj{4H
zP{omG3-(z7B*lW=3vwfTg${VpReEZPJ-EpY2_h>bE$}&Na3uiJ4>~5f6nUv0B=IKc
zBonX-q#3lbBQrm*STCit2)sQQ61N5U#kQcf2_(p%r$vH;FBUo$h@nv{QO7_BG8~8@
z2bpLAZ635ug2fCdaKYZwOU+Bs1-k_t^qN{p+6W#bq@huyS6q@>03Fdr7D5bgg5w^d
zCojJo%z&N(Rh(J^Dtl5(z;<e44^mKr0Ax30aaV0Eaw^mVB|D@<362xU`f!LcNR--E
z!xj;sx2B=d0&62cdaH?G7e|8+T`q_PjcS8-@j-evkj0LQwh%QCF_=owF?rC!0c-+j
z16EOf0r=L}BsDdq#L|*{@UVw{l9d5y%m`#GOf&lVx1e=}X%*nmg((5u+leXyy5t4f
zC2DFKATOXf59}sL^A+kR)W#}QP!mzmp*SDZpf1-2UwKl3?rK}GBxu(MIOrk44c%ZC
zl3#$F*rB4J4P~~Vb-jqv5wuYnY$JSH8#Lhn3LMmlJcv(Wp#iZP)FK4cq2N-a8dUKn
zB4uxQk*NUMs01osP;7;i`Ff_hzKJCnddd048i`t9W`L)rz7cp6NLmHN50FF!PH#H#
zdeDdgommSiKOz%#q7rpf!2MNwD@eIr11eE#KxHuKY^Qkij;Otr2Ba@qqY3McYCuLX
z5xv*MBwKy(0dU}QNkv~LDakh4Jys_<$+lWaOUWu4sjUP%P!n1<7Nvp?83GmC8lWB{
zc%LAoz)ZD`hjt*6K-~h+_Pc0fcqa#1U?w68Or3OFl(IB2wx$MDl7c!5YHHe`b2DHD
zg43BsGB_$hSH6Mn7tqPHH8KEA;eqa~h&GM|Y16C*uNg{@HU^C|r-FtBbkc3LQ)+4q
ztyA(9GHf$yYLxU$m2}eeZ8LP@A(;$ru1>mknx=JmMrKZ`Mh2)Cm0_C<+CZ+MsSk1t
z=<Ll5(9!al@Qt>hHh8)%Xp{(4i)g3U)PU?V&`Ac};!|RqrjraR?rcH*DEoA6l>U^J
zHmFwx8tsY&odE8bmzfJLkwLreAw70ao$3-$I3v%qgMu7<jxqea^F&Qh;Q%`DFj`3q
z)BsEbjhYnXWR_?sDJVe(ML;PDH2Mx|slgX<r9xX`paZ>AKv56c<(CZF=L`-uFiQ`1
z_$27O+=8N1$b33dN(YVkC)p<@!4)QIS|ufcN8UBSt0_Q%T#%ZIymA_;#Rb~HgIF$B
zQdt1HvJ^CN4;?YA2Hh?N8d%6J0G%9Tm0VM!n5?Fj1nH?Dg@Kw{q7JN1vr5!~RAiv*
zl9IruT7!@DfGY>B^-V&$>jS3I7M%U^)6(n>tYDp5cta=!QD-8URtP3&)C#P>806hz
zXo(7DM<Y~$4l)5{aj-bNa@PTut+uu)kW(o^8w<d>(-zb#1Ff)uO4uraj!D%?(aX<C
zu}#r~T^yi;U?K+CK&3qL@f9FFnxGx!`8m+@>LFDh)M(H!E%fL~aFwY871ylQNdawH
zLpqf+EiolEBp)RaKsr>ALJx8zJ0zuOR3vJGMmRK-pyN17I-p_h4A3SmP|g6&QG*kH
zszx<bg;i25cnNh1s0|E}!(tUEMT4djGmDWA83HZAw~Yr~@tv9i-W!*Kb{;E8Tav9O
z#E0<BW#Ck%lcs46+NJ?L<^&WtI!bAod6~r-;NEBwc-IhU5(=JjKpR#;^0w)q^^a+g
z$OFZhA*5LaZW^aUTSMRo)qpC}Ne4CLK{F-D1uc9fEFu=6+j~Hh9-ysO*3k81pz(zK
z0-Yp{WKEcBU<(-#mvw^2a6p?LK!pRO)1e94R0qBz!w}lAf;bC$$R_9*P;e^>V|^GT
z;1odx2(%fXriOa_rVeP)9%yG?QL#=sXs-<Dm`+eAg6CdSHPgXM;y@%gAl1}TG(a5a
z>QB(Z2=G$=bWDYbNsuEoQbEZVstK$fwDK}FFTEtgIu*2A8GMZjsBVXz0#Q=~cPdy4
z>{ZZKRL};D=+s!f#JtR0uwy`TiJ)uZK=UP#yUJ2^3^g^aL1+6Zf|l`MJ!BP<IFJ%2
zyrTsRVbFE9H8qe-3knMC!K#yt5?r7fH5wMSN}zfy8O{Y)*Psy>(8}7(+*EK_r`W@G
zZCe?D*NKAW=E3Pw(Le|7sM_dQO&u;!%?$Q8c!z#TKJ@fFkPAWmN1Y@@z=F4dr$r~l
zf~#Iz$nhF#YG4s?c!Jg$s;Oy!1rXs0o}veL{gYEQlE7gJim@bH1M76VB=AZl(9Uu-
zH4q89;ySZ91BHWV<7>jwJj_?Ht|K^iMJqwtL`phJpjMHR4rn+%6%;}!mpFowFKC%V
zT3&P#XiOYTBjqwshY}uppj2aP3(68$dc(<}886J+u^{u*pa4iLN!4)GNCF2WXuA&h
z@<q@Bc+eG6)x|lPDXA{`<#|@F8W0z2>VU;U3qT^EMx7E=Bm~k)ch!J-QBwz0@_Oc3
z!HY_W3AJEx|I!j939vyB38*;;P0$bn9czFRNSJf?n8iBGhe@z98a(m>$@aF<v5*FA
zNoF$AZI6(S5NNHKfet7RAd0~WH4=2O40y+`b&?J2h;4A{NVEmrV4;(!p;=P{VnMPk
zWHbqsq;z$43_-`vLPlXg%>huYT9RL&p{Wy@2t82=TyIr?_XigtMK-8rgg64$P662i
zt*}AE0UDqs7%&weBcTR?Phl-f%&|2zhIka*gGHFESsews;3q24wm7xK6SRf2EHOs|
z+$aDA2}BRf5YWYvU@1_!j%)^asu!+1Dp6A>3bN`B>Iz8v!nV3NC%@dv%)me=EwQ-7
z%E-V#2i_GmF)#ot&I4`DN~}bf4sJd|t7%Z!r&U0`4Q`KsFBnY(FY8N!6kCwW0G!b^
zuwP_}bVpGVXhAKgEu4=u&!<@p_7ChHBk)2Dq(vjp#DO`V4&HABI)n~W3UV7d=*VDO
z)aAPvlev&l10_vOYv|@wCGg%N&>0G_Glc!~Y?VMg=S01-#GKMpok-AVMlkr2^;FOi
zC=koQ#|EcBt^@_$Mha2p0vAXI9SQ)Nr%us99JLHzGywAp)DByv5+%@n)yjfYTj&wV
zI+1$dvyvfa9w?Q7Mw+3jYoP}UrzGj5Ch4SshiNJbiu4joN}xAZK`!!wwU|NTNOcmZ
zfewvu*w|-0Sg#If!VCRmbnpNpWKI`!nlq9)@X`@fOJLMvuqE*zO_0VFcnLVTaKPy>
zcykAQcnzq#4_V*`>eE4I;L_C8Kof6iYHCK{?j6)8u#N&~Pz+=x_|$1z(8<2`@t`rA
z0#Mf!G@uGz)(&1PhP2ZMbk3kHXn}}NetBvU_znxuiZ)2FfNNOroEzv!E>J+{f)4=(
zRRxe{NRp;~YLZn-k|ylHEn8dLWcw7vL|h7NB*#_*bcG<O9R$jEn)azy8lX07T4r7f
zI0`_ngiM;*+NRn=T4<o@7ElEQ9v%i63Z2bLL7m-80S$bEXDX63!3Klx#ejzesPU_<
z1j-`N2?3M{0=ouw)GSC3Qappw3%IrfRf)C+I%&3`V<RDF`GRh?0Yy$4WNj@X#=r~f
ztdniiqEo@!K~iiX(cqR@5e-`23c0+g0CprWA}m2|D-F;rfUTk-Xz>Ul>4BpZ)V$RJ
zC1`N0SV4~QKpWu!IT*A73^@m>sX_A<=rn&&&jx-fN+SG76iCSfIspls@nPe1XyK>?
zN@_}=t2aQ?nb0h03t89z-mQ_Egg)d1>E1$9DrCp0JzDT5g9f{bQ%gW$5A`VM_{3!J
zxDdEq1L~WghF5WZX;E@2G$Qn4%C+^=HPNPy!0~3AmIO||@t|fEB%N7<g-~h%9mL8D
zn9ox{&0>gd9f*chomA+VSjnKIs*?gbFSP`DI~8~vHdJ*Q=-S9y$Re%uBwKyZEkWRt
zuLe?v)_~TWL-v=JmXze@fe)$&wK?FMT|gt_Xh{(ojEJHOq=rz@1sae<G6#Rr1?^FR
zinVA&ss)WjCC0*=nvemRYLMk_nH8Y*1o=fuR!X3?wQl)EN;*o(If=!^p!EeH8gyWe
z5@;JqegTp*An5`WN8s5DopkUpBSw*z4k_}|Aw^y~Y}tAm>_ScOP)3BW4`kOOXd$cy
zs7`=74IK4Jpf#4@auA$vz>~j_(gj?qq=J?qL*~d+kxP{n+f<ZNCB+IfZ)}?kI?@}q
z$RHI_wt<u*$~K5%h^N7}T2+@MCPCI@pv?ip;{$XqMKK}|D3v6F4!TIK0L|>DLpyzt
zLIxC~nxNtGjH1*u`$Rps(Yl7U;B1IeZP(OjKw=W?5a@x-sVV4l(U1}V)U`$|Q-@^+
zaG{3~2A@Wn2s%g-v{nypBG`N2RSzf=<S^HPZa_#)O!3dlsRS*@Nv!Yz_f|p4B{e4p
zx~K=r3xKSV1Zl}H4=zZ|1BvH@6oFW!#i_oDpnE3LiV|~Eoxm$$zzXt8Qu9h&Q!>HJ
zn2@_Yphhk%O@Pw29!kEA1rO#zGiyeYt$uV&NlZ~pUQAl7emYuvA|=Hcl&FzXGBn^o
zy#r9y4Z0HmbM6;3vjtj1jk;nURDFPshK7&DA?_FiyAoXZ!N){Ex2S`g6PlodHo(r%
z0PUQEF7DQW&f$SGA2^9XSG8w=E2Jb_@bxBWN1Vr6!<Lw5rfEPf)dMZ<PO*h7Vh7a}
zpuMS}!4o~W!S<lBRPAJh0O<5bP55f;j3gb<SgRF?fXs}8j^$0YO^Qx~)Q5=mD+)^5
zsbI~ZgPb)|v~3|gYtWLPlA_F94baKQ2zwN5ZPQVmVw(;heFlXXtQrRg4uLoVFQ`D9
zQU=YA!j=Jn>bm?i1uDlJq)rFBZ*WJR5_FpaYTSXwEv%8QL4!x2ovnejCTJKIx*i^!
zM8L5LP7K!RwxEG*Xq<wUUmztPBBB-2O9uxVQnZ3vJD@5g*%lUA&=N}t)Tl~L%tOrF
zgXRUHw<CdDs7a7P$wX*=22JpR5)f>~CMb`C#L#jlL=$SZ1YJ80&6Y^6M2TGJ96US&
zfm%>WnzhieP*mf<OYUI9mmsHtb1%r3Nji|#CD644;G>Md&2dmm6f{d=on)I9odV8d
zpu>EN!NH{gYN4ZeD@oHT6;Xmfui?}HEmEsO9p<qGH%P(30(Uz2<ZIYev5r!FJX|I|
zUJ24chKoREk`dV#T+AZ4H8tStj156+22jSCQ4Q4ut$qV<a?D7CcnK*5K*|?z=-4VL
zC}}5xN)s%b;ZmTx%reu!ogk2(qLX8h=0U;f6($V#0mw9rf(>4LC4tVag*HhP4WLO+
z(GYZU9>_(RNw)eiMd&q1St9B#Kafi3PH%AdfVP%_c5$P3Mxpj7fO->1Ga1kusL}eM
z&<#<k)}Ue><SS&KrrM_1Bi9?rI?xma>hx=9YFZ_ND{)XSEY%jYo&&mU5kC2oYM-hN
zk^p56$dVw?U^KWl2ink-iqsH?w{AeaIM7B(B_*pwZ6&2z(8eU&c#w_YW(j1K1t=GT
zr_9R|bC85VwGgO6L#wqxqxVYC4q*~f(=7?yZUgyRCsjuY+@Arpp}=_*WMOHlZK@`;
zZcK#*E2z~7w>1^KaUazskb@d<IRm;z5!o3U$+k(LF1ZH65t{bNRvO8+sSsD_AaXg#
z<N0X{pcP`U@-s6Dw4MRnr2zG)m6WWKVe9E&V+b(!f<`*Qdq*&umf*w%n#e=yWWz!P
znqI-@;wsuE*(X`WgKi1P)qw7kPXrx{1-;k?b2$g7A^@8XYWLWJ4@m(nr2(I~2I=9X
zra&5mpp|go5hPvc?Ou@4r<xiAyHuTY+cbMn(y)q-1znbApQ>$W1slHywU_Kt?K7;>
z>{CH|GoZWAzzvlYP%A|Pbdy$2YH~?xN=;3st*tFM8G;+Xu)!#MMZ{nfG%P_E)F5{@
zL6?ky2dlsnTN;YUyPDwxSv8<D@nPvu16hfV66|~!@NJ@?CF8d78p)cVIM&eANrNXa
zYv@tcN$?g+I{I1^P<;jqSnyU$q<{rYDCH)?E_F--P36Hh?m=#YOR)uQ2GarEKnf1-
zRB%a=2g#r*Am@~(>ZE~-EKnN?bO0nQ2_%D$u0@G9TU|p<ois>y0<`WUIYT2FI*g!$
z7&k;(?FwpQ!xAJoH^*WQ1;9%KM9Gn)2`Y;+Qo+}XA&%()T{aGKvWBJ(xRix0U9Clo
zRD%08s5XMK8&by}ZXGCvfu?3a@<=@_XwhJ=l%J<$1s%<(g{+<g*U3tt18Wt)=kr0x
z%sdF4Us|F7I)zuED784VDiw56b$(8c0_6Nx&>7ds*$OF1Ip70k6~M<Pg6^P!uu2Oc
zG-%%ygatYw5y~npfiS>FC_<RvBNIU<eCMU7DnO!0p|~_DH?stE(l^-L?9|GFqSWGI
zkU(jHLTXV_evtxr7Y*ckG}LpmF=siFVvzz3G!6+JXF#ul><l37pZq-Nemu~$2ec6b
zJ5nnNx|9)VhCBo0L8Lkxl**wtfC_2IfzDtbYb0tycwkS1<{LqqwL#rr6zxb(1RDT8
z*$ouO;6a62ozgrEE%2lO(U6t~x}yiQ2^_SP12pIXI_ntC640m+vOB@v1}}%!1lfT@
z7u+UL)r%g2(C`CW54sKs8hH6>X&Om7pvIS$mXZ#roQDh?Wr1oX@Qjd7HmEUSuWua>
zTB=o?>J{wohZJdWOF`lg6&j#w7JL>icyW7#uMdiPXxR<wfhvM5hPI6n^X0H|3ly&4
z-TKMk%dcJheFH#Sql$ErY{A7~ajIKUer_<h*92O#4jR|eugJ|&LcYEpHU$L<P7OuS
zIuuZ5giZ<+J5`1xri1EM4JEK^i@<4ENfWx#R}(a92^P{&^2{qs%*jkqi178X0yX$R
zyQ;u@S#y$X^_BIsRP=RnlWg@hqV3gUHRElg<J4lc^mX#ULvVUp_L^4F3Na<IS{l)D
zpe}x_mZpk+dah1BSl-?$F)6>aq$aVT0EBgmOY(~n(^G5ov~|ICZgFOQUQJqNPHIh2
zYH>|@W=eW$iKdl`zD@yDySr;hjfbnF3uq}?AxJDnKSp0)rwGIZ9S*0btsARt1-^Aq
zAADR}bX<(Sy>hIULyacLMf&#2R*+i>tu$g%K(`XsXzJ?}CxN!;mVn99BwHmdeI?jI
z=1N*hnmT2mQJb9nWble9J<y<#PI;1TQIcM2MQXA}8QS1J=s+mYtS{I{DH_#@$t9U(
zsa6I$per1G^HVa@GE-Bms%v#pOA^yTbYfOwMR00KNoHPpu~l_xQI1tvk`AcFVx{En
z8lt3=S?rUaoS0*k4;`c`Pl`5-)zpFP+6HYwDk#cNPAx75A9SQ>pp#f!nU@R_2NzL!
zC7=NY@XqX<Oo$isD|E}t%XQQ8i*j{Ki*i!)lJiqiQ>;OSU{P^uiEU_zo34eD4rrTs
zK?!I-la`WIX_5{o<yk3#Nd1DG#LPS;9ngp*R0PCS(y7SJL9;10M@Ipy1(alUvWoNb
zP!)hgpejH|>p@Q!tJQ(Jz1XT6WF{!V>qD&52ic?#F-ae!TOTwiQCyIpSDfmWnVORV
z)uL3C3K5L(^-+Sl9VP_YrK|)o0<H{{vq9&g=jWBB7L}wHf&C43x{?(n_vwKBt^l%M
z2^72#F31T=R!GGLR2j&>FyRPapIV)?oWv4;@TqmsSXMNE__Cq|w12Et2bvB_QHOEi
zMNg8wkA{y%qE5UXR3SLQfa-569}QGN@P(})RRQotbY2?8Nt$3QLW&aeiVO0KO02vz
zN}ysWC9`HVY)DK2G7_JxlMWe#%hbu%Dbgv{Db*>rO|k|}l9i~bX_VL+fi5IMnRx{t
zL<boK)=2}MO{b)!Q>IsxnwU}<T#{IlYMW?hU~gh&0J?<5&eq7lKuyiqz`!oCrpDO7
z1k{uOU9YQAZ0oC$qf-XniBxRsr;(#mtWyTMm?zU-BS$YY4VIhK)HF(M%RmKQ5H!*~
zQWH~Bi!_vc5{pZ8Vak*=bxOfUogn8#&>bqJnmRc2gYqa`8;Ao@uBl@Lab``85~w@^
z&7kIhJ2m#@wn};V(A2AB1@#R?v?Ldr`<1LT%5955y8%j4b+T=X^+5OY=oHx&>wybl
zolINBB27&zjUwA}9nh$vVmWA8Ub(FjSXxQPz%CJV0EexCCTLm^Y))yhZK6&YlnF}T
zwxH_0TvJ;~Nhi}jA9M*?eok2`=okf!T%G7_opPPBSWPRCL{@5Y2~509r(CBfRugU#
z=nfK%LQS1QXbq#2rKXk#>c*s}rxs~s+AD!lS#W7GsQgi~0`pu!%_Ak9=rWxgolN^|
zE0A#opz}N6mY3<2$7+I1(m)sm)(YAL3|e^!(H*O)qpJ(LDGOA7f)-ss4rzn6gupsL
z$8>}G1+|##I^kDyLy{rrzKJBzQ9j_x3_2;Ilc58>Ue*?#gGviDs%t?bNV&E-plSeA
zdezkA=;R@|YHAv}@E(6nO|D*6VQFenC1@8)E@(9e*r7W4w()vM7g&Q%YH?1?$pP&t
zEY?uU&r1f~V3V6)RH+0C-yCS%fkGVQOr0W7rBn<eKv$5K+A2Y=#sOVqTxMI1$VyfQ
zI_aq;s0kk_KSOeE5~v|!1X@uA9{*BI2akHCgBE@#+2%oOvNTO=&Gcwc?SeKEV4D<e
z6l<Min-02^3wcH^7PiX>)QSNe%mkuAYbw)IOB{1@P#sl_a232z13Sq+4cv7E_tt_^
z3rkarOCb3dp#e0B3_eZ`G=+*Xxd7{9m4NzKw#A@j#UP@lCQ+vdbT$a|82?%wP%F78
zGbPnGGZ%7gEv%H&K&-9@8Iq%y3sqqY9sB|9-c2kiEe1sml9P}^HW73ZrIB3;I8?!#
zArmzVK?i?FgGe3F%vLPq;K?$*#GLZP%3_VgXjpDVJ3Uw@F$q*SBfAdVm;|j6D~0(M
zeE$ttA!zGwvW5XD!GhY}wY8v_&IirM<z^PAYLsch7w*~?fJP-jSsRjHZOimh^7B%4
z${?kVZJAzLVrGs`j$Ua|j;#i$+yOIdYRZy8#Ry`YE(bhx0-uj4Ows{2Nwk&p^_4*P
z+Jf3Hwn=)qsU;ctDWE&^KmwpU@?av6qEaUZT<(FIC&i!@hM@TfgiuWlsO^QC5TWzY
zd7!;{(V%OOLCMV)lrM|&i;G?Ia}zT`mltQk+h$-7pqc@4U@}6vt)hlvW=&0Iv|+5R
ztu5FeYHFF$Mo^v+=$@@i$i@PtjFOT9D^O7nQf;qfVW4ECWMX2hqzSt7OrtyrT^ZOk
z6m{The?f&k=$1gFW*caZ6x_mBf_D%gA)%(G0bzjFIDig8hH`as^h!W$ctFEai8-2@
zI^G(^Njf<?NjhbkI^awN>tB>v!>`r@Sqf=2f(l>I{0yvg)z$|00KmuAqm{3TMWCI|
zkQlRtP<kc#p#=r-#Vk2`pn>Cj@Z_MaVga<33Q?-5lWGf&1RZ2mH8oIgfH#7J<+W`!
zvY|RtHSLwul&qBOl{B>>o`+oy3*mudFflnJ6}<Qv973QJn~Tt%3QwE4Njgd@hViya
z+F76j>#S0>v09@9R{=5{rC|}Tht^t9Q!4`vfT9#s8cLpN@MeZ?aAsa|s*(<dPS9Rm
zXd42jA%6LJsi18<$r&I6psF=Bb>IPp9FCv}g*G)nxkwRo$UG>&A&F^Xw+VW7rY=aE
zk`A<<gLD<Zl|QILK`MwflpK?jQwvH!N<qmNq^&sGAQt2RXg47m5;-uLSo<7395UJ(
zN?M>raHtyWm2?!8v`dq;m8=yCZ4LAc43(^ulr*gn#(+1RScAszvO(J)a`ZsQU#Auo
zYhsCyY*2aww*iZzvtz-F!gKT>M@|K&=7A3KN9ID-|K{qH>EwX2GU(8DNFIV`B0Wf1
zt7%<os|02$!5vav3@J{n40XWGGb=+K*j5QE!&=R<=<HaH9GD|gY`rx~U>Q}j8l_2W
z2+EacEh3O(;jN(@J#g0!6zHJ!qWPsIpwpQ(GC&JJVM`w2)dt9LuuC<Rpo&3vp6BR6
zIhvZ_L5C7sL-0}fc_|u2pn;KO(DE~la!4aV15~4FmShy=mn)Q8Cu`^$>Xd8NLQW3`
z^OXGZ72w?o_@NyNWwoFd38+JbR9k|_j$nK7<3Vk8@G75V9VKuNN)xOn7<@`QiY|Cl
z0j3AioYP4{9KwdO90D{`prZu3A_{qd0=WGU52}&j0R$dt(n&=!A8FbLJTsRH+Rh8Q
zhXLt&2Wa<81KdwfgmlxBz<1Y!QodCxm}!-)14|U3dlJD56Jf`$p^Oqi#%mNHZBG<4
zAzgo1UbBK7%nj?@8^XK)hB`{%7%B$!No&CaQb=Qi<wc1Fpkve!zJ|40;8r8~IuUZ(
zA=+dY(z*z!aVV3oNuaqNEAZ?OxI_Rg5Q6UG#W>SXQ!lkp!$1>yJSS+~KB&zCQii(v
z1^K8rn8~19YC+RqaIYZdCKJIkd)A4dUPf^VbkGZYDv-4%XoDK~5L*;ssP7YN;m1~j
z90I)=L$g)~<WbMOyi}}vFhQg1NJ~l}gO1=4ZMfUe!VGK_mQVv(iWb_?__2k~8R~#$
zxuE5Fu?Auhx_z=9$c>IUIiP8D*ve$kE;y*`kunk7NIjIehP5TJI09+T9cD`sXdVG}
z&>?8GD|pSVPH7%U0m3qPb^@CUiB&8oKqKAt22uz*_adbdG>ZuJHmm{%_e()4kj{J5
ztks0<=7Q#X(6U*`2C!n#e*cuzJZyOk<!lcd(3R*g5y<gBHn!kZ?5W76fe%i~NyTEE
zB6P_ls=c7#2X`+kl5F)=jSTeDbt*yQ%F!{gD*8HAAZC$$OrCzajw5))(%uR((@+Ds
z#<M0f7c?4Llv<ox0v-khEn3uZf-1$nx-mPoGCeg<Q$G_ja-Eoq<XF%|0I2H#+KdT4
z3K5<>!NnnH@Ea*XBx%|wX=s9bVxXR!l9E-DPD(UvvM|;bGE5j6<O%Af=jWy7m1rbt
zYAe|)X=9N|(ggQIAZ0aVT`Z_vKpDCMH95h<2hg!kloqWHD3d|v)<CWOL}(Wqe1TME
zaR6xi(LV_^a-oq3I_@8w`%sQ)Nd=c1;Co>p%O=3HQJ`sQ@a+enW<)Zm8Ih>zuaT?+
zx^z+}3F&U26uqqc%sdSxH6=v9ry@y5NgGs)qO2n=PA$qz%*m`mI^hDI3BbdGiI4-p
z_23F2-U4mOKo!E3i_l6vP?UnUQ-BuSfjz0C1los|npaYcsDnYPfe_P~iI9nqT1`Dj
zg4KYh1W4HcDL}ykSSY0e=%#5<kb|w!)XOZ^P_lw;OaPrY>I7|bgL5cs`c_j-P0<l5
z0XowdtQmHpN==PoCH#aHP)<hi95`Kq{Fe+X{~(i;Fh@c9d&!U~ZA1!525tEV8I+7=
zX+$;16IMx(lmJcyR)}MhtCDn-K=Tx!TP8KFuqaK2l|&jSO2O?H=u{j^8m`Dd+Wezg
zT~bsDYx96EiHz{|@hB-Nfc71rhbbp&R@XvKigQk~HPCSZ&qKH-*;X5X_t_X485vs{
z8JN`SxPfvkx@{Vu?IwvOp!0~qcY}eB96;iN2AUxArb>vgL8>`HS->Sp(<Lc7F;)XK
zHyf#!oL^LItElJ(TGCaXS(4#gl$w&7SCW~SQw%!!%PmPK5}c21-IBn{piLrpLlBX;
zVEaj7(FZZRrUqoRVxk^WH{8CuI5jT?kpYrHlY^jy0KU;yuOb6<MoPM^wze~PBr6Sk
z$SLTmSJ0ieiJ%b+okU3MSSL}hv^cd06zQOID-w%~%kzs;K+F9rGKwG*1mIB`@cz$4
zkjXGX(9kZD0O;D>MEF>cnp&D3`Uny>F%5(kkex_g1Z^!-iqM6|eQJs>sBTjNomh|@
zjYZs62{o}mH`jxmovfLL*#%A2Ne16Um4s9SzzZUz{0_P@4K%k}lB(bWIz<S)0W&`j
zG~aHUrk9@w?!<ss;_E=WI-v1*`!rY=$O<|N4Hiw&03G@X8XN=dW-S3RK!eYkRw){;
zNzpJl&@oHU;Y}1}m@9PBKm*m_xg3x&_SK-lS1VM(TIgB@oitD;#2jS=9X}1)ZKwzJ
z6X?KBgujwBpw0)42ZQ}@o1_8tC!|XR3fjCB4e)YtXg3*@r$9|{$R1zV#A^n)my`tU
zAZ66nqL18ZR)ZFHgYJ8TIvLy%fM#IOFf+7+Y*h`J_JU5OA?Cq!6hLQA!e;GoiGyyV
zf*63RzCsrv1DV+ZE#EGN+lKWzEAY%4Vg?Kp{-EU-nFS?Eh}?-7FpbxP3@Cw)paz|@
zoCsbY59!aqC!aLny%%^g1eFZ=nJEgOK`78#x#SGc;TBL9bbAg`-T}>afNLjPaK8vt
zPC@KI6gpV#0NtF8T+BdfyCj`tXo-YY>VPh!tWL6x*HE&71gM>oCTJwJK%*Mm^9IfO
zf$o9_o$r<iItM1Rpu{-?G+ke!Q(Tm61ulqcH9=S5DS`46WT}V}=sHXIsu0cUB<N~U
z(BZR?e3q!DmI_Okplk*9s=bMU3Ah4)tmgvxISM@F0ooG`KT<X++8`Emb^+>`v1WC$
znp!d_<-rz9x+j4)%zA)k?rk+=>^1Cd)oN5UYhvtUz>6M`5+$fRUSOpJI@BCARRNhN
zEr88jAQAy2EE8?rlk^He+g8CdG!@_*aI}@;Ap>sEU<M!302+)3%}zsF?H~)05(vmr
z1rSkyR84`GZ9=Sp9f_Ev2UY|g=~7eE@PIZml0Y?proB>WQI3)o#<IU8Jy7OVQ&ZGP
zf=uW@2D-rOUg3*PK}VP8z_J?F335<_2Vo(|NKG|0B@m5hc7aZO0lN@1OboFXG%f%d
zE3?-C9pna<gasz*+5J$z!6ZT3pHNh5Xj-8u(aEq+0-fXuBH-;55Acwul6ERwIV`lm
zp@cNh3g#mXwn9yZwCO?J?PU05cr-M7f#XOCX+0CXhDis<KWOex1GFr?Jh50IFTX?q
zl#EhSKo^Qd8^qS?pazL8Wb6mD(mFadRwofu1H+35&FXYp`1&5urIyf%6C?!?4LV8S
z!yYuC&WDAcZ89XS!1y|#gj!mh0lMHyCmq!JK<fOYX{xEEX{3WP6KKsObhfh==}Ic(
zA{@Mi#v=q}$q!_F3$!<o@Nyrl%jZGsSwSZw8-i-4q?(#2a8EMDHXVA*Q6gw89dsT|
zH2gfb6#Hn{^<B`>4UH7g+K^Z)4bb95)N2-^6Jx<W9MJ7lu$7H!YVjJWpbidbwH)}|
zWXLTC(XpUYUNSOsQb0S9iZwMM?Nd)s12ip94^*~6_U(XJNbL=HAi(k<d^#ghP0ce2
zHk|4S9<RVW*8t*U$Sxo7kd97<Z6YFvf({sh4%}qefqL*@UxN2MB<dCCWG1I-fX=f8
zjrc%#2H+!5LHz{ya7~h?Jv5*peN#;<P%}3l+?7Px&7hHLs}$fL90E$Z&}CAf(N;*c
zgECYH8S?{WbI2Y&B^^+iV3ky>37%g=X%43$lC(}b<hG0ydr*Col350-Y#{e1fHstY
zY86lt1NCpgn=3U^G_62mF7Ww0jbt@7cxC|ioYEm<Ny$2CH8s(oP7Y)R45%puI^QuC
zREL1NYM|}<;2v`{bP^pj$)f{h=Yw{Bfr@8PKOZt150-(>>x0>_8Gopr)VvhT!B#!=
zV=v%E1;`1YIuf*nA5t5jjJiNieLz0M39dC>FTE(W0JMY}avllX|4DEqpiK`+-~&Wz
zVe8u<sn-j%j4LHSximL5uLS-0ed~DW*{|SLwf<>opgJCII%xMgbj?57$^pn3%b<mM
z1<-TmK~tc%p!KynxuEHFrQ(vrlFVdKeUJ@q#(+<P1|3%jKBwDOsVFrk5wyZVNmD1o
zHV5ho(8^|n(Ixo>N}vOtAqSHs>L`H@&R5dZ$+87CU7`0G*xK4=gU(UNtVm4(+Xh-Q
zlBS)hiO4|UgZnh?bPaW~K(`j>z+IsMTJD^pSCU_#1KLCmGG5b4BOUqN-Zagc8qk3}
z;Ia>Vs<lQYNC-5kg;bD&PP@`b0$uS48Y={iv4gTCsNb##-USc3IVKlm5rn6k0b*;X
zLpG*^lz{98ude_xY?Jgrlx_x?(gs}-SXvA^T{AOJA;~^T56pqg-X!Yef+mYV=b`38
z4%0&#2G2*2PjJ&6Ub{f^H>`MqlnkJT7<gzGa@q<wzrYg&XnYqMRiK_2B)xzKIzZcn
zL8DBd&MUY911`v-4M0chRD;f7GSC5e$;zNsCk=EQa0=>89-!HK#F}>7H1u=|y4eVJ
zIVtG)VS5eG<a&OZLJFui<dk2U2fF;iIVUqUuOuinxkM3kP62qD6^8;1P0)eN0UBwV
zI$-Cef+Ga9^fWy+65=o2B)w#?fg$+?5XXb+kF*kPh^h!QRiKj*YeC02>%g)Ea-%Ub
z4IE6MnijmE1Dv(sVU%JEb_6_(pbbc+G+3&JWPxPx3=cR1DQVh+R?4QQmSB2bL(@tF
zI<y5z0RiA$wV*}sU>l(^2(I{GqgNV<ptu5Wwg!zyYk)4GhG+(b6gZD)!*V8ACFF49
zko*G3>BiurctE43X(iayfdU7i5E|y76{H2aV6%1M9?S*bED-`KjzJS8;6ww>4iMwf
zm4b{`0$C3_#uDOWh<}lTA6kEci(t@*89YTJjR_%#4a9_+8m}a4&|PIn<MxR<&_Dt&
zUVxQx5a%Z%#}8x<2H8Q-SXD>_nG4_c4mq+YxhOv;2jmqirGmutRA}N-(kTW@gya`M
z#Gy$O`7r4u9as@<3)Tu#0@~yUZmpn9{~;#+VB7uSL6HP%fk65l>9zqHN$?Bn-~~gP
zeY$;mbaJc}sObrA8ET~4r-OQg`8hcu`5K@NU`VdFO4CWPPqRwY1BpSMr3uz+o2FR{
zYL#K!TM6DG1|47o7d@b}r$99`C>>y_Y~e>}C&hw~{w_ei`UElZmk0_YXc|ZcwS+*|
zE+lE{1VYDTK_jW4T>`M2tDza46srw7C(|k!dbo!H@)nM2$mEF?{Frud+O~oo)?SNj
zF}TPCd!-tFG<YUxicLv75wZ|Aufz(pvdBs)zqBN^NJ%>pNk4c%5H#){or2W+0C(6y
zB`s3B3R;+h_Tbdiz+2kzhA8-uKG24o6wvY!gPI!fG7<xO=*i|vR?s8Z5q&x==>zN<
zkiDs}qzr0ghG*ub<d=gsgeJj@Z8!tkK#x{}6s1bqiLq9o`%MwI@Ig9=um%cLy$<*s
z*WAPkjU+wLb==^NSbk0pNWV@h3J<0LlG9)cP<aT;HDS?dYipZg56QNm`YIi?fDznA
z0Uhh2lL9_GFi9uPJ_Vf46%2IJ;As;)o|TrT2il~A=mo%AV&Fmsa%L8&#hI3;mzb9l
zoSFmLY6aq?q&OueXX_}zG9IG+osycCnU|`j2BGy5b3yCfz+xIokhPXdI?*Vbqo8Rz
z9(u}vH>j<b6$o0DspA7;s~{pOFW)&oFD)lCxdh>6q~@cZimk0}Jh-W*V(XIxImA#8
zVisHm%Jojt)QPVJuL8(VQve;mQUzX_3sat`r(zoqQlhD&RGJ6z4XAMjt+OGfKnD;(
z^8?^EwuX{Zett=DNl{{fda;66Vp$?&S%gASYGG++QEIUQM4ytTwKgp1Kx-J4N{dq!
zK>JLROO(JpDUiR@@}M(k;Pdeyr?i6R+lwJ*w(2Q?*T#TGk!+0A)Ie)LZ7geQ3~g;e
zLTYN3AckQqNX97E#*kd6DwL%bfi`z280uN-87kx#DP&}(XQUP>Y1V2$Jfo?D+b=Lr
zf-f5b<+?;$SS~@opgRc`a^S<fsv-B(fCmY|jRh+u$jxL35!bvFB^}@VDujrYQVD2<
zJXk%bW257bESHbqxaOrO<fExYaM6u{TsH)AJ$Tv?e2Y7zJ^`IJ2RR!!Iyn~F2CW9o
zhJa4Tg&nx5Xjq%52WrvgmgaztM20)jH4mwy1V23)bQb`)8n=cXkPjNz*HB6-MsYsU
zSes^bvaO;4H1{CQcxzTC*VH6xq-eqyeJAP_mllBb4}j)t^B}jXf#&1kXM-vrozj*H
zUze(ri0BAwR%0{77Bo_iO#+-3!E35Phpi@OCg$j&dBnCFv?C4N1;=Ip$a&y3grHq$
z_*G>j=A|HCR)AD6Xe8;CBo=|TB!MPEL4_M=hz_E`KPd}(D|ZoScouVL16p|2f+|lE
z(>%fnAUh#ld{~yyfHYH*ZK2Vu1G=aRH2eUHYrVvrRM6^8>(rW>Wbha$k|^l3rPOkT
z6mV-?6Ex6O0==IHS~w-CsilIB;slN0fsV$4-d<;`9t|>IHzl(;H?z3dRtaKBthx?r
zI!x3^f((R%cWEl=z|UyNFHY60wNB9sa}5gi^!Kw>GS)K&9g>}*7ZT*?7wj40>F*cs
z5*p+PV%Qp*8t9~e#^9j`mnY}s7b7LlB$Ul6psNTWSF>s$(yJ0!ONw4nF)Tdb<L}`6
z_)_6v2f8E@bpDqHcu-dt64{`6x0)IagdAx9mlEj6@ifr<A8b3hzMhtby{&R|TugDS
zmWrl6XmdGalVQ4TqDGpgHE1eGub>E=j9pUG5=(PRK)r5gYo(?}Bi%L?v@WVRwYWq>
z3FcHyopgA{0~P1sDP9eTmymn}8m!GMh8i0Hu_QGGbeyFI{F1bs#NuKNrOZ4f(7YsO
z7FJVB2e0FWC<C4SsibM2j-%K}*3?VIQV?lijYCbVWDVE|VyZ2;6a%Lj(0Z*rh(~Rc
zbP(ct&WIa1Y*UaWu+`k~)&{}=+f?w1k6N8X4Ol&aloa8?2F?+>i3ORU#EFr{NUfQO
z$fYUplm;4P0p%iaeuOOk0VgSpT`Ztf1IoTBV8<dWhvwg8aQ@Xv1La`I@hD25)jObG
ze0q9LDrn9CeC}>)33%U?2IyE6aI#NEYW#pE+redv3UncfEhzVb0}*sUCFtM*&_xjy
zC7}DAt7~<V^;}%t97BCVf^|}$hme3aDJFu39&8m2Yps(payLSYZ8d1nI5RIDG%RTa
zo+r!9OV`uW1I<w)<@92xlabsBE9{iuYfxZ!a>E=B9=-xCQvt7*Qqr^soyGt?J532R
z-~tIpP3t6WTP2VKl)#NyTU+oPb7~1l2y|>YByzwju|PsfI-slDK?49tbsPA)iHb_(
zY7MLkG}vWp3p%41JbVNTLC}S0AVEzXn4iHWgJKIDhk8gs2rBd7N9QDKLe6hY2JM4`
z3`W6~g0|mfWELaq1uf`BJ_RWmHogzqnGd>ctri@ynmPuWpqMNu%7+%MkmQ31Zb)b+
z+A138KrRp0gM~7@oPyQ`P@PJUlw7P7s}5;ZLJK#DL6Fn05N3c5rUaEo1*IiQn%2;>
z4{Sl3o{RDeG$2PIf(GkBNuodlawY<3CJEFU0M8I7L59VZ^dLKI!3(uO^B9n0d6ZzH
zVBaFFg$FBKfu<G2aL_@m==Otpk?0P99{7zg614pRQf$KPgu4+XSLs2*3C(?)I>~4@
zpt%^+cuk!|HML}T#h{d&k(igBs-y{7nvH5Fq(Vz9%1qP+A7TL7Kc<MP1e*n@DzG{n
zGO7+5A4|*AgG4=~NQbatWjch1Qm7|G3U#Oq;Zhx<5PCHdo?;!M4xGgy<vL3GjI)I%
zP^DOP#J~i6%qUSK8P>kDPC=>)lS=ZS1A!^<bg!fb76nzi;O0?^4&vBsBy&LRM0IdU
z6b))r!Oq`}RR^6eh_DVr8T{N}uu4$!Ky5Zaml%Lg&Hz<sX#Q3JovVRGTuFzB@JQ0E
zPDE<yf*ViZ775tLs7V;?03{v$I50yaGf&fAMIU-@EqDzBXlXe0Te~>w(d5LU{L<po
z9B@qvnl!~$U4avahNceIniez*0-L#npT-0_xhD-Yy_k}URujW5#8MZdpXroj52}(i
zk~FQ-?Lp_rXlPoc>A_Ct2G!67iKWG<8k%~^mC2xLyB5~mhPU*=!<#7C5~-F}$;?Xu
zEnWaE-9u3WD<ffU)kP>&f>z!6kWJ~Zo6NutNr5a(0UHH6F&=cc8K_=^6iqO9BPmjW
z6n)4dnI);Y#Yh5Bd-SqXE0gjQi&CI>LclAP{5%b%?9@uokt?9Y3v;m&Xc=Eoenlmu
zmV~MRI|S6|0iS*X8aV=0gD@+=egG}_P|D9M$uCXL0H2)>TD=Hs5TcLEX<~B?_-GmM
z$tido1hxz69MG($5?B}bgcUrxz|joVg}uFmtv3WZfE~Fd1&atP(^O*}utThrAOQm2
z!2nvX1Pg7@83T}-23p-i0}@f+CxR!%6!pOc7X18N{Y*%P1|5S6>ip`JKu!|T)T}Np
z&n!vK&`8uP&&W*9(5y~QEKXH0HitA(KwTXTP3xqh)WmFSh>RsfCNH(31TK>T=?Ymv
z#_wuDZ7Q^~4z-a24mX6G5v}f|ni@y~0S7}0xP<^tzOXP-Qv;t+06*&<MG`eDAZ1KQ
zRS7W@-q?a3wh!8O1vd`la(E&Ic@Yx1U=r2@gqsW9XoBjs^wbj1lGI%Asa^;lBG%f0
z9jpS$Rf(WOXh2KwH6a@#ic<45l=MJyuv`sM2$}l@?d65&hU8MTh9A^oxBMcP%%ap}
z(4JBx`{BC?z~f1vSw^@kL3@u=Y?VM!tz-+jT?w?DFS({h3FLo>NHXLS4?U=JAfv&$
zhM;NA6g4$S=)!U>XeSAD{7WGTJc5~uFx+0((8^FJ%~m5>J5^H^;v0~Ei=mB7*!V88
zOlqM<8k%2A@{zm-X_!J9w>r@FDKs#^u>eU>u%ZoOGPH*TD_22IfHy$l6Ge%35XB%_
zm;-eUK}WJB!cJZXD}WZQkbVMEL71wc1d>86Kj1Y1XbE9SK4`Ovrd2ZN&_A$Q;53S;
zKp=SyWJ;<=qFu5*Bu=a#kp)SW&^Spg1g$YaO^aZ|5Fv#pn;Af}4&3#ScD)`b3Fs(*
zM?B!?41w0sVjFpYhBGW^VLOm<4dp>?1Q!LME0UmmSVp%cn9ouD3UVpJtMKszaG-+1
zFEcM4BhpeeAmNFYx<EOB45L8WK>JESEj?Io3}iF%Ko_Ww4jMg9g=9nY;0C2Mcsc}i
zbZctB9)Koi<h-o`+UKH^4lxH7XgV3T5Fdg1qmcC_R!T*ni{F)WGQmngSvC!+T?{Eo
zlr&*E7Hl2J)u6V5q9Hi{X4$5J=E$>c6ZN1YS0DwcsOh>IyaFaQB?LUUYL%sv0xN~A
zGHSscNwCpyAH$MIwx*6^wjQ=&FK|T$)&#N+>>dN1bZ89^PTH^=SCQIH&~gNN&nvP7
zG)2Qa3>`j1>&Aion*$x;(L>gr3|dDADxfvN=k}qNplO=1n$|g>Exni>Q}8%VE^643
z6m*bERRLQ*f(8aWP!WAVP>`i6Y1(U~fsTuS_!4x*B52kKGMNaT<JCbr<2FN62T5^;
zrcNr3aYLjc3^d?^=&eU5>14!0w_GVGX(FA#4ezGwq@o0TG)w|jqfREcsSb{FL(oOs
zST;syBD(Idw3Mq^3mOl>F|3)4ZD<;FKo6>uU@k%l4TK<Sf`r~?3y%PVOElq06;i@M
ziZ|#MA!v6S);NZAxM4h4mm9{%*6D`J5$<-wl)^gR;3SSzCc(PSphHQ)ML1|wJW(SR
zGF*i^h+b2p0Xo7TG8zFHLI+*224A&|JbtbXA3x7b(?BkAU=9MEoee4rL6;i9j#;bK
zNz((5+JRCZgaKMmhvFD;($+1>SJJf3P*c-LhquSTt;HnBLb5cSbWPBCR#4-Vl8W^Z
z_Ue`7Yh*x1Y|xvj);LF-VcNm&gA7b4MT4BE3wBVfl1?hx_%s0>x+VEwO*)Ah<={03
z5bdCGRg@{cL=9+%A9U^w=l~&T2RT+<6aO@lH8d=eb)fS`;Ep^QL*k%V0&PD{!jUFG
zyPMI{L^9qq0c+-grX*`&#fd_)2BL)m&Sv0sCNOFIlVr*HIXQ_1#i<y>1}TV9ZdfSb
z7&fq0Oa;vaK}N~c)bv4@!_|N;MS~57fR|!I$4<a$4RuBi?gX7w@F9?pNjb=%K4?Ne
zFCEmuh1^#Pot6Xb)dSZL$g^&s#XVr}!%7vT5dvr<8)Y0H*@uu)Mo$G=4%x!f4#Zcs
zN^nQUMuYONt&+03c9LFZinh8^tPUhOV^IoD=8%~*6dmeN`w$c6pduSF!~k_Jw3`EM
zAVap3gIgn@S`@N24R$qrVoHi*QD&lJUWzj`Mj=;8fJ-KLi4Sf0LVXE!1k5ss`=M1M
zgrh;iT%|F1t`asi0$Rxknt}m$ypgAuQZjQ>^FXU1kXwqNi~?P%2#Y+VwpMv&N=XJ{
zMN*<Ybb%Fo-4$qm1Y#r~l>U$n2klA#rwf$OhIPNN*aw;=gm#W}U=2=4;6npP1;Rt_
zd=@0;fyUmDg);MW6!f6!2DEAy+?Z3;0N)4+=?Q`lX-fqcjNr*FsA5oN1WkP*EiuT<
zOV`wdxG4>(NtBUa4sH@bqa3oF1?*S2x1eziTH&gghNHcR>ZD{yO^^z`-%(R1sip>-
zBf)b=ny_hJu&waO)zGvC3&5R$JST(5Ovo)AsOP~U6`dXnIw%8DHiAd*Q^9+yz{B_O
zJ{Qz$C=DaH*(plUi6bRk`caaDEu_hwft+v%`vB}%L_-m7xdJE&fjj}a7Yu9+s$~Yy
zjELUn179+khZ?2eqXZPOwPIm?j|@nJf$V|AMy4%jFJW$K4*0?~_%b=2bXX%(7j#b_
zNIkq{z|mxdjq7B99ju9?g@}FP8{~f!JE9F@qcdYc=ggyKSWsPo9PYR>EQ(=B<pU_N
zA$bF7kpRe0)PMwa;ZTi$CLqv2j$#syya6hjpo1egQ+IT7ENVFm642B{^cf)QM8RQ*
z2ysN02RZ3uPtD*21#Ly3r)NWGIS#A5u%t)anE|F5HGM)d15#rb+Al;^g`SGB<#Aj&
zL<wn$N=9Z%N-9RG$J2d-3`n5FB`CxVKn=lEP)Ulm&I^``AuA(DOT|{HNVyBNwj8-K
zgVd79X&2-uNJkf5^dUNzpoD4<xi!}coYj>;rw*X3@JUZCfmH0shQfjZlE`57HKY;(
z9cq!60&D6*9Rx3klwu)m6Np+{C3S6(1K}gG5MfXo2G%Bq1r@yYh*<1v3u<*jiglc=
zjU<g!O`TLt=p?%)Xz7^-=vs5o94~a_9hY8&hrzqKAo&im4;?bS3<^E#MC_RWbW0$#
zg$e1i!$TlNNk<X3h5)@P0Nv;fvIn{@2bv92q1{SorD_YEuZ78?bSt3?bl`GCbSq)T
zLJ}jM`CPc6;8rAfr4F=1gBi<6Q@XI*2BCv7n${?tKuBX0G^Gnl$EdwHa1S@l795A^
zpv^alC5fQi1Z%{A+9esb>GrVMUMpy;0CX-Bcp^AWCj)eq4rz;8;j1>W_L8hYi`CKl
zNjk~4$!co)%F&LxQHi=$vCxhN=-4vs{U_8lX(=Gxi5ki90c+6uYUlu%eTr2QwArnp
ziQL6X2Jb3225qN+%=pyQXe6R+9|bLR!`iV#p0P~=T{@NqI>8pSkQFxS2g;PS)=1YX
zDdiWW=7F|cgSI(>7R@JTD}h#LfF{z_)No8v!DjH`lT@G)XVB?ciJ5uD8mXYMNSG4M
zni`E%_!5d_M3WL$ZKf3E7l7s>mB9V5WUQ4VXjB7xc2r7B%mMc)Q&Fokh_B%Gf{H?D
z$&X^6rlvJlttL|Nr;yge1zjc#$~54_3pZKQIt67VC|p7(1>EmU2N$oPSye2(PVnXF
z;6$DbO5%`GLrD*2hA!x^01yYX%nB`+f`q|A8LJN3T@5=60kYHpRAqryG-f7egIX(a
zwUD*~B%^EATBl<yDN9ExQX$F^1t>-l0BTXCf)-jR!S9^WQ9wG&2-12&%KC^p3le3Z
zwo|f(rjBB|W;M~X%4%wgX-JDk@)FCE5{q>663dXMMBs}Q(HFC)WR{^0g~GxH5!Rs1
zoyDm|C5~w&sYM#lMZicQ3cBqAT&QJW&v4)YHdrGNG`0vErib>cU^Xg&cT%Td%>>X!
zxHTd-DS_96;Oc%Tl@yhN3eq&x>IxFfh@1iH#Dbed$Zmk1Hx0T3Ob0psF($K<!E*rm
z8pakiCI&S|<~7Dfny^9=QhI@osUo%*fus(2DF#jp;Hj<Dyb|cDThM79dZ63YLHEHX
zri1T_03{btm}%fmbg8!BA`!Iy7h9rJOjlDgGFP-shB&*X2FwQ)g^+1?Xw%5Z94-V}
zP6D2@NJDC3LZd_{1rfrKmD!LEQ--aQLQbYtUVe!NJcDRjK@Y%FNCZs+rNZVsVG*L6
zo0?auq@4lo)@MSi4@gjD*=9ngp5f)KwXp?~3$s9*>9cfobxaJ9MQvcl=o+f2Woc{c
z)MeGwXk^(MXzFBw&W_B&^bzO|C1?@{F9C+R4$_8!@n8#yVSJP}Ogdye8eEQW8wRG-
z7Sb)m(}sbm)B_dAkip+%qzsB&<RK|Rl&cD$YdVldbrZpxCra`QP|_K6MHo0naTu9~
zl3^ePCd47o%tMqus9It)BK!bJC@A*B%prAk7-$+4n&LrC2CS`(R9M4L2efJ*6z<?^
zFgHIX5wtiAb=Cl}oJI%Mn8P*7n}#w91Tju04P0|Vmtm)4tvl^O%YH$}H>B%<3N_GB
zF^JYkfz_iZYq67|JxypQ2evFr1+@DQ)B%AVU;yI7`n}Lm6r|x^m6XiHoP6jcFT5iL
zE)|sYz)shNsDQ5*fz{tgE4DI=gER8W^N>XHi!#$Q^AdBM@>41U5>Zx(f%oSoB^H5a
z2W_D}<IMED{GwFQHa}24aL&n0&bC#APJKZ=2yP#hq{0Rkp<aQNH4vwQnsBLkC7@a}
zKM^uI4)4K%`rIX{@I_+qZW}Zh;eLnJa^Th1so?z}V8cNZ@1Udv+M<AM-8!~)SjGkh
zI>~xYj?UgLLH+^p*pz@at{~EuZ8a=-(bi<?fKmc@h!}bDACfx}%^9>sK+t%BjEaNW
ztFSR}kYS*8At(#IK!OOPpq-5r@F=<tsNaWH<wF8R2W?h9sTO@a6BeGS&_oDz6ey2i
zo0Eqv&w?rgtttnFI^<l)U|8aT&C7!p|D%h6a{$uN4%nf(kY)p<v6xz%oLG<wGXrvY
z9E=A~2cTt!ka7~bg$Y#dfz5)ikA+IuDnW!})#0fN>|{`ggDr$E<I;m>HpJ>bP-7QV
zje>SaAsLU9Hd7FzVEK8e8jwYUr3LsjL7L03HOip2EW!}b1XGG0*4$<QDrKN?1WSa-
zdln!Kd2FMrpp6jlU_&%bAbW$X5thSyi_j)OO%0M9<U||Lo_IZQ1ZwIaNrIB5h9-R9
ze1V1mNIEektF*Yp1zdn>XoAiwLTEvZD1yrwWWx}niJ);3ofN&)ytMqH<W#r(<WkVl
z$smuSO&x&Smyk%tmf%zEQ;^~o+qfF`7=>jGcsm#-kOn&O6zk3@>`M%+5FSS~+n_Bu
zxB$pdv~@_J6pE7N!ILSVWkx6sRxE?XkidW@7kK2u+z-7>MGu;Z)zokd8mp;+dy+79
z@FE{a21S`UPfOE)gj*(3?4UacROpwbLI=7)(G5Dv1J;X#W?w|c(}c)^7v^HiV=&Vp
zH6oH??D-hi20C!z01q?t3<D{x;nLt-kG72!ZK*RT7JWgD7HDCEea{_^lmm7Q+yu}D
zJd{cSId33R3TW*=Y=ty5(7>q;B`Uzh9ELEwh=gZ}M6?<>+5mK^N+PrXgRW15het+Y
zG3Y#3@ES1KxlQP5V95}YK9DMIRIh<+0c1~s!vdaW!8};w1GYRGBX$sL(J_(}R<DBk
zU(l7%(54J1@IgbrAp0~S2Qb4j1iHsS7gWO6zGK*jmboGI8ZQ6Yqpk^oC`M!jxZ6Rl
zf^Jz3El5c$fegliZl^}9DFJ0gbOX>F1M(y|jUu}TRMJ8wvmt}!h)B*%fmhGi>Y_wQ
z9RY3<!m~HHNYaJY^Wam>QcE1cRRriDuVM{Qb_DO#LvBSRBI;LoszJ=MfQ?iFRg5Sp
z2U4oQTC2!D0*96g%*oIQhV!BBg*P=|>c9<W)WxQ7DR?$PZ;(N(f;EFNN)aV+^=qZ1
z1R8_@tHqwMVHQF9<DhyE+sfNixG8YYAonqni&7IyQlUqYXeeO}NP)u<J{qL}I&>1W
z{XI1=B_tnG13>G1utVX=0ACXfWBLWX?Tgu?08fTNti##@GK3s;0xw=bCwu87mlhSJ
z=9NGeovNv6AkJw6yA@VGz=9FAd;qmVz$GB8;SI_L;Dd*uMYT>EdKv*~L0&!ywgn#O
zNX=SMZKk6LJ1fyT4QeyYAvmU~lW<H-<L{+tS|w>fcMXCDNWpGGO-^tZ!U}V^J0O__
zsR{-U!lWbTniOcpfaNIA!CPu-AS<o0w>QBKfF~1-v=5Pny8wF?noed&q{Bi2)K&tO
z+sGX<$SDtyf)d$>U>BjbS5fmjvK+ETL=g!us6Z(Ma>^BCvfK_<6Ql1{f}X|(QH55*
zg3iB#ov#EwMGLaU0yJ3QS?phyT9lTPU!IwluBMg<NmvjYVf}V1B_$o`=}bYO#ov%!
z1Xy${;?fSff(AL{z$G(Mag7`Z;Lw9dH-^*E-J+y~Za8?OB)r&1HX0JXkkyfT;A5u1
z{RL2QrwBTHI<ZJ032}-HETo|&9cXbGw$tRS6K#|9z>DH_!N)QsCKYQyj%3rU1^Wdf
zpb%Doq@WQ8c8N_QxTt{kePH1a?v?B1rY07b7Nx>HhMpRcd&iib2A|OAnO6cS5y1tp
z9w=;;pb@JJ_5o-D)Ii730NSlbAJ~C~2>8$`$mukCQ2pS90XjSx;sKDy(2^E7EO1(^
zlL(oDM@@NX?Fw+Rfd>GxCkYr1mPYdpn%U^Vi)=b1-N1d1tpc=8)Jq1<$NMGbrb34Z
zbm4x{g&M8|2^>fuK>ENMiIAaoP_GNACeQ^L2Rg11oGh%72RFgGLB#^JtOac(0G+a)
zgtGM-TnR%)yTMG@DsV6dWt<y2j}MU`Jje}J2V4A&`!Ef#GNiF<w8=lPG_Ebzpx6SP
zYn%d|MFp)ag)GF?fC+)dZ{cUL)YO1i>R~%|1-@z=G{p#Z4)UlkV#*$|GZ+-AC8<`5
z`pVFmp;S#ZwN#{q<j_+$G&QXuvp9*M`Djq#hPrA%2YkJN26#OSQcD}&!UGT4V;>WP
z>O^muBDSY%Rzs|YO~rs*fHZ{zZiIjvvhcm=X*%iPv<GV4lDrN9IrU*%Lk*t-10S>j
ziW+brm*nT?lw^VqsZF!Ry0h9^BekYRQ9mWMxTGk*5_N4fXzVH#G-iZh9CSG}bZ{Mf
z#tD{*Y0xP}p#Ck!j%n~J8c+%Y??neU#=#*28#+c3NzF@4%1K2Y&xYQUholC)u@-!a
z3X&kK_CgZM%tKd{nU`6jp#%#g$O*An&qyI=AQ^Hza%O%WXe7BHCowq{)D5yy0v!^p
zQ=FQUnp~1!WCa>zPt7d=EwQjtw@Jw?QvjD)ws2P{6y@inBDi)~)aWJ_73G&J+1coW
zPN&AE09>)c6@Zng>p=Tk(4EK%kR+;8l39|I3Tj@Yq~;`6S{XoYb5{gimY7$Pm<hUS
zP0>)NEHkwnbhemPHQXmkpb7@wDzP%CMQvb#!WL10gHA9^0Z;vc;~f^QiqPo@(Bcu>
zBuFBF#~f%K3`7Xp=!aCo>8Y^m+Cd9ez{aV-oCi?>RjvmURZ~mUNJPG44Xg=W74(ih
zbYa9AJBV9g&VvpdU?_)$4|FI2T^>551xt(7;1O?7ssN{A5Ca@9R*Hs@m1@YX(9FEz
zlEl2^)ciCBL`8@=lL@wN9A+iVC76c;CcvZ;6d;Nfa!ZR#6p~UEiVIScGt)9tQxwWG
zQu7o*kqEv-D>E-$K?%}40L7KIl0tr-LP<ud0<<LubB_Y##CAo{>0J3m8lYMmx=tNp
zQ88?E6zSMQ@N6Jt*|~L^uC6ttXPj=E8l4skY8S#68KrB2BMue=;PEbS_~{`z4H8Q*
z+h86=9bSP<<A7CaYC`UR&P>x#%1z8GP0UeJv`vRNA;VS)94kt;prvKtQA+Tk14>qq
zfv(Iv(DXZo8t@SVFg5w5B}!;rf&4s;3~eP+-3+!F>SQnlPZ^+a$RyoBurt9XX=>I&
zn#t&)2I+~!LxoYcsDNVvDxp&iFIu2Mh$!zseFI2mB`vce1XR|bH=5H^VM{fN5#@y@
z>~=21R2^#Zf+z(Lnh<-9KutNs1~jl+k*tA_2f+q&z!jV(=t#sQJ#aCorly2(PzX#$
z1FFWh8Z=8{1?B00MjBw8T1}lK4ClI}=A?qoIrN7f>j7_uKoT4Hb}{I3ZWOnov^-&P
z0a`x?ZU=z<1`|azPZB}%@yXGNv5KIx%r!u_h}nXswb9)LPE{x&2+Fd_wxGMx;e`#@
zj$}kZW1nONI*JBmq(&3bvO~&@@O6xkwUVHtRM8Cs-Ti_*<O5ETppG6|c!3W2BGOjS
zd0aXuK7ej>2A>)QEqbHjdDs?o<b7p9sy##mbSfF>Mlq#WThRI5$$BN31sa-qh(Qm~
zKu}E$=)^wI3K?(-0d818hP#sW5F)l9MVeL`;EnIF4X+>rb5rw6OF-Kd(bVcB!`eWw
z)P^PiUZ?=G2-XxrI{OSMQGx76bs*?$Do~n*<UnZVg;)eOS5wm}8O#8++E4~yGmAYT
zji->JQk1p#pz9hzDJD@N6I367PCSDs)P$ZVuLle6MA#9kiU!aW4XWZmjds}1dT@a>
zlG7rnuE3KR4M7P8B_=d9!AU{EfY>AkvVm|K0~KXpgF#1OWrEWx=tvb<0!B__AOkTI
z8OQ)^i3}tTPGlekMj`_xO+@s=N=0baMfBoOiWgWa1LaQ0P4^nG6N8{_OxXA+tgMGt
zRiM-3K?xVMwi2|81-uX$TsFa)7oh%qetBMMkqc~P53G>`9gTvNR7lFf>+P`b)~Tsc
zOo6S(1X&Ad6zQZv8m!<F26pm8dTL3irwe3|2-Mbs4g?jamOyX41KmLa?UrYzD1mlG
zqqrL?1>TF3k_x&nEh#l6sS=?Omhs^o7SO^c#3Vg<9s@EWl3|PG3~;bzFf-u&97t0E
zLl~*`3_fuJtQk4TAZ-H-eL9)8`Z2}!po>xLV~XwdGj%{K7fV2Aux4mlXQ`=aWY}iF
zHza3*PIaxR0e7`PoBZKt&4Py4P%f^}Ny#iO0QGZ}l5+Bsvz2O*_W5OCufxF63~jc<
z+zCxFsYRgc7YhoI=2b9MK+Y3GtOZ610jROC0D(1*LB}tGbU;=^p(J=v;>m`jn)K9?
z0O;K|8k#ye;3GXibL7RTCEy_|om^xg=%{pNnno5RYvtKy=;ULX1aTj%>!fL&VXKss
zUs95vt7L1Np{ACt2jOYw+T}x;pdp+BB}hjXs-`5rKsVPWA9Q7jJxn|7*b=A`@L;EQ
zj$OVUcoVHX>}(V8Jql1YAhvFfO+NUR8GGolCsr9csAp8<p~NA0^K}8-U(Sg+$>5W@
zQy{mYXk_SQ>*VO<LUR@99>>Z6SZ7_MKqmu|@(a-mqD0$Nq>9}-718>J6)50gCh*b-
zCGAx3$cCm4vL47t1n3S0$O%lKyIK;<QZ+!QF5{bZDakBAYJ5O)r#*Ch3S*r@A<jt_
zEJGNYR)wIe2vKT!)Br(*0{E0WP~w9uP=hpzK!Z)-ViJ6f4<ym0*`^?bAc;-~dSMZ0
z>^lWA<PEt*MHe(Sq6r%8*2#d}X@sc+lm?W*YOFJh{Sy5&(m~@=>EM;eV15ROp8?{7
zuWQk^P1k{p{cGE1=)mq0N4g9M<UAe3U?cddBE(HBiJ*Z!c(DPVO(@DQ1>ZYbl3$<+
zxn>7N800|Em|iWY{{USl1>NBeYJx%1Qzmk#KmsZYSqKtP*5DG%7PJW{OVKtBv<VxO
zg+T4o`~vMX-7JV<i2NT09hQO2<D{mzq~??)Y9#9<>166;X<BDPG7c;_AY3bGFlB>`
z2G0%V*y@+$7t}y9Hgw1}SyLz1Hpkvb3!+IkRXfuP!~x~(H0>;%Jlh<5C8W`EB`YWo
z;u9t76lhTd+QJGhQ=ntRj-atCja(g2G(_jc>g1qJ0w60xBtP(NM9``nJo*JXP^-9D
zBN<+9fRd7qsezV;p>CpnlBTwjs*)x+ttG?CCs0HwfoclWt{I|YMOX(ZAt6g8ph+Ea
z8X2f#0`0|uM)ouFQZ$tGpaY1ykWn}2X+p4yAfqHV#~yMc59A(MrC3mqfYwVOj@bb(
z9soC?^9vLp@t^>5t^&A}1TCmRZYYCVPYAanAGMyMp;-+|bc!gY6{voPRf#%CB^PL%
zy(|@c{4iwyA#!s8X+b|?6dX~qK__EDB?7!H1KH-Hr&5wx06MV~-f{!E7c~BkQjsB#
zXk*lW>7et~v5m}wo28)kE@~A3@-t|;3AUva$OqLBC_Ph1D?L+S0|`jIIQU5!XvrEj
z`hkcylr#nl0c#D|Hd64oENC(icJL|urW}|G(5QtjY(`BNs$LT`G5|T90GmAMHtv#=
zA`K;|a?o@k>@)(15M~BJw5^dHj~svLsU^@%ftt0DS||vuNt)G3wn@<8QMkWB2`L$T
zxrt7St&)?!OC)4hA>>d?@bw8et`f5b1-Y$lDx@6&zETZQy4UKY>QsXp7*?s!8Ddbq
zn^vNekqVwiPlYyObV0|!7SuuyjYzXiu}5h))><XO$}>>X23-uDpOa&iVh`&RV5|jz
z%shtV7u3|i)qqCKp%crX3$v0CY*24017s=0t%$W^V7`VX%((~&i2F4(Ypp>3hjytI
zP<@`RlcAG_mJriZOVHayh`0e4v!J0PNbJIzZlJRa!NCEkI+FAtmP0B-Xzh{&34eVf
z-DG{ET3Bl^5fY4GeYz=lHGs-HP|FBOhc?V6eIwlzeIsP;y2-UxSe%5ZP#fwnwCRcT
z)Do<fCzh}PCCyaOsWAmsi2Lv0%W~jz576$NLMpgUh4$=VwE(O=4PAYNE)1K(2VLa|
z-5Y|GcOZR1ghil1aeZ*jPy-4yXpNl+J%uF$(p=C@(}i7prjrQ~(nbhrr&wp$q=Q-j
z;Pa0QY{6{Z4695#FiSff8pojg1X2c302kKHge*@2Ulo`IyACo<CmYJtPSZ}d&az2|
zG(aF(&KAPc&9ch2ONV4eu<0N_K;^X4A*o0=TNApYP$3ngNC6i$h<JjQqv&Vh!_Ezb
z1~oi`*rIIaMlU{VYBaEPc|k*VB{`|~P#V&y1zp4h8ZZMFo0yp_)YApwMo_CVUm;Q3
zwysXYFx5;8(tu3NOUcjG(A2ap&&bS4MQk@sPc4BCF*sFvrhpCsg}WX#FiJ8D5O#oP
z*C4BkKsB%$bg4Ip4c&JIA6qPe&OmDF7%D<~N+4CxT>_dI^F`q18)zs(TS*}SrWbYU
z2sApJSzMx!pQeynk(gYPQ>kF60BS4dq?V=TC_o2aK+{5yk_CM8IJl*N>LYO54%tsA
z$|15~=cs_$&{_mMegfN>1Z$0f6`(hrAcI247JyBI2&aH<T0-d!LGQD`t=<sT`H+bv
zSLmcQ(m)xiEyz4<1|aN%E<%OO3xMvb(Ewd3l!UrU68pG?rViZ)-8FTR>@|{ML%yI@
zRiJHUXaYK*E&E8r$r_sW$$H><2#sV=egY2zgYLty0%bSMp?CXaJ(v<Jghte0gsx{m
zgd?<&04H{9l;L=ATtG+Cp~Eqt_A2sD9HceN;057&O4^B#4nA}pr3>sh3b=$$A~<n_
z8e`zB1#f;s#35q=iF%M!4CldW39vvd^m1>|2xVFxtdjxib-+2W6-Ce_k8Mp6Op5TT
zBB)B(x*}3HfWl|&zyS)Ln?g$epgI)C8kK_l0`PPT=#WY(tWkj(N3}I7pgC|2CAhJm
z#VfFbuMp9KQD!OyK)i*x91t45dRfIvpkqnUuh~LObfV0&g11h?v?5)=gg67S8a@UK
z8(~AN^Z?I}E5UE^R8rD`72l|fPhh^oxA+87p28NLWEjI1u0ZudJ0Ny8`WeP3i&kLr
zpfOX>UQw6{kX0$Qph*q*33<eM9j+WjuO6rlDk&-jEwix&9gqoE2I{m!PXi!jikaMj
z0a(ie)Y68{Nr18~WUv4h9N=by60w5?&<(;c&9JaUI%Qr{4_3xNjy8fE^#pDGfN!+7
zhxH`kS7;=|2PPmZAwh$<sTCzku^P#s-ZW%<0J@SK)O7~c=$OM3;1j?=JN2=85NtK*
z#<N6N1r75AGz9d(#VuL`ij+Plv=M+D+^DqyLI!(<03XYRwIQLQ25)sir&PclYIx9N
zZz?8%l3__|UWq-N1!*pVuCLa#f(xSg7o53}T}OJm2W*5AYNY`UYEbIS(}Qwgl?IfH
zt<r!=5w0|#D#@%gz$bWt>kIITTI3xrpsq5sI#z*nrJ+q?+e8h}!Z7eQTiC=LSg}21
zDUww(R2wuBQHqo#M6n6GAPu%c$QIJeg6e{AhEr0~)K*f^%S$X%$jMZ&1D&`5b}(e<
zv)DE|7Cb)$Rgd694kd@|VgXm@5M>arK*mU6d+|~I2U^Xe1W^VWGlQ^-3o6m}AQlwm
zC#Mz{gH45PcP>gzD@rZSfQ?E)m0%neg`BiVsHYJw!CF%%tEnZU-NS>>0j-Raz+ntN
zw+XW>0$ppF3_5jAvo;CiOd&+X*;Ye>-pbIRRwoJRsG;=K63DuAXy_ufK9GHk8rq<#
z3Wzfyx@u~`T{F<V&fsVUr%QB2I`9D<7z3I%q2oCaqd*skBRLNmImme&)F^@sE9)fN
zLWj?lbW&^$APdGI{zN1x$N^~xKC-*P4O>t>ha3dp9eA0=(Ce=u{()$Mx;NS&7IfTJ
zvaJ&AUU881SQJ7%7Ls28T80Br0LpZbA|1?!<s(f!wCn33zJ!bogO-#hL01YvyaO8H
zg!Rbbi_G=ol=Yya8la`$pu@~yWij}2Psn0H(6Bb>N<ri$*wN8xpz{_rK|>bWDLSdK
zu{AZI@v&M>z2f|$5=5&W)Qp3zF#{FNx}ffSE#~ptuwlPqy@Jx>3~>4dg_;iR&RJw}
z!&uNf5K5wi=0WsWPlVMpsHqV-m?4WTVZ{+7Eg-cl(Bc_7D~GCFJ6RVTHE5PV2Jb){
z_#vqVVs<fnF#>q2Z!v5+0&+nH8h8Sm2uVedbgpQd3?0>iCUMYiGCNz?atDQUMO%$T
z+qCF3==g%JVJvKk2H5Pxl2p(RjLbBRbTzdk8_;2Ju%R@tU0_A27$qsV6Q`kR4O)Q&
znw*8C3F}1A0@8Fv+qCFJ(CyfEwy9u-2INX-TU!uc+c37K24qvBHWs&lbfV>5uoDtX
zkXAk=!RDfpOESw~j)N{>hPe!s@F5*{Jy_<@hV8)shcW2T%OubdmpahHFOigi@&a5Q
zbcZjv(u16eS*)RylL<P-D+M;s2zFqq5@<gJL<#6*E9g0SkVAf8TesEJG*WC+5NDs|
zWWrC1!)hYv+z0p!H`toQ67W4CkR$-An9u?X?0w_}56SxQFwle^OHmw}SCW|n&QXYg
zDR8*x5V|@NWt$D$A&^!MoC`Z06E1+#(t%!Vi;yJT)`6>qwRW%^^N&(xg9|#y(Naj2
z5&Qu6;(|(BXiX2gnG@@gNlDP5J5Y}ie8yjr4z&Cv_vC-%x{!q0za%k9NfWJp2Z=#z
zcF0x`tfwr2>h&Z@y$;C{@UVboBIxKK_>?5#?_7f%<b&wsVP8H5E<&Id=zvb^gkPLk
zngcym4LP4^DrxGZ*g}I?306gc%DoiOnUe6qV^H=4D+M3W37xanK)x&kez2#GBK+7+
zNVWy_Z9x0fG~ic|Kt`uPSA;|RdEkteYL$~%T%wQ&*>?rIs0Y+r0;Mu=;G-V~6m1Y&
z3!0yTPrZTy1(#}2Nej8h2XR7R8fd!`EWf9NPF2Kuv>^EWL~Qf35T9g#TJo?JHlPv`
zRK_PE7dlFsI<R&+*smZ389Euzq5-tR4R#o%W;Mcf)u2IWE2OhI!GTbe3ffHrJFpZ|
zkAv#xqRjO4)FKV2CQwL#SLa~S0||**(D~me!@n@6Axg6(ofMr^q`S@2G(dNoqjZ$P
zno^aZryncXDZmR@a7nCSrvSeX3OalU?P0?;f^Kt$YKPSq`RVE4T|tRS;GzOD!3$pE
zhjjeBAt>??3;E#YffE%;CK+hzWY}wff>ICCI)E%$NkZEW59-gN_#HGzpagOS!CD9<
zHNZm%YZU|;&ww;FN%aM2SE2@F16sOm3d9Uhl)%D9C&M-sG)RkW;eZBczA7)hBm>(O
z>@_utib&=`JPvK)Xj&t5X5hT5J&m-*25I11=}|%(v=AMoDlAD%f>eSfiAk_-eo0~y
zO2r4=YYGx3T;+kxNdfmUA@(4(fIz1XV;;2$y`KhB<!kDI*TjLwBv4Kg%7YyUlvJz-
zatC-^1=}gopsX6Jj&TbQUOfewIXR$Rt*K<(ibH1In3$H9SphDkv5#M)ZlZ*!MyWTk
z_lVJNltDR-Fa_EGg|_%nMmZ2e$?$97RUlOvv^9a&-hvz&32EMdDhsd+ks2?sqd&lP
zDR^r?Y~3k1X=p<9gU6al(;l8#k^w&D&L=;=0BRPPf{)07+XN6Hu&YqEf|lkLWFjAe
zSO8jp1zqQfH0FZhV$i)Y*iI7+at(G3u~h<Fq5vjAixZ(N$cii_9YnywM<EP!AR%i7
z8GXVScm(eZLDV1c1s0&D5M<$$9yD%{JAbgg7;JeAv=jyv0gyf$Ob@It2Wp{!`nllF
z7<3gOIJ&@INriXDlI>EV%i$EkcYPvOcwkcvHPJp5(isJZw~a06eBc6mMMEo?W~)Tq
z6g%5g?Q~>8@G6K5a5O-#8ihJVC(|~=KGh0ricXeohJCtK60CO*wNOnh+0GW`P>5KH
znp&oImYr>)ZVF;WG5QV?(3%P4GyrdDg6GD;K15C<DBVnC3CQ>hJn)eV-DEv*N<mt3
z3`sLekfoW>C4;c&f#fOhunD}!4{eOXqZH<M4Cg@>ZRjSVrYV%vjFN#6sZ6sPX-g2H
z+^b`VHWrOy1G1s8%@**0K^=X8wEZ9hTJQ`ET}Gk-YF2}N2raOn-UqE9294E#ZpMVJ
z#L`K(g^$4@R~xXTj&$Gw_z(<DxD}e#u<{qaRxU+NO(V@V)iy;_2g|ySRM7ep+Z2!k
zApKC7&p;g+SmHrk@da9tn`WB=btk$GXo3fO5;PWB0&3Hy>m=!<>ZE~phJa<DnLyDt
zL$ex^vcbaOtOXrLfjI)adKH|PL2L5B#%DrHC?#!;40|PACG89=&^<m`@Kf?Z`#_V5
z^}x2^yK^Z^Qzr{+%O091AUObROlk`BFl9ZkBaycQ*n{1Umg_V$!7I`rg*MzT`14RE
zVzp@|d{+lFW9dNX)D+N2JiLBU(yWCQKj6&*V3)vcgEU$-zzf9Eb(3_{Ky7<)2tsGm
z!9IhumB36`YYEK3)?R{05N<Jn)!`W+KsqrRbf_P+JqsQR0BZ#|@3HmELF+z1o&;qi
z*tK`?Mb@^k)z&pN)wST;uN2`zPT<`epm85)o`a@eGzFSy+CuURkoA=07r-@yfEL0-
zTY8`=oLbPZC;UhYSiaE!*L9FW0W|fm2?=h{dBdRN8$Cdi{)o~g8Mb}^=NbOs#AXE^
zy-G}ho;3{ZX22#u(8CSp6a~--V>PJDk(yWp-^K>&r+^2mU?QMZ$F@nJtpYF+m;oA~
zT>;>3l#&&Af4-8YUQ$kJk%p#Do*radeo0QHb54G7s((pFYEiMRt*xQ~=$uyMbPv5c
zLkG<vpldCmGmL0GI@pQ)nMnOE=y`h?@V!Ey1@w84y(uoBBOD;T9nfhbpl&!M$z<9h
zb*-~(tHGO`txOFJbihlO!TPKWbg=mZd<JqhObfJO4{jW4D1nVp(nK}{RRP#^U6?Yg
z#-nNgkIv}kgToNCb}Ppg+=T#TdsxCz(#f?24FP~hArXRkh$gV2flhU;PL@uxPPV3X
zCM0N(M*d+bO(7F$UkxN!Yicq;6N|93FrnKkL8%8E3`ofVGY->mCY=l%u?xG31XSc9
z?FE21MF$bXpi6M`Ap3MRYc+K;Nb^x99v^{D?}sF7co$r^xHJiTe*orO2&l~px-=9T
zW!5R^4gp<&j*_F2LBq%JdzR4;p4WtKHr7eeE6z;H$;?YH25svAou&l3mKjqyXzUBL
zQW_~9KyFF|4QS)kWepnjLuwBpX-<T%JwOC6s4&w+y*HpJH8G_Uk${lOZE*UwRf4C&
zSanT!K!OW64Wyz`2hv5*MBb&Jq*<+0TAZo?IzA`4M9EsIG%qDJEi*4QMG4-9$<0qG
z%}G^LgV1`Z6`+GyitSOkwn-XAsfDGPMX4G}S%sykMU_gLnpRlaJP_m6)F8B8Vs45(
zgsBk?(-@27LU?9L0-awDI+rj}FDnpazGf}B1%#p&#V??!NkWwH;2mV3;t1Y0MC#l@
zTZM=`TwM!VQIZE<W|x?enwX-OlA4xSnp08?A2`fSEJ@BtErN82pa$qc1)*y~pgc%h
z1T+DNt{fr;RSn@l6@w4#K{XpPJp)q=Rsc~9+NK%|=7U;C`8lbHd5Bgc*vl~IAyk5^
zGk8ZFAr3k{2&^R|Gd&{*v_}Em%}5eZw;+i?98{E=mx8VhA_mm~;Xo9Zf{&R+3rDCR
zR5_FfQ4ifh8<JX4f*L+Z5>S0eA`rdB`K3k4(0(s0Odw(qd2m&MW-6#sgUG6Y3MTY1
z43HRf$%hJL8B+*!TPw^0n5aFZ;6emCbmuN|gB3hX3_lk;C$qRDH4nC+0wm{=nOEYU
z2R^!-P+X%aM~!eaNzlPR;8;%tT^IySOJD)GClC^lz(`C<@hnNrwN*5%wMJS8VOx!~
z4$dkGdJ+p_gCnFt2J5GS0uMSWiWrp!jmK#yl_lnYt^)#%EPx#XZ(Kv9p(Cg|iO{e|
zq~Mww_(6_fjnKpcn&buZ;Rcl@LZ|<bl8Hu=W=%~JXkA-kUON0tVx&;fNP=$-0GkG@
z6QH&rJc>A<HnA3T;e0SS>7mGj4S*y+TacoR{BndmB%qRXKv$5Voh1YJ0c_cXhNez6
zq<;$8&kj=nS~&vgi$LbeYvBi?BoW+N4;edv=tE08;2RhqGLXe(XopcDYt;dl(t7Z$
z0Wk`klhBU@hUF8eX%ID;d7z!>kbA7a;RW-XCS-dhxQ~?#>OyNLLwn-dNsyg7poQ9L
zC7`7j8TsYNnJ5o-%S0{Y*c_xP8F>g6;s8hlL()7b*W|%+XRS_7etvdo0V2whz~emF
z>d+)LHArvUHVF~{;40EK2@+ip4vO#eK#5Zmv^@@DGgt|9eBTDF5|%M@GxK~>LDK}#
zt}|q71K6bys~{c#+XU`{f)Z3gQGNw#lLF&>vSM(0g`P?V;XtAi>=e`kt)R<Hz)po7
zX%5i>9aDfRfEWOgfn9}(WjQ<~T*LE=vQvwo*&A61`7n@Vu${2RsSea0lqdnU10d@l
zU_)J?<C)TnQVTSaP+AYrxKD;v;@}nsY}^b|IfJ&&f;OCi!n>vhB_5#Vp*{HISCG7&
z0VMok2^QLEffZb!*)3Q~hmFah7Hyyu1NA;EvZ0o!sU;!S10m`YNQtbeqm-DF18M+d
zWER6EGfPr)iy;nzRK6NXu=X!FY3RX3^@?*clT$UIC*#2^25Z-Z>43T$dm^jVfi`;(
zv4C12BNw-cuo9^bv`5b;zdW@Fd^NKs<eD)5G)R&Gr#Zcnd?W>$wK|YEL9qt390wHP
zpmH-hRwo6tKr+=fI@TH#=fxSBX(bw(&=cOETjY>klcZ@48W%>gg|IX1>(a0&(zH*3
z#88r^RVtj73}eA|mnDOi>n10bXn>}5L8TGA&4ut4Y!41->Q@KWuT}yby9iy%uB54x
z32C!{gGmRp9}Xp`;O@&r3qnxknrsWZTTRCRbcZLb7|GBpNv$XWr4rB<a_CAY>nuB6
zLu*aY5{2T@q~eky4FjDl$f`OhKMT}82KPlF@>$x+;1vNHN;aS~KJ(J;Z1kZF&`rl6
zD^fvyN=V_4*n|c-VHecM^UF_3)kx9QgjN?C>6$u8wrQmJ5}L6yU?#wpO+qhLgj<rN
zsR>;!UaJGi4w$h34rm?7dN-X^TSY^pLIo69D60>XbkZQzIB4=0IiaP&lDz_Gg$?46
zEl@UtZKr}XfONo1A|RdQL?x*ElJ$_9+!~<U#nNqUk?w>6S03Qw8!)Hik*~%<EpO65
z5eYhT3{*7LLQ5V*yGl(>5j0?(q?eXiR9vEgG6exzWC6On5nLkTD)8VMA=X0trwJQ8
zgVwesxjCRh7GzK@?6e$E1R-JqsbQs;mzbMcQ<GS$lb2dif=~j>GT_M4gP05nLPRSQ
zWn>ImC_@G}L1t-y*0Mp?^nn-NK%4H!MuFDAf!1Pz#uzYzxmE{stq#ITs6`;MIfR@9
z8b1J;r2$%m1$PppMnmx%$U%CbH9Me1vdKteb}--7>OeXa2v<R8ap5tRp9j5U2W`1G
zc+e4C)k0@mL8FgoYCuBBO0rWc3yM;Ui_w(9gwd3i7GSC?MV*udpROESS^ye<NKJuX
z!~#0{7?fP#{d({ccIZWdn1+G|f1!4RDQFOad=8#MM$-Wn11p639O)cR9ngX*)RquJ
z7DEqs*Ps$EJz!a=o?0E~2148s1<697^+@2+2_^98IW)_{V-unX8v9sPfcF!EBUcG}
zuMa2|VQg4bA@NH=hdF~ooA}rOT^9q34ww_c9Y07G1dXVn8iw#TJl7x&_=EWlUhcwf
zkb_Bp2GBu=iex60mZWMV>L@{qe{0afAe_A(nC9rjSn%PQpz%-?XTT;O!EGMR>f-Xu
zlH?4HM7`|PO6UBPRL$z-#Nt#1ODiyCXbho^%&kDvpJ3lXcYtYVS|=5yCT3fM6&hPu
zWu|E)>VaD(-l>()%GVlG7dUBv7rdaFU}8X;36R3AHWBkq+S*zjXe=Q-4qGA#TAu{U
z%igJ#0U$akwIDUI#I`O`FEh`vs3@^gBMBA~I?*NuI>r_{mO6&UI!5NP&=?1YTTP9L
zfub#3DWo|H3TllcXp<7s&Ict4SmHxC26k~2cE>=Q<6zSgHNk#C?wcjzj58AhNMspX
zKxjiVC~Xd<Ev%4Y3=zZdBN)J5gT)*;Z$L)sP$SC7928NI4f2>eAe}U5(tr*%LfYl<
z5Wx~<;Iaobb=B&CvomI>frV33V7Ud#h4qBt{REKHkOrBc{Wqv1l$10<tF3cNi*T9`
z>K#Ko2`&m#K+|kcLqJC7LD>-h*6M(ZR}{mD^QI0LN<c$$2P_lofjtLGL|`|7H+LiK
zfTd}$9N2yEKp>@B#&Q@ewpIYx7I5K?Z~-hKgXN$uFw}vB8rbQnDbQfT5@faTPCRJ)
zZ)HI$xB`GoZo=yW#IScVqyd^@n^=@y3OW(K7+P>*+X1DNo?7AvY0KH#CPT6(N+kl#
zrRWo#pdJ^t+jZgYQ3CY=V5=h#`#(W@wvcYmMJR_}p9|fv1!~}8bFM}TbVS6?&>pn!
z2GqXKsnkf*0T)R~o1eg4TF6jUijJYCrWHuF26zcOu3>)LYRE8!RdlQls8wEUWuXJA
zw5-%^N^@X)kKqnhfK9=G*VrmS_c4Q7TS@s9po8#BbL`Z?=2)rQ<Yd~}Br1TGaN8;=
z!_-1L+90Kgb~gGsnRe<r@R1!WLmlKHH7f%hM5`P$UXL_9X_cs#2U^Sq9Vh^e>w?F$
ztqd?GG>~?4!<HYw{i8>Cr2$+m^d@4|IV(_e3Y?UYXHXJL5+U0Wpvw*lit@`cQ$V*3
zz>+a&<s^JG4&I7~G`>O2Ur1tvTMgR1m5i`K1GX>$H0y;t&!t&S?o3pord6T_wh=wZ
zB$Pdbg08;Pi%Kmh$=9q!%+)2L&9A}yrjVoo_Z?)lzcsFdTQxv~>!@YC4yf#btozf{
zOUz2F2rf;^%`5>OT2TwPAsN{Qh+-YkI*4TOVjxAx^&!!qptJ=|xn`Ec>Ogpzxryni
zu}aY6d{RM^o1ldS#U&a_5Cu@>ko7&FF$2)~I-n6RSRI&b3trI<Dit7uETD0QG`-}U
zY};fVC9wIB)3quKQb7kbLpDb#g3ca>j8;czf>p;?*uwU|Md(08D&ZoLh=cQCeg=(s
zRThBmCjcK?05J<v{((B+5I$%m1LPF2;RT85sS&!M<<e;-NH&0kBXz+i5!I&V6sIac
zEC)FUBo(2X3|-3tx=IT}A51bNzrY&%#4p%5TQC`40i`R!YZYsC3=Ir45wQq5Q4icg
zOv^)xX}y%xq*CZD0ZFz>(U2KeJ<yf#u?kAs=*3@Fer6t|^n+Id;3Zv<31QF>RB=9N
zh8LBumy@3k-P8<I0ull>)u0OV3sQ>`)zpxAdIkB#C9Xw9`9-+IK@%w8LsC<1t81-O
z_0lqPQWFa@ZQ+R^QA5clGq0euL;;*Q)j<l>_3e~2LHkQJ3_v>*a#D+RQo-H@6$l8e
zP?xyn7v;JnmL!5}$~0R=MR0N`D9SH@RFk0X3r2`45<F_Jm<CO~knwYn5@>Y-YG~-d
z0}f@KCCEq|svw;Xg+$Qmen|Ax)L_(MiS~(*MjmeKpv5*Kmm}PbeDY$l2CSk7t@pD{
z1np!=%mp3AsaH~zn37qNnV*-KqY1nALJeFY!?r}~WPnCUK|`mY&A;h(Db^|4+L~$6
zDY3R70=^<nKSo<WT}Mel2{cdymMJdC0bOBZ3tEH&8QY9bNlngANevD1bk5H$$j?j7
zE71Uz2AVopB@AOVW8q_A8HjYBu92cy4RR5v5J|NKo!k$LRh=|j1M4&!Slw@(rmd}+
z3W^2LzLk{dv{>+{kPesy9%BL*cu9Jx6(vQ9pkx6n5t22K1;INxAx4AB15kMeHaa~z
zEmlnpZUKlJZ4j#ira?PyA;mX1^Mcb`24WEbWFb%@B;%%*lz>*4=p^ZYW=KItG=x+Z
zq=G7F=%fY6X&`QLVsZvp9F+X6GHYs-0{nwRlxj7tlk`dpa`F>X0*dm}LA@~0G1Ph$
z8AXUB0r47Wh6kKrpmu`PXuv}`8EOjXIDUwEprInjI(YDWb83->QUTNor1gT(zId{&
z0jM6)133iLok#>_d2spy-x^<%Uy_((od|81fzm)}3Fr<b(A@`+g|*44nK>FM`l(u=
zk`A;84&n%yr!*451Kr7*wK|HRBj;;Dqr>2A4w?@E2XU5dhF(%?T7FS#aB5x(v^}eU
zEQSb?M4e>NvLH~=2nt|(NE5*}30!)BM6949sXAF|YFUtC5|ZV0KyHA<o<;^znVbR2
zYp^;8vbGPDN|PXIproj>IuTT0f}$9*_Z>76Yl|iZKd@1=HW{>#1Y~B4hEj53US58Q
zLV9Y6LS|Y~Vs0v`N$`tztQ3^AlQnBI(=?J`<yMk4$ZF6$2lR{(*unAkaI0Y=R*7)y
ziL)K95p1mv$P(BfI&3N<2|4p3ZBa|o(5wbI3=~9(wy7FLntI>`P2img)+vw+R#O#h
z6_m6SHFXlz)Rao|KxZC-@BK+l0UgPRI%}b(hE%C0>6jXzhG1}NQCVt{LSj;WQHhm;
zl1{RYl7a?k?*wS9SVsx8!!kp|QB$W}O$}wOSh=Q7IkYCJ1=ml>wmIO1b4D8QjhH%V
z2r<yGT7I6Arga7CfD=ryPQIp&hGJ$-jXtPK)X&rdpB|s7si~%ht|K?KBqKjXNe7bA
zHFeSyZFBWXi*hhkLM_z+OKa-n>J?{a7P#gm=ci=mrGu{VEXqttt*OaWQ&U8<wx$N+
z8;$BzsB$Z%+)~i(Y>7oB`k?Hg3(90lI;nZd;DQIMY%R!6=xJqYY8vIpQ?aldp`lq_
z2I^5~XjEy|>g4J{l|zp<O$Svqp!ATLrjd(OCd115EYLB;$P!3w(0WP#^1Of|P{X67
zQX>m=^fu^bt$>`w%sl_3tkmQZWJ9B~KwJHh42aH(MK?nUlq^6)$OM#uYZ4_*`*cV(
zm#CqR+(-c}2u(@NQ&Iq#2HH1|W*SIXTV2UcT@yU9k0uK?8#ccclCM#r37S{1BGRfX
zoCaeUscD_72Psw{=NZ)06hbS`kbDiug=(5QMW9rlm<-t&WskzsP|D8(mHSFM8Jbo_
zSgH-EB)H^8$)$#-n%1CLuh4_^9yDN?HXBl9<soiFh0Odxj|c%xM-=5MX+pJG=Yiat
zQ>js*SzDWynU|Q8Q(29konV<HO;ab?9$gaB6H?Mi*0joj?tcXh79-{HM2&P%5d|Jd
z1la=J39OI->QI3O{fhO#g$rnqM$rx2cytAqYdWr=sUmn8o|p_eAxEJowYVTZuQ(N6
zbc4sC9YK?rwzgGjYQ?bf8)_`*Y-I4ACrX++;5KokUQsGIWf$uxLGu!%>y>0{>xfN%
zF;WSL&5%@3^IS<s2~{1akLIeT=Bk&IpPUG4F6x0sC_p6<B*g?5CD+uHX;v3O5BdT(
z80=AaXvqUIybo6A18-O$r4Vpko~)B*t5jSH4l5;a63I-{D1)452lp;mWxB0WMJ{Mv
zLoRqF1*r8@Q{$=^;p+pdooZ@8g#koB!xh}@OVLouERM*{u~pIrZzo6Xm8hv{fEpFH
zwzjU|y*xEFiVz0mYG98LUms01HC<hISRAEjD1nx_rh@LH%g^)4PfSq&9g6_EdRj-p
z#ot!}RCy<sC1&P;+B~qpN6HBqI!2}jkUm5v)KYthl~%6sIvJYwt&8<wi3c<TYMW`F
ziEtNWlM6ycgs+b+N?_Qd@T^>Q($&;75J3kCOii6)P_HTonnpcR6G7`X;Uzh=$(LkX
ztpsgT=z{77B`btEwXo(_Qgk9}Jsn%Clc}brQLI;7l2}q&Z0lE=o0M9lkqNR8l;t4v
zGvNExON*5>HEU{MN_Aiih_|t707-#{e~^_z!Zphl$(uDbN}y#1$O}hwvTgM>vWoNb
zYCxCM6qM9});VZG&-=*&r<&}Vnq2Vmhs2^(Xc*+!x`NyRjhbSo$`HuW;2KIG?I3kZ
zpi&!@i*hs((E@U&Z4Ri=FHMDe3l<bPAQMRm3hWv{cAy6Zd~gI>zUJd}enC+x*yTC}
zIF*2oS^}%F&bLSNT0S_Kpf>~AqwuWqA*mJQJS)&<9yF~5C|Xf?Rs{&Hnzi5|7--(l
zQd3hzm=odaqo#)7f@}h(I9Rp;WeN`sR0W!lipa&*OQTpPOD7jr5tV3Gr`aljFUc-~
zmXO7IV1{k7ZAnc{S}nAxT%uW>qM-zqQAkcKP0s)~GfTjyl7U5)bkH<HOLkC&p^>7Y
z1nKWUTBx9HWuU?C(wrPnUW8;7@TNgn!nU(DGB5!75+Y|~Y+z7RV{BkzYikQrVh=As
ztsw4F0&RVVmZ`S3wrTbnxq8qtR!t4gg!FZCAw7(W5*-&ExH&q-nmV9*r#L^SEEO#P
zQB~!E1~|aOlkgouO5naH)OwxhVx8Pr(2%>D8sZeBWN>#7=6+DTff|<J&;vOT%s_Wu
zu}&IjZ4t;>u<8)34pf)x;Bp3dC`t+J2%Y3uO--B%K|R%+)RI()+E}ncMP1!Q=;{ny
zz64$S0djhBer^FsJIM7gHWm+P>bQZL#_&e58b%)ksjh$*!<yBo%{Kc&P!p|4L#enZ
zSxE;b7hIIAX;lbq(`bNF6LK~H)pO9nMM(E1OD9_=S0_&=U#C!~NT*n*M5k1zOs8C@
z!ZrsqzENqLsOOTJmReMlnxX+N6e}Uk9;B|dW;HZrgH}rFBx{1&@Y%Ko*4Z`%(Eh)5
zwzjrrmTjU&L3DPkrcRoD7HC$cKtl<7vUQ3QsHtd`1$8y3EJTt6TboO0JOvW`d7xt0
z7M_@EYI1e*ZI!YLL8C^V{z}>!pdloe#FA9-Fd}G!od!rFq-_If4cluJ+9qnif)gU9
zsZ(kT32h?{Xjeg})IQ&~)CyHpCtp+33anq<24W_>E0C|PuB1?0lnm(>KqP~Ul0l;S
zcIuish2V|0)v&ePR!WIU#rZj<prlxmUtp!AYiM9#P*9-+S=0>Y)@o|%6xkMn;;PuT
z8rmYYGSGoVIw(^?8VN9w2wxwF0Hh?bGSGoAz$%sU^b?hIK=Xe&IjGHnV#LIyW_2w{
z393A*ba84)P-<amYH<mqF@Y)zb|yjyJ_iDC>Dk)aCfUPzps>g<DoIUI0u2;^HG^7S
zkOEXsPY*I00UE7=q|MY6TSIG5H=_trsO6PF24LVVE4|c;)MV%U+}y;x6g4$sRB0#$
zgY!7F@K4pOu7$)rmfVLZ_jPh1RR^dz02fl2WkE9Nz9u4zEgew0CZ>Q%)~v17$+OMX
zOV7zqO3VS3cAyCwSShBhjk6p}EGkg~7kY_$*h=%%ycBrJn2R*{2J#?cC=Sz?xtgG@
zsD`liGt6NiXMnnCWvRNl;ED!ZqHF3@g4$2eLM0V`Y6QH<2Pr7AtpH8m=#;3bX_VTQ
zKn8nDL6=YK!3q^{Ll-{WYm3y|2JcTs;zyUp+Ll0DXYh%s67Y;7sv*&(+DdvAO0f{j
z<10WB3>!}d%T>bVDm9@)9aXl5I*ztRI!?BU8cMmTC5h3XVF26Y;-WO&lKkw{yjakA
zL*VOhpsi~qO&w<}iVG5p5_7RAwsuxib3%0|Ue7wm+B$&>y|nzI<kaBGykz@y4NWVg
z8Ydle7aF*;<)Y)N<EG<oYigk50hvuGPL1&Osi}ciO2{WzLg!r|O9vt#12Og*N#J37
z6hRFo-^}Eq{Nnty5^%@O-xt&y)=Mm|%uBXaf^0|yU7wbpm=fXZ1G;*`D#;d7bo=`T
zBo-B?7J<+2D^7JQ%FhihDay=C2QBde75@65-l3)r=w>K*eup;K)znZLcAzClu;ELn
z3cbAilvKaO+*JD{a2Z*v;|cS&SFpbyvcKV55~03M1+BJK(ooV))K=02Z5sAMRFTko
z=RsqiskTX==00lKse#(Bf^7ImgY?Zni?M5J6q7-d51Dx>sTKZd8sJv2rk$;UPP%QH
zeG<HX2rAkUJWzoS>z1XV`Q6smHXS{9;GPF%OK@=oXK0`VoTd)=ygAT7p<8B7NotXr
zng(cQ6(OLJ4!->uW2Ot#`BVaRx|Fbb3oHZjmwmder$)M_l?Lc!!pwpa9Lf{R5+R*8
zC6FfYrBjd+&lMCIp!Fi@@Q!IEXp|hXxF!c>qfCkhw51A~JhxH+4W$-<su#!zl>&5H
zMnP90FCTV;hyr9~7r509s&>G6B~u5~mdXJyHnzsH&>+b^$+jBW{I*J}wE~aofQscL
z@WeoMEol9I61dQTE@A^s2O5FP4A8i+CU~uTX;BWUEU5eh4M6K;+hPQFmVF|qIi9PL
zrD>(4q?2u%T~h;1t|-Ghpzg6wwwjtowyj1sWZ#R1ew;>hoN}zTroLuPO?0egv>|9o
zBx)<Hv?#|aTL<PR$Q%i5h6~oy&;bn<fab5zq(Q<u@Me&eeq2ULNkK7efE<@AHSLwM
z;IVE6DJj6sgVGYKq@2XOY$ebIh~W6h1x+l&)@znPkKt1S4{;Y1rRo-^7D46~lyss&
zaj267>Y(W4>XoII<ijc|^t1t9V4(m~k(#1VmYJx4X`BMoDkaE@M^H_c1g|NfR)RL}
zz^Y5A5O{-&P7-Q8iQRf|0|;tAnkn#MD46Y_A}0@Ygb!l&*BYMi@<0P$w&?MKPzf1G
z$=4|WZJ#LwCv5P1Sx7#3X@Lglkc!;IypqghodR$p9Wn_DO3sKOedsZkI{A=-G%*)+
zbA4h-qE4PBXx0zv0dT+~1q+z3Q3zhpM|P-y4Z#Q!>`4NW+jYwlb23vBL5=QcnB`<A
z3p69q69y=1ir|4#sFSB@ov)^*QDj?WU!<+1rlg&3m9MFz<n9`x1X>aU$}f5)`Jn{`
zu)R^BJ!YjvIoh@wNuX&W`1T$pdvI}RucW4A1!8L#K~HN1&rE_&O9U0vwngAv0y@YW
zl17VCi&INL{Up#R1NfL}cqOk{4H_heN`np)fE^x!TRC`A4J56Rq?ehOoKu>T>XDg}
zl9~rPJ3<kXP(Wk1pg4yN#zSTRN<imVKn4wvYFo|fT5IST*KkL{Ryx>%YCQ1mBaptD
zy%O{wRM4?hN>-3dFRhW*N=2uDZkB)?bX$V7q@xycnV3QntmuLV1Y87~%AqA5qJmG<
z0i8gDv{C_j!$L&~q_74pR?tbeEr#`n)9up0s|t!i>lDD3-D;%jM1xJKsmamFi3P2%
zh4dXD!BT3Q1mRjkX$-qT$qCfB0JkAw_F9)hCrV(ZgN+8&gdhh(x)Klz%4`uL)(9qw
zH4v4cU0<k{ltC>?fp`Jrdhpa~Ij9i}Uc&=fF$P+~6Ke&%<w^;hx53MJN>YmuYvnYn
zA!}xoloV}kp-cWiO>=OvtFSGH2BDpSPNgl@$w{3m=<KY95_A$%Nz>N05<c?@5(Q6`
zf`xS)ZQ+ZLKus)Afey+Zpq?hky^aB%3RX(mj*zm@Nyph%qoSs!N>fcu(Gj#*4?H`s
zXltuz2rl*@6<SS=vnJ@~4bXx)@6^-+$DGWvRQp6w!%qWrWJ`W=DqI+`_f)gm$u>iy
zP_tIk3c|2*f?MWjpRQ4;X$2{(K|7;B84@%%1zNiRI%}gMqeuz1Wh|=@#M5zt97_&L
z7%sL3)-H(Q7#D4A&4Or`Sa5*=Ya)UwK~QS}d|WN0o`jZQdHE%oX_fGL61tWjX-N_&
zpCeLADtIz1)ixE}%}NFB%1uoN&n4L+b3l#D%wjj_yqX4haaMkwrj8=2B2Wtn>@;Yr
z4Sd&Mnr(G4WXTkyC6-^LlMLZQQzoq0rwEz~3Id&+qNbLnS8NX&c!f>SfY%@BC=`~a
zmV(-Qpy5i8N0c;m5|NW*qDGotF=%xkWRWFEiAE}@6a%?R(+Xr_NorAUW?mv_WskK&
zRcaBup;)Yt2D-LcA*mADWXvy8($;{x$zDmxN=ZQj#X*`%(5-Or0|t=8!(IdVFgozQ
z9Y`dBD`wq-oYM5nJV@4pA9b#i1l`mFUS*F@VKU?lO~NLog3W}VpbE+~IP6XZ4c0<J
z3PgezL4krWG%pEsQIDn`m{P)KCD;;(G!~bG3`R?W5Hk@85muBy*7B7?Y{X)f0;chx
zvv>5;^1y)wZSEk<1)m`U%2uF##h}U)J&i(2FohIw4GUTO3L2nGw@tE70~G?$-X`+&
zk(QFCRhk}j2Y4~aP{nk3D->)_2Iw|z$hGl0dEjMg8MX#Gx!^l1^U_N)taI%$tTVK=
zK}%_KY}2DNVs)}?b07mFp!t#<_`nEAMG`1KB<EzSslf+4a=?8L$eLSQ+Z^z@Yv6W3
zHE6)XDoY2vK*1_eBL}j4K@-xnhiIz>?SDj84IU_gYJo0st<`~=q^+b^se~d|3A*zZ
zyv8;&O(WYjQ7<hsH76wubohrxjt*!yYPOnMHfT7n7<RdqEw~X19&HBQ`T|*ykpt>P
z8R+EMf-VdPhf1DZrgf&awkC8VHq-@B%d?|1V{0|xvt&p$ffA_jSF*K*_)fDL*$QxU
z<lE+e7p;QhDj!-afnAenYhaye0~5k+d46<eENT!!9D>!Qpi9$03k4zWfi+b?!}*G~
zwxC$Va%2;zM~Ccg9jqp2BfCKdG_Rdml$ruw76CrVDFqZYpal=GBm-#%6xf0a#^juA
zO`Ss9f@p(S>nz(sL~1L9r#7S%RtQdExDr+YyqZUKC+R5(wiqo1T0nrxr(jrr4=EqR
z3kcXkS#S{rQVq@X8cCp?PT;BuoFK6q0xAlUK?|Co`5tTvw#_k+{o>$20_E@&NJyrl
zCU=l-og{Ee6LfAkt~3v_Gz~lg1Y37+4Qo|G&li9s^%Q7QPmNB4Cv|ADNmT=_vV)wv
zg>=$aDriY4QdR~z2<&E<NuXmaK{vC32P8Eh%OgQ$B|OWb1Tknj2;^8$2!XB@(t#el
z1gX!hQ=#jOq4he*vgnjpopjVdNdtul$l0KQtC||5tr+laMCmm(=~x0wO-&KDkhi8r
z1Dgu_M7`Y9qV!aaWSw--)t_Lmr)$FN-(+wq!sa>9qEe98Kuuy$8L0zmfP*?}I-sKu
zN+3%EP?tl1;vL=rhs=M1N;eQoF{P#^37&0gYLvh|G9_D3LrN*Bw4@{-be>mgO^t>U
z_;6g%o+5}OsLP%YQV436Ch37?L5p%Vpp_j+s-^~B(1UI>f~<T6^}ayK9W<1#2)Yhk
z3DTZYvb9Z9Q`0pBbvz*=sVSbI!ADJ4odk*tkYA8AKvHu$r~?N+g$$|%q{_e!UYUV4
z!qNn2#X0z1Xvn^&Vx25osDZlqd8r_0>tx$z*{5q8TEUN}$N>ph8CYlA<yhxvYeQ_!
zwatvqi3M4e3vKtLLUR{r8U$Q%fh6;4YBWFsppiB3!jodq%mso6DuGH<)zlPo!BeXc
zB@jWq;)2xV%(TqZ6nn^`5UX5>gr-gwJW#ANAk|QwW-Y7?%78HvLFYn%#wB5G3wRe9
zCA;7&LlQNVz}+e6aauZ{@ow;%6KG!wVj?J|7K8RzpjreL2IZ<eJ+L}Y(B=xHn<(M4
zaQbl?_EyRHIr&93prH^j0a|fZlbV~DnNyRSpI4GmlLubLQ&W&wTwI=Clu}a!Iw-5A
zI5n{-Iisc|H3z($rUtAHG-O$xnwqVtqMwP<*}zjof-@1cpunDwk|8T;Q$T~|@NlrT
zO@(Y%1jo27sCf;}43Mmn0?Jc~DVd<Gk^)f&mQ78u1)U=fN$8+N2a$vDp{dwb*U$>q
zCP=Z@_YL-Rg{~FKODxMwPb|qV(km@aEpkjx%`4G_p791+KnNb001ZWGz&f+ZIr(|1
z8j1#*piO0<@($9RQc}{if(!*iPHolC0FReIZ2|iebUtHVI%0oQlA0RK&`eN_gBHSq
z41^?1TO}pX4milxMsQgIYIq|O8@%=dYeA0;Y&VdD6@pEwslnLBiI4=%!hsGQ0;>ei
zDu70MVApMdMM1rJaIu=F2N@4QI16#G2fUn2R8!MPv;~!uU`x=Q3KoRT`q?Tb*1{4#
zECvyVC&4`pHyje?I1LAt@6b~=K#3AmiXa!i$w+A`SrhCMSei<LH0LtYG?XC48z|yH
z;es_mL&`DG);y3Q;OQ;UrWt5)sH6$Hb~`27AXZHcDg-SdL1NHm73?MusBN0?l28M*
zg#u(OT*Nl179L8VjxS{EAY?-s=qx{KZkx;pugC^@9<nPBa%8BQ8b%6&NWhO4g*HV&
zqZ^=;K9w}BAlod_c2>d$1QkGA3_$Hv$UcX}%)Da6IYMaje30@IR&2xa5U8|DOwR`|
zJt@d9hMi;sZtf@9LNAvBO}T-V`hz<AuuaqonZ<sIevpCfRFEm4`wR_0Q*6nlCHZM-
z(EA({lZrJ`kyUBhr0YRcfab2iQvjOa<!~A)D9XUjMQp49@96~X`G6c<3LQ;_tQbyA
z&j;<<gbc7EgmkJwMLEc6R%xJhvtU<(>j<##KwE`MiZVfC^PsX+LlblYRxxbf5NNI_
zCp9FqBq!A#c1t4U+Fa<sGQuA45ER&OaI+^lF((x|J*%l{rKkZqix1Q*vop}FsY%nz
zEC#Q@Nzw$hLqN4K$e@y(RM0X;G>ekq%`tSZA#KS?(LfX)pyRm0^NUhIL7u3IqzH75
zGIWd)GNp{V8b}vBOb2$CW^E#P+d^V`KDH7hMI%W8a+q{7XtOD3Rgry?6~-i75@-@G
zGdDFcJs-3kuQ(O7by5jZe<CtPl09r?5=a_uFLGQ#FV#)6h09teg63I38{XhTI-pAz
zz-iN}8hR6=Z)Q$TX0er7s)<fwPELM#Kw@zTc)vJ^<5pTyS_Ix_h7`--{b%5m3tk-r
znqDuqsxBx>P0OrsOwR{Tje`z0O3SPOO~Cu*mqUb#OF?(gfK(`f(xDE74^yI)R+OKs
zke6Ssq?4Hkc7#%5UZp~AKIl9Gh<I^oa(-S)v6WIzYH_hbNk(FxLZU)$W*&GM6oiJ(
z_F;$@TPdlgK-Cs2>15=W7QvO~DS)^T!D5)GY6@7iSV<=(vC>K@Q6VL<63m8}l#*Ck
ztfT{O?7(y+DuB6AQHV0INU@SmWojbAJ_QgDA_h?f;ukCFfLcnysi1CCNq&))k^<<w
z9?)v&Vyo!b+FG5=JaB?VSr`Q`-I6tuL3e(Esv}SeKpHts*0fL701cK|CF_8u;UP(@
z7<BGClo_2GTT_z?YkQ?3c5<qw=x6GrgEx>trpDoU9-dNQl{u;mB-tRX&reLxSAgqL
zNX$!t@F40GV44+@6Z61}<CF4BG8B?hK@tij`3m5PTs<XlSp@AQ!?fr@8a>6}J38P=
z5PVYyBzZZe=YuL`X!Qo!Ua1Fm3dC|XH3K_P9S_>V4$%)ykVs}gMKqzOZ@}#a8v{zJ
zYHCS#wg#{Y1Jy351N9(@8tez?<sqN~KS@*HFx6Nm!!}*t%s?m8HUmUu*=Fh+nSlB>
z`o?CaIytr`rgrISYRMWYdeAJO1HOHv2sC;OI@ztJ#?k<$0+J7O3^i+NOib-EAle{;
z#mL$+K#S=u4PYujSpclb$iyxaq6s8~q9qfg#l#3EpORP!)?sX5mj%%Q$`#0VWPvr9
z!lc2u0iwkWRS?CREPZ1GkVZp2Q@d=4!Jr%h)(8p%5C=s=wx*^|u5F4QN(KV0T7ac#
zcxw(#4QN@EtrBRfGIS+GbgE8{PFk!UXfwP<E@*TIyw)2f&w=t7qDDmQn6*tt<eV72
zm=tY&(EfRyWMpw&eH|rzC3wSMLmw)DswzYuynh;DTogzkG{hNnBO$VJ8qqP@F}kra
zDKROUF;?~(U<OF7ilK@TKE)~!MFs|-<$S5-3ZU8vJXC{d2f$`t;2l4t3fUgqTZL4~
zFda&u{z{T2xMvKns9_P12Cdsbqd|~r9VJL1y;>zu0|c~|2W)zJY6)l`Ki1Z8Z7pQN
zE#0;nv<nnr7NnUBiXF(|wUFCxHLa61AR1C^(-5t*6g`wG(9S?j4cy4miw8L*F+JZi
zuOzjoEHMYPff2^mNY+8q2TCQ7gPjrXfX_Z7JZ=qZM}p=LK>-A=^OcaAUMaPjItb^1
zw^%{jRfvupB+Q}BE6}AtKKUrED4iteY%8b`(yY~iI1E&Px%m4c+y}ZI0IUMkf=I;b
z8ko!B(GFG*@47-9f)e>)1*q{4ng~O45$J@={Nhw(w}3Qa1UhKvXl7nYemQJB0umS4
zV+gXE2Ez>S45nsnE#yQ8XsjX{Yv9$1(CloV9-SC#m97U$PoN4z5!78P$}d*{HN3zZ
z1T>UF^Rn~u%kvcAwJvB>PeC2Ls81cV*hc|sg%Z3}0DBF+N16;-0t=GUNdg5Ch*gWY
zu^nx5V`5TL5$GP*{ABRiOwa>Kp|eDgxC3?N5mUv9C_AeWjb3P58#KmdYipZWQv)v-
z6G3y0iAc@hWTdt-=vD=IS(J%l4J6|#WJD*%)<W)dNwKYl>{PY_uT9YbpEer+TAOO6
zRH&o_83Kab<zj4L06M<NIU}*C*vb%eEOS9>QAuS;elU2P$O^KQUI(=7543kEF*7f<
z2-1=SPvhp5fW{51APWX{QY*l#NSsTHic<4RKuuIs5wH_dOHzxhlq!@!t<!+~f>O|(
ztPm5S>-YkSQsLr?hB_IUc_pBAl2%F}t3aEM6BQsnPykKpD(U3q2c;H+E_{Hf^2-P9
z<OK0yKF!Qahe$#El$n>Vr>Cc+ladPB2Lh2%Q#LX*wN}ze%*)J8EJ<}K$}a#NKM87s
zgGYxl@^eyP9xusA%}s^4xC*@7)5_A)6118hWT#JNZe|HY5;AJy5#s9u3W*|!8$shc
zi6x*QfF)p1B!kj_l5HY*l^b~91#%q3LJM#u(0No!+K|kLFx)=L3e?-w)K&tYMx|7%
z175OBsYNygcKGcofSi5>vk%GRVEbKCb3j1>ifbKkT$iQhmAI4^<YXo%mZTPgf&{D%
zJb`GXl$oLg>H4@8rKW}?rl)7-rGwOfn|C3JN&cna^n^H0%MEn4EhOSW>hklTY*5D1
z$<K2Joz0PgD(0Ay0*RUYJS1C?L|wos0;UGMCIQ09ObGz@tgMv4Zq@}4@#-ppj=cqK
zA5F0WT`-txTMd>4ZJ|X~2s&O&2@)-+5@7XE8IX1Uc{!C>ROl9^CZ^=)<y1nILfwht
zm=v(vA<NZ42|p(_xg<3u1hje`)kN5c8%!zUfMRT_kz`>SU?-@d8VeIu(t)u+mrh_;
zqYFBx4OO8L9+gH2|G+XPrrB_B!K{Z`0*)#y!2lMAc?o;~T51Za8=!(nv5XqvnZ@9^
zSE|)Xv#oY=b@LB$wKC9gbPI6}vNF_h^>eW@s?|xit#)#B_6`nkbau6}&<SyLva-~1
z^#iLh)^QDXb_{T}GBVeJC@?nC32=0GjSmg5GB$=VUHrrStc*>-<{6vnc=-FeS{a+^
z__(@-SQ(q^fK*!O1bMo9gjg9{>VQ?780h$g`UW_<#6vAIu+VY#_w{wOGPJO$)yc4}
z2Cq9*OUx~>R?<<jQL<7}%P9dd?Lf?Q5K~=A-AYNVurwdUQBntqD_0nqgB0mQId0ZU
zwK|!$`q64Oc1r3o`my@yI$7wALHI%p&=e}-c8nCAWYE$h{8cn+V-42hQ_@KVE&l;k
z*WjTnP|FFF%E6N*kR1(5I-mwaq8>QfLD>;pW`b^5gq$P@o?Jn0{6MQvkeRT?7`l;~
zkR}lHc8Xe^#FP|-35e<)zY(DO=n^6AB+$X-pw(fd8v@y_uK_nFJr(IdZTR3heut!|
zmVg7N7<Be#3HZ`*7ifAW-9f1O5e_R(E%7e^9Z-O@F%2=gk1KZJ17@I`oxl+Xi)MHV
z(9}r+ryf{HVmX8vwuBhk(8q{P=y}?>q+yW_9x6x#ud9aLF9Ews5LzoMB<ZE*7L-(K
zfTr6)r+{jJ)=WbW$p@X2QwwkU!X1Is`h~|=R&-*lJ%~W+JK#GW6MoJa_?XNraGM!f
zD_kBt(*llcP)<Nt4Z5K|1F4ak2|CCNni0UAKS<ah0v$RH1ZvROr&uLxq#!j_vp}aJ
zDJA8jU1^mJ>7-(q1fK~?w!&@|T!A8fd7S`gUk9c^33TKlW`cpw*=y>A>Os=0b53G$
zu?BYIlR<K+#c*8&4GmILE7VBT2m*B;UHx1%bplCs7h>)pTLYdbK#dvj8rvi+UII5B
zz|Af-H9tG>L<6+&LW(nlB72Ph=q+}T(@IJ;G&P|+To88WXn<FS`Y77kYWUa&fMzK*
zG@%DfCfbJTm1m}uWN2vW20)Kh)X>z+Nlh!!4MpW!M?kJ;NY?Pttf@)X$k0P-MQdv6
z1V9b)O)SaK%gxNwfSU{%xyntf&`8vYfU45e28~4_pYW0kI=U#aNC7m+0G<?qxl|{`
zHW_+!9`=|8hX=fE3c6|(+%Zf+^r*ng#52=CxdF5a6tVghv^W4GC8IYbH9<?KaKr_=
zT1XExP$vbt4H0tAVl*CygB#1Swy8MOfKE9?={eY@=;VV|!qy^X)jUvE1$8(;6PbAI
zf_ET5r<LlY+JZ*bAgxf)Mo|NMMFT5EL+ez~7&iPkW$ebmauYc0Va;67VnkB(X@ag#
zO)V;M0v{)*5vHjFx=#XhSxG@+o}H35cB>(+Vo)Cs)IBN&D@D2w1G^>^_d?p*NCz~f
zfLa2X$=S#Yknt9qu%gKx($lxn0F^qR>KQ(RtO+VFk~0z^7nvy<YC?zB(rlAqwM-%;
zYo~zLrfL{y>Oh*J;6^O?SOs5OU-*4M!J42&R-nsjqSIpGY?yqorlwA?wzf`*hObVb
zrjDPsts(fv0cw>qYHEmr22{rAq#%lyeB`u;txU_$b4*DA4gL6mMgp-%59o>wl)fZn
zz%dm(&;-&Ost3PG6#LzzpsQTK5ugLQ<r$o(!COAj0~X#q1#PB`&d>uVU}zq+wM|A9
zvDZkoO#&a10Ey>XO`TNOY(#-Zs-{jDGzCMhNK1tt8s(`Gpjitm4-GYSpywQ6_d3`C
z;3B`K#?OY38copVF^yzUaSItKL@I<q^ID*jOtLk=#W85n6X=5QQgAZ{Y33?L6O_S0
zM<;0nf{s~)jan!afT9w+3t$PprbYwlaue)oVR;SKeFHaCG<AY(lVK?xQnW)Ihg6Og
zf<}Qgt3kyQs2xpAb&g>PsD9N+0Uf-e2kF4sYrtX&TFxYE>ICcRYFa@Qfjf5yHISGD
zDbd!}w9*IzwZBsHQbO`ILN#@QZT&QLz_AMtvm(&JWT2uq**3@;qsfpAI#L1ZYx_db
zm1laOri4`iXb}M1jABr@gUo;@U3f?#mkFSQU$KXHejcPq(@C>U247R*n3Dsp#zC|G
z)@gRZYHDe^x;n6M)c{2XIGjL!(LpX}(lE-FG;KpoP0;OBzR=ayYHF|s8cNzjZ4c-K
z+oh?g1?%d<%OqV=$|Q{d==H$h)(R-0fLsb{jw7XG(1OZTM1_kel1d=S2o$2AE-L6&
zsAQzZ0IVs7Ww$W);00$<a2bK4?Tb(VaSo^;0v&RfjH6OVs0S?$P62x|6*4)7#|4Nc
z4pNpW)zGXChc*J?y_OJgxrqpnGO(iL;$jV)C!HX*_Db>#v_tjsOG{FVAoomyR?R^U
zKtWOkY9s1^+m2R<mY!0TE_nD<2}d6QGPnxA6%ygXat+Yb3AXA3GA;}q?^RRN2!}L7
zmB53UnK&BzD4M{-s0DVQ1K~7~m!wqSv@-)bK25B3F!i`>sss%P!x|LuA^#{HrI;8M
zH6^6jtkM9_onR;hjeP{Arn^=YXeepeD@MnuS;uNyYiigl+C<0M*u`pTYA9(}Y9wiD
zD}e+dVs;QFM5&UFQhKHm@&Yp*c)wlACdp1oI}@zkMnB0;3At_Q2yzl=$u*4}rKG7-
zr2!gJLJ9^aP=T14h9h!OCm<j#1yI8mo_fI93wi7aa_kVOuU@PHDn+AXtzjovgVs1g
zHl-pL5s0hf6b(SjeG-#1G|>AK(C|pZk;gF`?zSn!Dz(>02Vdo42=C2l>ZF7ANrD&2
zr-7!nl5JDrYqOFO`N$bk^nv<1woV!;&@&?-i~d0c1$0~kJO%=~G(^d!GzWaVJ7jbt
zBwr(3QxAMK3h3?_M0+?%v)Tm|9eU7R!+Ob}U6!D0334()_tHQ$fhJf`G(iI?AGcme
zBN(NgLu)$MYC_95&~{=hoo47X47d#iYS}=1YlpogMOCbkVw(bQV-wb(395n6JC`Yl
z#DdoZMCU6_(>mSOQ6pW4=(Gdc&X;bR2s#`U9#N^9Iw`6~_UWLLV2Nod!3NPm<LsJN
zWN9-3Hw0``K=bDC+=etVfpscJP0a;#ZDb-OqSK+RA=KUuI7yd*8md@(<Y-fP_Nkya
zOG$OfFVE9ZN=qy*Q374`2^pyaA6Te>Jtk156^Sj}Q8eKy;axx_7HB(3h?<(KMxsWD
zrlt<b4Q1q+5KWyBczYSCWON1F13j^gm{^CkkI~HrHUALBh8ukF1=2Lvv<B~BgXAPN
zH4Ws3Ex5r9@*PAL*C<tPW*&G3+FqkvLsJJlJP%slnO|C>;jO9T4O;sF<HH)l8k*Ja
z;MFqNV-HfPgXg$4HLXDXP=p6S`oMdcQf!m8J-~&$KRBhOK(=&g5;g9FJi`d;X@N>e
zZ0Q_zE)vq_3)D%~)YJi$zp03=jo3X>T9gB+wbE=sPECg%nUW69A-2`EI-pgw&@+cX
zr%LD=LX>BMR@p!<eXv*3v`z<|KVh2*+5`w{>SozyMjOULN6M7cl;8tlS%|hTxOD+i
z47%46aest0#OmneXoJ{T+vI3N(5eIQzEFrAX`n7RR1J17A(kV=+9vCygO|qR7&3z_
zW6*&Z2b%xKp$=&=0*<lT<f8oIVwe2f#7xkcDo6%`*DioAOT_M2Yz>HPWLFSqK;+ma
z>VY~H*@%Em9&DWoNNC__aG(YNd<jRaZ4L>YklJ+Ei5-Xuh*ZsLe^7m-k%A-2P!^ro
z;~MltQ59<injA#FA{~3I!j=o*&$y7~1ISqxTH=9@#!^!Q<zMW^qqvE9m)GiK=;h~u
zuF6nTgRvmhA!q}LM!F`XzQWnq1+Nc}2aRVz$^g)boZ#!zvAYtX9FaCtU};l<=mscw
z8v*8Z;K``sns&N|wVKwj7|#W@j*$B2*j<PmO}WUK4yhdhQv-{pTxiLfi#%cA0k5;L
zTU1(<10884x}y)i_CX^VhpS49av%=EY9FY=N7P52pdKI6;eJR}Tq5FzM9}papp8n9
zwakcZ37{==FdayuxVp%tMLD*RQxCjA6$;|0DXb3FLn$^fHcoh{scC?=pxSyNjyAH=
z*H;4VuESOrBAEu-&qvToTTl`O%^-u1xQA9(`Z4<2`stw4&J=BJy)XnJnFM3!QVOW^
zhPA;6vLgqaYiv_AadaD?!<0CNbfB_`lh>+iby9H@YEZS%g}R`;s-c9Gn!$_9Ku3sR
z4L-=UB&gO;g!DsG5jht;Z-pa7A^M_|V{KEkm2`1UmVoW91@C#pXL~BRL+GvJqvH!Y
zb<EG!K*t|^fF#m_3q5e_NGHG+{rU~i-X$dkP}?7N__D21ep(t-D6t^3BrzwmDitCK
zI(1hMJQ9^(T9T8QmujVy2ikO83tQm~UNwd_Qei8$w3GBQQ#7Hu2$oF{6Rg<73pRjl
zuV`qc0UeOXk<Y=kzYl1oTTKmi!w@PIZEgKPm&#~BhyFuBwI4C<a_CAV(Bc(6(6!Hq
zUbAL3c*GuS5P+A?AuV)MQ_BT+nm_}N@cpbhp(OMVVD6}eoe7hjT3K440KJS@0pv6V
z$YN(Dog7WjJ;SJdeAtR?om6Y+wam#NMM&2&r|W?iHYJ0uXinFIENg;tLIWVT{HE)H
z7dd67X~55P0dFOSjyP+k*oJ|JwZZNBFg?gM$~uT49M}|^t*vcPO%3d12GD>BWVJg;
z+#c>O&|wB(H`UajiiHN)!)N><a|fDMZ~;iS#|o}P5wy_|<TKE@4bY3I!D68SH8qMb
zw;^l=%Yl85t^wrtni@rzvukP!G!ivZ!Mzs)O-)TJ5Ete{O-SDY+||hdkMdf>T?F<Q
z#4uDbu&wqQ8McX_(VaBV2|%FB(?O?z6&06gXzGNhsexrfG@)S&I!_x@IplhKWYwT~
zJJ4bR9T(6gT}U@Ir|UVvm&kz!qu>#UJ%*v<L_zl8nbaVZ*;7p`SZJ!Lp@xNyqM@}R
zXvsBnO%Z6y3$%IxH0@zuih8^*QbFMcS|MeMau;~I9%vaKG+9EH*g-ic%kH3Jkd=3t
zX&ND#ppmT**q{`+T!2jAqWHiX)R(Hp*~UZ9)!_9S*h?O;Qpnm_H8my3rVd2rhn*9l
zXkeYI0jV?<z_uckfaX#N8V#M}R5Y+o#=NRr2QtM3nyyVvODxSP(SQv^DjGsAR!`T1
zE`o%{DyTeDG_Z!<tPNQ%uLs(f2pS;(6%`uEdgU3J$r+j`_lsdh8EAtF%0v@UlTqNx
zEf7-LL+-u?&$xgtCjl3K$Yn2Ro(WVI=9FSN9Zw+uQdVo~1lGdm(1L9ZbRZKhI-#JW
z_dr(^LxxmSQi!Puz=;O5jtgTE0(^@Q(lLst1Fw)_8b~1rI@t}}_P{=QXkVm}tZ9WZ
zk^`EG1W#vb)<VZ`Q3ritWxH*nMl$w+U+WY#wID@X@M1d9&}$-bUe3r&&&bJ4&w#CF
zM%Z6kf`|;#t%oe5Bqq?YxgayI7_k^7P*W!i9Gf|r3Z%p)IQK(lypgAlp=^x+O`UMC
zu_>8lq!<euyhU2H0=+T}IySBo0X7zN&s}N}*kp)zAoJM)nvgaZS3!O;__|2Y=33;7
z4s<O+8y-M&dR7o7WM)qZ)T&d`Nz2bG3C^rawF&?mqXgrF=9BXCO5752Gjl4DB_SeE
z>F`ugR3l46M3gjja#BJ2CV~qRlR<j}pr)e;DrxGJXJnS7g4BT9iseO#1)%#l17Ud>
zoVz0-xf`7Rk=xz{MevO$H8p|Y0XES6nyH}CF{~{t%nd7`d__{P7MEMld$p08nmUnc
zYLU=Z4#*zx+(IOx0{|Yc%LAP}nXQ3u%||V0`82i$KCIcRrj`Ys#U;8c403E@N~M|_
z_R0b(4e1X<*6c#o*CNJ(G^>#o?LgWaVDBN7>Y%m&Y|SuyeGlZY9VJ*juBHZGTLnH>
z1yq%R8rcYo5;d#y!Iz+br66ShLN<vAcR(ASgq#8yfdLH<fNa86>FcD}DjI-K2?PzY
zrh;}hC4tZVi%yMIw6#r+PL0*92Az9j4Q?ydrl9x^bT$acWKh!&T!bK<69gZ_@vQ})
zO95T+3R~fg@Nc4Kbrv`@a-e%Nqre?G*z9q%UQA3(jJB42OiXl4Ok7M%tcr$ab*-(U
zja`jZOpI<UXrdT&kUmDw4`BtYUeZa?0j+NY9kXi<TDA$>3y_;w5nl`{E=&y!KnH{C
zq#*QaR>QPF{gIf0BnwXOX?DqaFeB8|Qb3LV=)~BX8jUn<TSHBq)ab-m+a##&^wbiB
z*@z|kAT_nMwHnZ)OOP@Yg}2c|4Xj1fQmC5(lXRd5V5RD$>7?sq*d~Eb;sIT5fI4;t
z8=3+iBxP%Bn*m;H2HMV>npfhNpOUJRW}6B*|1AkTQlh2?x=kQAu>jQQOT}R-XyO=j
zTvcv*bZK#FZeoG0y0VgXnzoX9tP<#kG#y1n@P_wv(77OnnpU9m=D{^q4P>4Oe0~(j
zNi~p@&uSp2$Y`oS&qK=4v<IDg0^3%gln8Q6hCRfEH8m+#ptWV7t!s#pFc1%V@P`6u
zA3#A7=m5u()S_a&vdrSlq#V%69BOKiMd6Tz_{AFF^_)(L$=Mp9P73I<14Mwsasuqy
zPf+_GTrGjJj*b%8(9E37l1k9#O=#JQa1Qve64*g#Njk~!+mhAP5~B@3nG|+tjWxI#
z4!Ug@G+dzst2vc4bu<vS1cBCffzBdI%}FfDECZdL20qU%EwciAd#)|$kQI$&Tkvjo
z&%6?iM6gShs=&v(DQSYP{LoQ^oMV%$sitNCDkNa7c!gx^M94|ypd*Q3jcf%2glAGg
z*ZXE<7VE_)mlk>E6_<c}gpl$fK0CD%eElP6B>^aC^x|Qa0eEQy=m>JCO3-fOg3RRX
z)S}>w{PN5^@ZtlAmdret%*330BoWYTi%VviXNs*-X(s5}+Ej>E-IUBS=n=T_nR%d*
z9dJ7gT@^$MrVuijja4B;3Z@WxygyczP&t^=6tIJ_s)R@(6oPkq;ZO;dOM$5^&4XkR
z(DpE_8juyhG$lhe&0<v#mD2?ue*y{Xl*CHVEy7rprzBPu>n5k><miH$=uiuaQq#dV
z%Y%mOz(&9XqLq|lZL7gcG(hX5t(06qLu{bkxn&T3Kv8NLXh&5AbQ`W;YDI~X4%AH$
zB_a7>r{#jqodXqL#a7WuUWs|7iA9x4I!bP-NkvemFX-?&B^@Qlf}+eEB^@PS(19*W
zUZr`dN;*njrJx;-N{*%JrNt#mI!eK*1tqDV!&j7al>C!R@{>}FlysE*^2=a?E~&{7
zW-R0s7_imB8KC>5!S+M!23rHt=~w_F;Z{Oy1UaTO9by~A9*7-EI!Z37$x5-Hqi4Y8
zT16`bm*#=}spOjvWrUQb7DI%>Q&aL_?2wGoBB-!iQ6@w_II*O(2*gB~2y<z0X&%Up
z`5-c+6ciHSsh~@yLo!N1J}Alrxh}B;$t}K_d0^*&wJGT+g@6=>gLH;ufVF^iD8=f4
z4)udx@1+!;4LUogBo(r@#7ZeQS3f01zp_$ECk?ch)+Mph%0MTxI4A_XU%5CVzuXrT
zpWseGB<SoMMMLlzI>F#0gshZ6JAc9D3AC?XY+DV|<ez7y1nwy->43P7d6~IZN@<BH
zsh)Wd5!jxv>RKJBPSD90kd3yGj0{OsN;;5w1;PVw*@g&s<|d}6f^JJe;(~Y1f_ICj
zq<W_L<%1F}D4~M(21Aek%goPnECyKx4FE+$o%H;Ye5Bp#$>1gUU|)muLAc0X4@%4f
z*_^CvXkeABZD;`XP)SB=5m*;^TQel{`=beF<d=u1re=f9P0UFKZ+iy|fHPxealVC_
zfgwl$6lz5!AX}Xw=Q}BZEy~Tz1Gya%Ou2~_2u@0A5%}nKP$+})4fMW_jQny?l!Df7
z=pck3`azS7pbf$>o-@MZAdBI`pmkdi4&<03|1_vK4MDCfhX$QvNkD!v_!z3x0)%`?
zYJpQ`I*f0mlbBQD20Gvp6mcMSeo<~>35b)NpI2N`l$e<Zu4+JA?m_9s34EGrKw@5M
z4k*k(eM@k!Qqd4~*EOh_Py#w%3mlH|&=ge+sjZO9IB3TMCZv~|hnTNXG|;JrHWFd-
zpkfhCOSDpIo^EKcQY>DLdZ~F(eJKSlnPs-1m5E9=DVb#onJKpFO4<;2!fQrtC3OYx
zoRF<LN)@S4nyFi!nUbDbf?(-FmpOn$GE#F2Qj2uKYh}_hD?mcY`9*oDMY@SOIqG&c
z`YD-ZcA(XEur8EB8e;W1^sHJP1w9lybwNY47=oY?bPPezfhTz>iA4$}DGG^7&<3hP
z66_`c&`G^Ykfnj8B}#}UHE3266ab*pcMz-gL5%~@4Tq_^8Q>aAQ%BbjI#8qs4jWJb
zjF@4>bTjB$cvy!F(x(Ggj2a+=5e*iw_sFpV6aqwA0a6OHqE-`2aFl^6v2>(WTIryb
z#h}3kXxm6HKC>9sQv+pkNQ+6MNDtB)0$t<{N>|X<zXqtKZUvGoC@le9Mqg6{KgAT*
zKvqJFWmw!Pf!fP?pc{<9ry=2s4_M&B$Lv5MOSLFNF_i}Kh0A>8$U=&d4Db@;YIw;4
zT5t^Sr>B7W>B*X)VinX!Pl*LxDiWOnS_zdB3*Ru5glKnXf@b%jgWIsY2wjbk1Re{8
zT`2$_qXI3&g4{L($|gux-#`kq_@dObqSWFH&?aM84uRfC0MV|d2GXY&4{hgy&Y=d?
zSxTC<wTXJAnYJJTw0Bwu?mLi(PIXyoQE_H|o|TfJo}r<hiINU<mdXm{_yWjWhM|Rp
zj*F|0Yly3ri5dLJ0arg4D`Qh^XB(iOSpYub05tamI@bWq0i9xCtP|iG<mvBXWoT)D
zIM4uoE&^!E#S(JdK`m$m3v~4ZYz(0|xhOv;Cm<1g>I^)LVIvQaKt}JErP!i$%#uL|
zgWKzCfa)30b>sOtIW>^eeKqy1P=q!0bs+aeKyx6d1DXcDV-LC82^!LYZ!?1xk13#&
zVM`KAGLu1F;Uq}+4$)TxO*f}P&P;~Nfl9-)ocwYnO>Hz0-AXKC6`=B7Q!lkp!vK~N
zl_0%KP*+h+Ee+bkwNJBxWawyvSiSu6ywoBW=($EUHLxBn=-jHj%)-)CPo#4WAcI<o
zwgxaC!2=uC(N+K_KlHIXuwZ6NO$~VNO)nGDAIwbARnk__)=mVC)zxZf>OhL_P%PF$
z^AFe@bi?)IN;7pcQ*>iev|&RJV0D?G@db!KVbu-f+TzR<P;VcSil9jdlp6|)qLr+a
zV!?-jC0ap5pyxaV6sMM^<lAErL&Q0JhXnj+D$w#<h{F{Xp(~n`L1#_XY9h{9fZjWa
zrYuP(CE7SvvsMS(kOuW55jx<j2NjYul40WkiIDB)$vR3UiJ<#fQb9>UvsR}hF)0Z{
zJ1A{}c8`HK1)^xtNwtNHFQmZIk49=uO$z8-MKv|Bb*Y-*aMMt-Nwiba)B|t)3C{#=
z3OCf$%L1?Ltf_%6PKj0m%P8q6LAC}d#UdI4pfa@@mU<LYKqamYcyT-=BtWA-pnVib
z>svIdlXW3uBW^kQiLlX;Bps!K#FUiGymUy*3Up?n0qF8e4IHYI@{3YZiy(@%p$-IV
z($q-<-F1%Lj@-l|(5*e-#v4R+t)@;g_zJC5Tc|0ZMS=FwN<OJ+pw4R$XdXi;)+$;l
zB)>pON69I_q$EEV6a=<tE8{?C#AN2>r51rh%L;sz1%j^wW<mlGNe&{Qg9v|!9D)y#
zf+$0hg9tzlV~bV-o2{gs9E%tiMI>X$HdfG}m3=yrQphkqD2Hi6?sG!VkFYEUDsj_v
zQovbW2ejL$paPulz^9!@D}kMgW;f{gR7e7VoxZDR3p&y}KTRPC<OsMPgd=p4NOFdb
zqJd7TrnVB)EwGv-F(m~wf(U9nfhra#7ZECm(PEItK~oCQWkHFMgXlpGXUN$zkT5~;
zp#zwp8*)LG!7>hH@+na_Nl8a35#IcQToncqg-sZM*`TFsAZJ0!N01_f%MkGe%T0)4
zM*)5a2&~{wLJGJ<z2wB))Ewu;;#ANUe=8(8&DvVXZC?l*!P{9%Gxai4Z50*ubBi-m
z6{2Ix^<uU4!B=%_Ks(vUXY8X6VuKcZrscs-L#_swY=}|~n>Rqi<EW_tev?QtB-qiD
z9;jr4G^(s|tfvIc<AJT#fNpmJZ*5M}tOadu23@>}webZD4zNy5SO+v1e1`_8)dUZE
zSOuw+4;=$6E&<)wotdWqt5=~l3jE|i&`7AJJ@mkMh-xcH&k3}43f{9qvH=n#kct*m
z)@vkcLt6Ndk#@MNkh)!on$?NmMNudVF+j1bsRKDl4z3FkC8$+8>~1b_Ujp4G%~~DE
zC^bTN5_m)$Qidqn+9pAli9nnUDjHzp+MsJ=V5jv!c8P$mXaYrLvJPm{2vVMa`Zm_E
zWlw5qso2KflWkMc+f-=d@8G)tkjCFZd`JrkRC<F}gQr017|{4T)G&z8P{-dvO$*TY
zdkTE~J;gfJHWk_=gfDVYFaXz<dZn3qkbB>3t5MF4g4X^Zzk=p)Kuz)Jq*%}ifF=2$
zau3|=0M87jXr@7pD2`5zwMFLC)I`VXAPYb)IEhZyNr_I41+^kTX&ezVi8>h8LL65d
zodmw01ym2FfNSxbRM5fSpjINJFA17!Qd2Vob<PuE-4;|?@LUsUqlP9p7E^5vtW#}Z
z?M~}dZEej&J;>z;#nEZesj;9<Bx-74mSHSt;X_WP2Ha>+o~#8=*=N}r=ww5#6GMa!
zXk%A$s&yiGG8r^FmPn{r1O;@8PO45CIAGIk4Xi=^I7M5HRNG|GSsCCPKTC=#t3l19
zcyJk=s-u(&I=ZkJbowV~*$Sjc1kH7)YQipK^hnH0$w@8JP=ZJ*Y1SqumLz9rq-$2!
zCV_S-fr?YmPz~6Xppp<Ww1ebc$n~Tk2SR59buw+MYrz*vL-*e3foJ7lE$<}IB|eb-
zJs=6gSe;bcEb!vqBppygJH<9x2Q<$b4jw}SS(#b^ZQ(|zqL$3qYJYf(HAyEGbb?fL
zR;+DebXF|5@0bQ=Mkj&qfQrtFjZQ)`0z55?Tt>x1j#7m<1bhgJ270{&>$M`Q1Z^eO
z)U*QaW(M6H4=SQT?Qif{U%E~jqRX112kpG-#1|Chm*j(+?qFr05oS%Dc<^cgXYeRv
zX>v(^5%?^3O`QzzTz9fg1}s6^CV~zeN>43;S5n{&83mvP=*8d=1T{&Kw)TQ2aG_pB
z*)x`+3GrtpO31(}2h6e@v`Q`?lI219AA237lZr?#i1r8`t(veaHW57%h!c`@px33u
z7nc^K7Qy<n5T0W}K~5zsm4RD35OLc?=nw>04_K9Ls!oz^3N+V(lwyuofEC*&V`@#)
zNvf@d9YLi54yY8(T1}mFME=Hzj|`n^NWKBjRYH&COta5`MjMi7O-+(jQmsy=PBmn7
z8659c={lgpf{P0hlT)p-K<5#pr<Q<*7Oj$?9JkV(9I!wt=on~wP)P)e@-#inG=$cb
z0cBj!*;C*Y2rjx|iAf^`JTnirRa;3<NjnAVT#!XN={m`JkYo$;Jmk0{1#I?#u06wa
z1*E7?2PIBO$mk^%fik>Cl1{p&PCDrR9;i5^ql-vENt*DxkRjD<Hl%3?&zd@hnmRac
zuLDhqCxgbpKsVNDrr3h0=;T-(5UrPySnOY(7f_TBK1f&tG*b<41%NkU=w%iM<RoV1
zLE6h2DVp|4pq&Yz41_EW64bPZg(6ax1WD+mfNt7F@tOuWw_AZ^ZQ<Qlg(RdPfCLRv
z5a_^H4I<?tXzaj}LQPE)_~dGooSX{DM`^YgJ7Q9G(rvMYWCnN?3YM+Xa5rC*bwGDV
zfU6#Gj)Hqd33ibQXzVBzv_d-#eA-Z&Jt*Yh$CQDpQcX2ArFhWg%&B_G8Hq)XphMj4
zHIi*Xa?sqG21*~vir`D+;L(!|G8Md;7t)irhuoDGTmo8L0a+=kscDrAwicoZ6bq?E
zMfpV<N_qJT#ihv^3Xm<EpcA=ML30~v`9%s!+DY0<3Xs@>-^T(vs~&P;wuVx2VqRW;
z3HTm(sQzMw{5+_>f}+g)BG45Spku)^LEA&X(_PjIpmUUS3rbQ`K$4&~4pcA9ZcuO2
zN&|MapqiRSDtd_m4Gd5tKqopi7Ith_x+e63U&tmKr1Bb+%|WX?P~s;Ebj>@YQ3Dz-
zsjdZ`02vQ*E$Gr5FauQ3L5F}Ku?jw+6m%yDhzr`-p{bKm3reeyY7&u1H9^N<>On-Y
z6holt{6v^EyzsGwmXn|&#!3ki@Ji4!4ylv`&Ave=%%J@dEAUK}ostg3JH=Mjuyr7y
zNjOOL44x3I)j_G&5v@z`zz%5HTQcNcbv;xIAcCMt3rLj!9lQpu8ivlAm6m3v*k*wa
zC<9F{gWFypZ-C2BTTuB43NdIV1xbL%Wb{C~ASQykM45T%#kPsivs(4QlS-gbFoY1e
zBL^1(<pYqZ;C?nZYM~VtB;;U40oZ(~E93L?G!zZMBCv+APBo<UhX@OBw+nIz2B>=h
zZRJ2uE7bsxq=Br}gY^wTp`ce>Qkj!#pR9*6E^CzxS5#Az40S_!Cg^B>=nd>}c~E;C
z8s=e{spXIWN0EiJ<-@_cVF?`?-{=_xRH%ZT2$hF;I6ghK#JMOnu_P5bmk*kbfI14A
zEMQ@eG!X&T06BLI-57A11dVHeP9p=`2hBCLIv93YCF<qn=NBMJz;(l=pa~VG5|kBT
za?sF6L=yBQ*m$S}%;C_4sR!-%f*pmL7-56TV0VM%QIiXbJn~=*Hnq^ugP5S9NrbhK
zvFya6%tT#S9)*u1L1sU(*rTlkR}7jlhRon0v_s+rmV@v)0-_S0vrsmXVa^SLT>{T@
zI242BL90n&Q2~oGNT49c7_`j|HWnIDwa_99p$uFSfeLJJk54DvHVJex0eBg4Q9Ae*
zhhpfk7;J0;OJf6U1vK%4Plv#$@xg0$(?NYT&>gdgz8bh`T%3`a2HG?Q+mr-pbfwy+
zgPIcrtcy;H1-HPg(`;bcbq&Ei)YRyd=(JeSIiO$~+$T%5g^Gea32K!W<QHgY>VS7V
z;qWe`3b(bjO^r^9wFgy#Rv?x&h_Fot?==VQLn6uu<ZyzUh9+nY_H{DswpFlfJmQdO
z&`x)dSgj6{AR;;wA#JWCaMvAlt(!t3<T6KuYK<hFL{O-~npx<kAsL1^&<Zjl1&w0x
za$y}Mc#Z(A7lqwO14)J&n$XqM#N;t09Yw_?O&!qPRv@<^Y9bt20Gywcpk)C#KY;2e
z9E!p6O0cF%Ep#9c;YZZ*J47fIYamzZpmpR>?~<t10HifOKM$b|ZCnZDWosqaq0oqt
zeDD#upwWpWog`aDLrt9&P~$WeRQo}_4l9Acjb=R<4?OIi4BBo88QcJw53hWoH_^f(
z3DhG3j}9Ys*Hd)Tk<Po$K<ole0^M{7O#$#TpA~Iw6%D{^jY0Nkg8DU(C`S};&~Qsp
z(zMsWC>PT0)1uR3t<u4}aB?a&(vUjGuydDTn&4rR4%%F)mkw$Ir6W@{H5p(oXjBd)
ztE~;WODWSfMK2dT)TAG$5gk)*r5mfI8B?sKp{J#(qOYj~Ip;+?O%Ju|(#f{Xj5dn3
z&bCiQEK$kU$<oOHbu&TXtpQ>~A~-D#C5APtlWjFX<EBcQ(7pGd%ex?Ffq+5^%_?n>
zEToNw=7uC#{gMo-?m%7N^u!X-R0O1M0l5O&jsqJD<Ll++mw-m`K^xg%tru`s0A&?e
zV+byQO*J@|A*+T9psKFbiBCz*NvuS8A3U}N>kcR+!&4Au>?hi%fbKF%gvEXeQtX4L
z4Iy{v!AdHm*@|S);r0fawL0-|XCWMr1Z}Orr64&3&IM<YBxo)IwNaCFs=>>!QbE^f
zp_l{OCkR`_n^=^dS^{22kDkQACW9(vuqipIiDgK)MkRrkb0z7anF47A<1z@Grr^<o
z;v#S~!=)fTgLAR@3@n+6TmWHp5X$l&NRtPw6XY#0Bfk{s1_e?)1=bB(TLX$N=#m>G
zFQJX;LVN@*XP{&4DYhx#>Kimv3vS1P&g)Hv9EqfnWDD6X3GMBG<sqY9_DPU=Mo4jo
zB%z%Is-JxF;pegFz;<IoY=^d%q77of=fCC`Wu|B5CFX!lfQ;CK#&yy(!IKWjpc8z-
z(+!}#NU*dDjwYx%umN!JNrF0x8Yn{%>6&V4>Ci4VvL=w_(aG@Mc8aDZ=tOZt&<^{|
zVi(9hVbJ<rP?}BA(9{I?i@}9Cc!4o!ohxKDF=&4-gy&yc0=kC<eqSDFWCycb9IX_u
zq>VgQ4Q?4~R>O*6`1E2bc(9;4H7zYQxx^|JdK@=si%zP2D#)=0H8rpqYJ?{HWUEv?
zh@P67WUD05j1V|-F_l8hhp*fP4L7FSDuP1K6?B;dbZ9J9QzumqeojW34!E#RtOU(M
zfD0xKr~vrD$3&>r#o)bxV3!v|g`zWJ?Ng$YVl`4VtujE9acXKQ5V4F{kQvYg#5$>Z
zsfopzdFeW7pl$SprKzQ<i1jVWpu7c&Moo}O;MEdokRe0R{nnZ~$>0map+S{ns{w1>
zf<}w16XEwfLpKkX79dR4tj+;nXl)JC0$R5TIapE&G0YENnFh^3R@KRgdC93cR**e_
zI-rw9K)aEktHyO8%dnxn0`Mh1B_Q=yhM<eTKx^G=b>hK=nrB`nQuc?oGQqjU8suGA
z3j^E?(LhYi>M22LHAof&jYJ@Zgb~B@NqP`Vz{d}Q7CJ$VNzTbk&c<g1e3_3TxW@uo
zAeso@S*?=<EfPT1YAeB}cAY_ng0nKHMUn_@H-h`8uu^~sojQ<x{GPeFsVSL>C8?mH
z+{AS7n45+sC^liO7icvDp0rK{ZB&GXs7q>bNl`vhy$P+gV1)*>PmN_T2WliF%zX39
zQbA``gPH}fu@mSzHCWRD5*?tGt60Jk9DA5Xfm$1&#soAjOAGL84K0AV0aVC?Qw%6F
zk&1cnOt)eV)RPDcK|!K}<cMI<T7c9Ps8=BBLP4i{BP#-#4UR(FB=F29WTr+Z#TL{J
zOM;wypp%L@@C>#Gnl<zwIRiBM2pN3>&&q<*3g`eMjNSQIw8A#jS}7XBiv1KdHN{jE
zw>u{mfNrMNNYb<iFY<w8S@4;QzNsa)kn4(JP68KL5RXE_5Y)2rO)Y_~34{a(STpFT
z$08hOJ|?4EVgOyYk75t3T?jQavlyK9eN#aVM-(rB?SqL!JOR-IjVo|50L{W+A&n$W
zP{+U!dJQp(VolIEFlglu@+u1*MFUMM4dhIm1dRYlU?7SQ?D-f}nnPMt;CxJ)W{4FK
zM<VAY#PBkrq)LW*6QmBjCm5V8AbJsb0H4m#0)#%;kS4Ua14lWj*_6CYs*?mO4xvp6
z4NaXKTSWs<L}*$m8q~r{DUe6eb1{;iLDDJUtPNV0p_d726DY#H1!MT;r+`*S!ipti
zVH-<LH8sT~J;*L4*ccO%4dA>F8m>`<=4)JPpd%(4P-QhWa6@5Z6Od>EJK0vz0HqWK
zC)?B%XcmPibSX+q2OSiE8C059$hp9UnmGr_=kP*K2bP_XBw-Fl5`wxH(&mMD0UUU+
z+rS}0P>t|nI<x>KdXWbWVevFD^$2pdggP2EBB6qy-MFv}59<m*yb2FMXjuX(CBPFG
zFy#;{2ox@$ECEpnF*Ud(A5<NI^NXPl=uS(BI8rh|geaoqfZXDgSfK%CfNoSrj=KEv
zJaB!cSCE*V8ljsAp*0~FJ>gXx2~`}asc8o(h~b4iG+n~7GOQR!xDIvj3tarb6u~rs
z0~uKdOaheJu!)0$2b(yw9z>Rcq%}}sqiL-O8!*s78huLA058LWIWro(=^MJR8MM?*
zOCt}m69BZ)T+=>D-_XFo%1~1WMV(=+CXzbCSWWw6sJd9h{*z?T+G?0R3Sj-9#chzy
z<)ATg(7y7T8l;`#DTs|?NuUFRA)ZmN1kGWATN0r4UG|_U#*z#xa7z?)CzwtK<mi?p
zJqSZXQzt(ytvI#Bs=6e<z{&t}DTG07tre)71DSo&NY*6PoFqNSZjTV~@HY4m8ki7h
z<uzzl%?dP|4<2lS)&MX&3}9|FKyg|!I7voA90=h=)Ye+TJqTWP3|^eAp$Rh~39|GZ
zvYZ;>)g<^mXlVOwz->A3$}U@QF3C--(8+)>6O)Q{G9k>O{L;J>oh(~@kiTk@K^@?t
znj+9ja($g_Tm6#!0+?VDcsaSgPL8cU?EZOejTpV?n3Py;O?y>)eVtre{kWKNZGD|Q
zTYXg(eVu$;@XB)7b`$GFJs8ur8WN;QiO?nJNC`GGO#?DbplE9gzs?A90wj2}*EUfD
zJY}o^p0>1A2i+_V8Zt}D$xqI<hS^}1m;^aM$htf;r6j}3)S#fk8j?&PY}iH@E6AQ3
zYjr#Dj!CGYP?d%TAZ-v6K>Kt+s=(VEVVfOw(ri<Z?tVf_yNMdG6ObS~j6t^@B-y4x
zV+$O&Iw_E~qcEo^=_o;hMM+a98BHl@U<P!6d$KL4@2i)blbM=V0yYJ7tr?`b20Dtw
zHc2<RRwq5RBpAFy$ulo4A5luc_a`OkWfnv71E^-tEQW2y0o@0l1n+)=*UZ8kr&|G9
zj%Z7c&PpZFtrjr9f%0@s4dm!15F6BI0Ee&*+-A^(G9)CxKGXrNdI5U}v=9Y!`Yb3e
zz-*9aNL*pl4aqCe?gTV*ffld85(zY8!&0G!rWHKDrrIM?D;8z7;4lu)EXl~s!x6@b
z8c8)ZkO^~59nk7dSdeRg&M^mth@v8hrKSch=0JYV%TGxKm2@x{Lwm1Q$vQB-Rw+7&
z*s@B66)MTlWTl~5Q&SDf$yNqB;3BYA2NI5;g32lx>Jbn}LlY_!l3xIqfRu3H$goPO
zsR6AC0CO}zWAxa{B&Z@t3?NiN!W~pFg4UO$<stGtJfEk6+qsIV;FBfu(_rn;e5AoU
zr15KO&^j8(dNK{rNw<)xh&-JFokE==onoC5ol;xSp_KV)nmT2mLrI|Lh=GnOLPU~A
zs$Mxb#x!-x(G($ai$<BIPKB)oXcR0bClj<ov8F~TEhn=8W%5C%5_Bp)w3;fhP0=XT
z)F}l;A!=s~H0Y+6SYoRLiW7yBe9)oq1-2!ip_GygokH6ZXw9WlWLpA_LY-p7UhnE!
zog(<OQnXSo=x7V@sSNO7gp3`5D|TCrRPb%?u{AZIqXVJS!U{^7;4>(bp%c%b4M(<F
zkcu9Z`ZVp6VQY}0l_15xQmm#`HnIwY1WakNrWIUJ2cb;|WFngB(FU<rFcmtWv-@q~
zW`mm#(S}I!iMBbAy&WKfG<A{?T*FvRol1!RY@-wHL2VQ(1Dzy$P;<e`0JIPg)B=pP
zjm||f05t3i=Nra?)&RxULT0Ed5aCe~Z5V4?0cry2D1mD}P|1?2mk8S2Y!8~SPb<;3
zEr5FhG<yw^R8!M{OY0kH>L@{~NVs;xSo>l<&~;U|g&4XGLA!WivLMZQwn-Y5dWj{V
zG_9!vGdB<91*o#TXv0`Y+ZjAEjg|&dbh30nw*-KK0o0t%hBOzz1*nFmPOdFf0G2m(
z@@<pB9WNav$W}8@sQ{V?MiU0@CDYWYvdz)X*GAO<*>9$)T@Fpoj<&hlC1`4(d(c3N
zAccgE6H4+f*3@wZdpx&N2kJnWi=kYYdo`_*BPX{q+91~6333&zZ4PSif+f||G~m*p
z@I{H7+{$P}koJ=N0$tl&4Bg<!aRNo1u5B(zGsGlqTW3&ofF(d|!&sfPni{AzwwX|d
zrVdyEm|v1#pb0Acs}VtLm9GQgfC}CcQ27Xs&1i5Dp#-{jrU0~M4{crnw4DQ5rbSmo
zC&k8sx?dQA(aEtIPCC_)5jb!-S{3L(c#vSUD%1hhDG;d~FdHh7tCO4$E$;%L7Fner
z#2`AV5CTwbj<6ai8kADC!Qlf+r`pcZhOx0axs_I_dbyQ4i6vH`45b4peyz&DHd|%a
zf>t1>>Xm|K0MyhpvQUP4K<j9dY>OaK42b}pWZNX|0^J;)6x$+j?0`cW)CSWo)XfEL
zUx0Ylsv6|W)Vva_Qb-dUVhXrQ1ZxB>Of1Q;DuA`E3v0nH0_lKj&4y@&+6<~qA+~{Q
zM5`Q_*4$d1jQpa^s{Fi?#2hOFyJUMvOj;$`8Q4RUEIfhfl%*DxWF~_Zrr9fjDg>((
zkUD6|VWpItnUa!|s#I&8V^^T2mZ6cPovdk7pr)pgsfVz}7FM8Y>g3uLf|R9br)k<0
zf|bFnu!WhWsgtge0UCSB0ByRn194I`buu*4G&Sur^)hn{@{39m^Ga-$5Edv|p-8}t
zRMLS)7GxF%RMhAs>STgqF&kQaX~1_(IO$Y_Bi1Ub7PQ(Fl+uwBtZj8#W{DM~tpYE}
zz?0pecu&>=t!#p%7M)bv6nJyhK1C0yL6ZWt6r4st$pBgsW!NTyg>;kjFjBQ1B=><z
zJDp71RNV}nEZYpwUUyjX2PbviG~HBdB;8;^yEOYu&?T`3cD7ld^&=2Vv@@~l)`7~}
zX6hzuT4h1?W!gi8ZBwl>?Xut;?KEVkf-SQ`QfL5GsBN1GG6~AlwatPlO4op>*3E!g
z3)+aCk2DxXLdb&3C3wJ=<QM3q*@Al9pq4JIwE_xXP|=ALK(Ims8oVL-1=vFuQf{CJ
zFGLhGd_k2bO7KDyg0$--f=U2w%-}7_FMx+Gn2j2^5EHDxy20u|feW$+9=0H#frA#L
z8x*o20Z_n#O7q%U9Z+KsU&;lY>i}(Nf=@|=j7fkKq;@J&^3_SV1vN-hN-{t}g-GJa
zYOGRGl6V%82|L?1OE*&|$2JQyX{PID>f}Niq@adMk{-CWwAY1nz92~tT5N$fVnd~o
zWes%lko7~_Nw85sOambDx~K{abn<O=jkI8c7odK#fn7FIrpndM)6U1{`ZOI41H0s!
znq->{jciTO{z*vE*R};~(bTlc0p&FfP>&1L>PF63Xo(b5255tI>1OI^q}UnM)MRL+
zXxijpF|`(4d0;K6aKtw#O~IlPlpR2^4Q&Hu+NNSgHz?o1V;hw3K#>hfdiZl0)~JRg
za$RU#gQ^)=TpGse<k{xJq8p;l3aM=bP7j8$_K*mN%7bDHTv>rlNh|?1o?!6_Rf1v!
zL<Ky`p-K#N3Q*$QFxDCz=b)GZ1r{j63y`B6qE9zn7aZp)H8m+naSqa93)TXUa?pwv
zf&m6jR|TL5PliNzGCabOjfCcNER_^!V>41krUxnxz?mC+*Hs5RmjfShNXsn2qZlof
zVYR9xzkq0)aH_2Z`485{gmfaogKIje;A3IolNITyCD45u#ZHwWiRqvjUD&`Ds4bjn
z3s(wR0S{HJp#<J#Zk>cnKEocY0+jSpK;uIxw$+HEQLSKyr$XCl@KG599mruCRtC^U
zG^h`ln4Fys9>#>-)uNLDY8^v|3sQ8jUMdVK8myFb4Glmed`jTV4d>Nrf>->eD}Xl9
zYbHVVM?|N`+NMOO$66<WLO(Sx#W^E0Cq*L@G*p*?IK&3N?ExAPI?2#G*rB(3C+Q^X
zfe$|fYuD7tgqRK*2n3xvXbV5c)k*<Af~f#@tb(C|p1Fy!k&%&6L4~!F4rujirY5v{
z0AHt_RsyPT><kS+8>a12b&~YJr)_wI`1;r?DZ%g82HOm};afwqRs(eU6H;o{L0J%!
zn4Fwnl#&TLCKB_wCg{wFRdr%A=xkXl10Co+m{!%b;C@140r>n}&^8|M(72TncnOM<
zPDW~CN@|gnlAS_Mrh=V<6*xR}!Fy(P>=dl>@=G*wGBvG0nm~#{gVDjDEh<)!K|`HP
z&<;zOy|A+;K_~Jg=jZ8`6lEsnrRSvT8tN8<bVIDdBAcpIs{?j=Vo54^gAw%1LPwBy
zU}Cj8pcP-B^(e(w)sVCol3xI=<UmqN&=d*j=%PqKPl*AQ>!9?Us-y!Ifv5#1@>Gx$
zK^}ziYQd)*;;^qcBflK0eGmz#>0tX%L}2zo1R-^hl@gc--&BPdB!-p-DAQk%Wl5m1
zEzl9X5GfGPBQph*4572X&`uX<-6UcyCOi#+c7H%-2SF_8VS+`e#i=Dqu*;Q-@^e5Z
zik2iM<z#|xP1S)^eb9si8mb0ISSolugqj*?|A3-xk{(2`rbYwCw1v+{!_LbG9qI_W
zTp6aq#sGAP8dRq?#6yr|2^x9HOE1ZQ`U!FT8S=&;@bn^Rbp&#-K}G|sA;v%^jv+47
zDF9iIECL;Tg6zqJD1u&XW0eRRHid0<^8}}Kc&h_j)aZe8gEeTuKWJj4xF9hPbW9S;
z3RHL;=t3N)3(^CM1u(6o4Vpj$<r7WNI);MOyp)i9@X(MRM0qhZET9erXVjw9JPq&}
zAXv>t+ZKc{AMPwzL_o4H)B>n=I1&)p)x}DhpxJil)+vne0d+}Xu7)l~!;%zXCLv~S
zi13OAlD){$4(hKaLNW*}13;!@uviQVbDVhqq6@Og3Y-(rLIom^#Z+jlf(*xq4M?1U
zq#(<Xq5Jee0*J#qK|F{whH}WcD=8oqQ1zhJBy6J@vSXpa4G{uw5=*TpNX$z~O@XHd
zBss`hN$hf<Ge?W^bBfXQl_VxX&n1Ui1v|D4wt)_|iwm48Ko^gp=4;T|iyAPOBZ3jR
zBm#L85<kcXpF%wj8KVIyL4-2Msi}G315+^sb#Voz66CrQ(4L=y9Pn|}Xg-C+KGc^;
zfd-kXL{kh7>YT)+)SR5ul%z_yEK=wwL7fTOpbgF;(7GGip9fd2pe7S|!VgkEDCsDH
z7ONxn@F0>rcq{=@*eOB02<k{Cg3q6TY;B4M3xl>+Bxzb{Ku$9OtAVXKf!PnL;!9x5
z<MPweP)Z%hST~ANXpR86s<Z%H2p4N4!I$2FPksQca?sRK0*(7X>kW{v6KiUcp!-r`
z27=uPsY;+S2xl8;>L`KA#$ps#qo=PVn9CteUud#}T(t*k07K7cN8Zr|D<Mkq)6;WO
z5s46z`{28Kz?--r2ka?<;};<V+iHPSR-%L&v>pMi$tP@uCb%$#-lm6$VaQ2Jib;Bj
zIVIkymEbjH$t6WO-l>(4DhSlmD$Ue`p4h1a*;xWFcOhpg=|J~K!5o^Imy%kc0qZt`
z_8BS~T0<}8OM)4tSq;9!EE)MCzGTStd(a~=p~gjPq-q;#s;0z3t}21t?3E0@HxF`Y
zU$S0kfE9)wT|?~@OkI#8KcO~5u2%zRlX!6YgdMe$gmNWYvL5)5Q8XJ2(A)z$q7+R@
zimqX7E$F}_&~_Necr~p3125rpbPYjQ=A>at7-;IGLGP9X?fC~a!jRW~f_5&%gPR-P
zsg<B5TPTqV4`xu31RW6tjX=H70MJA_G>X+gm+GKzu>n~Gy6qxAxwIHm6GBggMHmlB
z7?7jTV8`1)YDLgtBgv`7#Q~sJ5OO07w5`DqY;k^04m7iZ#0+X`AS-#HaSdxNA=-C}
zhLFMml7~T?>@}@mEeenchLDyOa)!pz`~q#Y1I=ibBxdFnLoyLGe}cNU;1mF{05mrU
zF%i{8uoZGJQOMnep!3Sm@-u94GibRk#7NLWJ0u$*UH}Uq91UBxqhX)}^PH}sCX!FV
z>S2~c@)uYLVg;<QL~bj=t4e76fua&Me$Zny5v3B<fkrSmi4{ZQ7wQ0rI%ojufrA3<
z7+84=QHHkV3sGr8q(QYSH0&U|azFym`ZqBr2Q)tkI->z%J;X+c#$sr>hpX)ftpP#C
zkyzm?fzGT3-|?aZ?wW$47vXHExzM^^Q%Mtc;Tfnw4)%XMs9pn|3s3?{Vo>+OYb}s8
z=o%iVG{kF=f*Be~=urYcObHsaI-p~KAk{XwDu<Q4u(*JnzM!EAi7rUufP`H<D4M_>
z-c*fbXm5x>3_*Pg3P?yqLCgd3q49*=Kt$AVP)VdnglHr#-k`RE)?j4hm%~yqG$^4J
zCAifDK8{vN6W1{+;3xnM*?_i!Le3fn-R4tLQly~-I;0mo?*wTmg6Ew|p(g{QC;|-u
zfpvhZW>5+Mw^nshK})f~N8CaxZKOsS=v+D2?WGvb1xGn7X~X;k8U+ETA4o7kYl3Qs
z$?(=QXfIk$F{slFb_=}44Ht)1DORAn(BWYXay`^2Xq(bXsidehRjC%9ev#~kmA}YB
zU~fW=KynS(5FLmkksJdNhP%a}7BwuO=D?kjmI(4wE%caGScrfRnT7@)%qS%tcvl~#
z5eBIqP}+&fkZr=6I!bAoIXR$)U5dR%l5Hxq5e!RHuuKCQy8>+n)=;tn4@~By;z(7X
zlV?C71DfYg294usz{l{EG_4Uwek<DAf==Uxoc##lXe8;{CPUU~K*qX3m*9bBQ$gmz
zn^WNR0Z3y2NxINI$I!!&5n5}ZMLsOVAPE^GFF=mB)P#8)xth_1$w5XA!Ru=^G__%(
zkU|D@rEV>>4+C2s2s%`@v?O0iQxiH$XAAbOMv^V`$QlA}N`fp$%}uNT9jO4xrjWpd
z*a_~Bz+4QPPlmCRz)e_iCIJoF!NUo@))5?*$OT;zXdRF>>;xWYsTXYkT9A`$3p+yy
zY#`{!PiRU)X$eACSXd>)?<4|mXSPZP-(iGkk3o+U0nLBwAh`fhp2N?e#n`WzgxcOn
zE!0Q?UEmHHgD6fdfpvaROacu=B->WQTJuVvE4IKVy4He5hoC29Cn4>iN7_9II-DXI
zbV7&{N}E>+mZHFw7&s(h@tBwbIcFK3Od*L4QLW{HBM~O813N+pv_%}nAc#I4BzJ?$
zLumUI;R5i!aL^ul6my{|J|4U;8dJ7b2gN^F!VBycL`4ebLLwhL!j8Vz95linZ4e7e
z-JnKdx@{WhzHFr4rcQ=!x_zRCrd2AmwABHfm;m);mTh%@P6}kq%PK`DKPLs;D7MN3
z9nJ+6hUx~1KqND2tuc4afQ}AV1TEczx13>}Sm>s34JF7GJmA_ru_RSVCrKv@w(S{S
z+1sXrt^fdg8WypTc4R6vU?D+an+EX`G&4YYuNqmP`i{`36tw0BwGWWn3!o*=kfBS^
z-eS^+6q6yEp}7|lbVw~1m^8#wn&5R>sn7ux>}?WU4M&IxID7%}6|`XkZuNj>dq6|B
zpu644_Y=fQEWUw62Gp}Uumpz7<)DU1YF-J{=}M3$B_!&w<bx!=ywq}Vf`fJEL0vx3
za6d}*4->RX(u1X5NV5_q0dfr_hk`^v69k&zOS(a4m%;amfuul2!;a|$@j*&$Qy?h}
znjiI`GfI%MFdoVS?feIw!LE@4YilR#fhIFxHF!M4kIwnI1v#lDp!*v^=@hxa0&i%5
z+a<LiX^;zGjXY>`1gTjAX^>#HYarsanmUN(wXlPe>{CF4>1A*;VJ#LbT|?aFSRu?o
z$&;A3eL%+F6hJ$*5gTm4;SOyng05wN4wr(q+tgwRgU1+>q3tPf>k%3(I!X|4foB5{
z9)L9JkOBo9c$j{H2*bS#IkN{Eb%=BaUa|}sGXNinppy>nk?3UD8t8!Ti~$ctCgoS?
z7H3w0u37*cECX8T0h*doQ`1mPf~HE)@idSUOVb84-w7IH($v(+2Ac*Ohk&Ic@X-i4
zwpnUw*?ORwv8E<lCl|5kP_sH+4?XcD!;iGZsG@V!)HKp;b2N1@4s!s>q=IBpZBuJ%
za-e4%)YN1{SvqO9X&`afX$&A47+VMCGw>=ekaz7hKr195DIBG-2pRx_1}r${!Px;k
zcc@bhGtMea2XexKRjN*LNh<o1Fi^*{9MbdxPoaah)7EP0fH&YIg3SXZ;JnOS&|oe&
zNrK#g#}3%p5mvbv)+K9JC+p?qqgkh;1a07fE{p-4#9Lqw8?M$(%C7*m(=$Ow6lvRn
zHEUYIWI@Ba>F^ka7y|D8f|j_W+moV;wtY%B19Tj-0q8_T@PG=k7eVv75HF_br0V2?
zP8>xEW<(G`<ZE@%QVmivha_>(0iN*UG6|y|!Zn<r1kZx#wJdU_11fQ`*J(Oju*3wO
z?Szd3fc7cCFFCVKf*&D|A`Y$p5vM7FD<5z}0yOWclL!hr)a3%Xsd=T?j?aM3IYC!M
zSSi_*=GZAg&%`h`Fn}JIQEXKW9&)#;E-p<18D#}J_6j7Vo19pbSfXpF3!1XeEJ@8R
z2CW^?QqlpbDz;K8%~8^UEwHhw&aJcpufWwc1aG(itv!aUX9II<bwI-eR!ShPN;*k7
zrA3gre{lN|!h{rYU^dq2ad0*OheoPzYF;U%q=9xDA=MXn^Cx837;z#4RD~Y$kU~ld
zBH}<U0<|X~^G^sCY$i$xb4VYg1v;0hqX-!?h1mic*nv#Yf<h2}T{*NCs0IfD*dws2
z79;|?ya!xoSQ)??{xE6S1O#--17;0;J{J^MkoFx+C45#NT(`hQbsz%`u;i7Wr%??#
zQUg>VgKr0f_^Ko|R|zE_VYyC12eP6Br!IIO5NW908WK*(Q3PtigN9qclfW3BfXrsV
zX09NK1GJhNv=a_gN<a@P0d3VSNKFClz=9OU$Tom?$R~pibc4hR$cykefwXQQqa~nT
z9>jsL5Y8;tP_hE2PQ-nH@I^+T91BT_(9ET&2fkLfxCDzmFfYJNhIbSort3s28pJ}Q
z1!AU}8t4QNa4LZaKud~ZtcHUw8z=%Dq>*0=9m*`p%uOu<H#;FQ4BlLdFS0VzG$5V_
zwZ<~@ON-sWx12%BP|!FFdT-1+Sr0Kz0~(lx#2&=8@R?9V9z&IeWLB{6!8?{~Yjwbp
zmXiuPa|||xnCh4Vx;Gdh1NVWF6{;GrNl0lH)TxGa%8|kl+D(H+0yv+7rC~V@T)=7S
zfk(TnVUw0%qcsvi!-$YV3wfLatQ~T29P$xIi3H|0U@P}96A{#n&|WPl06@#dG;2Xu
z^ntRe71G!OG{r!Ns^M+$d}#L{W{FNUc<~of=)exI0Vi1hJlGag@QFeiiJH)Y2H6dX
zP`kiUfhb;U!3VrSXE_iSK+T5*G^7SanoNfzl9bfq<kY;B#5~X{ByePaO95yGh2F}9
zWz_&k0iujXuwbP%NCcz?QaporX+`;9OOPD`Ds<t=6yi2m!x>E&T!<nKD8tq<Ks146
zAtea*B^A)7Jr-T?f*B@<ST}&utAd3iY8dH)QY+l4h>QmDI;aeX84GbJ77v5nj?Wd4
z07IA!$;9B{Ah^vC({Y3yE=w~Kiwp7#N<lk2;hl8?GY8g5df-DZK-C@CkI=RXq=^D5
zp<%5%(Ai`<;GBsg<We%rGC}vk!2$^3L9oG4X;8|6v<P4+3%o1?Hpquu41kLo9awKl
z(E!)vI(R`cY~~ks87A1JuwpkLF&)%xMxI*7)C9gx6RZt1xJ5_{c(NR<Iv#W=kA@O>
z(Weq<Fun+Ug*3|KI*M(eIdo*5If)<*N)QTlQXWNLXaHo+7v?JsJZe!rgHNT8t6K=f
zTv*YBPj!%|y9ZP`q`Xm6gVb;ko*t-nN7P%0TmUWoAXyrp1(4MW;H3*Fo`)=HfCL-Z
zE>H&!PXM?EJ39ur;_?`@1#guOnzn|n_J9Q|q>ct{I@U?G4K69l%uClxE6UGx&PXhB
z&QD3zfUi1$tohKvY$!m6H$ZKNBGA5gTiX=-G+RXjt5n+*?Ns>9F%VUtCbuW351^3>
zn#W61Qv=`J3|eLl>idIz4E8W=cuW)0zCsdn%*jEtV4x)!Xe=K-q@Y32Bak!F^x`qy
zgcu8go__?Xy1~bufE|Y#ZnmkALIPqCI0zse3e5T(bY5*qDrAKfsv)&HhN;GynpSvJ
zq=VL3fOH{dCp18l3E*HsnK(&=R-9lN&^{GNSV2l%L<)tSqK2d_8eEjaN>y8R&`6Ma
ztP(T=plLY~I;#h5NGF1(Z=j6_<hmPFn1OdBfI|Z|qYZB(fd*Oipk*)YG9i?5797+t
z<)8w!7&`q8Qw1F)%t<UR1|9yW3sM8AtU*U;gSEqyBC0&pz7%LB4!D7;fmj&;G6u8?
z0HtFD5=0c_2o|hJ2Z_L%2cW?R(3lH&iWXFJLGmQbD<Bc*m>aZChtAwW1tFoFnxX`o
z0j?!bqk;C+LfiGA3kt!ft6*J34DtjxfIzMV1%!f<b}H=B$kI$m079b#S{;H;d$L9y
zVuV$>ux=n|kQB7y7<@bm@?a!VTSo_G1ZajHG(8GBM+H9r1dSz7VUUDn*$JqDQVhzJ
z@E#t-BapTU`rIlw*}<k)ty3U3ql4>djU-J_7D9<v)QTAtE?~2vRX6A|7#+}{6;fvm
zT-xZsdl0&CrKp2AU}HcoR{|X!iMmdq8rI4IjU<DT10;dOgOms5=cIxg9-vJokTomV
zY8T{ihUaKlj6ljGNVX<vg%q^TO3EoM0v9bX2O(!`$gp)a$bXPA7?2_*9nf<Br2Gmi
zB}g(?ss*3)03X}~`7##ykbZ=b;KisYYc+9XU67UF<O^>zLK<9P<q&I&p>s;mM2s{6
zlLRYkG%-%<2kVEXL6md)K}|%oLX(JPosgT)z>8R+cQK>+6_i4gby6UcF5s|E)JarR
zQvz2rpwZGq@KMgtu2MW?x3p(oNj~Um7SOl_*ujwKwFPCEqGIrM5#VwbI-Q1^7$Kg3
zn2*_5g~&q8gRNnK1t%!pps4~DLf~l_$W#JE4^jtACk2`?!TB6H9l{GJ%;61ijslG}
zA&;e@ISLd$&=xZygdoj=cyRYq16nD8M=T&Afm#280}iGhdIl)?j8RC@1Mfm0bs&-E
zg%Z`&^y9!iSAEFYD$sa>hEF{BOk4kg)V$2RbkK?1VA~);1Zwgi4bwsb1~D)Ti5Z<l
zooY~KvPuGXhf(7lk%nMHVz7RKP6i|;#b+cILk_{w0PTKFhTKUCJsu9c5ChFYpxJLF
z)E!Yu;Crfdp!b;)(u>%x1l5;n3)>D1zVV_!7tKb*RyWWl&t%;cSjCSBB|V6@A?FxD
zW|W{w8We`GB_p7bf3)cU9Rs^mNP@s>SekaKrd6tThFv-|x^St|P1nu<wP-*Y6A|d(
zLMo}I2D9Z0PH@n?3NaHlN(bR#Ocg*<HYCbX^x1+(<-tLQNE#q#D8W+(SQ26`WJwBg
znnQA}W;ITSLI!Wa%ZHJ2GPETEN;qIUz`i0X8$r`@enDy;XzB^Vg=8vF>l7r8a2PD@
zBAp<Up9ZP@puU3WhZR4tIRQ;;oc;kj7gjbQ+IgVLLP=8()MS87kDv^C!dA&a%PUB`
zH!~$AH4k)x3uqx7Xl@QPPXr%2f{aigtAvilLkdH9yA4(i!_UkDUFHhgPYD`|LkbVj
zne+I)hBqcaRY{61>|$%k&AV2K8cCpb4s2mMxOgmv4(Q?vC{1hFtanX~2DEz!RSQj{
z&|)(M$_1rMw7LkCL2Xk|idE3;OHO_<()ACZ>&<FvG@xseA(4)pZQ=C<BvruOkO*lQ
zB9+YWxlK?z8xjT3R1A**qy&x>JFvO&)VvhXdicz|6y*L9#7WSk1GWw&!{W%!FkLVY
zqm70l#kgiQqy?pjG^2r8C&H%|YIWi>i(McCO$bxq=cp>`N5{qJ#*`Wv7@B}d<Cx-D
zMD>(fQ3ARP0iO6!OaLVw=wfh)^HEAhctl`24pL!5aw;r>Knv86rYga?5}IV7DF$5P
zfty8|wK|aKAjLVDm9qkPU3XpzWU>ZUWPobWV$gzbaH|Nbvp{8%2CP&-+#Uxmw2+72
z!Ja@k8(iXoM#@l}4ORpl5d%pg2E-CIYr(4tLDL{OwSYSGN;=S?Fp!SSVz<nq;u6pR
z2|^Pr(Lja{V6lZV4h1p@+pq|9NTgOLv)Ct*40Az#!fP(r?+B+NFAIS*OkmE{NU?>E
z8G>q`ni`0wL2Tp#AR0-Hy%N+{N>)lxcPPa|GApQjhonPI&_s)_A+-Gmu`D`KTM0Dj
zgI%!!=tM8jqBYpWAUF;oIuXSmgbymzAVm*Y5o#&}UuuDpypwfOG;4K0ZUqgeB0>dL
z@qrp`(6b?t;}X2{4w8-$(S(?YL~h!F){=mo0&yQolL|J-0?m|&))KM?kmImMD0)vC
zQcfv=X6-=wK|OHDK{(LHU5ak14Sbdvl1)HkWYCC!34pXBx8T54G*}QVEWu(BPuW9~
zh7~j^#DbP9YeH_20ILFd0W_Zl&tBvQHaxS@D72vo7)zoBUlNTtz=L3DYp2>#FSH>i
zSl|p-M1n&kVbn4Rmc+nkibB_~YubQg2PRcelwY6$Ju?=f0yOaf88t*03%i{P67!HI
zCxl&7gSU!==6>)Y$;q~mo)g%9i0)eC!bdM75vBD9EflfMl7dFOAXOWp5e{)PX#H(6
zs7(tQ=>?Sxpi;UR#V?>rHQ5$4g;bD}n4GGiA049`6CD#<U8|v~rERaL6B82?r&6N~
zs;1L*lwx93)WE0mg08F&N=<jID9})fQ_@b>QOZ=(#8Og#Y{gj~=|NnEnb@G>@VO><
zT&BQ#vPGG>8n8_QplfkJX`>djLJ0MS9niVGuoYrNtrW`4D<~~Nz8n~Gm~u!yczKQv
z$UHaDmPF7YBj6g?3bddoH#5&C6|{8D$`H%KAn-aM@UkG#xhe{fZQV-XRu1^QSNJh9
z#rdU0$<VVwk~0$X(qU|HqZHiV0+&+|w}9FO5LQuYaY24wF;sPNYGP4x21Evu6u|6S
zoubsj($wM-=z<#^&?snTUb>Zm4)j7>M9P3HfB+ANqZQJixqHy5!Ju<_^h)xPZ{bR_
zRRYBX=z=29pa<xhaLBzyU>+oWXBPXG=9FamWag#Xrr9eRSRs~!qvpfRV(0w4lGMBs
z*OW}q@f@kJp`NnDoYGX^)RK&R)OLS#T1`#5y;50Xj*=DF9ZJx%OEZi8Qp-W<5OhHX
zILE<kLK#{G#VjnP=z>!LXp9HaST8Nfhe;{vDCMW6!5jnMTL3i@v8e!_b|L2uqu2{6
zX^K)4Q~dLCDwQ;0XAviXT$lnPK+7RDl0l1jtU=dD>VOw@CEF?*f{PE(?dgck(6Cw8
zR6XbvD|Ab9njUPb6>Kip1>nYy2Dq65YUY9JAtjwul$lVdHt_r;hDK0LhFw!=fEAMJ
z?9@u|W_g5FnAV`%fY1Z71yem_;t}i(P-_ZWNrToIf<i16G_GHUJl6y%6~Rg&xj-XT
z6V0a~j!uw%8(0;jAcpoTz#?#c$P?3PddO3kV0F;g2T!gdHgCZOR*=#>v;>a_Ct^qg
zswA~27uqHRcYQ&#jF_H*IUF`G3Q8Lg55_~XJ7^*gv<@m2v>`h?wX&cnwHT?Whurd#
zgp|?@!E0_cpzEJ7-H69ynxMugsHK1$+~Avo6_X()2k7){%oLh}mO@kEDHI&5SQBRo
z%;(@4XQ&Qv(m~b(N->ahiLM?tClA`2gpnlC6(gC8o*Gj$YinzDz~us>n1uIh6;eR$
zTt!HjDqt=gL~aeDMHr|P1u4|wMFw;}6q5Q<Q$V#g(qJ1X;6a%e()NHRCCys2RaywA
zfx`)MTb5H!X%V>Xu7Esoi;%O@z#QCxB(Kc8bd*Gz2wk!bHas3uS80HzR$<FH!Izr{
zgX=Tc5-m`Q0?+n=R^uYgb%5qAkV{|Cv=(e~5?1>{@=83MtEs66GEM`st`t-=!Z(sa
zB$P7qAU9%R6xASoup0-UH;00kn8AZTNwXTu_9w7U5kUnibHGBF!}i$27J6$SbRHks
z5umduiD^2bwgNHj1-0cM10;~T7Pb;jFF!98dJ!DRqe_Tfcqy9IDbU+>zy~ct%du#K
z*qRz7iDb~82hipo@UaESIxs0s&;ePHLQ4~LvT`kWeKcBP2KBM3K~782NkwTO!s}&3
zISH?*4Rw<AQ10zSpUXg#hRi_0?`TWSE7b#!_#vlKEWrU<7=#oYpxYne$A##@R;!{}
zrCAHQojKJuSr0UHgIJt}oPwckeH}$ZMd<COh{icMctCA)NEaZr7Cg&~;o0oeO6a&4
zn*9*3LTf2#?oZVNS16DT!C+@04JCr-wUsn$YM`nh<$en2_?;3^D>?;sRs<{_ax%+O
zgHqEo^YakLRl&xebwEdcrDT?YPW%Ej_B2w!xBnuY;Dykw30{c{O6ic245{2iEL2S*
zA{e0!Jy^j9N!^IF3JYUc1cREWkh&bYMj7TYs22EXCgA)FGZnTI3^QM0RR-}Av~W(Y
z)dbxd33CV{vLUJv6C%l=*an*ijk#o4%z*_#Z2{C`9a6_b@)&G2D#TE@)vyv55%Azb
z7P6#52U0*Pfd++3i$Qy)i!u{+K}waZloE@JL8pV4!FTf)rRJoTfmWtkDJ7<)WR_&+
z=M{r?=%X~0p{H3u2CsD!lR+n~WF~=ktHX<Duy2s#BPl<n5?X=4+su%wN_46r+eS<C
za`F>X5NQNj3BuwGvL+Kcr-9ra2le^Dw^(D`$4R&@Lp2;SJ&#@+!TSQZT>yzBP(p{*
zE6`zgSj`6tZ)lE!n4$sdmlvm&_!oe}7~yH~yd603kf!Bzlpy^=P&X<Omhm(5GE3mq
zs}d~Wk(Hph2c`hC9>rK+06S!=BBKauSw%*XUSd*yQ3=@DFryHzhP3%0RS$d#1xy*N
z%m*D$l4P5tmsMDrT2u+DIY8Y=(B(6r3p=5saIho;88S%H1dWw~hCe|wMBrLU18NH_
z=D;}vw)p_sXaLQGL54~}Cp1Fx6U<;x*#Jq4Nua3;cpzeU26V4ASgSSYDlf;PqQpu_
z*ujPYA#nn_4->2m?r(@VBuPNni2Z(`;nwOD4e+{2<oW_O5CS@@6;uX*jvKJT*yIOJ
z7pT^Q&acKIjNSGmom5bL502LqJ)}t00rPAV^%AoZD>SN0i*l@zbwI0*t&+eLD3Yv{
zvWh{+vKE(uGdv=^5;dz+!856;MMe2V2yu{bbSyY`LL(O%8d%&5UTFgww1D<v5T+zz
zn;J%MlEV3rn7}N-LCp_n!T|*@>=Y$v84OxY0d^EhjsY!{MfBys_bEXRCj&QzAZL?-
zn7OGXiQcJ|AZBq!W*X@DGHVURq?(!}H8sU#H8sT)_$)O_!3}D&LgNWMUZVjP05zc@
zqOgbt4>D=i>Oee+6f&SX6gmo<2<{#z+9uj3Li)3CpMm`a_A{6T7l-X^g$#kh?1B$t
zL1s9>nG3W*2%;C(AX0)jMG1DXB}6f_TceQ(?dur8BNfTb&_W$L@}#W|@hU7cqf|4<
z`9l{}H9$7yf}H|sh6jVg4YWWQEC@+n8r2}*S|vi~b>m?}W8is3I1k|@SlOiwx#=2t
zhzwS8fx2_~6_tpownWWp(CuhoTah(Di_3VpH5#xg8|q<QU5JOFT<B;3%=?h40Y@za
z4*`hBK=lXQ8ia2^)75Hfu<7dfy!@iv#GK43PzHt7zVKLtg^ZF8IOSD?8u+05ND^yd
zSB}Dx1#HEhnpz^L)d(qDVe86~;{v(>Ilj0wJw3I!1nzxAg9tQc2|BU`9Cok?*IFHL
zN<;AmSOK!xhz=K6F}TQq7=Wn{Pez8d1yPhhmcT;d1}p*XJb)bm@24PK01rd3Q<QYT
zxfa?B#&iv=g$ZvSf*b3gRZn2^5rG5gMk88_U}@w+1H8}*9;pbM;HSDMAm+3|_f+YD
z+x}{5U^duR`y{JGz1+kCjU+@b5Uv}e#!0fT2Ag1&qyyG%l?1xk5_-;gb*)a44on_m
z6R1`PD}*VBv~EGdU~?dyL|F1baX+Yt#?m*|OU*4Psf3**7GIQ_my%ip8qC#5)`1;N
zi5WrQIE1e8)&NZeLKenAA{dlyGONHlX~A-^MLUR#WU66{e4sfKlI7qvJWK=Z<QZ5t
z0hL(bxdCW70CojvWJ&{+TZ>YQp|&FY4Jmw}i%Y=Dp*C74LiXK*kN4K_O)SaK107TZ
zJ}bQ>Lj!c(8h9oPBCn|pJ)ID$8(A;74~7(O2+I*2b8xk34Lz?X8IdqRyZ@?F^q{&y
z!%!}XC5e!oix4k?Vgn|QFd5v6g;q`AG>l{dctr)iUb9XTs?i8z!48HR3+jgEWWsx)
z$&mDi)E5Pt0_xu*^kX;+ImFS%ZXtCVSOL-s2T-2XkAvlBX#YG>6IzZ#Rl}AoKoo=G
zAFdEuK4K2GLhEI4V1eo{<Z%nIv5*1@TD5|efrO(IV?ot3Xtn?{JrAjwAx#NT2td}0
zBZ2@vkp?#c)?=yFfw%#eT5z_8OuK-tBglcahM_4A>E^^*9r#cy!YpvmlR4B3X?8;f
zhe76Gx%?c|%G8111BKDN)~QY{PEITU4QixTAUO&i8i{&EsU*yQ*6KheC=o`1lP0JL
zOR+_o8O3mj9+EpiOKy=TO%wIfi&9a_WyBCJeA*LSih`P&;OMBSNd%3%)q-wpgv2yx
zV~HN9970T2VK_pk8d_jkRp+J_7bm8t7F$*4<p-q}m*$idTPgYFD?pNwLJ>qrPe}*L
zLU<VAwnS}>L_0%!C75c3#G+IsD;QTHvsg(}TS+0YEHN`DF)1fiN1?PhRiU&%Au%sS
z0W=(`kXTfdU#^gyT3M`6lCO}LSeBWdSdyxz1R8HgG^G$$!`7xihJhgcWXFPnoJx(v
zqV&?-)Vvbd@$pc9>cQGC(0q#As;H^aNVWy_E}?^~kbDo*2n!!QsQ)!!)ho0|gP{%{
zjF74ZsoxJ@4~BCjEg7lw0%uQzZcR`E2T%Rw>g3sC_8)aXgBD4pB_;WJpuuxUS^%*?
z!#=6H&`BeZ0Q49S$f20|wg`RToeIUe`FS~&AaxMKz=G&vpkY6-L@|;=xS(!9QD$yp
z5wal&x#HC1{Jaz_vLI`fbP5nXWk}7KWDA|*w=PaCf%Xj%&2Z2#eHwT<q*ZCAF2u!3
zntBk1h7z>?2QA_-)U4GhL>LZBLAFVHd5O8H;3GKG@{4kHKvzpd$HLb!K(0SdMidU}
z`rtJX>fq~zQ|uE#qn{8LM1u^nRaeqZ)>cxFjV`GyNVP3WOv%iTRRW!&r-VlyG}K+5
zms$kdj}BT4m{XEkgzQmBtp`~^2XZNByfL*Fb*Tfy-$X5PfG9;?<p9ef;FSV8pcu1K
zG|&MTHxMDv{;OiEYG~|2#Ng2h=GKB1lNP0-Z0&>g_n@@|VreGG58$0fN#OW{T*?9I
zfq~CG1g$P8E=WvH)zl-TLZ<+H4{Cl+YGR&}qAe)o^V1-;AuM~sJcpXOVWPHZ2bn--
z=V7u+(5w#g0-7u&pQBp@>uaT?f-3XOyi_M}-UN-Kz=i}f5{pAJOL9_SwnL%>I$#Z5
z<y`_&pai*k7&3eT+nNfsP$$J!DLErGIU9Oz5xCd@g+NV>5;*mN#slGkpz~!x_ickR
zJ)~fOjFKx^gF1kqo3SCSDDZJc;HbAntlxl}0trM^=awbrz&5m?N@SGe<{(zAf_Kn^
zDgj89j-nJAWGG^YT|s%UrR$&#K1w=D5M`ju4o*MdT`u6mK9sN}B1DT8bRZNgW+AnK
zt*vb?==^bz|Ip?nQNl>G7M2vjmVr;~AjvXlNd_GmhV=4N5vGC<s~}(?XfO<3nSr|b
zm}?#q!AIYD=H{lRWG0rRA{`e48UTR?GH3+88axk$s8yjk6%w%UWQe)N39JoNrh;0e
z1hk_MXg~rKW&-FGJZMh|mboB#9oh{h6qBGuYiUKP#TnrJhuHH0w!{jxBquXDn?QKO
z+lR^UPzN1e32ts1)M{E`$zzmSn3<-5unf9dL($M0mUvJ`$RNQ9&BLHUZ?wpRtX%@l
z_kb6Jq^7{Pih!FEpbJl-0S}siE(BF(p#3K)n&1Hf_;fft6kv{kSfil?X=W&a4!5l(
zv`r6MqJej#AY238+EA-$g{4G*mi*xC25Kmh7g_K{g7|_i7u*8|PmC%g!OuEEnl~>k
zK$#}a1&_Ca7TBW{3Z(_)xe=V8V4;gW)4*aGUJAi>7vj$)@Sz<AM5=-%VGYDN37|#o
z$hR|q&vF2b+CW#7q057pVrddpY$8gy?9@se0i>;@04hxg1|G3N1gVrE$rM(Ufrj%F
zLC2+l3VLW85he$A8KSubUjKo^=irb*cpO}6gUTOR$qJv-L%NPd2NCu#W#9%6q)`AK
z9KzC2KrUNBJxlOL1xTL<nrp#B7LcYUtPub|`vBAkKx!L6W(6?yfg1^En!sX8m^#2~
zpOm0yD?rSL2tkxWL?D5#q=UUU#@Z~ghYeT5oCi5Iuo!g1U?O;{aFVSOxH%G?mR|&F
zV}qj*rW&%+0knY^)bdus68E;y%~-JULWmn-kq;Tot^w`wf=!CpCn65{LTmoP5C4M3
zB#K#Ji@;5H0#<=NfT=Yv1$4I%)MU8-kn3RFbMLU0Axs-6y<35k1?YSxon&ZDi()CF
zeTC5^ggOFMIi&52T81ZULPH2eDY!gE3@t%w3gi?G>Cix$=_op}PvwIH4CXcT5)x0K
zfc2r6kJA3i(^dlYVUa6R1tsl#SY-xTZ2)d^q6(n|fu<g~m5aqHNY@Z_9s<M(x}bg)
z=)w-<Rxzw20BMe*l}r$?LfirE4S=WBurC}y4phjvhz5AT40P`osM(zY>JB7A2O%MG
z0^S=#_}V5&u7X7XBptxo(V){yk{|<?pq-o=q-1?8fd=t1q<xG?me58cq^N;}CM*Nv
z(SRPgpd+b~$52620jVX3au_;ffSgc4MK7f91xwE0Vi#QU=_o*40xJ|@;RDWl@Zf>w
z513>|Vll#V5dFFcwbn_nSt4i`58m>GW?;|_6OdIS$TduorVh5oXd$Fo1+^M<sSwVq
z8NhCamlyW1sutovL|YGEk%7I92Rf4nJO%=aYsBabB>ABoje&@7SbGP%nTU2H_QVF8
z<b!$~9Ak*W5L+7^PwNo76QJG#c?xTuMZ__3>4Ml&fZ8mFdI&P}Q4C9x$muXMO#@43
z9NI%r0JR_?aScm0;0hC(W?;bp>ZXGojG{;rd4K_rU-CigBtY{n;FV=I`d|uL-y$uq
zLF+_A5)ewshs6n?DFw(H!X(&?pQawDv;?0JgrWgF5Cs~_(1VUeffl2~N1}AnY@=hX
zK_{VuM<GGWSmAQef)D0-knw72X?g{v#TlS+bLa>n*s0+0O(kuORC}djB`dgb_DZnf
zO(iQOUAVzYpbeS`=YSUvgQoa3lx#qOqyRqp*j61rNC`F_W)i530{KZnNgHmDwvxIX
zEPz30#lvj^ZIp*Btio?LTmy>fa8XqAQGyo~Dm674&|pcm2W3fU9D-a486j2zpOlOw
z3?3tft+YneXi3n#1F5=n5<zQfb2XAd3q!4-HXxY~vKnSk5~83<)62@w%+pX(0A0k2
zKGy+p1L#U$9XuCCgO<b=TR}&SbQHjaH>BYV(I1N<20D!=vjkNP++ar)0vDD^`4y<5
z;MQ}jjzXf2f)!{9l?FW4HI)btkfIbr5VwK+1}Yao3;vJ`1aPcDD=csy0^apNr~=jg
z)u^>Uv`B!O4bAQvuw#&PKsq3mJyHV#v~vtR(t<D<Ha@RZR06))2<#eIIRidQKP9s$
zH5s(J5p?keN_!BpxDTuYmKVVh1X;cenOf6OLLSq%h8}8#ECzErD1ShFgEZt1@d8A+
z*fyCe0~&~_6Humt^1vJVN;7q#+#=A;+Dh;dd?m<D<DgO>){0L8=O`5A;LHRS0htH7
z_6d5{1GqDxWCcEX5~*NCF$Amy*$kK?AO}W(Nitg1(7*#-mW>jc)C^0I(~$xb)!`5a
zXedF?*;NA1fq`c;Au^x^3l$|G?|}q$s#6k6QVTMZvr~(#Fp7d&=<bUmgeK4)tNfCD
zP`6d5IybQ>JGBU0XM?65tduemi(TO6De2@URs`jj7h9R=#6ub`2ub8Tf!qL3DR9Xw
z11;Mtae-Vch_o9EF?*T;skP&wQ*^~TiJ&VZAib|zo%qC(lEmZ;Y?dKroOM!l(yT#)
zd7$;QAlIX9%S^RZO35q(HT_d+YLq|~5}2)%q?efjJ5#Z=G&4op7PRXkGsRXZ1vZWa
z5(b^23C^qWd8y@|d7xEYpo3IWLDzy7r<Rm}t}H`3AE#C)8R7#(Yb6EJ;EGSq&&x|q
zE<yMPv<OMlDivBJ#b@T_Wag!!N!RMY>_r4L!tb`=l}(u`h$%Xa=r~8+s6^c=16|Ab
z7~NP+$dp}7jEW(AgK~9did719FISQdY=M<aVx^S<oadXLSCWCmk4#N0vNF&~DM~Dd
zNrBi<VTjW~t7bv5Zk24GrU7axrDT@DDu3wU7SxmAlm_X1B9bjACqPmcf`xowBeb6j
zUe=zLSpiZ6Ej1EzazG6R$i56{e*=>KKvfQUuwxC#M9`V9$<TI~ZK6hWENI;nbfFuR
zpP~ovyns^#TCUNAr6y>y1y99mq<}8sN<mcTSas?_hcjWhAs>1fmnKL8JYI|}69C%V
z2$m`>Ko$=zfMguKc+e7vV9>h9WYF3Oa6O!)ql5@*C6J?%^<e22qmu>gkRhi<&>>sM
z9>W%jpsWbJS4J;BJ+(w5SqHW>KeeJn33Ln?*!wWK%;KOBA0<uDiIoMQ1|#TR07&x=
zI!vLVsgn+#j)RE8H+G<>Du^^RRjJ!4X{T!|AsUcL(HZv8%eg?iKGI53i<DwPH*$e3
z)dWo)l;%OEMIilbNP!;@S~Z6V0;Kc+awjxtARG$ar33RDNV9*QlBSLZ;-o-O0hE+q
zk^wG&!26!S_CeziqyyPH4QPW6th%N~30bEG^sZ-^ZICJ<1QN>7`;SrOJaZG%L7T{v
zL5<M#^wc8g+5&h)L5u(^gKW#T2W8>R+;n}=GBbF~3=)A*--AOOIyYHeT$F5;rjwXc
zVwI``Zt+^B)`BPhZ6HP~fa)4sbqEKPUm+}lrh|u<K=+|3*}z=`n%lu)VJav>al|;(
z*+@~T2N}Y~GTQ@MqzA1~_2Lm(2Xu>8W?njIAuvKvFCNrH@dTZn0NO|xZ4hgph@u~~
z!WI#?8lW3)kaZ*2gp60T1(*5u8u-oEL6t^LS{k5QLlfN%*wpAK8iHndbl?RFBG)Hs
zR%b%5j|V5TL>(nqsRNp3P)yW=R0`0RGH5>usCWRc4+DjShLM4RrH-MYj*)>TN|})e
zDX82)Yqv|3G_BM1auZ9EGc@$0U3_EpL7NGZ5KCDSHLKI|i!_pL4Rlg$4Rlg%4Xjgb
zVB^@<soL6_iP5RC(8W!5kOeJBB04Fysqp14DYZIjpdt}mziA{vb0w%4OVoio!q-<{
z(_SeTR6By&8pTRhNSxq|{Gt-jARELWus3m-<KhA`Cnd2GW(tf6Geg_RKsQY<J+;Io
zu@ZE+hYlz}3rb6%T}semTIk?IJZLpZBDh_lk*Jdf+s+8u2oJ4pK@Nd74dDqLsSyFL
z`-rIA2-aedVi+`o3u*@7sd^xVNHNHBC8-+8(DD}KSx8$E<Y3SOK}Gmwv!w-~JOUDj
zcmyO1F$E&y2<j^2fzDh{2IX#&YBtaW70AKhQ#V1~#e$r~O3*5coc!c$P_J7jJ|#0T
zCqErwJt7}K4++spgCz8HolKo9oot;P9mu4r9#ku+<p|qQkqc`mfZCU!W@kEDn-dxy
z5KAGY3b-r=l`qgz6f{_%u8^4mnh#3XR#I0eE~(5(wN-~L&bCrWOe)ULDJ@C01|7d*
zrJ!qQU{FwDtx%qsQj%e%0Aj0yN_I@UKy41tgflb)q`(^^pv|wK&10bc9JuO)sQ?EK
z*qxeKybbC6!kV#|dUO;GHFa`9IS<m9uC9fYUXU?ZL;x0)mVnPd1tkPXB2d!F)zs9<
z&_HO`Nrkk&lWmhhl{Dzo@{*#`<dXa%TU%RD^g-L=NLeOVCt1@9mIRT49JF>Hk;)44
zi*3{F)1W1ZeVSEtnqEO-dTN9YgpP~_F9L&xW<h>&O^rsTEo@v6KBo>Fv`@~-OwB6+
zFJITmBBTs*8k0^oZgr4TSbb8{N@{B0c7mb`dOj;iMkj}m{*e3v?Ak-}3lJW&jn33J
z0;MMHY@I9+%hW(S2X>DUJhg*LD)2Z6sE-RPs0#9nqYYxUjSRGv3M!PK7aD`^@kE#&
zZ5RuYL`o5Q`FX*qIjPAd@IA_zc`o2I2j7wcZtbHrvY~E)v{9fopjC2^5(FvIL30E;
ziF!$(oFD25s^p<eNU{Z6125OG>4sEZh~x>j7cu+*N`eqcq!I*DawLQH*nzv2w&2Pe
zw9x>$$qqX66Mz2$)KUhm>C8__1=T8O{b0}{Z_tJS=pF_XqjeCy)nt2(RA@H{(Y8&6
zH5w5@pgt$aIB@VnLI=G+q(@Av8m<W11%jm&M6rXc0^AouQ3CA@!K?zWWk697S^zq*
z05%4Yj5G$23_i#OdHxI>qZr<R?!nOkl_9BWY8pl0<uBk4QEDD&ViA9=f|u1MfyNPV
z#A_;nekJ~RMTxp3cvlXzFE9-rZLm>ANRt~h!iIL99oXm4ZXf8hCD1JfD1&gBx#`dx
zTb*B!n4DQsX{BVSXP^YSk-Ip*$Vy2Gd@uyAaMnn%O+_51prnUoJODJ3iL^`{IbJ}c
z<dAtJm=i&#ut5e=l^_EcplN1A&7cczq3I}Km8(omECS#32s-c%ZXl={g7u$ag5Wx>
z*cP&73>-x9s8Wcfm54E|L{JyN9<-*^DiP9phUyud$;3d1{A6N4R5CHpGesm5=tv*6
zQwzL*N}r?x+LVtiJy4WXz;y+vy;BS-R8k;`4{|XBTC#&SLt<@{z*8f|E}0N5*ismz
zqo$Y$ohwx|v<CH<AoKbL)=4(lya6@eI!Rkw6W+^%rec`8l0bK|!%a1SHf|LSYjr^V
zK~Q@arHU&ls)Qb;tbn~3tW5@Y^O8X;af|ZHm3%Xci!<}m6<`M$DS(Et6w>mGz^i6J
zJZSG+3AFMaGLwSM|KJ8Xq>4?|Nz(y0(4kGz^wbiNJ3&K#(4lK1&{99xHX3LssHtIW
z3{AFIf~MnQ(CAFEJ$&;OtnmtUn;v{*Thl7bUJ11C1hmi`MST{$=?fjY1cjeQ7N}VY
zE<`j^ZNX#8nAaYI`m?FF)wMdQ(aEv4DbPhIS+ME<_~g<ekpFCLK{qf%;u(D)0(PW7
z$WBn`fiR?jqLBnXTN8SyKS<s;GtW1%0;EDCOGha;6EwP&i3mzG>BI`qfS(4!cRHz>
z;H}n*wzlbNYM?251p`G}+f?vC38cFZ6Sf5j=Vs=C>{3%hGD8n42(=Zd8K0$-t_e3k
z6J`)z^C5mgGan*|&HPMF<jY7h^AtdBfmC>f3+-7za|y`huyBM$D|%xAwAu}t=OGgv
zkP%~0cU&h6Ru#bpRW#rtux@jfP8v)RdLJ0B79xS<m@LrbGiX#Ce7q(?0+Cn23oSvJ
zFtb=M9z9!u7F2=n#Egedy<#;1lG~umhCnF?lnONxH9^OFLy{qeyTAn*)Mr@D1ReJP
zDzu=Rq>)VpWdn$@Py>)QN5^B>l#DCTlEE!H&>%!&Nh+ysfR-Pi11~@~qk(2}VDmaq
zN4XW{=elL4=A=Me2fYOV<PVTt8p)dA4kW0n0PAog;smy1O9y<}Af$f)FJa)N81yJJ
z&~Tcfflh{PnjW~n0$%=u);t1DTZ2z5Ow)sJR|R#Zz(q6MWJG%kIxMMKT%HLUi%SBH
z5rFQRgPyf%X@#m0qm%*NV~2c*q@l4DG{iuA&Xh`0^pvzwjYvtX^e=<XNoqr{`$AWf
zTv}9=npXnuf@mvgD(OIdtf`Y4Z4e9Uy&-&{7Y}I*f`-#zhn#_j=|COJ)D-Zb9}*ul
zu?02-yy^#BL_xAMWV}30M+w#`1<mh+PCrC-K2ph)1{#n`1n<yH(*v))u!qvo2GCK1
z=oFo_Sd0-_j8IfGv`$VePE{~6ClKDqL2Yb|rZ_PrtF#z0TnG<{B)w$FkuLVSsQv&A
zf2M(Ip40-T%ye)l6)S04;Z_AxqNC)iq-o8SRFs;S4RN)x2}uq?OAk04f?E};Ly+BJ
zYNY}9FKCrN^avZ!f_{{U2G2BtGbb#ZKv@f$R+R8IBhvWv{F3~T{FKB>4U&vEC(?Lq
z(VSs#2)e{f$wdj5Pe8jdi!#$Q^AdBw$A#)a4*fyTOV|vD2Mm?d5OUO6P~dr8a~(V$
zM~Om93arVn*EO^<#Ag*%!WehLN6x3XRpHDYCI%FEo|qtpww%Fto7Sf06sIZ}n}NE_
zusQ{_$PZQ;p%zA1M(;Gi##n=9iNWg*QI9}Q0&fRI+Xbi-4<1_r4;*2yVhL5S(7q0&
zBLlB3K_yhGjuK?dIWaR2+<#Nj1f5Za>WzZ@V$eQ{RM3U3#b^_GP(wiV7NkiGUR;Uw
znpaTgz}7ZNFBy98t3A9{wn7MkCbyx1iB#0p)F>$^*`?IfC??m`fZ8i5sTKZd8Y!A~
zpqn`$O><aFB(wlqAQ23r%ruP@NNoomNY_-fwN23j&60*C=4gUCgUP5y6eJcEgIir#
z0we`8stOAb9jL+fP#R(ZxcLN`IY5pQh$iR!ytK@8jTB8y&{hyMD=->pDbOKaxH*tU
zBw~&UhXPPt0cj<GY=U-ZQ#Gq=A#EK+@R?v4`Q-?8C_$T<rU5!35ONb#O-&MPR2DSn
ztA~Ac6ZrV=MA*`3(9s}?pcau|eo886U!tatB5KkDT~35PQ~<tc6IB@~p1{c$WHqEU
zpA4G4h4h|vvaQh~57deUxABwELk`*nMXx`g!iu(_c^b6nfXYD|uf-+#1saM5;J#=w
zx-p<^0ts+v0~K8XS`!M@moSUKZ8FfvKj<!GR3)J7n5+X`JOZ*q2{ewIY7ZVF&#BZ%
z(uq#eNsiUDs;<>ZQ?#{JG*na5$k0G6tpWAXK&SH*mxLwefX9u|k|;c=ZIjSsFp?!~
zF%LXh!lpq$sQ{D-N>go>l+a@UG8cvFEzoQhst9PWPC$M!X#N3J0yJl17^@AxDiAUm
z1!_Jh8tNo!Bxyo#o&xPx!*L}|dJX6%p^8+<{u}UI0d(#MHe0ErsiT-)tErP|TMe2o
zLTe|2oL~^EQ<7hRMZz!^I$a146_DpZWg~oA7dC#M3{6s?d8ulc)mBQdiBct<l+0q#
z)UTBic+y7+Y@-rrs>`6DLJ7R|8j;}iu=Xr7Q46(r@FHpdw6tRIVyH}=bWmRa(knxC
z1!|xpA{IUuWe+~XHZxhtD&1ZwEfW-)Se>4ipO>nn0}jPZJrD(+P6K--Q?Dey0L-lg
zIRmmjqozh93(e8cL=UQM9rH4Cl{9s-v8zZaElPwfaYhPTr7GRbyp+@mC7l!vPzur1
zHbhU9h;RgDs?5A}Nar&(EiE;<q!^Top-epp9i0_x4~ssKyEL-UG7FNMA=`tBLC)5+
zf@+G+0?qqm<d-YOYGm1GgX;=(Hx*~(m*%8^PcQ?QeHx(oAyDNAn#+VN)I!$+EkSHS
zLkG1w7%2j!bO(=6Ko`>5n&=eSCg~(W0}Yx$q0?^Q3<BzA=A{-TmZW-w`1)Xs6nP}(
zrR1a*f$}SOGdpPV5NrXcB=#%KO-e2DPlGh^Kv_D~HYM6HRwvEY&|D|O7G^Cd&ubv2
zVo-bB3W-XZ))~+tP&)%PwRDj4aw;`4K#Ni|Km*_~bI@mM5Rt2!3%cz@*9f#$6GPM(
ztEh>Rre1kw3gnbGom4wRP;(HHV^GHUF^mIWjt$CGppE$@8A>{7TB+Jfsi5Qwb!fB(
z=sfZi@Ikr|mSL<t=%i;QD<y~@KxZ|9M-xEzmX&7eqFbT_YEFS26Ah205)DvA4Oz)Z
zv}xe+7ah<kny48cnxH@#0AV)~%g-><F68oTaLook?>k8kH1kyqT2BX^QiSt$upcm#
z3~rahRe_=cg#!)>eA93s)$mOK&_l+;GfOfwklX?qVL{@8E6G|N1Mp}Zy1x)P3TeI#
z(#!;f8N|Qfy?kYv;5IgVEgC2jgC(E?v?-V};5-gG+XK1SM%aivkpRy_$j1=sq@fB!
zs!GrrR@)?q8||Sq$_a&5ps_lr1gZj<0agY&#H}UK)=058uu9Z`tpU;0L#zw|okK(9
zQWIRpfUo(5ua`>(S1-EIp>j|GjFb^lbwL*^!IY$c7UO^_BXD|x#1i~+I*>T%EUElt
z@abi!ZniSeNd{G0y0&05O7aV^83C%-GO(Bdb}-lokR`gdkdq`c^E4n11K$>%R-&D1
zm#L<fX_smbmQPG7hRSQF>Sk(M8GtHF&<)7Q+Dq~aAP&<`v&&Lb%d$&DXin44fat2#
zi3gRj0r^OKACe#|7QsW=I!J4VVa;dcg}o^{O0Xr;pyR`pAZN~lW}K41*C5o?fQqps
zaNhuQxDx1Oywr+<BItSA#h^P^Q&RIlwTHE4l5J9SD&&er(Df<7nMpaIBZVPXHNtqY
zu&yoW8o?w@_;rOk(eMx}$u9t14UgKgM#?3y?gDtI8osg<TCiCwrh`w0PFJ*rG$|56
zr6;1O1KraAsmBmv&=vx?$b!g$(ptKX5~v{nZJ;0pq(-`q5>mq?6|q=Uvl_LqEy+x&
zgsdadNY@0lA|Y*!V(`&IP&TanksJ#STuA#QIyqL;J{?+lg91V$8B22n>Ow?wBt<7x
z(+a9BTB$fEGbPm}zdR2VpUL(RerSP`l~P(_N~$MJ7{u`}Em5)p#eOPi-MW1WxcQ=!
zstMX_k_tOf3v-P!cnJtn_Dly2T04X8QUmp3KzlzSqtfZn!U;+vMx~(w_D~ws#n8~S
zQc}`Mhp+cSbYH+tZb<wfny=7W5^04Mc#$R6);B1NS}7SIHM?Q0Zg6uPv>Xd`^j{v7
zr=f{sJtDYL(uAE(8xM1gts>|cym&;UBhoDB*l1{MLfQe~HUNs-!6KUQrATPgDanaB
zsi1@X5S52(MM-K=USf_j=$s{lO-bNY)2PW1nl+&L#un)+9MFm|lo4szR8KOfw`#2c
zqVzITV0j7N1IkSVdAiIqMNQ2BG~EpEqA4k(Pocn-!j=t#PHji5M?!Ha`obu%Qt%Pb
z;2Q|gjfO6^hlU*FoDonZjmX(p8#Wr~Ll)4rel<0U@XnAXXw(Y67><A=QKVsW;-KLu
zi~)a8Rz{4?Xn<ExBSyNBViB~O9TH!l=_~NsE=bCUMG$EINfUBf4fsN6j4>Cm0@ym>
zc!(vSDgb1?Mw(8twuX`~s9=C?9s?D5pm~^#{Bmc=te0a+Kt5<H#z0dCcFQ+L2Sg(c
z+=_zFG$45a;(SoQ0n|l<-Es)(K7gE|0cs_~JOHvgRYwVA3e;{;+bLBKI{oI7SP5D)
z2$^0>O>s%A1TFP~IMOAtQYTdpv{MY+8L>^(gDHdYp@x9DP^F-`Hzbu%E>t0ir)i~;
z4BtqggD?|hbuy@X0uDt@sBvJUk<5ee!Ro+F4VXfZ(MamRT(B~?(wrO+57dN$#B*ML
zNoHE5Gk6kRBNaBI42edt<td<rIS{{sEdgmq3Vk9IP+Bx}bz5qR5+X$?flXAhQUV#O
zq#0|Q7OeydVth)#!>gWoB^t@FbG)NLgH({oPw<VHv7q9;G*!nCzUCgqlkl|$NS;hZ
zcoMXG5P5Hb4ydvN-+Ps&lMX7=G_4agQZ*4J3nUy%^B`daTJQuZD4^%SV9zz_pmMLK
zMgwVw6F9Yk#gS%jK?xxZDSg@|YA7Xwu2h7aRRh_(3Gq8PEN$V6A>3pnvp|82kO%Wp
zpsO|@ZU@JA5>yCz-d6{1DkvMkIbbUgav&2Sr<B9z8<7$UG@C*~5E5ocwkGQ+fvX&Z
z5Rz6M=w*Z{hy|z+15gX8WN?Q|(KgvW8FIV~@_v#uP*8!}>!9WWm;p*Ah;{MkBjahH
zUF>jcG*IWsQ|wcqg9y+GaLkGDWY9#o6;v8wC$ugB9j*hq78cZgf$lGYF1vxa0~8gI
z@nDTK*r9sy=%qR|rVuR`sBPfQ1^G!?smUdXgH#c62*-f?iST9@!W>Ww2$UlrZh_Ah
zAVmo@HbI#KdEphP4V;)$0$v@Wq-mXo*3?bXQ3A<AH$=fQ2&hzsZt8^0ae$V@B3gT(
zpnwehfMWwGT_)?m(r<cd2}CP&dL&5`)TT<)#Cb{%=mZtep`D;h)APeqQ?pa^Qjq#K
zi4gxK*(O2?VbH||kg1R8B+w9&nO%~Ol2R<_a{GJ>GXq1A35d{v>DED%?HXW%Kqnt-
zXd?AHp(EoO;KCW~QB7?VT^P3#bT_y;XcwR@SOG-44yd>*0p~ppaE}gVh@qwqxZ9VO
zlb>G%xoe;(zcepJLnBEySySJ_%p}!RQ{P-u+pty#T#AA$M7SC{Dv+55K6T#KHmRlt
zln!idlQl~+K<gMi^U4x)GE)@br*kV=gHE}$Re~lpTiBVs$@ZY0Zg5FaW?s66rd6`G
zl9G-Rs11+|UAn0NG8jDE2U*CNp_6HApp#{*0m@g!puK0Hvc$QxBtI<;+(m$$%nx6L
zsE4LXC)*abwh?}GaF%_Rl?Lb(caT3dK@o|l{!|SO479<40IEu|z;#6q#D0|hYdCC2
zQKOTKs*!*m(81pze}WfwgSIymgLlf|(1oT-Cm&)LLYSaFodR23L!CkpQ3N82K|~3t
zOI3>KQ9_e!vTdrip$+VCbkHanXinC#L?cz(P!qJG6yB>=Q%lv>)=93_DZ?-%$+lD@
z5mb6AIe;QP(caL+N=XsIG%~PKssuCD)ROE?td#P>9D8FcBb`)RsFZz*m7z`=xLpLl
znmi^ZrCLclRa;3%NjpVbsTREMBU!JwG^rSp&N4x#or0EhrGb}&DW*eHEo}8|9(XKS
zA+baOHesTmq@4-#Po}mlsOp7|5<{{FC}n^IL5ZVQrySwWBv7#jDIwB8fte0nEM2OR
zq-mdOm4dXE9<<mGT5v=s=_JO+)@te%gDzl$H!(m5wLsSs>uMxM8^%K2pqqqXYu1AO
zln5!#($UNZjliVXf|SF20}B_8Oq~>{ahj-`Xly}~*eJJt+iRqOH{|MMYJ=vt!Iz+e
zb`n@YC($)^bU|Y@X|ODurfp~qDHlTXvh(uG^AtcQr=y2&txg3Z+`wJNWbib<V~Iv4
zXeJ#pzYj`an$Y+P%}cE)NKGzDO;O0nEJ-a&%t1HPI#XM_7QFTwvP%}0T*13!L5sXK
zmDH6$^Sv;eQZ;L8N;Q<!l{D=uK*w8yuHObP*MKhqgr#y#$TC2s6eX)7+cFKM6eZ+a
zi<MlItjaZ%T$DhYB2gsrm8^<E>hn?6=PFqhf`oHXg?&N7<)D6%PM%Iaib0i1Rs|p(
zm8d!#l&mtq`2kdvX_RRwIe=DE6xf2NFc77hP9a1DQaONblPQ7-fVH7mq=;f7$Vf#c
zO<iye8()%{oLwA}Z)j<5ps8<|YNDw_iB0NCR;Yn*09~O3TRu~vp;?=mrjcm_8kx&W
zFUe3-(@3{Pq+v}RMg6##Vr}T{E9siBq~cmpQk1A)ng=e&Qxrgvn3!CWT2!o%2CDZI
zGV{QT>#Y=&w9`RVm9C+!t!;sQfi13D!OGCUz^*_|O`|{?ry5;cn!#0yMz)=8fxUqh
zXs%ULQ>PfT3<b1Hq0rV)r^vS0+8Ue(kXrpNiIv5kd5{Pz&?(e4)YM6{vn|qutQ9NN
z*48P~wM_$sPX@F}l#*DP13H~3II%1<FWnKm1`_Tj4X_zHMWEfJs5PFVt!+U~4LHF-
zY}3>R<>x}E7$k)#+S(RD^C7IZ2Muy4!3vg)S{=s_e_t!5%1YhbT-}ruB^_sfe{WA$
zD<u~lg_INpUxms_B^}RT|9DWd2w7c_n{&K{kr6~8NS%@nSjg1CO34MRS=U#$5+Z15
zU~Go2(9qDx7$F8#XoO-SNH91Up-4$5#M9Y37*zS_gn0V828THM23RRMDCvY7J0rUd
zImKHUnP_R48(NrIm}(<6r%Wu3^h`B%kwgqF^~^O<l;~L+nQCfknHhkPVXC<fqOFQ(
zW<gh_XQpW=!ftU_QUbSyK;0V+P}>Qmb%CRPM^U4bW{aYcfF7N6h;l?Df|M3W2D)Y(
zwjoT{$wbrvum#|@DcXkc^9?|QX`tNeSfY^vX=o(DQe3i{S_-70k%ce>8itUHPf1BT
z36#4tLD!ap@|rcQ&a+9j)=aTgGEmY^ff<)ltCNjpj!p{vV04fX_9@Xxu~x~^NwKv$
zIkrklI=P_g0<@w@6J&Ubt$}q4+~L+KkbOnD&?+YpR^_B<*3@J|s+=5cTO?sCuyM$>
z50WIJ_Q}z<%>q?FI!T~h49T22Mkpn?i;`82wrw`JK7y*M1dRacq@gIw2P@0cP|8<=
zbPu3?0$9UX1FRRR4gvF_MFg_-;1)Eb3!;ltvw@BQk~&zYL&q4!Nx3j5<tjlefZC>Q
zh~`CKu)=I`O^M>Hbe#+o6Dz?AGc}Ydl{D?aDiIz6EdotXEdli?G&Dhlw2h&Gy^?{F
zm6DRCHdrk}3R*LP)}|{tfXxIefcP3&QV}d^m};Vhq(B>^`b5^Eu4IKs5lZSxpp<}K
z6{4mU=xRHKoLZfDl%<wPr3s`NnxvBqN~)m!t~yBbM6hua+a&CnEeVp@lHs{SO)W`V
zTPFq5x=OMI?W%*HK?2=Emx7+ulR!6;Ly~$jQc_RSv;sND8f#KdLTYG%13OpA3QSi*
zX$K{%WNlj|14AQY6H_yD3ri*Bpmc$%@>POuz5sV9!6v9HS*5~V0}AF8TSfF>Ms+7F
zn3EwJ{*VF}(Rv3T%nIJ+l?dPD7M%n-90ztl2dLD5#6PrMQw%ObK*#)ovM+qo44Uzo
zX&SKeP(Wi6pf+(Le03>!*b!-;kOtb3GT><y(69|?NgmV~dngSa-GXezK^_x_o?!=a
z5~!1wW}6D1*+d^iNz}9kEpLT3R=|xcur|=JOFAghq3c33G^<l=lRy{Jq||~!2QnN9
z8M%aRLIO>3Aq}1*RDpB8E%<mCFcYp2lqYQw>cCvEGDODKNkkqPO|b_{gI%a;Wq^<b
zn`;Y|26Hq}<iSQmr4fc(89+zZAfv>f!CA1;iQu^ukhc&AydXs>yefetg`!kY?=-mt
zvZGKV5o#v<mH>#6P*Ko07$|}f1}kamz)D*1^aqMQgssq#8&GwKl=-1u`XqS20hY^?
zKq(k(Gq~&mvoy66HFc6|b<z-(BWV9B+E!QCyc{AeB%;sifkps9O-9IY9B4}s=7cgt
z4lz^*O-Cu3)wQ517UB;L&=`_WetBw<b7FC-2CR3lAD67JiFPIxC^kR`<|ILqyJk%d
zEYx(;Y*RrMC?Z~U(jg+ygrJiF;X(pIC(~A6BU(E~H`YGdK-V%>TQjCuOCzPmrKY?l
zye7BCx2CctQqx{PT_?*nQ!lk5HCZEB(>lvqvl`ly%!)ROt*HTZ8>_*EQ3|x6a#6C%
z(6$8!8)#G^3$%vK&;X?hD~Bo#2P-w#!mAioT>2_mrDHKyCj+s<BLg%1k^3BJpxvg(
zWh<-%j#RQrqk_@3NFfC)XkoFV0oufzp;@bw4j#F;1?>)oj1$_YVBVSzI*Tz`(@F_4
zkfVe&+L&4Fm*}UFtZAQOl?vW|m|Cs?j!>jgQ~023I%v<X60COvQU)4<O4lpNhYeWT
zr&y)yfc9aegEERoerZuLXrL9$^UcgFElEZ2gTWW!A^5(TIXRh-<C#H%u=zBseKyci
zjd*M_h@6eIHVkx7T5)O##5v&6WC&B!&d|snnXhdGTIiDq$qSH620*?<GE@iY$SlPq
z(4-3LWTs9UTFDEqB8V){l8}lmYeXRqsuEDj>~v7x1UU{~?1Qr<lI<`)bj}pQ1#1H{
z;rhUZIKn0<7pe=)18YJm2U0=9nW+9&Q%ge;1nH}(Nruf+pv)q|E(AxP@lFJ-tOZXm
zfjTu{2Dm0p0o9L?N&(R;1oc=TjSf&CAjJ^0RcEUR4=#vXpmn>N8aSIkd0_K3A?I{J
zY`~VN5JLngW}?-T2(C+FC1R!`34VkvY`reRvG5)p#BNY6mIT>n363Jr^5qm;(0UEf
zIkkxMU1MTmVjxGlf`+=Fi&j93%rumuK?fx0W<XX3$0~t}{sP3UKCrN<23_Baa0dFC
zC`i2x3RjI39o=N`F3wsV&@H}1>d}Vj0ZqH%)&r6S*#e!d)2!7g0d0lEtpT+90J2*W
zG_?+!@T^4E02whx+m!`Zsga@s>1m{=mVj;)$xJFON!0)ygOmt4Ek;Qbw*t^QR_OWe
znxI1wq37g+ql!o;fYpN1qXuO94IH#cW`U&0HYyUdgTk=37JgG2_&8H=(!%0h@Ewz&
zwak#iMX;!VrXnTHSkMi-pc6e1i_sB|gte7Gs~Mo%gEA23-+@MHbqaI}b&7O~bxL$f
zb;@+gbt-f!b*gk6b)0mZbzF2@b=-8^bv$%Db-Z-Eb$oPub^LVv;Vmzn0HVh3{6WPb
zQV|8_gF{<GQwPieB{c9Eih)oALAfmvzPM5+2vr!gt`Kr5N<d;>YL1eoPB5whP~!DW
z^UDt?N-gtC1)ppif~o>~jc;ato+J1mZAjZqNmC~jp$=`CexjyM7(x=%X92kby5I)7
z*heQEO+`s+0obRY;v&KpG%^_qU)~-HYA!`WHDE2<;6)l}2@kw^0T%_ONJPm7wg<rl
z6?9f`J(iZ1mO7R?mYSM6QBWJxQ=#p5aOfw(4h&JjDGfd_Bp$RZ6n4n8ZkSGDB2)n6
z7|?i?fnB_snnt{~t)Y=lVxq3Drj81Dgb8-q1Xhp2-Km0>R=|9)&onf3K|!Yl3N>v*
z9k2x0<)D>>Nw!gHYEgDc_EA<z&{bXd?MY13iPtgI)U->o){NKH)q%R&*3b~*Xz)Bt
zB2wQj9@O3}N-PI?(>5^?cAXVyJr*b_fC_Es>AuOfA&@l>NEIUd_(Hsc+#pBkhJ&1i
z=sH0XCbUzLs0lg=5w?~#IWZ41Ob!X3L>*m_<8|US?Uig2VJ9%7Zjt~wQvq=u0O(w9
z&|E?ytX8sB2dPkph=EHXTXpaOyy^<z6N5pgS%Pj5wnM)-1a$WX$Y2nyo19scoRg|s
zQk0pPm!6ZVtE8<FXs-mib-Nt2fdh2@b29w=XB+)QJ0+`NP&<MIXM^lQJ#dW1E<_$|
z07W>c#)U?BDwYUOg~lM^RH#iT!c*ZZQ7|H$V0?pI2?{EtbJ!tq3#~tF)j=xo$9F3D
zHWtvi{77jE6we@oK{Sr|E?2TrN`=LDDoODTaumpPgtI|BobgQy7sC4n(5eX9=7vT&
zY|;uU32OU5D+18UOLzedDz+o70(8=`q>yx-3}_m`9H7#)O4kAHRD|pRgk%lK$$-$)
zWg#4OqzC~GPC(jfy5JSRNC5^JcmW9%6lLZYWtLPT-|d44V`wsfCk;?73Kc^s3hZEK
z144Zdwht08pjd{u%}z-t%Qnbf$p-0;0o1YxqOKq@FBRl8$i)J%>jXeWghrr!CU`I#
zy3RYZ*fTE(w75(oQ6~db#z71qDnuZQT|xFh6A_j$fpl*ZAy>oW4i#`S7)P*xPql|Q
z%MLOS4=VVStTHu00Rz7N0JJ(k8!==8ZUMq7k+jSr(77*_N}8ax89LdvkP(1vO?v~Y
zY@HlL#SAKdK#dR3`Ya{Hk-pIQfX$(ShS^Z{z+`;EM}y^~O6DTY%m&Sjqqqzq2cA+>
z($pzL)tr=?mS2<#+6m&42y%ZBsx-*4{v{cyMc}Fm)EFv8Qvg0c7F9_JLJ8XNZYgM1
zpxoBLy4(iTCa^Bo)`slbsQ^iUU7icM5yjR-r_$EIy3z*JY_P5bsmn~$sDheIxOCP*
zbiP3iDoq_nTkw^Pi1eYP;{>ua0z3omq-~2Q#itkLgD&a?ImOOU6FRn537H*JFt7q?
z1|?CXtPIwn3r-hGXjVfiRmhbzR!X3~8K4d);xr$SExLxd4F!#_V>c6QmX#93XxLyL
zbo3v$dAXS>DLJWN6P0Q~UQxGG0*`xw*tko9jMT)G)FP0#p(Ox90PQ{zC2dDgO{Ao)
zp`VzOQv-4(bm@enCS)H)xqYC0npFy<&;Tm}`vHrp6st6_DsWPXPfvw(p1_F{)WGuq
zJ4yr8Modi9iPBNgDYrAIsj0Lx(8<>+fM;f#640_}9EC7+$BDX~O$o?Lb~YtNc1k+V
zwmJ4nHYFL@HI=8PX6q*B=YWbonA1u?nH?knaTKURwb3uh0GBU1Wwr*^=5}S)W!l=B
zF18wF+S!__<~q)xR9KRsP@J4!kZP+AGEhld10<_$rm1RfXKQM&gvSA?c`53U(n|^2
z&V#r8a-&^hA(4;=W<l@pfH(-;W_HrHbp{o7B}H~1(bU8gJDU>FN!NBtI<C-c2Oii)
ztPcS-do@8F3DA}^$Z$Yv3Md-X)Z$SFuE6mF-uwkq1sZw-uU!D`8AQpdI<A_UI&QYm
zx&u_jLJL>uwrdTrt-9IT=AaOBhYTzyr)K78Xt-&+g4UDjc-TfjkBEa7CU)+ShCP&P
z<qoO9p<G)J9Z#qSi6~bLb=@>Ib-Zj1tUc_!ti3=56KIkEoLRsr#T$}RQt(6+C}J@x
z<HVfg(wxMSR7l;R;R#NyB`KKc#mBbLz7V?H8#?3$n`A@mF!PMnw2D?V0Idqv@wN2?
z_0GVtpaGiEi`Vh9^;J_-EUu|h^Z|Ek!M!lgni>@~HBUPg9dB?#gnI!q5u&yTK&f0e
zH7^B{_%wX&!9^`nahMOPLZE{|;QXrrb`fMA+t${$3gkWr4@cTbL>#AAQ&WOaZfgti
z985E+6q332N(!*%5AuF|h->_iWHEM5K(14Qwm+cf!NPp1rlwc~ZssW{Y5RbVSV!|%
zB*LXgRzTaN;C&eo2cQN=0E#Zuum(3{z}9POE2%4KYk(rM2po|{u@I-gbG=WrQ7mGF
zQynzCsitgfX$>li)Ri=~HT)nNkjFP|)ggJ*C9x7)V+qm=0XHi^eM+#qp$Q9gSpwK3
z(3l=v5;1-Ra;~Pfk{!&=_DX8X6^RDcN>+aM7#CVXgB#M^0~M=an;_!`pkfNttpQ~X
zlnyhBCM9jOxWEWii1Lig^bGI<HgKS#YeJ2{(o9{5Cg?S?kjR6kcX%Tm-XMjTsHCot
zQIwiytFDa2ABlFL$gt4|Wpo`+&;$?IkI23?)Wlytd1_iaY1?{(LIqR+)y8XU>%`j`
zf)31yw>8j7Ow`ua)B%@I`j7(MMju@Nfg&QpUdcuu+`iS;0JX?Kn+YmyZEYcq5PZFW
zqWp4Q@S;G_g+pKyK!E|mIu+WsPPL`lwiU1mwo+|d(6J&&2VxrPl!7N3u-4y5<Dj6a
zA<*h(@cF_SkfC<?Js_}gP-x)|ZAB-8_l|+nq>`o%T6-2E396%%G<DFMvKjf1E7%-C
z7g<5ol;CR@f-{=BostfyT?-mRORK3-EYvIom7bskioFT|XC6>eNRLj61;rXjshtvd
zWeWJxolMY{{1i|bfXF<c-KIKOwyA1rXcNd_35bp0rZ_%3A(<E6PlRN2a7dwLb#M@Z
zJeF;1U~On*mu;P`t*xn{m|0VkZD$L18d#f#Cg|EA#jKi|Y#YeLHIgvcQIK<P70MEG
zN>f2)LN=%r(ALNX9X4RE1U*JRH3e4cq#{}{O4=FG+2HVjm|>@+X$>|~AL4F1CD1BV
z&~+ds+P0<I8j5LZYK3ZQkm49xvS@<O=>nBU;KMmUM{XzT!MUL3KPbkEG)wTu7)S>w
z!VrUBNU??1y#uKQ_jZ*u^@<B}GD|d+tiWA8_=FdDK^h`vb@C8v9AM-A;064k%>(+$
z;OT!oEqzV<WW)xMM5K)dhTu-873e5^unvTVTqF&kj;R%V4nGmZg{{AUbXJoz?Q^Y?
zYIX8$^E7fmy8(3yAZ@GM#0rgk9gv_QXe|L~p?AJ*3gl1*h#WXQAUvdLm9JA^3qA7z
z)V?dwK})lmRs}jp@c<5dJc$<+q|gM4mUcmz6e<H7>3}6&>jFF5eCvE|ZA~<rAgKwF
zBJ&|BG9Q$Y2&Kq;P<DkFV5ek_W-vTm>Xd-ioq=3k3_219*{k4%1+ZeVL>sl_0_g}Y
zO-suJ9q<i0ETKf(7JIVRF4Y8C0xP>gv!UR1*RW+lXeB75+)P0l@YmK*iUh4QNVZP`
z&CaJnrNFrtwjUNMmj+D+nRyzh4Rv@&2YLMlXm_fnHfRwjI6T3o!%jNKHCvB&Y#n^s
zg{Gz^+Ppn@`W#$Uf+n~@n{>f$$C#=Is{>2notp<MLnL7x&=OCO2Wo1d;iL)eQN*Lo
zy4UK&qk0P^=pg}*v|<jj@Cxj1_{0rtS^#ri2Rw0;3OdOz*)GXG*$Tc2IYmt^)h-3J
zz65lQDbki{B-<f&!)9-wm1BM$WNS4zL_oO*H1+`6R|Pq+0%vyu5%VBTNP{b2gR~8G
z5@SIdG}BW{P$%CAxd*a%2HLeNhF_!#-jHW&n`9qtsACw5xyA-8krWFmuRvpPh)_kc
z4{5O^B&DLPR)ep7g9J>Hwh|~(KqGIZIXO_TAf;>U<{BG8cc>8PH|iwm7#nGV%YBe7
z;9IpZd$!o^fX}dj7MUAD&8P$$fjX^#q8&7G3`qb;$KIeu4P?0`G-&W<!DO8jZ4Cpv
zB>N;Q(CG?VsnLe9nxNS(SPf!emjv3x3)}b!F%xaD0K6I!DTjgi;M4=2K!)haL>eki
z1H}Sd0L6C@pMlnWBKZ!H2tWfbx!{pf=vq<KGy;|eXD!G&FP#i<sjP!^;{r$ts5FLF
z<S>6`g7*(+BG>CFI5+0#q$5U)LFb8ps$886WHG~7uoy@Zeib8Vu^*_m2kkl12HiZ7
z4BB=FyQmRKHUlK9siUEo3Oar^J+%bV1Ga-S!yp`R<17tD-UhO`6-gd+ZV+l))6O;>
ztTO|u6A^1RwxH#4px{KF-b9KUNX(!WI%s=i5xG1GbCWD6k>P47ffmannlwq^z^g_x
z+$u>2HdqcG@rLfahvaf46e-ZQZs;|U*j0g=ZSb*mET(}Q@`xR?D9TYyM5qMaHm-wo
z5CBrxLHatH)k!rq8ptzINOc<MxC6KpIP)M$g87Jb1fYT%NfyM_1n=uf1uc$7-y;nQ
zcSs(@UzVllB<mz;!Y<yxuNLl7klhG}p}7-0JP*rZU?(8Wzk~Up^aje2paCUFx>M5B
zflbtc%2DtJe#BIJE%-#yv^=D>z=$R`<e(r$u)&a{b6`72K|<Cj3y3rGGD|WOb26(^
zK^K}MpZ=DcUs{|BzRM9s1LS-=lp~73%@g>I?|Mi^+JY|O1RW!kr~z7zhH4O&<AV}4
zltAOLh)W_-bU+Sg0!MJNtz%J9Vx?X|5%eB<z2cnA<W#-n#GD)r_-=U}L)aQrjGgL9
zH8o0z1C7CZSJl*%zy*3qDvS#m_6PIql^|_mP>V82O^wLAe&8;NHUw>40L3n3A~ael
zUP&8TBSS=#V&UVR2xU6pMOM)Uv9Wr|`FY8SB^t@Fgo%D$F3gAUMY>5SOSVa}5XCl>
zD1hGL4XWZH&IS)+>m+G{ZfizLj3ily=0DJBYKR~Jujonzt#HAS!VFR6N=q}*D=bJ&
zfU2x4wWv5VKhIXlP|wg%&ji%dLD*@X2s%a-RG=!AW`Y*lq^E;sQ<QWP^-44Kz!^iQ
z8fpUQCOfbRI*`-?zWE@aC^ap!!U}Y<PP&o~B;^!aRl^P;O)a)kG|++EcpH*$rBnbu
zcw0#)u_CkBO3_d!8FKA>NPcjB5qKO6Dp-=3nFqS(2h1%k0$-g6y5k3SLz-g=NG81~
zGX+FLI+9>kYED6Fk(E+D^mYa%oy@eN#N1T3%nFb+>`p#KL!F}3w4&7FjDY;&Owi%H
zVAm9-mZcVfO@^>speOfQnHm`Afah_nU^iMR=|Ikm1bGj_3Qo-f8C3?l^UnyRyeK~>
zC%7OrHN^_V%}Xo*xu7^NvA{P!CDjUYQMnF?ACjMwT9lZVoC;Q0l9-$gQdtE)ZwSOn
zDN0NS?}OASE=epZfid$7z%0-;MMbHJC8>zoN3$9c0JgS}ekn9+^dR$juntghD(HMH
za0mpY<|LM6mcdWTgK0oSB~(*tPAVvB5ci0JE|UYf5t4ME%hF-mVF!s4rCArI8oG)U
zbRA6zWK}SDd>vFj!;h2!r%unj%o1?>xj3~1a)uxx7{I3=fGPsL_~O!n)FKU#fQ}L*
zwSbDZMED(GkOS>-*#ue|4_+{g<OooMHU+c;Cm+k|T5wqb4Ql8LZ)m7#BJLR~N`z!K
zU2xcePMOrS2c3ri(F`@)KhHTQHL(a(y;wmcpawzj7zMjX10@DP)3{(GK{*+2IGQMI
z>H`{E@wfs2<RI`>a(eOL@OFWCSp&Rf2rS~9SWr@0gp~SF*K9-60ZN-7J}IZP$T1m|
z+Mrkcg3jOp#}p)af)1{OC54(Aq_h6?z{^~~2kDh&>K3IIXI6oI35`?O@qBg$_KJqk
z@PbG|G6AUZ0f}UUh2V&_hlFiB_|!x<P>BIL-4tGS*xK4E8rUmA_)1pEdJvXdW`!o`
z$bBowp@~SE5s5GfdPx{WhZE?^T<B0W?D$#8$-qfCR-!}hcZSvO3ZNUV!2|T@XT$3t
zPH5Kz)vu{}DIxh9Nzg+LH8eGmPt#38=D?(&=jcM^pgfQy<Y4wB_%WxTI}>U_>Aw_m
z$|NMb5MIXOV^~H*4h3im*3i^RNzF+uNrfacWECJgFp>(w9@K;e3(jbRSkUM_BsGB}
z7n;UEIS+n^5ae<VJ;>A#RDqfrq)i68Zvj;Xe0D6T@IgK3L`^MGBN<htrXI+_8k$Jk
z&T4faStl4=c*D<TL3KU0Yy!y((3G28lnOfL99+L45-*sGqa=oBeRyG-oS2-E>H*dR
zy6q*u2wd}l$I?Kxe@bp*USfJ`5qNSRSpc>b66_RMi2*juH?b%^Gp`s{CMOpc!zxs;
zT4)gnKFw4Kb~FymIgn~I0Nf%#QH?C20cux+;}UWbG8W~?5-^8kBo@1YPXBkzOHM5Y
z-D?gu0urFmECITTAuThfB((^6`v+uq1oY|v(7Fe3!GNCGG;0whjSkponCBdmpt&1X
zOha4;a~JGFK*(hWpo8fl+F|V#)X;+&3JINf*a{h#BGBEFhS2DM8vwd(-4>MXLAS1h
zorWwG36+Y}Nd`q~aek3w3AAR0ZZ?9r478&dl29}d3ZYhkb{#wC=fRq2aIe8np98m2
zlys6nhdL=5!irY#xqTX-eIf8O=fFt_Vh#TEsF<vmQj}ldl$w!PmYH8#1ls<Dl0XZJ
zQbA2ih~taFai)_5b8jA~O9|@u1%Zw>amp_#$<Kwm8eE6D6eXsELel`$!9z9}!y-_{
z3eL!II}{B-#T2wT33ULXj7o$ShLB`nTMfFN0~{-`xOGe_2A|vw7R-fYCy)T-atg30
zvQp53E66w{Of5(R-WW9moi3G{SArO^fMghmyEHU)ilD7LgaTN*52mCRnj*oaz8-kp
zIsCqn0#NFLSP$_K_;7RZwHb+eAjwD+$&&m6(5<uZAVvgB66n}P&~Zu`nZ<hOnH5%9
zK&=2pY#!1wL{uL^BN-M(c(MxY#7>w}cvg*1&d&oi{9*YjBwqumGSyLppL76@jrh_`
zkHq2(4e+U15D|FF2c-@rog|$UNYY0hjDWVELJKsiYeAU+vOxmo7TXj(7!y9B1P&T-
zVI6G{t5;l7nUe|*Zip9Q%E3b5>q;Q;1}WnZIzVT^gIx*N06GR<sh~m$(#K0dl=|R4
zADj>F4I)xG=*D7jL<WPBF!owZ2Ye_4qzF|&HBC(oGD-uj=g_mW253GDIpcv9z-))c
zF{lVANKH{w(}2#hKm{NkhjKs%Sc9&F0v{&`YUG1G53?51uTxV~OsT0+!mlI++HgnJ
z3T_F44mr;(b}P+G234S7SHjMV)q~gon_)uL3>mZmI|y1m=%i@cLt1#ys!~%gF)uS0
zwBa1A3|@9ayQ!e;U7QNq<_(c906Cx-YALL{3LZ;^$B<@qvR*tqg@P`M0u{~BTbPpd
z;-TeoEo>MNmr}5WFxB84d5~re+RbOs*oUY_X&_>0XP~ALaEb#ZFK~#$%Wp^n9@<7j
zX~aQmE@)W7Z}0${3Qns?qh>J2BH{ovmZOsl>UZZL3MSMu79g1kWTz7NEOTsKHi%Eb
z)<H5iv}lEfD>!k2m&ZUmvIx79P%VR{6^MWB6&11dd%(8AJ)D`B0uC#9>VxRjgtbnr
zAeX77LahdO7D3Hegd3pM6GR_0j3EUKnsbP=7~*%R`@mk;LopgxQx&2Jd`d6Yo+y3?
zLwgcn@1gdEp<AlJ1|zqi5$0iShJ(*OLCWFDu-vJWYMWvYYV<=>24tocIcz}Z<3=Ze
zuBlZ@&H>#r1)6z=YKJUbg@z8OE1L&8djjHN&}Lf=rOXs1Xg-9hg7uqI;jLCk9|ab}
zH8tQ%)*!t-*zg+IO4y(qilv}>0aBlWF2A!%hW8XTbwJb5(FUOF>e0Ld&1IlwAFPIi
zwHZK1LSfZYQ=_i|zJ99)c5j#_bOCrOdS?K1*bAB%a$i;_6>`h~y48pn)U4Kz)3CQH
zs!6O#gV}=Y1vJAoHDL$JLxUI;CXm_{Rz=z>!J0|ngag^_4QU@C8pa3*BxzP-j!A=V
zo3l-V%`Pf{R@x-$Wfp@6^TBrsY9v9MRoY3QGy|$twL#}>*3=l(YU)7t5@hBnfUYzF
z`v%$?0yoIOmA)<LY|69}$aZby)}W>iblU)a?O;<O=@_Z?4H^$F$<R&G1Fzc0YIsS0
zff7!mLG6tsPy-fKYe{~ArVeP#vm`$kzh)fH%18w@-gT4olECeEOw((1;xmhb^7Bi;
zDH~q>!B4r+*8r{GsR7NpXzFL`m82GzXe8>DB&LH3M9rF-MA%3v(m(>F+(vG2B4Qn7
zb`%mh5QXq@64>@sBm<$@8PU9iS&GzihUPcqUU0NQEND;y)Eh~L^t>Q_9O%VG5PQL?
zC?m5NYCl{MH2n)rDv**L*<`2*KB;LX8lY>tK#fD3s=yZoK^tR8feo#Kz#RruTOs`&
z14v&6l&r!1A4u}hfG=PJ$2dv|CKnfj=EsUsQj0?J3&Jx~N-`kZv1)1zG$E!zeMF=w
zApfBm1L~Qir<TBqGD!ADj^4~P4MaJh2pvX8iYI969_%H!7r}FOiI5P4mM`#@Jt%-7
zG8ln}93`OjdeC$NHaiiNn{?4U3dy&Sq79TE!RrP=p`)#lWN!eehLH`0#xpbqL48Im
z(BW%oCHM>mDMN%iev?5V3>p;%O-F!+nV=&>$N>tDXJ|nME&EW@04%`3(GO7wG8XOx
z9WGEQNl;HnegQ%YxEMn$mIS*2i#_0>0fa6{AwyUjWH14)50s{`4{Bh910({G3SQf4
z@P&SmsDsF&jMC~rN<d6`*hnqN^5WDIq@fvPOF;);fzR@S?V*OY?_m3yF$*ckcr2_Y
zgc_S#1X*8`3Yw;c4FTCJm1pLq<d=iGTc{GC=>tgd04=vbGe@@3i5d_MsJED*j2*!2
z1y^+_GLZHQSX>9)AaMFdQ4Kc-bT=6|_8}z=v^@pNTNtK*5}k&oHo|al%xFN5Fowhp
zQp`cCOt9gQR9lS4b=n#Tb0JX*I*C6`4^%Nh9R;evpcxhtxj1cx7y$7w%xcipW13b<
zum~kOQVetqbP_evU>8f`v=bZ{s8)gs3LOowW{8Vu;w6-%1xkO#B}JvlpwV4h$RY`(
z=`-ZyhN4f?N&~5xj3T9`rh&qTl+}>v1~n2P2@e!GnmVAH-%u2T&ZGw|{?Y*_dC(w5
zlC8c5qzJA7O<lv9rpb^(JHIToC@m+y9MmubryOJ#M<YsmsPd$IP-O^8m}u3QHipuI
z#FUiGymXLSc)_HpgP{y!B4+i9(?H~6RZ~YJ39)KC1)5mFPSZ(&HbB5UO)FF`Qgwsk
zGjRC})`4&{rdp`iz>1O7fx{0HPef!()T9fpAF%oclJ(%;fp8K2f$}jO2?<z8%|NV=
zAgT#_36i@|eE=`mU<ClA@`{CYzhUJcqWn(Q)YJqYypLHhgHAdHjb>vEh$3nd&>T8=
zRU33&Ags>>S&o)$i_)}Bv^TWUHPnF)*OAoffix1qF$*oQVLkyB*;>hv4ggdNk~1L^
zx*CYt8?bhyCYwDZ<e<7BnG>YT3UnbTSTTl_rdBdagA-X5+(n@B54)2fG9<eRqz#v&
zKysQ|$)M^UeMSf^nm~0vcwsGQ#}%YBgVp-5vojD~CP-?4gbAV*4?Y0{G_oI|1G)ek
z#EOJAP8BksJr$HNgLSS^1R?zZaL^%J04+Aal{O@haVY^6W*VBcnmX|AFj8>|n=gPx
z2Ry0U!v=~mWS~Wq2B;thuRH@)C$Q#Bv_Y&k=$P-c5=a(8vI?{-GzFAmFlCHzYcd8&
zL8@iw_5ma#bs#e*5hzI$(aX01RVr#~8kx2r21=?&C<0AefujbCAtm_*HlTIKYHAu;
zwjc%;Gr+xb{O+(zjy8&gy2B_Iiy7c#3H1!>G!Vp{CHVz*$<f9jGeGVz#%2b{9hy4n
zdZ2|}pxW3L!UU};1g8x6aCl;RY9!=%{36h83>q3)P@hBBeFcCNXzIhYYihxnkOnl0
zNjh1!$@ZyG6TsbA$h;RQqV2$8R#SsZ8ssJWR4ZK4VBPkqx(Mr2wUO95X)rGu#6kw@
zkR29*;>Ap;1ChKK0r#RoEZmC*v6x<r(8;t-woikafb2z3w1NC+5L;7&Qyvue_Gwl)
z<-uvwJ`LtegIKFHm@h$WO&!SPJL!6$b${SQgb|$)nmS4qptdSpQ5LksLh^5<rlt<K
zPYjE0WS_w6L1@tf%k-dFMDaMHw$LW0uE>D(uc7upN;Hry(4h%fL?Js46wD}&fV&Pu
z2I@SJILYn<X|lrMK#&~xfNAi|1fr^dO#y(X8u1LJgC;lA!OPSjg&(BBg=6>^9KVps
z703jCP-<>|Sz-=!QVpUPY8h-U9wG?oU*ggax>^b>hq^uvS`$G9!3zSh&H5vITB#DW
z+!<^Zv{HnoP9;!l9WDoP6r{}#ZYzS$mV(rkP$_VK2#W~pZe6G{@Sq071RaPKn&2c4
z8(AXO5s=m$hASW~LlkE~g|N8;Y6#pRwK}jVLPQXOM+@LnR4KNw2~qe2IAj93Ag44v
zGY@%MO(z=E=m3RmENFF{j((g5DDBjM*M-!8W*}jGp(N1QBuF8AjEvYxd04LkQbxcU
zp^iz#psFxDGbKH>1bOlgI;n}`%48kT8L1HG7h6@=>Oeh)2mzSqt07ScDOMqD9hj96
zK^RX5UVK9*Y$4L<qB@YG10o62>zGtr3)$^ZnyCkI7HGOm1H85xvbI)731h*ul1?=^
zToJB@#v7>d2igjnT2Ydkm!eT!tCOr#omrBaYn7r09RRD<v`zuv7zSEHS!^2}tCOga
z0-sC7unP0WLy#Syo-im1A$N~~Owv%w%quPdO{^+uS|@|=KZYf4*rHC*96rKky@Jx>
z4A5<v$$HRrG_cto(8@C8>1*(My~L7K&?1XeP4KC!p!7tx=dqMfpb`dp85&aHAg)D&
zjQc}|c&$NGI{sy;MW6$;GmAkiTLYaGJ*>upuMGf&N)Aei2(d37v`Q^C#W^_G7IE!&
zqFzBxVsdImeojhi5u^x$B^J;ky8HqwEGi(Q!Jxt(n=D8iG^v#cU5^5uZchSb8dwxT
z(zk6QJRQVCL^Q2H8=0`VALKDu@u8uVl8PmgK=~gdk_d-#DkyLu`~IxcP|66zdKt&0
zVx2VT1S?YS-!=tPOeYQ6?uRt*Y+;26gsYRL7oV92y5cJ}xuiHevm`?!4c09HT@;X<
zkqRoVQf)yy8X&jj;Yc9JYan0|1}fN49SzDfm~O=CZm?2FnE`Pty3;`l6m4zOp!FcS
zKS0u$UP*)r6>FryiUjy1610c_O-87xX@DX^Qzx}nQ&T6^UL#EplGbZ#;7nUXofN%z
zNYlj@HeC)K&eQ;1j|)8}$Fn3g7a<Ruqej@TsRufB20V#h4BZl<3o5jfz%@x4dZM&N
zh(J;)D2kzrVju#D&0?_9Tmk01XoJ{V9oULs#O1{xCxU_@4Vp!u3*4dW17V_&MSw{<
ziUu&3AvgCxv!JM{3)DUYISyGBC^MqPBxK+io=zbF3KrBws6-aUrW9chR3)fsjG-MQ
zh_1UNzW@}E(CSh{sRX_;2efENCk4DLs~|PS7M@^q@aJN1%EK(wYc)ZoB;-IyP<Y$I
z>m;2ty|kkIT>sLN;>?s((56}VmCzuCYHAv=7=SF=)YM6a7Yw$DGD1@mbUiY-L<Vbt
zBv@Mm(2dgA%P>SriifP>LP}c@0Z_0)(-uSkTsk2wuF5Yh0aZ+CdeD{x=wf+LsRCXc
z1Sx4@i3Qah47-u6f+b`0q_2~PTswfaY$I0|kVPe+@eODZ17GQ(0newPIKZ+X87Vwd
z^sp{EHUR5{ClXM6!S-*VB@;!^o;C0WJ{(0Q&h!DQ+re8u@im6PJHrUIfIu_JDWKyp
z(?D4O67bg0WhluI6F}v9nqEAFXNx8Wy7(U4c!x+Ufszndn`W&Jp2i2fA!VHkGa0mB
z0JeMw#YDIYO@a+T=oU7Do`w~2nmSm#4KoDlZzvb$aVQrwGXV_>m<TvoCMIW=RFdF#
zsAiDo;f{hdW}q@kI;nc`P&VNJfONMp{SP`)AsMvT5uyMxgz1-G;*pt>lA2djqmc|9
zZbXwo)JDh}H53gsK}8F)7~C-EatuA#6kD`GteTpVM~JTvsN0Cc9?%RDbhQcS<N-a{
z1Q2B50q9E7WYCU5G}l2JEE=HwR#+QRpeA@KB4O*KfeNK`TiBEgnsK0dEyFei+2z*h
zing{HNbXOEEsC+%NQHHY!6P#eUQG?Cj{u#$f;b*jw`r$CoeG&3(S>Y5h_p$ChC0&r
zNc(iCSV(?>EocA?638L>1=?`c;C+)&GjvnX0t;jxHiJRuEZ{O)7sY5$I|k-A@RiZH
z{RXO};hqD}=Ro}yfz1hUzkx=qkvs?DV)b1Frtd&DVlx}bdm!V`Oh@;irWLN}g9U4%
zMh0vG9y|n(%})C?TQp^8Tun54tuSY|b-~-v(o-XK(e-L#vl3Ka6S5RFC_$GGKq630
z4KmUQ;nmbYZH_>;85DLJSZzl2ELa_qi@|(6-i3?<X~KMq#ZIi2qI(x?4TiNC9@f-J
zgRbEQFL#D7+gDRlOa-^nh~6xd0$K=7sHz3+Q^qWFQHB~26<&%SNI7&hF?3uZ6)Xno
zalmHn6>V)Hw_@2t<v{KH;+h&ID{vP8bW$d4y|t#26+{j8A&4Yf$QpXkYz|_ZB6x>|
zBIqu1L|;Zt4b^Rskq5}I2&gFn+S*={VFld-3C`^rny{5OP*F$$2O6}@FR%h#Bv$~L
zy8_)XomNr{YPjg&E~-IOaXM)CzaSOg1-AL%fP(J{*D173hL)`0Zh%gaZJ{=nzAa=C
zicT>?HK;9LVq1(=F=S{Ed{%HSsIJIMEPzE9^iFqOL+e~STLbG{U0uygG$qlwpo`?w
zN_127U~|r(G7EHZoi=Ltf>eU@g-$jWGeA8Mgb^V3=GbOqF#+OQolM;VyP}$!Lc1*O
zf|{Ca-2%Iknwny}91u?tsWXe|1W?M-%P-GMEpo|EE(NVY(!s7s(_RBp0+g5wGV{_w
zi3c`H0us|JO3g`4EKbEG4jFAk^lXwqeI>|fTnfC4ps7<0G7HqVvBI<(<Zw`@8&d|P
z3FIiyeitjyh+AH25vcV6Nj{(>2Eg5R@VU&1NyQr3x+R)6wgo!S6W~BXIl9GQp>)Wh
za3G;f-6F6M^o~D}P?l~XSSS_TYJm-BfU02I6g_NPr(iQ1N|33VY+Y=r6&j_WWMgGe
zs|hkrQzwl~D{>$i5N;0Wemz7l2Apk(b1QTiXC_uBgVQm1<7ZllrVi*Lc}ncaf|;bL
zlV_V+Q<GLxlU`Gkp`(;vT0$r$A<>2slaR<oiAhMbp~NI4a><TKv|uJXy08W>))YZ;
zOu|B$^7z8)Xp}UesiTNHpMr8DJeF%}@-#6@4N#88DoCGl1d#?ot|QnFEiOq+&c@#&
zK<;_!q=Sz^%}#}EfJoFx(*v8J37IxPY{3Ta422A!B9^QrY9v9oU_(wtL0Tw<tSA|W
zqFPPsbZE5(iU!27ZHXG`paD)uZxqdFokWdv^yWsAW;L{>fucnxRU33J5M){u+_8t6
zr30GmhaOBtxMvH~gnvRu1Kx>74qw=S2Gk5_#~#9i_3I%#q;5S_KqpNP!Xlwl57B_7
zPY;m*cj+NakiV@VZB$ru4)xR__$eOH9jV~aGU84h0&7iGLOORSr#L?dbSg+H=-?da
zR!Sr$Y>T9oQZZ=lr4CeuYhrO`Ub>Z1aXDyyTPLx&AT_xpD6u3nAFQ{uB;O-51#BeJ
z!X1!QdPaUR_`o30iWQImWFuR#l~Srsu}*QSk`83}4kVSESOIA|f{*Rd$xW;Pw=bc*
z%si;1p@B|rW*$V!&_D+gh*p*cIuOr7ltZTcK+E+YLr@?V==9LiT*NF3eCLY-e8oKY
zs9?|rBhX$M$O)2I)GI;`5k}PoS{9g*SR4!<q(Eo_XIIcpi45>C3uplcBD2DVIFvM@
zdnFVN!TTdpK&PNWb~u5ys@W?+1^_@kA0;a&2ejH$2Q=*fTWyvUoe~Q=*Tuj}1H`m7
z)Je4kG3*R<K$NY4PAbTakX?QV2STRnz#SExR8Zp^JY%c_UH=Ac&cP21f%X(Y^R9^9
zgy4V&O>8QG=E<P*so>s1bv#N^QOwXo;-e%ZR2kTOFtp7LnFog2trK5RlwSZjn<FtN
zrxKE!p(=~5qGNTS6LMA=(4pO$nhZT~LIg3ODcT+(2|64I?gd>)dQ<`@qgv=*9;nTr
z5vsiWlvL1$DA*a6aT>{qd1Z;kH6^JPC5c6;i8bJBXKNtGcGp0zS*pp*P1jV>&jgh^
zpm2drCh3(IB^GEvkE}sD%N!(JkXod!0N!?Is}4&iRtk_*WDP%t9#WtqW<*g;2bZ+4
z2C0%JwC{$Z1l*Vc=Osip4pRXn=RtdPDAHgnkY-ddB|$A%B~4Hp9a#>X$l$>MnT63n
zn%jcMhZ3aHfX09xTpZM*hs~j*#*$}ocoAsc40I+Gs%DU5t05gSP*#GZDzu~qskab{
zK<8Y751k0fFCeG^lqWTHAezBzunFn_tAg7BS>;Sn6GRy(P$B-q<^^Pb8bF-{@&b$v
zw%7{BgO~{FXrP)1$y>poqZJ@AhRrG^aHOPyX57KM>!9n=pg9r}pim_`N_qKtaFuv7
zGGycdoMy0Dib(QGpi3$;la+L;^7C`840Td6iwklRE3K5k$4x20Qyx}RAaO-7#1UbQ
z)y*34B}Cx!l!|RLpu4(32lgjwD1r9IgF^sRNW!*ULqZywuwmPk?W^;w(3IyX>7=5I
zr7GzZql*<Q>6D|3l`H8KV`v7|y2Thui_4XC@-Woqr7G#<VW`b3SE_~A;LzL`53Sj4
z6G7z!C?P-vkcYHvVMAKr%T|>Vb8<ixA~=$vs$pxDp<G*~JRML=p<JgpRj0UICofee
zuN-veFeEubRl#-<>%h_=RNNM{sK?g8I@t!a8!|7wB*QvcTU!%!mPScYX0Aq3baE_c
z{s*-NP|{8TUCXY4en%R53@RvTr-81Sg5D_tn+B_fwn#FdjYiOB<>FM3KS4XlQEN`n
z#gw3f=RmY>dQoOUac*Kxj&4e3VtRgFVvcSxJg-1~6rB=li<Uk>&IN}cG$}zRGBr{)
z!2^7H@kOb5DXB${6`93|xqjHLejV_M^VUhWNzjFdP(#2YU&#uYd5}$RP}?=Z_CPt&
z$>765VWXAssD&)kMJR&A6x3Y3<c!Rml%mu;=t4Y5egQ>;9{Bz^4NX1JEqofVBajfr
z=w%g_rWRE~orxq4s*yt~3&3kn(A)<d_Jn0dkTsB87oU&e0G(=ZyBc)NtyMa7WrIt8
zc^<s{fcgMly+D_epcO0F+X(m?2e5`g3Z`ozj)htbN~rq9<u!S!HF@PV#i=!UHO0^~
z1CllEQy_aGVKp^qR}pBO1Xi`D+D0ouHwP){=tGRiL+Dll)m&Ek#i=#L<;bQgK`I6%
zEB&}s6(r^0+C#}o2~>?L#p-3{XXa@rfwCpIv`^JZgB1$cnriUU5?*A0qYcIb<q(Y2
z0X=jHDJ?^kz{3W`2uPB{G!Uv9a-bkuHiD!mQ0EWDC_U(kykPK^9hv!gu+j}~Iyl*Y
zT4;zqx@L7cq@|LXmk!(Sk(`rQTnuVCf_vCtJK#dF#w5y-jT(^HfW}o#YE5xXxu$-m
zCTRUXXqh<pdK}Qof6xi_R!X3vqE=HULl3k%7t|Yrm85Wof^JF$oiT$Na-iVG(v;T)
z83WRxqzO6ZHWjq;3)zbqu%Lk)7Y*`}CUn6ve)DwF_26!TWOmSTao}LgNlh$E#bpUf
zn8Jn`V5hHwS41I7XoTyLZ3FoSG*b+#t|4dMz>i3Uu8v0T8-aWUD-2*KdxE=YNjk|W
zr75^m2U%2t#rL2x9^p7>l1f1p1<QlF*RW7@Ni0bO?XZWQ;i-fwj+|DMH1$gJl0b*u
zC_&O4sGXsti8q}?qe?@w7S@3T`xTl+kV-j?WYh$s1KrpLRjC8khE@uKivdIvEeXs=
zKHv~ME=a;O64V5wo(5C|*1gcn%qvbUDgobS1v>sQ3GP2=QH0Hfu$C*TACMZonmSO=
zqv?j22|KtFx&RK5ZjftNTSY@0l_{12A9Ql4jz$XTz9_wt#G>@n63|gv&@q)_jTHE5
zJn&Uipp}-egHO>;4}%_GtEL7z9R{4W!0Yj_I}x_U9opH4T`CQYV3gzmOQfJRp5Taw
zmdF7``4yF*)l|@;H?K4ol4>B`X-ND-;tI487@`%cB5)Lg7eqo1@&HXnfu=pQZ9!wA
z(4YVb!lvdybr5JfwSi6wPBq}^d(i0*(3l1<GK4r4>OjciQCQ&)>oh}8VMqp_;Fkie
zgo-n(U^j6<G}~i2nE;%?(fZU7)q0SDd=1T7E2zG7$lN4Cbvi-~)WOg`RWL5A(;?MA
zth$F-VFeY1H3~?u5adUf%(OIHxD$~_3Usl!7%UI7Nf)ONU<=o=hAb?X`GPJSKvM}>
zlo0`r2?#q98XrhQO14UnJ9d=dXWyqGk2u+*@KAewprD1sgFZNQ!rTHDhlFQM4QNaa
zqdy0|X%kc@Lxy9NpbOzNbr820fW{tR;?P|swzjsZkj64dtF{v4xaL$Pt5k3mpOS*5
zB7vv@*AkGF0q&0`rh^W|19gOpKnpBEXD-9aCeR{K?71G2{9)ci336D00CJa3I`l}?
z2wlkWiZwL`IvG&0NZnM>%p^z%cA*U9(!uDoSd?-jzO(>zsD40EY8hw^dTLQgW-4g!
zLZ-b&vTY`)%aT(GE--YWlXTK`GGZYmtR7TfSY}a4X=08OXfI=85lCy2UU5cdT8VdR
zrKS#8qaN~5Bj_#{xIC!zfOr;a8hGGZ1AMgy><A*zy;h(xZBT53WuT!8akew)z!uQ{
z3vkLn4svjL2-<CdDAmA6o<T020{IY9FhhqVp?wCh3Ajcu;S(_k%g~jAT5)=r#jd#p
zC6)e3S*gh-8Y%EoyP%%L2x^FN@I|R`mqUD7nu%zZqxt}J7^kL{BJT4o!3Kkk%gjp$
zRd=8zcc2|k;NfJ*S`J9~!z!3;Fc&p}Knh2sxWd+TfQ~5@>!jF%R+E5w^lEDQu-+By
z)GE+MVEBpDnxG@;VBroQpw|GYfgU0TzPMfwR^ma6UeMeT=t6shIJiXDNr#n)+0emd
zNSUFbshb8{1_PIYlo}eEx~a9ucOhlN$34M?0;E<1ok^*!kquv}4W5+O&DMkEPgrRP
z7T2t)0ZnM=WFltj&<q9Fq8Mg^){|f{611xrYGM}bcui<O8`=f{*WZbH(4qZw$ijt8
z$aHrGsE3U1=WKAeLBmp02QCc`L=C7cm;=k`u=rPmI{_AH*b)LLvEnUUp~k}8kF#Y?
zpg_$p058}ECvns~3~?{Kl?gfU6H;8DW<5md3*AUs04fBb+ux8j{=?cFpaK;VvS3@`
z!k}~lt?@u6fJ!P@S_CTuC16Nmge63TFeD{{PDDV?+sG~h<=I5rYShjE-0qV60@yZ8
zklpaaSdw1=J`5eSodawevJUW}yU=)mi-UZD)hLhz*ennOTt1-Y1!U6@UPU$v6e5rS
z0Gk6&T@Zs1>M=}#gbao;5Mi)65GImA5CLS9plJb=of9>65<xp9!POl`wS@?A*yX37
zyX$no1tr7=Xc1|hW?K!P<phUpd}c9ZLQ*4L4<@5&k6?qx@}V=Pm>QsSsbCFIww0ki
zcqSFnW`i__&@6#Sfi=OWUqMp_uz6Z+_8{qj&*vKI8`NU0r4vCjVoA1XARj?AYJtr}
zYSQU|_R_#S3~8Dn%O-;~!z{wooC=W!w~H|~C)t5*2Frq$nSz`F=GZ1_>ZCv<A<lxy
zLU^EEH_0|>dax;Kh%7W*ZId;1QX!HM)i7BI&o&i4`cQ^w&)BBH6Aierfs#<bK?3QZ
zKoSWwy+MRveHKLAK@P411ua-7O5U@DN<wOVWIdo-05)a>*8<Ae;PdsM`50LPBp<-7
z0cSFZm~A4w<OjO|Sr<54qG|#Q*@ACcDgj@)2PsCu%`}vN02NZu(Fd3dVGTHt?XYun
zK+RUv#sxg@z#V1}wGQr7jI@KEBcK{UPKTKSb2CQD($rBZ2A}o@I_C-!;;_?5HIgA^
zlrGFX9dP)9clB%PDCHq(0|h?hm>=+(7V!C=Fsnf`?ckCUG_#RbqK#oJq#P<r1uxYA
z6^*z;G9D=z!a@@ig0RrU7I{fXNgu(sfqDscf*!I?NW#zr-M$K6=Yhhpf%y#9`9RhU
zP9YG@(4`+>y->Ct%wE{tyO_}pRSwC5C>%Suy|5(@(7rajk^==Z^gI`+6eu_$u?V|I
z6P6r7l{Z8!C_zGVflih!c;LRgrW`(ou9I!6p9dMthl|0|ENI;z)JwKW@G?nL2ejA^
z=30mZ#6RG(i8YXPKuaP`9neZfWF4@A61<c&3tYW{d}j+f&lXn3f=xr0gPWMHrj`xX
z2TGiox?tzQT#<?)hp-RoI?!+yBq@McAiHa76u}t)mLWmn2o)vy1z-gbl^W2j1Zw<h
zT7k8J^9{JlO;0TeNCcnk7LZd~>;yg!&LuM!bn94tUNK7QPs=aTfRrT$I?14I{VBH5
ziQqP_66A0)q*LEe#KH3(;2HwF)CE-GLv=tVO0Y_S2B@GCu{x=6o1oJ%pqUp?W(J!D
z6$4v?umLIxu>wOFWW17QthI?<l68`{wq|m4QY@lhkP@8)zIYYXMF+`fBcxIhQqYuF
z4GDNFQ0GV+bfyh-$q4vVB+x-VpcW*y<~SmBHLGE_RuI$41y2KmVj@u|$rcnB;OYWW
zy`lC%tdnfOa>SSl4hF~p1bTSYg8~3-DtPb;kyv1JHfX|-$`^D;7M_Hrk*EoaPIz!a
z%K_K{nP|pBWkE3nF6XSEH3Tl@U`3!sYM|v@kjY)}@GEj8fWj17Q$o8yu%aE-zy$jn
zDhJu6W{cPw0&N{YA_96r4TJ*;0|*;*^B8239DSV<#xf;{fe>wo87HtCpxr9S&>3{N
z5i9|99LmV1t|3b221N;^7}C(xHAEaff;eptsY?ab1@SewLk(`sgNGK8ZH6iU9r+Bt
z4+J`~udSVonA!)chxx0Z0D8_m=&VvDP1pn((%d2R@Op>_NLWH$13DKtBQY;M)v6ll
zt~l^%f{@j|$Uy@e6+l!(+DWywI^~EY0M-af1<(W4kafUnc9<Bfrh}CNpu*M)a=@E*
z608V-)OWfdYw}R60o_ysvIu&JA<R&a(_jq&m>9Z6pwo)M1BlwmuxJJCg#b5nK<D=%
zm)f8UgJCBWz%mv%@L`67EQDqyZLnsfU<5C3gy~j*4`hJ#$3sRe^@@>4A>r4x!rHx1
zMc~T>kcKLgby8wMTThFTf}U!Yl_R?-8f+}svOE%fmWON(sXogi(Pu<ihQnvIkhPuQ
z;cP@2123TkFOY^F`UAe&7Zi6oNuZ;YKrB7b_+>2UV1Mx9X3$2TB-r>7Y{(N7fN-^%
zwK@>fz$Y7(W+JSEC6j7c!h#MuLiz(}f;!OL3z39!U~8JemO-*QqC^4<!kUXZpjIM8
zFNg&{9SM|{A;K{GKq7EySUy5k0u#l4ND_E}7CbMkqXb<83*McOUx4sBY~B*O5(PBj
z44r&NUTz5<e1%pcI;pnF`0H4mG+WTT0gj>CROIzCnmXyA6Izl%%LAYbsWm_fkj80~
z!Q+acnJH*i*U7L=vp29p5(ih0I+?c6@)9BgExj^e#SByw(%#Wcuhq#yw2P8)kI$lQ
zXwpr_KR%m{(@>=GStK(-<Fi<d1og}z<FnQXw?X4j174VA>SU{_W!Zy||I3Edc3HJn
z)wP;B)hV!hdQ)J-yRdcsI;oJA{cs7$N`IZ=l2oL00a+uS0t-_3!gqvgz^zws$V0ZC
zz`_}qQb@o<)q<)4Tnga<1@RFsWuPhxVp^?rs+t-i#U+AM5K7}B1(FzGPK4DswV>k+
zppz%yF&K>$un4HV3oenMYcasHJ+-x<Z5t>Dyd|cjKvh6<8PZ%eIH!TGCWc?T0SQu2
zkpy0W2b%K&9VH8%%EFcJvTQS9hn(nS+h)R&sZNe<7HE+r?08n4T-zK4*a>6#X$pz<
zIeMTQtPM1+^dT#)p*_wVP5W&45kxR0Io7$L11MnzrWQeqKifo&TumK)*pUu!BWh}L
zY;A2}!uA@O2%V7j6LhB60NlJXsMSGI04uRDl|bC-l30>xTMaE$t&pyyha?85k<b<j
zk~AcO5%cNDQjnAfS}*`}Gv1TsYc;JjK-;HtL3^jc2f#&x7t84=K{{zVkTq~Ru$6ML
z=v$%^by75|lcN)3Z8P=aK`S1h3s<0>IwkEC&@pYup#lvyq}DjLAWMP|k85Zm>jqU6
zwy*|Ll3r$BUTP7%Wen=WL4yk_1@4$?XzGHxc(pnywn$b%+@X_-ECw<iR`RA{NPr6f
zopg{-5i@PM@ZvicdiDg^POCJX3^awB_AnI?2V14;WJ1#?YD&n3#6P5o3Qkv$Gl#+U
zTcyKtHfUz57Pc)2p7UUp9AxP$Xx|;)OqXGs4$pL%w(01pTPMpl9Uc=p*|zC8=b?3S
zAd@}NJ+ub3I=RTkL9>}oo~@#RbuQ!t6<7*YQ`3hma);)+T*z1jtQDaIUJaCEo2jXj
z1@6w+Xr${wyH)m?U=b?=(70tfxb}qP4qIf7Hj)N}cfdMzp$4D}=YVB3L6wdM)F?>S
zLNQoB9eMo)$a99E#SJi*gUtY~mIt4$ig2q=7HA+1)f=E%0@)X+wn2C}`~j+0GeIU=
zA^8GSt0KD|oOoc4hZv_t!1bUpFyxSiI8i4ROT0phS6f@#bXd6!P1+ioP&u76TYcEx
zaQL-g&=^NbchH1_kpw`4eQEX@uw!N*L7NV>1eAZkBHBnH0ID=~;OZfsK@_~8@IqD%
z3NI@R<DrE!^aKVC&_0H=5_Cf`6oJgrNk(j|ha@0yvkn{$sPPDy=Kwoj7n1BiE1SS;
zxFCX%B&rEogW;Q4lA#CMmXBm4Br>s@2}&6`AfF;k1POr?3+Q|!ZHO_DEMo`C>fq~`
z!NCc3DdfzV%&Js~5-ciolaW&y#4WI71~vj)9?{fEfmsdFfo3;E5Meolk7_$aOg9DD
zda#8s+aU_DC2~z2(1B2BNd;s&($qCL=yj0PKobzM63~$q$RP+d0$huLouUJkg*XLS
z8X|(R;}+U(BG5xg290GwPBPO;u}#7#v{RAAV670HG-Od|HUrlWNzk<(nmXXx0G#qb
zwJxY?Kw4$5n*=Uj5y==_Ie<s|AQhU1CbANU53Q46MK$;!SZK3eO$}ZYKudr$j0_Lj
zTny?>LL0ZB+-#Krjuq%iEnR2@2@YwiOjxy;1-d2xhovah3{|bfx?vurQwrajjI*^&
ze5_l8?x0MBn~2^hLrX>0Nr+Q5;ZD*8X$SLCm2{w;NqF}o36kA4z}Jew0v1UY61Pxk
zaLgb{f;&qfK}e4U+<-xshWC3Q=jA}$fz(q+jJm;A!h@B7x*jNfb=0HJQsDhnP!`ky
z9fJlNV1Va>40!7?1)Q9r%{^Vv8M2^}Im9?MR34nXbkiUq0+Iz)gNUPCL8Ys1I*0_x
zfxK;nBnjf{f({=@E2*h5sI^W69m+*)yy?J}P-ELUiX4BSMPSvn;0z9_;EFX6{cLDX
z2Oo3*Ig7wPS_$kaB^@P5L@LEvVF>9cf#L|-xQ(@j9`l)oI0zYO2v!3$4Fg(#tgVp|
zofHdVfewC7wzD+=Z3h9(*d*70*K~pJ@BnA^RPaGbs0Sz_j#q#zXadzkNS#g;FB8mg
z;4RTq$ZOyd7BqZiodnrt4Jv%0Go{e5h27<<162X`U^VneLn}QaQ}kV%i19MS6@##B
z2J5gxJ2J5DJaj83ta%O2RiG1ZaO@C)_+Aq+8G&&{X)?q&_E6divcU<g4>X_(8R~~u
z4VWDbv_b~4GXpt;!omzRCk-(gR5~EGPGEW;QprGbB{U46V&FtuOJ1Fc>=4M9CCEt-
z7PNs1UF_xz+QO#+i%H1H0^!k+^rFlZC7o(;DTOqC4GkplePNKw46Fj990M)*L>_Yl
zr8k{4&|zNClm;!(5ZM~3KuZQ6WvG*hxjZ}te3goQG=$cHP_b4J8gyP)H0a(BL(p(b
zv|%i00eB9i)e5~<1={R`m42G~S(;i|I=N_SAcY9L1l82f*3`<@$+Lx)nc6uz`L?j)
zRXbOwz!r4q7i29L=)fD;G9#NjokEBdq&WeVgK%u}b&5ce&@~ZYIVjsMPp23n1yKr>
zgK+Hfts%a(&D1GUQ`5-Pw$0MiDOOX{$k(>b*3<zl@XON$i4}sxbU|YJap28qHL04g
zO@SGj_Mr1a5$)hS9h4zf+k8zc{Wy(0Qgk34Tnwr`Y{7MiZZ6oM;&KwKMm7jk-`GOx
z8{HgDD-8_;JKKES?3x+_JKH?nEKn~w2{fdQe>DMQ#6VLgUpL#%0Pb^0G~4DQ+XrbB
zgZdP?npPV5w%NL%5(89^q6ZLGUD~i@p_{L%lc$@7WE(iM+k(OwwKt9Axjfq}U1&=M
zW*dH8+RzlKo2LoN(U4<l;2BZ}yodvo;gw1=^-?kubMn)bupC4K&8Jq?pko;FQbO{r
zAcy+ufOh5i7o_G{DH`ZNPR0PA*O8o)U!3Zn=USYcSda>m0}F(tR+LyNIfLYsbRd?2
zH$+$|DS?j<1mE}oQVrVG2R^O?RzW~+4*?w@14-f#Nmwp|^56>^4NbwzAR&WNU`~EY
zVh-p)8d$hmRp(Y(DJ6q<Kq~1ZmLS;qX;zSnI(3rsb8<3^GxPJTl+rRwlypkL2j*Z5
zI>B48pi(|b6VYuh$uF=ruuDd5(?ePq;3Z(X$)Kxg;86kcH)!u9#4{zCB{``OCOCer
zj13HQl2X(1i&DYi2ay7YDuf9>ei5{a1{{)*tzk&q`~rxwwEX1KVhA%I6m4K7U^hT*
zgRqhG!vvrv)Pg6tz*h*TruaiTWLDL%s8=+A#h4=Us!|9C5+5KoJf<KVxCF$jiU!b{
z7gS}S+XP=~1`02D0)UtUO&bsn%uvuQd{Js*2}%tGs+ZsmXXoN#+iKVu6JQzW=muye
z3%m{jH0=*MfdX1LV^;%qJm?@Js57vu%7ytIDKX<v30rCf3sUULAVm~(8992>-?kdk
zIEG9sLcIkYKmv7l^HNePu*)H~^=s;7f|P*^NZ3G^CYpUApyZ0O_(3nRq@+kg37n2$
zXE;Dh5k0UVL^X;KbbS!a6JSFj%S_@SXB<I~fq|`$h4}}RZ8ShrEV=n*sgB6@BDDoU
zhpU3iH(k&yPHJ8WXs>QL_}Uzph>|9v6$lRO(o7ey7Wk3@a6$sRD=D!E<_xIgoJvbd
z^78@`^HO0FFwcSVCb(<^-DaMar-#G`TN9s~n4JpR)&*9Ct{a>IL0JK+8;Ot54c_4j
zQUuc-pIHnlmqABkLsXR%B_?OPfwDjNuBgns%o0TB6S|K9=3rQ<4xMiYl@wr2@X{Y%
z3PKxusF4X%23>uk0J_0234Yo`5_lsI_<RTZM2#fq`We{3IAn)&QcVq{g3;7VEz~do
zEsMgkl^e811+>fz>_J$nfi)7LM`e`efj#aCy`BdiJW%66_t)ekg7&$B4S}U7NM9^8
zFSD>T)iVX2w!pO&cwaiC_JSoGtVsz}AAk*oxy-q^SW_=0wIne)1Lh1^0@DL^3N;`X
zYe3uNFeNbE;8X{V5STNO^B5$fps3c=Nd)ieD@x5PLC(*qg&Lr_qLkDM(7HBA2U$%m
z5i&yob~4n0XoFb$L_J8ggPQ-XKpQr}=0YMHRkjvXP^PD%BrwR5C&=L=FmKm_I*FiE
zYn7;%m!DstlbVOjgH&(uw3eh<%>|0`Waw%q_z`B%v<?j%#JxNahlA@&(4HSfThPg|
zh}DefIRsocrlvqUxR7P2;LwQ2o><~B(-vfFASl127U`vB=9HusX((BN4F-7(w1FRz
z1EE_2HA{*rtD)<;U^xI(>wxbQN`<;aCs|Dmk{c9lZIi*d2XyL$UP-=BemUrxp5jyu
zO;9r<SyL}5r?f~zvo<-gBsoJPRkOMl;sH>D3KB)Ipob<GNCmD3l1B`4XjZ2nUGV{q
z1yJ~bCdhRlfreaiAV(}TCTev+C2>eT=y)o4^g+v*c({}XC|kpM2qVF(gFq3T0xG?r
z8?#~V)+^3T%E`=2FNU1Klvb3VS7KF`2@*{O9c+<UfPB~l#BJKJ0X0yTRI1Vi*Jq#u
zpuoLg&?zk7IfmTC3Q+l<Q>g)N6{W&9;wz-t*=mEs5$*_7gJ63suuJQtX&Zv(F%&^}
zh=4|fG14hGeSkt(C#6;glz0$ffn2`Aic_#tpdpQP|2J~L!mI$B9Fmxn1WJ7xny@o?
zpqk-Z{y}!87C~FG$TubEp(I3DH3;gd!-}VPSd$tq0I90c3RWb?fddy57+`;Zj#<e`
ztb{rk$^#E3!6OQiRIvxHrmi8}RT=r^_|iD2m4KYall0=zf=4F_DcOVNK#2rmJ-Chr
zSDzu^Qyerj!PlNc$}>cf0}4qc(DFf4v(Y0Iwv-uc3B1U$POPcXfJ#A2U`TbS6b-78
z!HQ!+=h=W3&4ZR-;Zkl@0*!L)ieW*CXt6-8AyOZ>DoRQ$0++0aVvaaVK~)a8PS*qb
z2V4kbr=}Kw!xj-vNt)HLl0zX`134SuPM@#^(J=o(F6vAI?LPpu`4Thpicu2?=x&fC
zP3vT6!xJ^mG&F0I^gw$fQ}aq(QqvMkb4ozRVL*;12BlqC!b?d7wIGr~r5PmcLz}4x
z&p?Yln7eEfAt#a9ff}61hXO!a6^PaZf`#1DNX{?HOD)n(%*g@CgG)dK=!pfe1{}m7
zaC1cyT)1m!LK@`NC5cI%pyoX2lJcVboK!0%h+3su^u}*Iq-GDv2kp!S`Bx8q#um&Y
zI@Q^!mEiNWU~#39gxD?sa}2lwfei+zsVOGuWfnsN6tu4v)Co@kRbWYa*{PMz`6;QO
zVM-{|*47rhP87=3a}9QO3~+^>t*U?}e#-JQQy`fVY^_F;Ca9SJHyYi%5JxARE`lUF
zXzdL1GG<NzFP=oy^_fM*B}$;#iDX31$Vmi=S;H<~Q?#`OErJAj6LKUBY_lrN67Ucu
z;yeU<B#kNHn|F`|z%hfOQ4ygNw(TJvl1AaNq*<K`&wiRZn866IC@}P;;MZ3Rs`^Wd
zQ&AH|A~XXa)dHY>qF|?EWID7XTA=|RomiBasGE{noLrQdl$w%M8LI?ZnE)vT!3M#?
z0GiO1&^0Kbc63V-jeAHlIx_`S+QWwnV1*oVE(SG9k{}%mm~Aj+1oE^lxX+uESOm(l
z&|YUoYGO(%SO7IgLq_Oz!FLv?WmYI@f=VIiJ_Hn>!U~{#=+SrRZbCi)4<7a41HEDC
zM-w!SQ=D2{0%=V_iUPP>b-`IkNfTN;!i<Nf09Z`HBw%3yt{1=o0vQ)lD5)$+wN;03
zKnLAISfJt$!qTYDNlZ%3fkY5Wu>l$~)B&BPSZq~YP?VXQSX5~RI@=K>1aV$TMrLxh
zQmqc?$OzDx7Rd8Ih(13o_#t{g<t}Vz2TF*-d_X8<!9LWf24C}zNFa%t)rp|EDnqF;
zz!rc*QX>&G1gisDe5hnoT#%Rt3IXJFh*=jv;sSRPKzA_MpP<vSz_!971|>^?gE|M4
zg_Nw4ATmnuv=7#g;v=v@us8urgX+_alH42(B{gM3GXrbz{xwkWLn>DkwTMa)(bzy3
z4=om8&O|5yC!UndGEe}a%=ST3C?wewB<7_e<tI=b4;|OR$U=}tTxll6ir~}|;%q2R
zEy0;qAVz`4dtj*rQu{;1i@^;W6cJ>9gG&<ds0pmm0t+^X*NRaZ`<MZQHb{WvF}+mK
z88TSTlS$SDMO<bv<T`?6O;A?^+6@KwA|SOU%qpk_;3fp}hzHbpO5nS3!PgunBO2A9
z`=zTvUQ5+Uvj&~Xnpx~tnwMMxI%F|L(;k{%QXqLXxz;KLG~Ew7gQOZ%N?0jDEKsV|
zNdZ-&DUi!wL04zyWF}`L4(J2bVBnK4G?HM0lAzWcVlND6Z9p}sm?*YN(F4;EYg53-
zk%G#VTAh^CoYaz31(-aX3+gI>RDe!<vVl0r&PE@~P|``!)Pt}!(vTWWNqR`Jpov~K
zVjYQum{P2S+?Rkw03;cKk{75`3YnS)=S7$Ta4!R8<PbT5!ODAuBn|kf_=q{^M8pDD
z$WlD3MCimtZ7nGNAdMdAI16mCENaDv7{%16hFty(IjT4XJYouKuj(j(PD+M~flH61
z#3E=RtOGfq6Ga<LiINT|Hz#K1fzE}qQi6?*DCt110f6~VBSj|_v4R3yNdX>fg`BRH
ztQQYHK-#S+F&BJP74kLPAa&qb4<(%xog@v=P21p^6hxRpmVG1j5J6g$bP{!vG(Zc!
zA-5919R@lv6`U2)L6@q6*Ox&SawWt2FM5bO06+`d5$Zs5ix|ql2i{pD*4fyCr?5bi
zp9<hrE1*d%5Kl>4Bi+u{z+OpP3ADaJJ6&4|tUy~M16epjCqE6mEj2GCzr0olHbMd!
z_{7NdAg`vwL$NfEP&k4P*-6z&(nteOI)Y9vOUzD%k5MDS6sePkoK9h*n6R;2Q0jy(
z3V;d0cTRy;2_VUXxQL}DNa-9jXknEIUjKwAjf0MsLM-cm9b5p*a*%Ne*ocP`Xm=CF
z8k1D}R4c4UT%%<l_%J@c?1M8KfL5}B!!s4qXo3zGfF_k76JLn+1|Tu$loVJH!Uj!L
z!Bs+66@bJbvJgY#;geOM^a(lG*(#mnEC}`~Jn`U8I$(9F=$Q~AibygT*$|?Dn2eaL
z2aiZdsR!~FZ0P_-h6C-w2hEW|S1Dk~!!jgf0?ro6aEOQo=*nR5q#&{!SO6>qOGbDy
zGHQ;6XXH%ejGReQMg|8KJTCBMWU$Iq&=t-~I*6={mIHLsKn*<b3=7)$4YX+oA2NXS
zc{DV2s=>oPnMga1lVEB=l^NI=_z)Yo!h`e>;iF`>i5l?k3ux1p4*Jj>BCWs-#vG`J
z7z}oJW?njMcBohbbnGtpm_cw`7UVfJy~u`xYD(yq{CF%zfmT52W#&QJTObQ{k~FP#
z4MBtWpss&$K~83Jsz$PoA;=mG{pc1!#|2?EA!2zev~q=Q4=YxJk6S~A6Qg4xjb9>k
z>VQu=02SA;S!x`vfHqd4ja10$4DiqjB<b5Hg3dUB7A3x*_4~P*c^XK9I<O;5KwgJs
z1RQq3^K53Zh7w|^A2e7B3RFa%2DRE?qtI|oFvG#|32Vu~TR)mQiRhhM&{PPx?OvQ(
z0$bkzuhn5YjUX*|==?-=Eo`Z15~3*#UMiZb7Y{c@10<r82s(ftvW^OMWrLcUMv5(H
zR2-@Toc%zf_87`iK|9aDmv4cNA_50NJg9Pmc^zp)9@;U12L?C<VONd9ZO~NGgbu&M
z6~g5-lps;91i5Mm?i)m0fxHE7=z!0M1P2T}O01P2i4)wO0Nt062-?Vr+{OSqA7Vu@
zbo~)nF;Xu+NmEA&cD^=f7kDCUx+T82v>>$z60S<H!AhttU~}Q#fk{FV0m{H8w7*e|
ztPf>EA9UiU61e*g>JcC-gBcI&gM$YJU_Arqh=!7qb`t2i2yg=m6rE55G?Hyo^-!V%
zu0m5u6Ex$em;?$dxTuB_bP`fYQ%5mbO%1*m9#m)|tsT(RK^)2r%8}5RMM@MpkTbH8
z9g~9Y7<l}H9FqbXAq6=GE{g1!6g4%BHW1k9NU9+b3|e~)X+%Kgx@u~YY(Z19&>RRZ
z#=&hGkkdee&d}8($ld_=4<ONq9{kXOLiGNIk|wyL1j-?ZL<<?(1>c{JwUYyFPJz3M
z8qnPs;F{YCQr020l#tgsLGHqVt=BQA1+@TRhcMYeS2cq&I%HuzWC16*5eAy6M@_Pz
z8AjNiPpF*`2SAOf)r6d)0x4uQG<A|7D^zn6D>MvrQV`{@ZX#%(E5<3xNKHX|NC^$o
z2wQffo2Y38^$^4XpiRNhMaqyvj$xq$b}PKCXqAN2;)I_90x_Z%y4nM#6H;Ahpf~^`
zrVFZyP=f>|yTDTyaiy0M+<DOJr;yvWph^g-S&E!Yz%Iy41N9i4a`Kb2iy;LZye>@x
zAJGp{fI0mPX&^xRR?x~)0cr9F9B{B2$_nXZ8%R_`Z(jzd5KvP!6|~3{cEmm`;*sZV
zV2d&|G~w$I5qpk7C((melE<U8`tW)dR?<TJ2MGY^z!0bj3mHAZ2qI8$Cg$YimwSRP
zm;lWn=cBgvAhYrcNbNXm!_e^YeS1X%D@8@zsuN363o?_lQ;Xm_;Dh+kS!iTW!Va^7
zlu5;UxuCV7kn$i2v{4uA9nATXBwIy8*q9DH_Q6#tXgC^D&FMm?uZ!VB=J4h(ObeFg
zZ=z;3?5du4^kCCS1RVm6Yfu?mqZ71x1kzwen)a`Sxg6?1oP(c`Ryxcdps`i(^diO>
zC`uIy39)?WBm~q7<hci>c=!ab63ivA0KsU-LiHCbL5~+DtWXoQ`9|9iw3-%er4GS(
zht`fzJ0YonP(vH4xL8S3*U&l<QW6q&q)sBV=z}YT-R}YI4`E&gf{~~o?RcpDh<peR
zf2b&U)e`8q7}N_#Q;PBn3P9B=w#D6$NOuLzS_BlOre#)GDS^}@-!Yn;oLW#~rKF{#
z1Io^2so*vmXhAh>$St)Pv>rFTC^a>u5+t4hat~ZpadLhEXr>u5i>{<olAn`Wl$e*C
zYNeD3DkF+hlS`mRgBI$7SBRvff~`XEi=Zozb@EF~pevZmQj5SWcz#EYaB$&^Ho6X;
zt4##^1~MFzSqyS0Xq^!_6f=wSOH1I(Vjv1_6ZKGsu~QJXz=u{9K#DX{VC!N*CyYRj
zct^US3w8{V0(_7fdH5Z4CPh&?_@?$^(8e{ZB>N<*B-jBhVAnxwO;8qxj9-9j23T_g
zyAnt>Q43wK8=shx5|Zzmn3tHIS_InO0g4#VnJ9>Ogk}k-U1-DB@MHuo<B`ll1PN$<
zQ4h44ASD-KjUFg5ffHXbXjdF~IzI)wWK9j|JPtg%5myL;902J-Bdku;tVTKq(mKfo
zwoV3ed?3hnTX6jiT1gAhtdRuienT7A2(ut%K@w#30aoXN!y8tMfKzxZBu&M`jD~i<
zU_pu8?*UgDu+RjRv+zLDh4*#9UW9c*5iSESj|1I53rU`!4n-2=8aIdlYI;r9v`<Fp
zMN6;Anzh!cImM|8AmhMZfS3mE&w=J|aK$4*zo$U`j+Wpwq3aPLJvWd~YIWk_`8*9a
zR|M~7qa~K)(jw5BQ%Eqwf*!0LQX=6>yC}{@QV;HEfh7?uxWLkhC7?5bAmwdorbaTj
z3xQN3QQM`+NdxR2ES|&WScH?5bdu1V3o6(UF;6H+lR@`1=s^S6vm`aQrUrf%6sYA0
zTcQF@%-~fhV3$G?9b#1!@@!l(E(2i=OPDti)df*eh)@noX0Q|Clt8{l3ky&_0@WEr
zN7^6_3!I4rUvQLyu8%=Z8KBSr6*fpo1F`cw88k(VlIfu-0_9$6(700yYSgB{q8)o$
zfgU&tO+3(^x)r$j3|gZBD+o1}H1+cGVT(~<cc<%u2SLDt)_UL>XLv+H3h889Xb%ff
z)1d6fg?2ZR;iG?$W(s)z8<qfJg|3<!LK(O~1b2F2s=y*3CCG^$o=rgW&p3kxROOUr
z>cN{k8Yw#PbKa75sv-5c72GW7Y^;VR_zW|c{qS~^PLig*2I#Ud9YsS;EAW~(&}c)d
zy`mvx>IT_?;A{#Fdc1Cg#uCgna7l=@V8xjdk+eW_Cd@EI8b!<DIL$)nfEtA;qe1Bx
zIg_Wr4&aCS5_Gu@2-oT$9|H-m{HnnT3e+67N<>Y@iLhi0JMa-SPMuSbT7-2<5gKWT
zNk+${Vo=)~a)=x}s*x8hz>=;)B52$al<}acGttgANlh(DJJ~L=7Agc&s{uVz4!p8b
zF&UaPplcwZ_sgf*Y9Njeb4)4*U6%wKSO6WKlb=&sk_uWdmsX+;I^Mk~Ju|NuJRz-<
zPMlWInYjp^pkrV%Y}2$sTVFxp1G)kV+Teu@Zs}y&rel?b4DaY<fi`+0rp0x#5qyx@
zIks8a$$Ci5XbnxMxw*F47%~tut&7VuLE9ccr?Vv%r-FBFTEW87&NfR;EyvC_LrpE+
z&Nf?3E!WOA(>fWX4jxfTFx6Q$czmXBq^1TsT^+K<2*cz0Mm9NWYS}jUd=D}LbkaJe
z5fGo~8`<PS+*Xheb{*Vhpu;o@64O&7b+SRbi;MCLprNjz2_2dP?*vKJ11XBo$-+<s
z9$C_a7+#WJnw$YM8nkKv5-jO8HJR`rs;SAgOIK6Nw95r;q)vkcV_Hp328^9iQ<G(v
zrlyu*m!oN&0_o#HLsHSOwzd|$774jhv8{&ID&WqW4k$N6`Uh6kN>KeuR?)GwIt4|k
zp#6)GW9yKP4hA(GA#GHhRGl<DZS*8~nGY_yW5FGablYV6WIga|BXCbM1C#-vE`qdt
z;7f{N7j9y&suELDoD!3>H8iagtw0@*6k7x96q__?ug*F}TU#?TO+!&5EjlF@?hsf_
zQ&W?qrlts%LN2Vq0?=X%R9GjW7ElP6X+k<XskR2zsWzZPf<Q}Qty3X(W<;mP+S=Np
z8Kzkc7C_BakQ4{HQaeAdBr~rxRUxq!tPHxT#uhRLtcYqFWF8p0X;w*72U&-jnuZei
zf=bXLU{Hr5T}=%v4{zy1T8khton)w9NLh;FVrW690abzQZ0O-VAQNCEHjZ8~b|uhW
zF=%xPIQe013@IAIhioD34h^*K2qNJ|V@qh7dd1)wUQNWTAap_+S}CfjX}~s&ftJXD
zCcuh8wNeVSiiE}hM$-Y((uXwaphoE-ng*bieHzfCyW>GlgoHMz6`%uJ1DK+zL!7N3
z9eT)V6D&YX+JrUlQHN8|##-VLofi}rf)CG3sRggT0xt$ZiyU|sfbL^14$Ujc%+Y}C
zkkizIT$&46T7_s3Dj~-KBC?87(~44yGhmB~iZPnMs3j1nCI+A318P8EI13gP=!Qb$
z4>5><#ZXXV5VS9pv=oNyDNsoRjv$ybU<Hku8YH?QtzKu)Q7@?J3(|^)9$E`2Ou>~7
zXjD#vP+HT;uvJWlng@wsdnItRD_Nz(Y(^3<OD$3Ym-^NjutWlLFT{PI!;`>cH1Glw
zTyn!!VnI_MEb29su$Rox?HKSD6k_NNJa?#xNEpaH1yn0RmwDELuC0Y_kktU4O_c^3
zo5QXheAWzT02Ca?wxD1DdDqs~HUo5!p_&@92zVM05-_0A#}qwqpn--SQ}p8VOG_YG
zB1I<|+O&<%hy_W4VmKOPPH73KWX%8vHpmt$s9-F}G`K2|49I?arFd}1*h&dxwo)v_
zbdWMo0SubL1zQg`66P|{K&YV(*kNU<MIg&TE-Ondf@lUi4YZyemQzuV9S5~+31n2*
z_%}vY1#L)yB?|PsL{tW?1>fggYzr-~VZBQo(4bptT3TvyNwF^IOaj|P(83LffNeEI
z#;Uru7Ll#MiyL66NFf>4W(N%|r`YC1CxKfLu{AY_TlPRL3R~Mm`{bG$#U#Cy)HHjL
zh!vP=rIBcxqL-GFpI>BOSC?o7J|WI6CqJ=7BT-W)v)C`uPa{#&9-=k{G&5zdk*E!3
zXsUuKD+9Ykdjl)*<gHDjJ(#vi)U1U&F$J^%3*@|H+bqx&9q8bjqV%Lh+i3Xhtx2|^
z<42IT4(sG=WFmVx6;dFi>7?7H>J_ExrB<XSgSHf8*rtP40f1etk*=weX`8B7T#%TY
zT2rG0vO@`0U1r#8q}e7%XU1w|XzC<KXGdp(5?pddYOHM<G7mf&9}m)Mo2Cb*QM<FC
z!wx~M8hZ^T1065~CD0VTto+P8(1tO12RcP3O|PUVF|QcZTFfia)JfK~N{dd4MTAQ#
zEb5^Bfn-~aWNkxDRYM&^J2S0h`$TPxB;7<!tz<1TD?>XYtz`QoD<eB&BpD4OePi8Z
zO)WF4MDP-6Q1B=vB_?O5gAa~!&d<p&Qh?kw1i97+Sp>9}5Sb4?X&PA|B)<T{O$M8j
zoS##gn-^4?lL`^dFD=Q*%!6`3TP<8tlk<xbL9GUe0+5(%Zb3$3ab_`CL`f&ZRzFT7
zI!0GJR?{}7SW6=&MLR~%J|;y=Q(q_3HoCef)k+@}_VzIv5b0_|9phTfm|`s*0(=d7
zE2t8C4STB?y_ghjO?!|=P5T&4eI0NDLDY`$Zg+HIv|+4HVzd#6Fa{AOv9YzapcBN<
zT%wI^tSZ7qM2nN_LL)s>Q!TJFp)8|V9ViRk!O9xZiMnY9x|XrkMzxx_Ie5YY98jKl
zB^qEG4b3zmK?e~riq%0AF$RmkLk!^ngzZQyV(rz&Zn-u%o-kaXofwVgjEv%(M0gTH
zi6D4FLJ`Fmodlu{T-aDCfoxQQ1Qp&?rf+CqpaXI*lmSj{u{v3{iF)8Hf*6;953oQ>
zhrHBs1*jsuv^-E_qc|1R_5&R-u34*-ZCee>IG`PA`31#R)kUc(R@Ip)6;=j1;9jLt
zQe{c1QmqcCMUw}SF+`O~$|+5SNEo3=)Yj^Nd<Qo<1EvgSa!M-5&|;-po#Mn2*c}jH
zyJ0pIq!xkBwNk3p$pI}F$xAIRMzsm9ptiOabb>j=wN};OdI>a(o10i+Wn^kvs{>VO
zRSgm`1Z|fATW(dIo1bE3Y-XSX(*oM{X`7{2Tv`Acj<Bt+)yV@dF(|N80*wdj<l82K
zdr;PSdXV#!l8cK$tLbc!3Q%2e$!7%$SPerR5Y#i(RMN@S1BuweG@=!_kfVwG(=;Fz
zkfxokp-#R=Hgav2q*<M$mkhe@+g2%FNjnj|+cm$SST8ZBAS2Nh9CpUgNPv1+Nhc*W
z&B_q8Y9dQ7Ef3`Qijvg46pbv<h*U{FD3WzRCo2`FA`)OK<iZE=AYH1ht!)x?fDW>)
z3S7I{MuXY{I;aF>b*{BWD*S+)RPYfW-~)2Nt>HwCRLByvbkK%_Bu#MZCI{R|*2%R^
z1h+vnQZ;q*z(SCU6sf*XSF{BUEo!9NMnl~gtCMT1lvq@hSg8cM*0Q7sG`4PQYnuyM
z%m6NyG*UEDHEU|p^x~l-GMZLUEntNj`5M{am;r@IK`~l@=S3&!Wu{cb+9qqHLYX??
z6|0~Yr>2!sKKO=nP-UKLuaT+%Te_T|rjTWi8GRrlz!4a$rltXEbU`?_2ys|PTeDWv
z3Ppbs=&A-#b12O=1(FD?^EFbix*61e%85>k1s$bWk`InXC2$e}IWrM*lq+c8c490v
zVy!`{Z9&%*XyiZwU9%P>1obf3?}@QGNji!Kpiz8~6sRW%TM!OT1t3AF;|+9-H8pKO
zhsS~hqm5&2L5=UUqI}Th9Z(BEt;eGLTn&&4(6UCzz&LyYKqnJvj4Tn-ic7N10yQp^
z!R>c&0)e&CPy#9uw2ulLP&(<hNztj0z=F3KLHAUq*`~n7YidB3e1TenC7|#Gr*2K~
z;99;$D%RkIm8_*XIf}OF&@i%3hBLvVRghEzpU=?LNd`@S)at}TN`6=?7kV57s8Oo}
zS$~h!PvG5%Nzu@Vj|ByOL1}S@MlvWmK!f%LpmpBhc4H=}C56b#;ATH4G*Td;2Rd>Y
z;s(%Qlx=o&YOGGWt${6MH36g~(a^Nd(oh1M25E&VK^FXg4j7M4gN7$4LzU!%u4Vw0
zYM>@`1~mHNi}q7&Q{c*V@-@;hLlf3Mw@n3QGM#kWjOa8_wUz>+vTbvsQ^7?7q+0??
zW{S3;!Ef-XHlW)I>@%a&Vr{dmG_pZm3^g^4EZuZFFk9cqK3&@u%(P0^&4LMn4yD(H
z2y1HUfORKpfOKhUC26PYq#}}HbZV?dre>{9Qch|f(lQyyp%8|!@B$~7Xk%DL0+*2B
zLJhL*5R#c-;R5a?6yz6ZfVP8XX(VYvq+v0h1=?1SSfGKl3l$uDko2ZusGFjx1-cef
zJ4Gw87Br1tk{^_wlo$*y^bj!)%Pin}L_-O@bt5;i06ba%u@J3@gP5-X3SLlmFUiix
z-q6axDzO$Gks$AaZf5~ctV2AIWD7E1LrGI7Njn+ZjnP)p1npkW_bAT6?J7{C0Nqt!
zF{H6YByYo<1-jPN7V0!jog_6iV>{4UY>AMi!r*?3hM|FhR-&f1k}7B$HzC(&6zAY@
zeQE`Ikiu6SfC_y`7-GgLEE<zQv#Q|SSy!iFWNNAfn$lBJR?<$?14RRJ>>|c;Y&8-=
zOaJsr@*#F>fSRkIV27>yu~#xs(oO_L3M8<Vlt2r#psJB09~ztR91TmM_9z(|GPR1F
zfHXh@AUdE%0;G`$%B+y~fh|Z-CtD8`OL`^wh_+@TxN3o>8}LCNFgEBkVi?;9mO0Ry
z450RGEI6}(8?CmWQ`_{7OiguCZ9xrrFf+{-)OZIo(``W-bTS|@4q6-z9_Is<Jif4f
zIZ%--+YH@Ioow3-?M$5<TRl^)Y<T3@W`YNi46IVXw3&gHMyhU_rhb;Tv6+DtsI`+}
z4-!n%O#ulS8W~uDxGB1+Ag+-K=pI;5*k;)qSm~MC+2+`1>1SJI>1!D2W^3w1gIxki
zjY*oSpoV3#P7b)4WNVvlZ)lYsTMG+GP<=>?u!Mvo*lKV%f;OguI;x<cGzJy+AZMr8
zr)X&yYA0)2rD!MXrf4PWWY`*MrRb(Z0}9zApfsGSk)e~Wlca5^Z>*`QgXBvjNt_b8
z5M61pwWuvx@Q!Ct-2}RY4>TuI3?8Qew~4?*G9~#s*|w>Appdc#CBo>GSVV}WfKy*4
zbYwO<9n_=(<<IE!Sldjb(hf9WiQb5fPLG9UU~mFV)yaUhK2tPxa$rqLP!g%BL2Bb=
z*r!;*mptm^f*T>oW<fJwz6Q3F_CdpJC}t&EL0SpckgNh;i(;D#ZBS_Hz*x4)8Yz%A
zXEtc1M3zRjMy{r&PAbTwxjLzuR#_UknxLRXvJ^b62o5sPf&Lm$79#Lq6))%p5pWd?
zYISGYBASUwkOp)-DAU_R`l(i+5<gMNDn%y?;_=K_4NaYF+pOqhQ0)zCVJVg7rKF~1
z=B1{9nw#nN*;X1#u;va}1l$t<HOq2xz|o|W4eAWQ8~>Wn?2-y9N5LmRfSqEcf!Lb^
z8okp<v(12v=cR%#4A)4t&DI9D_aVcOY0*Zpnpzr4+8{gAq77s14XtzyH8nMLVD7a|
z1<yNy2KTbS^*-n}3!N;zjQo70(;47pf07<(F=UB`l7f<^bv|+}4GwJZRoou=`Ps$M
z$+5Q8#mGlSCLuLRbuw&~lt2eLp_Ip<bClH7;9gV&ofQS@n}K^S8fmtmE{vuoIK`*h
zW@)6=)TC<aC_;LaYHFa3n5mF@3Dgz=FC9%s?va8A2|xjnY!BO5;g_G1YL#TIp#&1n
zsHs754k+Pks;Q-`sii}@xz^z09YL7{w9zA72dTFUF&h+xu=|`qMnlhS%+#!|O|?zc
z1Gl0yGSt*itWmVJ&9Kj~Qi65Nlr+JL(W)iT!IDW3XMln>70Kw@TAf6_v<f}YjgTNY
zSULj@9fK~`$;mJB%*!mPsnGx#kXTe=n*}{&12kEXq?eipY8HcO&`>?N-wx6M*}e#x
z8HUBEUU6y(Oe@qZ$T%&yy$zDdO9A!A^NT?<v6{8ebOah)Mx+cq$e=1X#B8fmD+&^k
zo0jly4q^yCUjzL@KgfWr67*)jSVU6}+C_lg_^za#qOAnBM=91e5p<^xXf6OYT%?x=
zIyS<#I<c@c(Mn0#z#uIxElo)$DJL;G8_YK_Ffah|OH-j-kaSvUaz=3`NJCm0NQ;tA
zdQoDfm6EcB0SJP)si}Ej4HjViIhnZ-{UG&9I=P8O`Jf}nl|ix~^YaqRK-xi;Sr{nk
z<mY6Tfz*Qx14$Q@78QU_bpxvhDF6*lDJg>t14$QW=71K>D=8-%fS{62Norya)OL{S
z@{G(9kZ~Ztft+8N3fjnH1u_6+gpv+Y2geG%ZDJ6s151=p9cgJwwY3^0NUc<q6CYs3
z1ZZ3hbj3({UTTp`elmCwJZSC&bmm@IW@@>8l3qS8InWuN&iT0or6s8;!6lVBpn*D2
z)u3qwUpfI6)=9Iit_2k#D3^&s&S6W92GOzLyX!%FAt5t<)+xHW)|$z-snIF1I*4)<
zRKnz^DWpaxgDTIo=tRBb#N5;z=fvVvjbzPOTabh%WLb4uevw8pXvc4=CT{)7FfGt}
zFby$lkqjDigmg_(bU+gh)wR|jGgCljCToHwSyEzklA=>$LCZ5hRYY`3Ea*^3c=iTy
z6(KWA$i=)S_<q53aMM5&-eXAzPi&;vMk^(zq$q**iGogNRRUd$lb)WFsuZh}YFiD-
zjaG&_5C$Y`!MWhv1LuLJJ>VShoClm2l3xI4gSRnQ8G_P!dS;%Lp-w?!N=jy4x|Jb(
zXLU3*i-Jr9N2ihwR0M1+su09YsA3`c1rPzG+z+jSuoZ=gn$;Tcg)fPqB2P_CF%eXr
zfzB7Nse$w|3i6AQg+VK%N+4w}=n~(Y)Lflp(8PXT3h2<w;?xq5UQj6s8d*#PjVwb~
z5J93W5470=w4eyl;(*VcfcwZGd1x;ly6*^dJf%N)Fb&c-LGWRR4<>?_QzYs^W;csr
zw*`Z@<{<1z1*I;X3`kPTv`y42E=WyH(MSW0X~L5SsGX=+SejazihRT_xG4&15rLZ}
zko(ji2kIr~Bo>3W!YL_%?p=YOKy9B6T>z{F+E)f!LuHk2on@N^?(M-VB#3+9>wBTi
z?CR7Ut7PaYBuNlkK>?bE@DAu4Ht<T}6hu)E?jD0i0@T#fqm#6iz#*U%3mTw|1+VEy
z)6mqx;sR){1bZG-^FeIXOU(f-1OT^%^ind@(rlB#F3|&@PXrN81;sl^UoGf@Oyn@p
z$-rtAC@3N0S>W*pm(;Y>qN3Ck@H{SjuCuyUCsU^y91Wn2R>}Ff1v#mxw;LpbPO!<(
zDNEHz0`*U!!3Ie}sX4GD0C6wK?VzK!z>6(&GeJj5*Md@Oc}6Pi-uFbEEKnf}+Ekj7
zpNA6ppfH0B?Q0-f_-N4w@sVC?4rsC+w8jM#B;YVZiX8ADeQ~iyq7JB!4jP~XU0VzB
z8f3jeIw-tBjZJXtB@cdT7;NVfqC1}iA0dFd1bjAuP8wVy#U6W(fLH}`piXsSN{Ur-
zEvRbJNdr|TkkiJ%a&W(D*4ApkGBP+pY3d-YXC}!>a5JIH2ki`ra3jPr;++Xm4|Qot
zKB!a&bBJ-NPC6|3l#=rEb5axYlx%IGm0?Ov4P+5IXt}(7Dq)wW*h9k?G<ycBWk7xa
zmqIv$+KO<LL3{)<3NoeviyeqK*r%F0kX6E94wAQZ(31#Z+rS9~8sAn)u#^Hik_I$N
z4BN|u+Tej$0}Dt6(5}INoW#sLNFlC~1gb)kZIg6Bi!>lbHfU!*Y;8(XEwq~l-l1X(
zx(Oa+0{o0U@Y26jThIadpeB$`GFXWQ#^!(UHV;s>2P)-3T`!QeskWfw_>!TTP|Qt1
z$b-xU??i$ZNT6C&C&e}ev|%U(Iwh%-qz7Z#g8LfzX=(NbRu~RRu}`rAH)g<!z?Dw1
zJrX-QCDsaw3!jYA0rgWLrGsrM$YNMAsFQ@!dV&SCBIrViywcpH)FMQp1s@EJ2!*6r
z&_;7uJ53Rmw85$%QBe%7MWd5I*CHTo3Qf`kYlTj0A!|*7Y5{G`0BvJ8sD+0cJb_`k
zZ>c!33~6c+Ty=rkeV_^=+19{1*(M2EN?0drYioky1T@J9ZjmPHfw$EZYbQk~gVtCW
z#6nsm(I9@TCirTdlKdic<H1Jjq(GXN;C0M!D?sa*;Z~%88okN3NVcTJLXR&5jqpJd
zCg@&0a0gBU)HVgJVXM_CPA%~T^`7BnGT2v;+EodXK|!5r(D*cH*CqI{hm6dWl+-*W
zO?xHK**;2EN}$7eK%?iiI_aq;PKm{-pj9!5Tnsi6<`YOh*8mNWYF2|6`h(8NvjT-*
zQc-GRHe?NaZe~hKPO6esvaOz}HIjHzeo0AwE=b%EDh!<mwMvGJ6@qp?fF{^$;r1BD
zLhS(`!)FCr4US|WXi^@u_%Q{|q9TwXN>(Yh==P+52O{;Mw|zl3g;ZBqrRY>zCD+#K
zK+YD$IBOg-*8&@`(9i^*GNV_TsS8cRy5&Wn<8X?UG@<jDpi{KLS0HOZW|os}p{uJ=
zj-LP>O$1pgj&=YANJ1$Mw1^FKoGfUd1Ip6`T|N&x?7~JL+i9*CP67=cXjG@==aqoY
z@v~AgG%!$A(m_o6TcM1EK)WEYQ%d01MZ&rd;4M)I-+;G1AfKZF@egPcFwGXeEg!Ol
z33~O0HE0+mO)oPAI((9@S&gJLDL<tW8ZQb-dZ2LCNYT{MNP?U@p9Wg12tCEJ7%Zrh
z2I_Vtf=&$uZ~6x}><}>p>SHFBWF~{N0XQTONBL;lYovgM5NCKI?vVtIRN#?>9MuY0
z!H}$jFdzx62gwedD#+3BPzj`qGC;i;P}40Ma(|f;IE90HVBk!mqXbFBNL?$)DSe>+
zCB(24*!o6rFBG)GDH+tOHZ%Z*hz5vls|32^0CWU5sBkYX)<8HE;Zw*JpgJJytqgR)
zw!%*2fn-=HuT~R0GF4oxk*WzgJGQu3BUuxAnh&T11hqJ@<s5L?fh#RQ$||Jnf;(%e
zse!g*L35Q}QEEX>VsdJDW=RHU9VIv|*xK5HYhly`k_-xtM37sd2}DyT30!oBfL1qx
zN6iqW9e4r=G)M|{SSqM0tOhlY!F?a(IWy35T#(<u_hA<ohvsFLXe4V|gBCN}ftDPA
z#w=_>JgpRM(6BG40iFu#RDm0}sgSe-YlXl|aHOUUXn`o|g$*bTh%`+#HP9S*PL2j>
zqy^N$K&d{})RHtb!J`kUu+5x0;3XT--i=NM=&+>xlvL0<8MLYaTql6WUacUt1c(XR
z9T}Yg8fi}k-FlJ^Y1f0S)=AMxhS&tUMI39J9()F9Zhi`AYf%cM!wc%)LThq(BOnDT
z02{(r05??f)6!~c6w~cf!Q=0s`S28YQwWq2p&o*)4FE5SLhekb=)oE?pk*j9HpKOy
zo(E`wOB(plEU@tq{mD?nz<ol{D7R8tg%Ze@I-pt;kzNpk3Gf(%Oa~={4zPtLqD0VX
z!#S1U&Y=#xPXehKKzFQT4KY{`GZnO;Ak`KU57169czHF#2cUE0pnWEg>oj#h(Kiro
z1lbEc3kp&VVRa)&m8K4)c|xQsYd}|*q4$qqbuCqb7vdbkj)$nz)JcZqc!c|5<F4Qt
zDR3>21iGOJu|^!)r;k=j%~jG-DyUG>QBnmlN|aE__$1BhWcU)iBu#Kpl42VTF5@8+
zO39i!Nuc2sofOP|5vV{)0u9Q-Z3`?-1dTg7mnLN<E9oc&mL?XJfa%OU5bat~kdNws
zWX)<&vlcP(gXsH%r&|m1%Qcd8619y$;~=0)3{sLM=~M@2<{>wMVI2hpLtU`O<osfd
zL@h8gz*FByvsTABvk2=!8c+?zg+(PAhPsJbiJG-KuAmD)GO;QLHIfsd<A?T%RuJ1j
z&NR}o(9%c*O}0U-EzZo-(6BIoi0PW^nQB7B13dK&O*LzEKm&z{7)9jmM6E<E4P&iD
zU67-l@=NoQQT++)M<nSa+nQJ>+GuD%PmY5)LRU9g6LhJPzM-KteB{qi9~=@O6(%~M
zRq!D9m>HQuTm%x<FxE=aHPX~KGSW@dfrmDz$$)ewCa9-a4T@~gO{&pKsfop@o_R{z
zNwK!zVbVl|uzzU@SR7tZA^c~kn+ytPO-Mb5(BhegTa%utU7~%mhLKjHroNFC$OK&@
zEl{e^H-aQf(9jgPpehC>5(o=gyz7Ck8%se-VX(RsJj4L17{FyEXy8-7w4esG=dq?N
zwWuUBIWY&c&>kcRYOlZrYcleSGOP0QN<i{iw$X?N7-*oq06ee_ZB~KwfyUv%T?F{e
z^*Ye2>|=GZK}%Diu7&omG}3jFz@>0a4Xn46W1FOxl3A1rK8L@iMya$wNhjAfL$3sM
z??(=3-Ds}85~MAxWCb-_C*L;L9^BZof;RRFY%}3H3PDSJi=gGat*vdgHEb3WUw;E>
zR0!0+)j;Uc$<jm`-GNBzWPwIaL3ISUnGEkO>!I{}G}0kUW2-^io6>Uf%fWp_P^YmL
zv|cPFIuFzcNV7#Mk|6Eqd`-}?VLFA;d9k)d_Ni6|It4W~8tLG|FxOrQ(wbDVg0^gR
z3?SB^g$cCD3f6?wTun?W2Jg2A9d=e2oe#1g%_>zpO%r?_H^lxt9Rp2}l@MOOPMUTq
zXw3zDaJEpV8a9Fg+B^gsS4jnD600OV2tx;4=i?d&h9m$`{D7vUK~))eD>kIMD+Ub`
zg9ZXL(m_Fu2w%t;A+&W2nu<*ZuW|zCH)vXen4p&gE?tPq8kD4R(0l~M#$wO}3}_Sq
zIh8}Clt3fua1VplF+o}(wzjsQ<xJRe07$I31au6UP9A7aRAz2!aZQb>PQI;?R-U#-
zc1=wdXicA{P5~$bL1REaU#HL(9{feNpxk6@YnxM3qXf$OpuSrUYQ`x>Rs+t_AoV&W
zw&{?zrG}<Xsci{tJO@-fgRRz7Q_FxHccqkHkeHlV0$Qw%h$Uzy$w0~^2ubuTqLW)w
zqmgTy4(Yzx+S(S`E9IA#q!vN;K`U87c;I<BrC1G3ePd0XY&A8FG}~&Z-ByORI%&~G
zv9<;}kURo+6fA2L=@i==Y3b%#8ENHe!jo~DPJvD#X!(emnntcZWEC2yzA)0s166h4
zNm-b|paGLSyA<%g`BYE|lM1p>qu5?a*H+0&N!wOQQ#)5D9d33i*lai#VwFy=ZI-=}
zR<2d9zL9knXi5~}2ZLH2qKpKEDL7*xH_fvM<e>~urv{Q1L0Jo_hY8C=nmVO+hH7dh
z;3YB1sj!B&PPCzpL9AYKeqM57i3Utoqf{qf8@%!+T`wgS;u=VuhnfeIb21ACItPME
z7D)aB71y9F0Lp)$?1iXwU{#_LXrUOK11g(za&2=k>z_Q3Ab7wITL0ujTZ&NcV@dy@
z1Iu6$fSv;&MKtzGLdnzD9pq@x43l0-Vmjz@Rr?gHbe%NY)aYDL{Q*u#U?Xxt#da!~
znWvMcZ=|WIlOLTMYnx@CW@Vt052{T-iyYJRjdW7sDKj5wzK)ne9oFwdH19O4vubM6
zp*Q&<HBpLEi=jn0;p7K8`xQ|{KmrQ9kr{jPLF$K-P<TU&3(!%|;L~cA5RH{|ERB^^
zjK)d^qE(TulL;z#ky<X`(o-i3R-k4g6}p+Ig>E*o8n8A{MPLtVYbjYN<)x;B(jmNX
z%K(-0;I#(GsS9+4i%u$Z)CeiiQPUP^fC=nONL5l(lL{|ov+$O(iUykcMmiawO%&i!
zQ+Uup+ZtKmle|F*GuvJ_#R{~<GCC{PRwD!A3sBav2NjA|km9i*AAE*+Hgaj1f|Lkz
zsE`QZ^(%NIFeuw&ZBT#%4w2MQ8x*OUIyf5?sTBn|`6;Pr2@=)`P)O0xtS*7niQvHy
z9ayais!+9Z)znfokhVgnYG_vHfpcm#_#lnUoXnC+D<v>HCl%B-OVlWV-5Rd}Zj9x@
zau~>kpzbMn0fbJbPL@u#4yYMjkeQmCS`0Zb8?s;-+%W=o{*v?{vYMJ!#-K6{yax{A
zPVoLWSki*bgJ|SoB>e(J(g!s%@}MaX>;;Ik!CnC6E$F-m;)IkUNY$F0nwg`K2RRuW
zT$^iX>gQ_e6l2OlYJLq({Txl563}ijP{Sk5*1$T)F3mbkTN}I<D$}-54|MKRnpUw+
zwr!fOMvkr_DAA_d8d&GrrCX<KYinlM7J|=_(oWYZ(#f(-*VV{{D9QsJ>YSGfx_K0K
z*B<PQ4)9R9k_~7|06sAQ$^+Qi&^q7<1N$5id5{rcU67R}`2|+GX<Eg#nxG~4sd*(J
z3z09<gOqf|y3oX>1Zl}*wF;wt0NrC=l3`T@J7cvNVsVDHMuB~nR*{tfXl$s!Dig%d
z)+z?^q1o7~z}~>h5Og?qUS@7$NvcLQs1&jS>ol;+(kepIX<(JDRjjFl&}nF8P>VE$
zT2o_cV4wqUbf#!pb75(XrzK+K98eMl9a;fNg{fEyV9@eQ&`>96DJyt6fRd(l3cTWi
z7m%s7<dz=ESgW11{2ZKJYIwzyPEp?&wCold_3&Op8b+SWMC7>)P{jf&(?CUThEBF^
z68N&Hni@k>og7<zjcCwbZ*5IgeaHgpY)ze9TSdhrJ#cs44Rr0RPM&S1qOEPNPQGoP
zeKf2m4eMIRT1CT{h)NNqYhk1V?N~!@6oC~OiDjvvl~|yoNI>l?yxrk6XzIpD$>8pA
zo_#d*`T&q2&;!FXG-IuzQ{WsOxQbYv95pqKY)Ic3G-Z<m+P`mTpb6Sft(6)LYUmio
zYU*Ty$Eu5qHFE7?Hx?M^fG69mvTLniLfKFu(4<^pbbho!Y^-gjJ!nYYDqE*0IzQSF
zDqt9E1-if>5t?rbbqe4~AJMNULJ~zRBhswS0?jjkA`xrFl%|u8yOo{>shF@evNJN%
zGr+s4(P}32{1uI~!rL=9F+CMDn1gymgpv-t=M)P*x(q#yBIQU>Y=bWut47R#LKav;
zMh%c`0}Cr@)>^}>=rqu-Jw0fdVrzixZ*bcgw2wpwav37*h6{u(V8_GeRT08qTR`h-
zL5Eb-)Ie4RTUvtej)q28I=KY}td`f%tVZ@j3am;-ZcjiOy<i`JYHF-S4CulSY|*6y
zUS$L?WHLx8WWb3URR6--wy<o5604b{7>U&c(5N78yFlZ9(MqsMa-~?E99!7(*pU1J
zaJ3IgclkvrsYQ^burM*`#CQnkdOjs62ckj=v?m;93TTlnObcX{FL;qHObDtGqzW`A
z09mUGR-qINYV<${PVo=c<l82}2B2zclpvV^bh}R;c(kQBIWY%xtV~jVNrn=5zy)$8
zU`<W55_H9ejuLc5MXXMdEp$u*cH*THsL7LWpJA1$Q(_A%fM8{k0q6jE*w6>4(*_y{
z0sGC$pw=2bYLo}+?}Kt6sHlV+l8z`R!4YJY4mp-mLlec+bVw5n*2sd$LF|A^fjOY1
z2gqw*zyr6S`*bq$%av?xZS(9k(!m?KK*Lk{H8mwV>7c!YNno*>niNedggj`!S51uu
z!u|FopgsdsLrFeJ4pcBg%mvA5f<|9J+N`Q8tswS5eWwqr4s<GD5@6rzL+gfGosxWr
zrjmTDT1xUE!2;J%s{=Zqtpa3u0eFI}Bm>L_Ei6j|dq=Mlw1!=;Bww#mO--ZNwiq@d
zk^>r!0XY-3`GS}c*GSjN(SaGF1Mvt*PYGJH8$$=kE^vryg6dX~6?zpgM^vCXA{S&J
zNCh58<iZ?LL98P{I!f~OK<Z2KLA$IpltAkNQuDxvd!Yvu%!@E5qJ>koCM?9jBj*Gh
zn+<bpC9#eL=|B!KM1c&hPttXYL16^VF$hW2-ZJP23q4R%AAC?ZXuuv+oMu9nd4VNh
z@mB~QyF-|RwBSpl5VT?$q7c+SvDHXH&TqQVEC$Pcnp&xPFkgbZDsc7SObAmB=4fbw
zR6`;JyU`{2$aaBLgUl|;$8IuAHP~>F;tEh8fdT;Hd`%s^QLd3=n*)p0XeG!3CrIfH
zVZ#b<c+`VirMc)@phY!A545BPjhAP@6z0GUfFyMAtwvhW;7lK@qzPGPfK)?+8b0u4
z`8p}^;xQRo8fa)jTYJfnasaJ(Ohyhum>f8Wte{e0j)rEfbw23W21xZ#tOrhL$)M?q
zWN?`Qw-;7kX~FUc)Ou)n1rx4-6vU8(VTF=tU`i?>O2GERRDd}!1r@bA$)G|QR;?ge
z4bC0lFtb8f49?$3gY8!68o+X3E6{Y+!m}uHj)(djkui!>OOQ%7(9UUiAVAcD?)Sh`
z7D9A@-45~?j<OJ96wcBwSqD^>fyx}c3LS`Ag4Tj`fI|mrZ8A9jBQ(Q$03d0k-Y~p3
zfZXm!NhYvSQBX<&?HB-MIhbLf`j84uRM0d&$S7C?8`M|;<!X529$Kox<TZ8RjaqQS
z0#p-Y?V^B-QE+8lTmoARSY!`r-yn@y6s6`QmSmQtg6`5OumZaTd~9}VS_y;)8f~Zr
z&#HnZ;UPnkI*_4s^d%e+!_nvIL0LQn(f3Q%F*E?ps3zKjEdv=3v8W`!0J{7KG8+n7
z*k+%q4O%o}m7)z{Kq3K=WKl;1(;*!%?5%iELl9dt9^QZlk7_`cbtoF>RM+Yxf!Z|)
zyI}L;Nc}2EaRTmHf#-!mecL2G=;2Qwf7aA!fFc;XBxoHwDEdI{7to@1LjwcQ<Ui_k
z2c+Q&8o!1#Ty?TA$|`sn2`wvN<si1w2_^?CCJ<!?s0o>ETU}|T1RjR~FDn4GqciN&
zLEUsKL!AmMCHQ;`c<(S&qSiVU+ETYw0(F*@bW$M`lAserQ}tkz5VpxWNX>IluQF8+
z;wRfo?9K61Si>H))lCO-5`itO&5CHCreTa0;BA>(Wohbw4jqDrV-~co(aP4VgckQ%
zklIEoTMxCQ&qA(m!0HhJXa$u72Q5fvEy&4<DXHL{<<N#W#M|KF4c?;$y9SoOZ4Hrf
zI2P50sHzRXbN!HXsF8|o$f2M#4QWFgc;yTvM<zm-n}E|jY={Utri_%v!6_7!6X4}e
zs!lp0JEJ9cLsJ9LIYpopqmu~_VOUK?wUi24W&_EpNjlXK-&-kx`+7=<l?<S9Oz<&u
zpxpwgI<RzTl?*?RF3mpO3Usy~C_b#x>@(qGOqsAGkpWE*na~800jbrYSt}DIIY8yW
z@oxo{0&}!7Kr3Kj%RE7Q>5wLYAg<RdD9tHOEJ2^K0LK*QL>6dVfsUw$Xh3v|k*2;t
zZDw$31n<11fet(XM<M83EYMvFu;n~pewM9~7U&Y}Ovs7_O>K=#&<qynTnWU+8~rSu
z99sjOTw7?i)&Q^cL0M;zUQ?q8y@nP%%AS*|1X_Ts0h!=L)MW;+wbME|po9+EtB?ho
zsK*>E&Z*VOhF8*{gFy^+bF2}wq3}UvG<7g%A~iF?lVhM@(127CnmT!)8T4G#8T4G#
z8FZMeMxIU<WClGI?+kizMq)PM2qa++6uOiOG000`<`a@KlrSq1P$jDbodku=E*cr=
zWPwHlAW?6ulWl9Hm8ET{lLMLJflNvvB?54V0J=y8bYKN+kxB;Yd}$tRz7(VeY%gdT
zwGL>~U8exF76Upm4T~hu080^aT0*LDLF3inDL`W8PQkP18hOaGmYF&Qpec2bpf+gX
zhc0O0hmlsMP9aPfu^t2@j7VDfIyp!Q4|_5#Kvn}!yoJc3NQo7@>U^CXeItZTkZKco
zu?W1-rF^1PQ>Pe|=8I6%d=YAzhskOb>tqv^=5sQ!PZpsRS|p@-aIXi{m4}Rs#)8&G
zLR%O3iaeUm_Ja;LB`~QE+5?c13Cmj~%-kc@1gHZX(4#uBu15qHXP{m}mQJ=k<WPnb
zO?xF>CG8X|)EWM4q?!F8J);jkE+j3rh)@$ARGa04n=5IV6_7)app_8Pm~J}gP+8EX
zD{xtvW}mKCoLrQjlM@0u9ni`^C({-o1{(6v(6j=TmZ^wo@@(5`(0p+gXlO?_12UPL
z1s=K4&4kVIrs`$p<-x{>;Y}Z?D7aw&YIEn<rXY;X1vv~fovn}zI`hC*9cjBAECkf;
z;8We8{dajOA^95cO=loaAzyi~2Q~+^5D7Y;2Xb`|va55@T%Cf|)lgBWs}Yx2rP(V%
z!Wrq(X{5PoQ1uO4s01(Okh|Nth}&mD6ENTgEaVzl4W-gd&?$K7MXANbNr^?+E}VrP
z?hidz*uX%iED>}bvVl%=Mq*xiD)@c~M7s~P^|Tgr;kuQ9PCO*DAuo&q&28)D=cI&z
z%z$iYfSRudHWnfjpPZjpTvC(>I$;Z}QUh{!D(v<c(9s&;E#V;d>lPH{!`u(Ln-k(Q
z1WOk>NDC54&M(SKEz(WQ$pIZ^QBqQ*QC*Y|I)Des3?&_<#G=eZU9fv{GxL<Jz>dz%
z%!A#A43=@pEW?tHkj#M?0J0V0BHfJC#FW$`kO0&fpqd+7LIc|ey*mTy@p$Of3eeD~
z1s&Z}TvC)@i4nL^eb6YUJd_~4f6!Sd8cLwBQi3hQfe4`n6;8Rt3Y_}#^2<TjJ7i=Q
zLy~|?W*OA+pqvX1YlJ5eI}6|^7(fqKK}kkd;HEtMh7hnJxRO>PbVD>a)X~Bjbp0ZF
zTEy=d@FAXHqfi_KjmFHpl+=>cqTI|pP&XtIyf;h-w$C2E6Fm`Z2xzqmC{R%JfOe*X
z7cu2#!fx;`0G)<gte2Zu0Xeh~bZjKp0lArZI-mn(bmEI)_tIiJaX1kY?A9re3*w<%
z$bPVR$knfjQ0Jp~30HU~K^3C~CFopWm@|-qP$x;VS}8XXJl6#BH*|XoiYJmZHFcC=
z7vz8jauT6e*uc^{Wa|_nt%C;RQW014>L@BEY3f0abOEPVxLKg#CvaH7JPJC5P$wQb
zxRjWVv>6A!=LoDGHBt->3_x96Ei9={7py!tGfz_=RW>)V0wGtcgA!VZ@PVAE13i=l
zCHP@?Wg|IOLlbh>E;zY^vJoU)AoilTxTYq_4(>2Lh%!X*L5nBwhFv9{B-lZ~Fza&@
zE1=i=X@CZM-9SwM4Fl+*v|v+l#S3!jh~ggT?l=@NXfi?(gWh=wGatEZ0!J*^=ST$#
zXudutvC<{8tfmGM3<wbdr8iU|&hi;-l}l!srluyew1K$_oY1O~E0M$sXeELagvhlF
z$i-Gku<8YBvrA?f{L-be)FOyC;3Xp@e<GBEuabw}J_N5|LB~wM&45+9kUOIE5chLJ
z>TxB|CTuKG4b5su%AuQLm7u%yAhjE)Ce|xX%}Grz0bPow1i4ice6bvs6EmRUU{wuk
zTv<UD8|r{|l?Oqt`2vk9!CL!P20D;SqO3r-+QV;8vr>Xwil_szI5h>*7=iFWN0NbB
zBha&_piJ1c^rd+aRWLm;K1>(EOX?w64IbynYZxIWgM$H@h(R}yrKhHV#%jSC1X`OT
z+S!`bNw$d^h}&!-zSV)>Fbg_PNhb-l-2<^EH5GKk2G%)0kdYwkG<A|e=k<Z_?*v_c
zs0TiC1SF%Q1Th5UR^7}J(EibCsF%R49vu}JFA388P6jt*!5jNQdA|U<s~;k)jdBKs
zrVeCVmK9hbOb#-rr=ban6^QMrDWE-3aCVYjMq)9dG=hnPmWhDV7buFbssUY$ps9l#
zlW5A2q(Da(faWkjp`Zti4p=J_YGZ1#E$$Ep>x&1cZ_sI)Fs+a~La`Jr5HrEy3{it9
zSnxFFAi7dhVS7|CLM0X6ta3>#Nz}lIPH6gr#v-)zKsN>CDp0c&VjGBus5_wsKz!<w
z3T|_P+GP*{^c(*m)fMDmcpd1ihS0nY$uIc@`Ng);pi?x`QzJl!iGprNg<PruZ>_;<
zXIPO9aaL+-v2CJ83iPBrNbv{t7C3W2A_RW3IQV2YB~bki(gZ7JG(p>VKzD<HRYM{I
z>O%+zJgEs;{0nm=s51v)M?%M`4Pc#5(CWw(J)|-VT3F&rPf*8eD1lCRfqE+i$Amp-
ze+-^{3R?IJ_9M&~(3KHMdbz13iQcJ|pbLeQONw&9OpO#hST@Fy08&$wKnHIii~?O|
z0oMaNvkg?l>!M^KofJJJKF9^hNc9Sm6zKZrY9ziD{04H+DgT-}iJ%dM#G>@n64<)%
zV#va9(7tI6>?;~lK%-yyiZb|y=u~@+6kA1j;Har7Ch5ULM==!<I=IRmBqfk02P6lj
z*n{q<L-LlA6-WRUjG!(itXhC5g~))4DX>ChouKJ5B)+X8Xg3I4y)A;5ngTlc%N{wP
z;mW|l4Ch&;!urd#npVi_k?aBMK;k3oLAl-y)Dr@ib}mJU>4^3z<oqIVZi3fw1~_gk
zg%%FbazQ5*(t&^$53nmEK?MZpCf#(HY<@9l9dm{)Bnw7>2iQT^B}YQ%u@%znK$lY{
z+h*uw*rw^E*(Pi1q}yeJ?s2fq1kJ_hq=SUOPQ=LLY2cbH9h$E*bkkrtJ5x6u)*OR`
zC#VbtAJl?0;Q^XBf*-C0vH-I>1+CjrG_+0zAM~A*nwy$eqG)RiPyNvbpaZ&~tr*Z1
zmWZ2S?XzqZH6Zn>T?XjTG;nj=CJn?a$uF?W1Ti2rtWCP675M&aR1-jVh1fz(NCP<l
zVnPOp2{Iua#DJQRsi~7?uaOLG!KH%EX-`Jv3*<zPn!<GuT5J^!L5oO`5)&v6a2tZ8
zPzg;V)F?>EXXd5X)My~N2BkcLs{xw<=Yh(i6r{2UE&)#PaGn*sfmI7`$HRP+nFqQ<
zM+07DAeE<@pio08c|qX@FD$VK6)4Mt{0O%g)Dpz+C2*Mxa}TKLXrO6@910{^gyLS*
zXh8{0ym4Xxsv{8n0A#f~NjfOSJ4&!3r4jH+OW5kDWXMshknl-OL5*<iUd0F?LmgZp
zitJQSG$8TO6AF?PIH@4<Q4<UJq+ZaC={m5c5XzOR(83N}ior@MP!XXAFD4Cj5+Mx%
zBrBl(V5D{p)`mS1Z3CPM64^FTgd*`li82K>B0xges*cnYl+Z~{L9Wq3N76#P28mBl
z>c?oXQQcz*yO74_(MqcnXaSd*mk#n7j0?_QpzReUiA5z4b09*<UWbW;Jr3ibc^e$V
zh%8bJ+7b<FgM!7OwGSjUYiR0#5)Wvj2Sx`vH#M&m+eke0Ohf2tcUDR^5LehK=|C${
zr2aIxy9;YcL%PM8ppi_g>ZH<=63`j-rJ1@Q5#5ra%*4F(oK#&yUC>R1uo)by>fB1m
zX(9?>UnG`5d5{`INhdi!CnvKw6J%6gejexsMewvD#4gB~0+gMTUksfl0H2cv5zQ}1
z&4aKYz5ugv_PP_n841>&(JRf%EG$j+OaV0#L8JIenJG%p!LQ7eVq170Hc<!a+eB?8
zT?kW22Nb+kAOR2qbej`slr=u3D6!lL95k@L99YOVHLnyV01ah5Sg=A{`%o^pSA;MH
z(MEz41&}d3NG~WSF)1|%)JX(0qSNw=Y}J*t!HFa@r5NT*Z6$TkYF_Ygl2TfJ5wvgs
zsepI|+H;A|hYkgUP1C7P&dE&9Mp&N+y~ZA*M-LnY;Khuf<Hu9;N?cOYKqvQuj}1Y|
zrLes`V0S@ugWPOWT#%S&r=(M@1fKRnZu5cy6dKH+{v;$}gILf3S%^&_0q77TXd*_Z
zBoTBAd};-F!~vrhXs>Gsnk-C#$Ra$i1DcGmQcBLxP0CNo2c3BZ9sz{hIFXv7WTljr
zm{Sbe(*+g>b<$vqla#EKax#lSXH<cu^2_szq2qHP<3XN)4$fsH78m3flolv~PO>Zo
z?LyYe%qvbUDsfCJNiBj5C_>9>P#;DKYtVo)nF2I+VJQeCR;&jJQ_xn}qSS&^@Ejvj
zSVLnMq6mEdCg^xh0)Y>@Ss1**3$}?D(?HN{0LVCq^AX0Q#(f%iQ8~oDR*)PDs&Mr{
z7HGi68RLsmL2D7wvJEUbLX3tO8xP^QmZj#E6r=b|4|GVm5;#?6<|!dhTY_3&d8M8u
zskz0V_7`k~9Fikpt@HQ{&=@Fa%mUdzP#faG#$rf<23(2~%RvSqvI%A`1tkP<f-lVh
zCwFjSfgW-TO%Tv@0?v3jsVPa7Na+aTW1UQ-lnXKu=5P=jbZigU2GHJW+&K!Q6qISw
zit_VH5U~sKFh~+MtPzqA5sQb7cfex`q{=f7vUCDcl!8R`Km=?G6qF^v83_{Gh>%It
zNd_I!k6v8pB<X>YQZQspE<aBLbckm>M6*V+US>&ZE~IyksDnY)L53MMbrLmeb->Ys
zW)Y}Um10X!Klnl^MbJXk{N&PN@JXnkjjf>B0?@9YBuF_271u~Y>I#4@Rnke+sRlXG
zDg}HVYi6;3L24d2nL&M!0-8J1K{m%0G(Vq`TA`B!&AG@^N|1wSQ&NkQQ}a?1K?mR=
zC11VNLJg>9*gO=d!U7GTL!v+lcBv|CCKMD>sH45m5))ec!X{cF0}-GQhRP>`rnVt@
z4rB%_&h_H+)6yV`10<}Y1n$e{q$ZYuhL6F81V|jAJQ-AJ`{%*#cX0;QDagaskOL?c
z4Qq9<XwEEl$t=rEL0(7#n?3_IdUT-UV~CiCR#B)~9AYvkjo~h?;?q-0ASp041yoXK
zXrh)-kOHh2vaqzK2JBX}QVTKnhF&0mRfB>>4}3=#^u*;v=q;wOY8rYy2E-;MO>5Xm
z+^~t4c<{n>f5<c~=tNntvGGNzc`2zyAS;og1uO+hmasAsWIH@kpuq-fj)3Jrr6W>?
zh7{X5nM#^^dHE&Cjc|}^-TZ=*^rHOI0?_S|5M7u72nlwOa=69dECasFL<cq%42l-V
zqRd2%L_C=sRt&@EpEVHExDacgwI^r|N&%82=&mvya0?MW+yZOHK*G5g-Ux$@5`!HK
z3JvHSA&3u+8t`aqNn%N=F4!aRA#+6LfwWJcvJjVn^kWMEa1>#NnkMvES8PcbQn-M6
znh?#9`Bw1y30Me0DpGK2fC<4G;;`t3H}hcYkRa}ihjGDK6s8$I4h{-LB~VdTs}m11
z5hLG${0gdz^k6DL7veyceplzGL0Vpr>I|CQVUYk+54x%qTw)-MhQ$}e^RUbS;eq;I
zxPqbxw5SL?n+f$Fyx@X)6vK~To1vbBv^f#ZfR#It`&3|_0DCwyB^~(&J5-e*72uKq
zmP-*vA}#L+c|s=@blV;1pv>e94Wwh7lR-C_q=DMA;4BBd{tncJ%gF?{C$Kl4VObPZ
z;e#BZn*u3Hm9#a|;6)DP&SDKEm|`VOj2vXI1Tq1Vu%SH^P@@=B!K7A{SRot+T1f_L
zEhd3B4I!jJ;{(uw3RJj)r<js-(!dw+pot@b2YjqQq<Vk^I+98akR<K`1G4%8QZj-p
zL>P(`=CBZi5AP?#%K}gf0A)N2&HJ#F1KNa_T2Z2rqLZu#Zo7dz3U4zdfyTO_N)Rpp
zxx6~bJ`qyCB!M<-Wt8ORXeg;E8=4tdgYK%02OT4arUTTR0bf>P3!d}=$0(?PSAz5e
zA^E``GGhjA3xNDx3~Dfd(iT!HM$<|Irz&VE8V$NV0^A%+O#!!jG<8xzYqCK#0iq0q
zB?e8<oR6(i8t5z(@S>WU8YR$4xL~$@ax{{Ry%MPL=a`cNK8>rQ1jLF3-E*H>sG)19
zX_XwEsI7!72p%eg+{*^-B!fJTR-A&ad#}|&FG>;NhnXQ!!v?3XYjxrwMJ&QBXlWD;
z4peBMD?!Q)D<yCl8LI(mk%Fo<NP7Y_umP`pAf1CmNSuL7C^a>W^31%H{BqD`OK=_b
z8i}@8gu&fy$hePVPEHW0gewM%C8nf+d5|Um*kD*i0_H%6t6)_Cr1*j)3Jp-1i(2?w
zRfAh~piKh^pC>`vRuE5vR+b^nwShyR7_*%KiY*-lWoWMz)GLNqt*HlzRA@^ItX(4s
zbRDD)N)HdKOJISBC4lgT8z{J(^GoweV3i0sXlxTfArB5c#}W+#(C|Gtav_qix&j)2
znfZCplW4&jKtnY+MoCZ-04&_0$qAf7vQsND0vMdhZ50iyp|^`9>1C%@I_IaPLarE5
zNYpFMgbC?|I67H@E;vCIbq#iQ3~+^1wXk5-Nw!sl-7|tkhhK<m5JUqkZovTn?Si?1
z`bE%2agrwVRuoKALIbRl^b&JQyi+S7ht$LTngnamfC@DYZ~*|CPRD7Gi+{KuaYp5(
zR+Qj1DmcK=85$H2pFv#)>6xK=3=#kcN8@y#kE>e<R56i03i5RKK-EIf<sSaNu2>>B
zz|q|`J~RNudPupegC}ZS{akRF1rBUTY(qQ)F1QhfK}U)q7J@Rf9;`u_1X>KFXjq%9
zrk11!D%DX(06}X-L2I~>0vS=1z;AB_+YB-mwLk{9pCJ{GHQLG>^okf-fI!o#MiTBe
z0c4~Asu0O7poOE5d<S+7uF3#XWaE;xP1FOA7(knv&`KXt8beAvP}fr@5!OloTLmg2
zAYC6=djb}?(B(Ja83Irx54y`<2Wo|)t!*;2E<{WaK!(Xt)r0MT6#<Y{vmo1$ybdWy
zAp^>&Z3d`a$b$@!0DyP~GGGB+nh0+AKnJaopaWSLqZo))iJ<6)=!dLq#83)pyurJA
zNbUtil@fT!6Wq3dh62<{kRB^&SQFGl0jWakpMk>z*5Lrj!v;=~rg>l^GO!4NE?Wjo
zy(q!jb;x#uJOl3Vz$772jxuhB=&IV<+JcrQgB=3W32(<hT!qwc1z8AI2K5}I8G_!=
zgtfpxg&=Z}B8x*(BsATkH|{~!BtiSRP@5pL1hAoWB^_NuXjni}60B8$Lp5lJGxP*J
zh-bl`z#J%n1s5W6QPLtLJc^-<tU~f(6Q7W4!jkl|3QJRqz>Aae@>5bnDhpEW6E$EJ
z4ZO+*r-&p?P#YNJt|T=z&>c;n3$7tU7O+48`wZ52fsBoU*092xC>qcl0y7xYJO*#w
z0o~FAtua8IaAePb{S6Hy^vHvbuz_d8!0I5ClP0e9)1aX^=u#M%N=Ph$2a@3v6_A*Q
zs(^4ni42@P(VYOP0YTEb;6^J%Ifh>3L<JqNMs*0dXNwrRM-Bl{nF^h4gGDEJUe7wQ
zrbYuQ0gD09R%i`P$o_2Dt|f5Dz!X4s14C0HG*}Uv`N8ceXd(j*eIPpnYz)Yw$fo-y
zmSli7IzVzOrg>0{z}mo$)=*MHbslKDC8W>cT$Gwvk_sJ`L$(>xb*+YFMo1kB^H4!i
zKFT;%EofLJv8Wi+Ao#5<(XrM^Xp`Nbo=-I>ph5R1rGPflrNWLwMe5R9Cqquph0kWD
z>VPXNt0W!p;&ZE1(9R7FO&xGaZj}n@nSxFxg$(jpr9smHSYAo9rbbCg2kxyj^g>0m
zrY03b40IL<G?9VE)@+kOb0?5hpvYkck1cSjh4ge_jb~^yp$fvn6Ow`;Ho(LnDnsE@
zybxKiC!iieoeYKQ1C6HZB!WhI(^E@8YZdj1LHlNl2rNa13>bkYrUHsm(=scpl)(Cs
zC)FXRC4v?yBP~eJO{@TI`hf0r%P-1I%>$hQlb?rjxQ7n7KLXNPT#^d9L>m%y&|P%J
z;8|~!opfN!A;REQJ1{16;X3F}(cFN<^weT2Q=A*@;<HmLgL5)Lw{jzf+Q5B73{mJw
zJN{{Di1Epc#JrT8RB%HMc_0q7bt$>TAK_703_}*cATNWCPfpB9F3m|SN%c!D_f4#T
zsf0!q>dXe%$KZW&5SA{q+ldsU+Tg*ga`1>9Xjluv(#5f}50YSDBe5{MLCrQuc1NzT
z!6_G3(7`eXv>b^?4je;pnVD9UTAYEA@}V0Yp?yoJ^^nbv9^kM9_4dIwfgDj<08VWP
zG3dBHVs9UcR%F{iWd`^nIY><ibvJA&B`kEo6)1SP2^ye~2t{6x3Ysy3w#l(h%7e-z
z$aFT+CRr5IK+%B51a$>iTf|n~0JPQ})WWk<(n*J%UY%^40xG^rQ;R{PcHmr546nLD
z2e3d!8tg!Kl%|5Ra&ju@raegEpaB}Egozq}t}N9_vQ33*w@$W8vQE<0)=Y<#pJ~vQ
zA&^igwoL^kKaE6<biJ(n%sfyPfj)l<4M^BDH$)>O$RTX-03B?D9$W}?b`yNaC`q##
zdiV=c-v(SD=|VK<f(vs{8xXV)0XYd_#5lxiSZpVQ#+#G$zy*uF29yEXN(j0eFbNu{
z_AmxCP}J0nK)ZpUvQR;|BG8h2NECq9-omtkPW`n4-3;hhRFqh$0TTwD0tsW=!WhsP
zGSJktf(h9|M%&`S2K#1$CWs+<03i?y&1qo2K>Gz?Hq3!w4G<AX%p<j>A%O{&)XmMz
z11CrnG4Q5S&<=jcf_^0>*p3t>rCQjgEwFa@96aWxZ?FSk=|Lyi7MyXAYysH{EsZet
z_ktRL$Q}fxJBa&}wKbGLTZ?UNK?kdX2DoZ!V7nlp5egl@N3u#+NgFC>rKAKJ?}9Xg
zz&=0;J4i^u$~~|=xEzO$Ys1PP<YWf+CSr~ll0spVknou&s4%pEgYY0_8PuETt1%!-
z;O2k_2oTFLV6u4H6i_A5eG4dF!sBIVd_i?Vf*cWXpeTbCW$??rkOX1pZ-Im$QHx*^
zsB*w{EXFPw=fr}NQsg_FVQoXmb@e*wIvJ2#3&8nYCkIS{CXO=m^NL}8s2un#2WSs4
zB<i951l_)C3%v#y9Fb6Q<fgMGY-Ky90@#);=-eJuvp;yd7{n=1A;b|1$+p!MR<ITM
zl~7hB=n7%5@$q^2MY-VW%&jOt*Ehek7*uw{swrrJ0BRLLcECafKqZ8>AtZ6Z;vIF#
zJuKWHr{^Rl6>FsEW<!fK&@i;MMyg$MO-(B3R6Ed8W6-S|dhwvKF=y~u1(0J0YHE=5
zfG(rZ18vU*m1?QB$)Hod!GWu(lWv;?x>+>?5(e?$)|f^T=uq+uP-$z3hzCdm2;R0b
zfcPOE;t5DQDqSZHk^RAG5j-Ic8AVajgpKKgPQ^e3bC#_lp`9_H>s3JmC$Iz!Zf<}k
z`M`@B!Gqk;n9Q<=6oUrfJr4%8RuC>U7IibhJNtCgKn>`U3=Po55lB0qbTh%nS)@Ua
z>;g&aYJe9ufR5u!18<vBf}B1LKh;_jayXxXCN7nb^H9MZM<uvoZ46@}2cd!vQiUsm
zCRIoP7we(!+W`kGcv%>z&jU%2;NSs89_TDuh!Aq)&Ok@e06d=p&cJB9+F<igiUzgN
zwce<EVBo`|)fHBWdZ4{25jvGnR%9)FpEi~}kp!Q^gg6P}%0$fMqmv9?E)2Ck7!)z^
zh6dtD1h65nFo9G8NM#>5SYYW5Y6Zl*=sg9{vSke{u7DNtkWou~Dj<%4q<rv7WU$lX
zk&`2mFmg;7f|f;tPPZsYMd@o`R95+jeuypN$VBuF%t)&25vovnXtg?6iYtV5u-MfB
z&*JK&LCa(0103O&BAjFo8+?KmouDEblCyM@Z4>n>AO#;(5|Tk7`43$7=ply`bn*i!
z?7%9mKus-dwm=Rv16xyx&6<+@0$rkP0i`m~09=Y~vVM|I3g}!bjTF#{at3yw{Xr?9
zYYGryiX{-#)IjQWQ$US%NCJSg{IHh%unl0yl|hPDDm0;%6lLZ*=47Vlfom0wG;mV}
zv|1l2qCmsUpbk>9Z8aqQL56N1?BeL8SRJtS5K%A_bYwAPxCgRQ0ouZb)+o>h2C5*m
zVG7<u12zLvJAj$Rpw(T;P~9lvu$}~B<R4s{fL0+UgS`T3=An26wB{1z8SuTOkTHBz
zhv0J^Xul&kz+uh;-EO0)V+4;Q$YM08OW|GuYk}DUX*Sy0DuQ|ypz~Fe)YOvgQXrS%
zCaI~V*d>Fi%w*dXO`T*#TNLjmfn=cj`=CzH)Jcs7UmcqUQHc~1Aisk`0)MO}Lt?Mk
zDzz4L`!U$9P_vUD-b+)owN(UN*$1lnU{avIp{5n812sU-BikLdnmU*^X(WTI4^YX8
z5{;1Iane#G*lVz8fcOJnWK$t2<`;m%ADj{)WjmT5GSf5^!LC9YSW;7i3L)1agV?+1
ztw38`=V0i7);rhMLXsO&K){*-3h;Z@p&17{5rYzAh(wNDY{3^#qK^3JfX_051TZB0
zA!{u`B|JnFoC-8Fp^id2#Rsu2N+(q(%{ntp1Ko9YhOpbr!A7CD5>zN+cWE-Lt|!i=
zNtz(5718ZRu^CdZ7i&P3>SY!~h85tNK->6HbfCHwUmk$gk>FqgmBJ`xyfx^uG}OZg
zpd}w@2YFF?DQH)2F=*febfa3DO$sz#t<$t^4K-7u(_*oQQEGG=Z2Te~Ioe?3O|St-
zNR<UH<}nXILXJRN_yQ6oaOn%0u}nhqHdq4G{QwoqurY*WJV_85Ca}RO)G&n%3s}L1
z9zbJln5hKnd#FK}@~~k$_>?0yJ3t%VU@?xx2vCU(tuRn^L*oMN04P|fKpRjPGjPy>
z$;@KVU_*+Mj-nzwK|`j7LBS4cFMt-rC?Pcxq5C)DagKGvY{Y0@gKDuNUBt28pfLk*
zd%j2)HlTnp01MHBIoypS^MS(++MI#(xDeKX(n>PYP1vBb<&<=kK<m+qQWLYS!5#%i
zA<T=&t!`M46)m@eEksG%uw;ZfG>)|BMhR?3v62-i(?RqTVG-yu;Z*P$#kPi;5M9VQ
zDg`=%i`!Pv<cbn_wG22<Kw0o}mryjqJd0zF0xjD@8=%OZKwgst&8d(A2dg#EFolg>
zp{Owg%^!k83{lZQ>QLxRD@ta7c0ClJa-b#@YVA_111)3`rXhD<KxH(%w1s6XX!{pB
zSB_#|adcuVY_kKpWsnjd995`#(8?>Y=U^p-W;G~PK$o$iYJ-j+gPL{*)+siiV+-=q
zOERoeKxJ@pbPA3#7$gJlL?_omJQE!YS^<jEV?YTIP%UYLT&jTwr%|dNNH~JU!J%e{
zq8!wL!KNG}ZVhU+qlG3Yb=ny~Dk+$^L1I>hI?1*giI83zl9igONjfREiMq+K7&p=a
zPkn<%yplETY(eWOQnYQ8?F{UbtaOt!b-*JrZaMjhB^oJuCHase*-XJrQnXZ#2nej{
zEH|+N9^>Gs0|x<Y3<KHiIw_D*xU`)7{2~o)jYQof&`Jo1)!=jyUr>~q4BjEEp{c2#
ztf`f3ooJh)4Q+SjCRRWWxQ9495$<eEy`ZWSZWay?AT0BT?sGzREIf&TMjc?C6_|qD
z%skMtScrE(2M@xAKHzqu8wnmS)YM4?P5#6D=%0pg87$M;f_xQRQk0pO4muOvHc1aW
z=i{HIp`@n-bCa$iXt>hezzVi;NH<v*G}#CXeuS~`7AQD~kem<8_r8f0xK!sRRv;!Y
z!7UPGmEbfB8{yD_pS=P(SrXjj(18wvLT%N_1ZN1HEHI^qRH%VQMKfS0b?an<?g2+}
zF4$Ye_(};#K7rM9s3X8Bn$^j+8kx}cn?{PJZl)e`#?jY+^Ff&rO;!tZ4?%V`+SpAd
z=!Oi~<h?!Q))mlsbR{MExk|CN$=XV)N;<H)JWvl$!%)XiGdjy&30f&ASt%tK7c0eT
zWb43vuBnp=8^MRn)WO?qsC71~<=~4<Qq<HkA$s)i+6EcF1v{@6*<w(7LYRTgozS_0
zWZfi?->}{m3-?GZ=zK#^{~uu_0cSzBC|Z%_Fv#GQ6|pYU)Jd{U2F>L`oA=<v1)dxR
zr#YmQfi}DZN*p@LwxEtY=yWLER84)2G~HB9Pztd!(7{L}VB?V5iMWypSREwk;twU1
zqylcU*xK5rtEr)-O|W@L_CoUwI7{NU02arP7=}lurVgyJPnu<Tl98c-fi5(%s|!n0
zOH)CsU0?@NTfuFv1zDY$2WqH-tcEv=;e%3$(Nhw92}>||y-BQHSUm}~foNZXYAZ+z
zfJ}{ARpZ<;0Gt1_MV{pWANmHKA%b)dAZ9^V3uqFx#Q?`LbUX{nLj%A~X4E|i;AQLJ
zrRJdC1F9TW4UiS{n2K?j0bY`ynWllc5M2j4wuD&6q^1TPvqlJk7AzqL9G0D5@aYa{
zn-h5wFBw!K8)`z^akbE`8_;1vXf>w?YNhF<*kbLPLQ^SBDY)!`wR9nM7(_@T9lDhQ
z%mr_g$Fn^I9CuLrkjgKlE*5G;fFc!Dd18eI?)@I%I1LT3f@wh;SWnT01~b^L;FVjL
zty6t)sgzd=S%*fzE^yp);j#`k6G08@@FdC1G>sHkIRgz;P$)s;-Wr$dw9{~V4(u<?
zqz+5d=+=QIw+UINo2FR{4%&F|zyWx=5_H{Ec4}p50iwAEp9M!w`~*r3h_Q&ggEc!r
z=icMNtq$-A2}B#TD-ISxwi9Cv1Z9d*vletA6Y7G@{32pb2QCM%^8=Tj@Fkh~MI}l)
zMX8A?m7v-Mn&*(tJ5qvdiB-}`tjH_|DM`-H%S%lz3C}FafO1O`GxI=0ePC{BQE`5e
z732~;on$c2u>>TOQj}ldpXZueP*MpxfjBL{C^<DCCowrSBR?l4wFoqk2T}$W_ejkt
zKnSH5Wr7c~g%sEzMUWGptUv=y>6v+nIZ8U9T_MF*N_Glbp!KDR$(bNq40Q?+7J&2>
zrGjcK5DRi;2FM{0R&Z)wab`(o8AzXzfeuu#AT>3`3e3$fNVQUe?*0MYHkgxIl$e*C
zYNeE!SCU#(oSIysq*Dc+m$foXHP!)_kBKGF)0vV|)AEZ_!L!SteiF*E)Ra_IwfUtb
zkd>*R<5wW8qSWNn%rdB1khB4jD9$f}DhAJbK?On6i(qR?3sPWCsMU$jEcP!;Epi0K
zB4UbL2bA`zA-#KrL~sW<NjupN)B(#Z26rGqhXNzi!+J{kpkc5Y@VSTjdL^mFB^rs4
zfwMGFUs*|0v!+HrGcPAIFSQ1oFm;ntb8=8sreqcu<Rn%qK|0gmMdOI92;Ex=T89d{
ztfI&{F*zd@bO94M<G{uWQ7a}`9)J$=p$!k^<6CwEHWjki1ZA~tacT)<ohf*_A9N83
zY_tiSV{E}I7jW&&ffx!I76ol`)=`2aU{FI1cF;a(*(!z&kiAK0!Wdx#3k0M^sn8IB
zu7gC|?gMW5psN5~-~(D+33e+u4<R2E1gWxMN2tKNT@Y_TYGRNc$Y~G|BcMm&ps9t{
z(;&r2n~Siz2)t%91;<Kwn4ck;030cx1?jq=i~t&u29FKH{0Lig3|a&PK6DAZoChWg
z@dQy}1ojyub-<UPf#*Izy?f}GA;@d6Hj1vHb)ucEfpwy;E@aFVEE$~`3pu+7;&||$
zf3V4rQW=!Ew3VQT_`rszK=QD)F_??p;8WS)*#@0d(2{gWGYeV29;DFA%u5H2Ab?DS
zM-D86YHE}~1N)iDprnbSq6D;+NYM~_5I<}L7rZ+WG$)T-X+i1<(DA~kBMY!1LjiiA
z3CMgM@M@^^)Dje5gD&+0&9Fm<1W=C2)q(0x(klTUXN=nf@Ztz0hiU477F9snz0m4S
z4-)w`HOVzK8W7vyVFHoTNzsI)Y9%em<N}WKl0lvUuQi3Z3Vd0&q5)`iTdJlebn+;<
zw5TXGuLKlmwkgn2Z%7(&hR76y7W09mK`Yl44K%G34MBY!$owzrS`6?Sb;tl?s!kf(
zfD&jx733g2sEy8`Yfv-uQj5T2Nf4W%rD8xnsJ6?`1K9}H0;y5K3iY5%rXiIuD4M}4
z;*&vTFhnq*D8C@T2t0}fD-a>lzKKQYnFv!M)o4H>$o~+tA@=AYOTbJ(E}@}500jzS
z)gIUxP*vaytdIo2tLVUd$f~wtkO1UpeXuA*8+d^aq}>fu2CB$vLB$~CSQaG3umk@f
z!$Gj+d`JqwrhymzK_nv~CPS?%$uFn{jUT7xl|Uyk(o;(yK>=Bpq@k$;yT2HrAP9P+
zF-!^UR5NI}ffijW!48K3U8s~)oS#!#0zYdixwse>wJ70@st;O2Lhi3k%t6%=pPrhR
zT9jCl3KNE>0J!?Z^wbFWxzUgSDar&l#6TNpBB4@|I_aR4Se#$vSOV?R#V4j@l@^yk
zJO@hkkmRI+PzZHeN`5ZPdfRHyZfZyfAtwuvsD>tJb{SIgU{L{1cVIQJb&cS5Wwb#o
zY^WN^K=6^#V9y{4q8!x-%@;_GRt?ad+R#P{s09r3W^rl>H1mN(A*#SlVKp^K%UIFY
z7UpL)H4R9itq0pr2`za*TPk4-PK!(Oi&9gZ!DiS(SA{|v*Gif?sC;;+LxU2cHMpcQ
zC$%^uHMIo1CchZOwbQCrfEZ$>prj3RkG7J6VrDKVdne|VSS!@p=tC5P%0bw1Hffq5
zk3;VOhIM(6lPFY52{io-4pUIyrzkbWzX04c$4r}W4NzBOGfXEPcF!=_dPs8{o9z%8
z49lay?Q=}KVal;s4VBVK*MqQN>&=kMFQnuIi$QQ&Qt}A#^#NT%4GsV_9eO2+>7dFF
z=6q0VKP@M}9FjF4Zba4sF9o5F1Wg;Jr>7QafNE|~7Y;i66JMI?kyxAoKc5gZeN&uT
zRF(?KX-EY(?4$sk#kyjOCTLa>+J}dx^3)=vR!%CYm6Hl<<sei<r^X_k3kd7qfOg}9
zg97G85JwX>TLT$<NlD2~%u7s9Edos(fe!b83xJ9ecr^lA^iZ0q2bWY+Q%u(bbugV$
zGZM=(^Gl1=)WBzhz*T^bWB`>Dknk-Aw`@VXy+Lk(932flx)?fz4NZMm`xm+pNm$N=
zwhN0A(?R7VxI+N0xKWof!-f{%1CwBTq0JGU4A5~Tps)su!islDBEVf7!_+w@6+@LK
z=jVa?x3H2kBws@*5v_s%t=59cJ0=yw4tYZphM0$B0W{S?9Sp6$VQCjRol=w;pbaL}
zya1}mAxHS4*#pfIkX;tK&??vlb{i&AhaS>XLDvo8hvXO7LTBJ00+1RSw51)w56Lgk
zhMNf<4}jXF3yv&Iw_<Yvj*x<eBQb8!MR5ZxI?7Uu5QPS~If5^wz#9Uf0TqGGnfL+<
zbdxClkOHZ|8dMQjg9_B}!sZD4VFj{;urts?OVbK86b`x(2jUV~F^vd+4NYuLv4^G%
zEb76Lk40P)&1y)i1bQ+PWX3~7Q<t!Fu)0T0O@j;<p~eaLBnR+b3anuP3SW`}1FQjC
zXn-Z~1_$IM0eEOYlL=a&LX06TIKX;vy9qr&G<7ndE1Xg546<t#X!b-ZKOqGw==xPc
z1vIRP1r4{VsVP-rbjd*yuwolh6@d#YP=gL!0zj;S*$o!bRw}4~)mLcdgYSm~2Nkje
zF7r$B3($-&$uEGK4xI@Ck99!TK<OG<Cxe;@$-26l;F$ujMPL=t$+0@AwkhBd5l|Z*
z+60b=52qG`2ABi#!F&zSQ4XNp%&?&-*pvgbr4DUtgIW!#cw6>J!@<#@+59wnCGgQx
zR*+-3V!?d{$bpiIiF(im4WzN4hpg8iRwotIv{foj&CS$Jsmx2v#W{F_ZVq$|3*_lk
zO)Jp$sOn7U%9@nSqSRziui6&sIM9J;pmX30lysB|AYlP-P{QI1erX?k;W#+VKts~t
zFbvL2NiEh$(bP-=uU7;|L3~kaVi9<*TLW}t24rXe(WHdTOJKCuG@+9=(A8j&tsS5=
zU6Pm#>+hr%ftCqFE-8dJzAzeNpu0Lyn_vjbL1TGXtcJLeP&);($qC#50}r>uN3Ox+
z+@L8@O;BiK<a2PSz(N#%LlPv5>UNku$UqxpbOy3+0=6>~DeXX8EgGPM08nfN<!haE
z(6XL1H8rIQP&}vA)M%uGb1--hep(5n$c7FufSR*;C17cYIP#DNbh;6u6yBzR<r`QT
z3o1E4-AsD}NIiw799lnuic?KZ9gwps5zYdY1*xFM8N_mkR_JLf2w|9;K;;BD)S&*S
z&`BZr1+cCdB-Ej;cj#aqq+Ha5t(MYA2Mxp&r-HUrqJ%j_FJwEVseu9V*mnwOuUKkg
zkp^h5YHeyxaVjjm=YU0Zl3_g;@X6cBpxK}t<Ux9PrY=fMPtVLthfZlg`U{~28r6^?
zL-3>xXbA^wbOocphj<3kHiH&;;Bhg~m=4%C(7v^Ea4_cS<)GXI8X1T8S|AaPY!2k8
z82ErTbcrRj@I&eEC4ma_BrN^CB;@`cVn$0z2Rsi2aU`^33gW<`4q-=hQY^wo@MMo3
zsAUan3!*ASlok1<B^29XYoLizpdsZ|nDt0Ppd16qcz*dQsnGErobs@Z@)?;qDUj5U
zs#H@4F@*`MxL~CTB-)`iVBuhO2}B*#TJTAzsfck+ooa|QILYaN%3x5s1kHv*@&Rb7
zPtg#xYts!hsTvHMU4)H6rXU98K;7vwduVP$7uVEFL|o&6l+rY<uxS7f(t(ay24B?y
z2_<Arkj7N4PH}2cW@1ie71GtwuwFH!O#(Xb7L+lH9gDL9LFb`qfKE6AB`eT;b!rM|
z33PNUY-%LQHmRnjx>hF<bodGSj0I?72eg1#BMIC<fee*E5C2O7pOuuER9cc+Qv<#q
zr=|vU8dh#%Npglpl3r>>K~ZWk=>DFX8hs5tZO!NyUEBCr5KCVZbYWcz<n$DcB)x3V
zg_6n9hOyd8(XmRJ+Df)c+7MyTA(9A#>_KX*lB11cA(vypHqwApWv5nxT1Ew>#URVG
zQ!7EHXzHXu&tOplou6Ei58e@kD4nPgaLH(AZ)sLTJqDV40k!dn2{q7`L(tqbY!V&Z
zVnMhQzTOv9YQPUscT56}L8X;|Zr_FUcOmH-X>bd=B^Xi*qi8J2F90<>ap{9}(Lje4
zfGbv=blWs-@KTEs&^3slWyb|NnYJ0)iO>!Eu!XwN>JPk`7*zY|WJ3}qia4mttCM4^
zgsah=qMZf0b1~B{MLSC;*A{2vKS?{=E=^4>-7ZNxTPM#pM@=mknylfiL|9D^D^1|7
zL`bZ_r@O$*EuhV8xBMb_OS-tG25uI5$pkkGrEo$DeaQJV;H3bdX-DV*h*nCFz*UO1
zOC+SiKF=!6CJ9$0fjf@+Mrvxwy5NL?Bl`7?Y|_=#GHg<CnFDbT$e>hQ2EmlrWMU*!
zXsBUHtvDkX>{_Ii7?9Eq)>i|iYfw80tO_OJfD$bv?ZMI==(Jg!=>u#4UTZ)p5fUmW
z_JD*zhq9)ol|W8>E6D(rnxGxZu%;}ilm(4#hNTvjWF{x(xWM`>h!!nOi3j`;7$il|
zgsPANY0$tE38-}mUQYsQ|D@H_D1rMvpo=%{jjRl<Qq|NnP=!F#q!@7m?(ATR5yBxt
zAmHH{Uf)OuISvRL3<^{HK@BTlz(#}9HYm^`Ca0&C;0kT%z&uf*4K@rG)@o|0_Db-u
zPE}J&2Axo!npOe|`cySF#bhhclsP=OQ`FRwYHE~93qbNIpj&=H)6=+Ih6sH~PYAj|
z0xgk4@*7%r4peZ$(uaW}<Z#$TI|F-&ORPXHK(ZN2@*=`+P;_9o93+F)c1TcJK{haG
z)?(hWgLYB~>M{xV-ei1>iNMF-!N%oblk%WT`;Zpf!TYi(;R-F_VGak6Hh|hYpy3lx
z+o!mss5H4GzsT0s7P4W+J{m<$tQ86ua)u{LGYS!?Nt)F#M<^s~XjW%HS~8%-rCAGV
zGl36P03Ewz8y%~Y2_j(oSddl?LN+RAsi`G_=a*7!vk=2YDWD!kimonLCe1ccBP%)u
zdW$(ypA~fOMH)gAd>Sg<7P?9#Ejksd3$nPztu!YGG~1@Bldh(g4z16?!+X%+gP#Ef
z+9CpOOGSguXLBpf1CPgOfMy;+12e_o_F%E5J(_@Ca$-)7Mmp>s5l~APO@$6Z66ppZ
z_-Z8Z#5Bs~LNF<$9)psmPI{~+xTls033^mlf+7N5vxAyo#hQ>(7UoN^7{sk$wa~FB
zNH?t-stVFWgmS<OD<L9Cjq+NM2f-#ll|h09GDZV66#1egm|q|jH4)wfnH>u%1wp4L
zf%Yrv8d}5CMrL$MEU5PbZneX^;R=Zw8KBYu$I==^Du!eqST`541P7Ghq0{bGkQKj>
zA{&x?KuHI>HcJzJ9VYnL)<nJZqSOLNH4YA3#1KLvWK$+6TO`{WSSQ=SwxL-kYioms
zLzAMDV?l>PgToHAM<22bQ_&EbmlX}bYvG_Pc0evfKA!+OoB*~Il+i#T2FmZC#ki?O
z#gH=sW5Jsyp$F`M@+H!7XkcrLb#iQ@sgsC61DZ)Xkh|X?jzI)1QRxModSYXBav?2e
z(7+<BAcGVcxzP3|c<m*)gh;l{MHB<@p=QubD(C><T+kph*eNJwM+$f_4Lwn%!OD(Q
zc!>jvd_>uirltnk*90<AO-&Jen-Az9Ii#{fBL`cyM5qMEmZm+L03<`gFCiirkZ9U<
z;5s#R;0GrlMob_sO4Edt8_BjgI6^GlHYYkc7IG&%m}L;FlVWS2lVzI$)nT0l-bt>l
znQ5D-krAB|3)+hZ&MlxI0d=|1R`h|6bjya=4@no9I<OIZE7;xe2C(z<3?QquV5g`d
z>REWTh{(c8(9{oW(LhoRICP<IwI|pHhplc#%DkXL1!M@QX$ek^D1(*I)CVcUU_(RD
z<}+kS2;vM-gA6jf30Z8Qp{a?S4Z+1XfyokRzZK+`Vo)Lm-Ej!HV-i|-!B#`S`)g3g
zLCa_)VfYjanodx85^WG$Q=<WGN5V>Sc<&B+9Wrc`2ba7K#0E_(2(6P;Q=^drN(?0#
zwyCHmC8j_-%`kDu)IDgeN*YKAyh2+8G<E@MirIo{__Puo(7x*e+cZ$y5PZT3IIY1P
zlU!O{k`F5vPzCj%1t&Z#iXn?}38{kQMvyI<*5F}ZP;ml{FQi-rIYk$Fh6_4{g-{cn
z91Cj@Kob&dsUxZyI1e)LiR^ihGmuJkkcnujLBsIiz=0%KxGX5$Aap`Z2KOx>i4;{G
zw8}<}Ey8v~I>!VJghey7UIUM#gW9&>HUCJf=}_`Fczh1z1X$j&O@cLTtW%ID<G`a|
zh;1GqKf~I*im)~>=-PW*6kR$fJjBJ;u=cG6q?M3jn*_^h&<vvox?us-AkZtx_sK6$
zEpkpQP6h9b1>K*fq@ALzWT&K)1YgVts@M?+R3?LNLWO2hn1SHy>Odw!4&#Q8*rPQ3
zphLQtOWxrF`_Rx;DgjOCfO~58NwB57Aw@{RtbyVsXsf5BNJ$fNF@z4tA0<UtJONw%
zm#V1=x~7+SJ9JVtt&}oz)4@8_)KbACs2WPeMaiI$LJAHf2~ABM(21jvT_t6i#hFQ&
zIhiGuN;*o=ix)I?QfqafTU_9=mZ+1eS*@X%TvL;x2N~KzqzupwBhaL6Dzp^R03XZ`
zNyBJil9`v6S_DhBy5K_~Kyyc^0SB6YQ7TAG0i6aPl3xHi6Vm`Rl|+ns$O)ZrEt)#1
zkP;K(CU8E*<|Ob69t}-mYyeH#!ObT|Lr`XVMhRSpCiv9<B;<@{o2Y@3Y2alWxbKq$
z<LaP<5_q`@N(_Ui22czJmH0@BT@Mne8c8~+s^CQiN@_+bG!XkCz~x4gUNUIjr6@H|
zLsJjjSAZuI&=KNFHYF)`kUIu#^h;9glyp+iGHppok%m%oeh%n_b;LmhkgG;u!kRTT
zhDfKJCqu4q1edPJbK*#@gcK|oZE~F)om|L1jyy1h+)Mx)2U^Gv8ux}aT;Z)<&>3>z
zE<C8^4_&K(6yTuNBq%sQ<swK$Y7w|*fR^~6(h1ZT0joe;d;w_~A?(Jid^Ew6>A9fk
zeW)^+{ji+}Xm;u3!cqy?VvwfHywX%_Xp<kr2XFTRY17HGO-7n`MUg{z22!!%m@7<1
zo|Xj96{4+@1$i6GWMned$w*rRaQh<{6kee986eFFhrpr+(#Sw^Z5~#`U@L4;6(Y@S
zmZcV9tbzd9h{d_sZLl?jv|qqS1Ety;rkd!afm4=Fwr#E+tmO=y4v0tW_Jc+{qVoni
zusIukE(7?Mo($V;d-PF#og9#0at`RajtJ1n9bi_Zk`8iX7TP*T?#*MQT}0Z+gSVgH
zsTk5EPJwKt0wp47!xvo~duvxsO#^bi3Z(NJ4K)YeI*U$^)yV>Fqe_a-iPg=t0|hu-
zX>>*`XsSRX%U01qQwM%-5Jah_4QPZq6>`=M=r|#$Fzk2?nEN2DG{i!mEPK$XrWIs_
zQxlxP6w_cUd0<Ud(2^7A)>+tAXV~fjXikSWa$)m6DCr8SNda^mB1-hawIR|mB14gt
zMB&L3l78@7U~35KltM<RP*x<RK?bBiTcN-)fFg-lQh?$|Siu51a2gWGh|Gj@JrhJB
zsyPI;ft-ZPn;323Jm@$iEGn_ob0G6zjZAoWL0pEU8Zr%zh^OM{Je1On3grdp%rxi?
zDd6Eq%t{O5J*ZzmCu!+r7Q@F#ll357V@>-+4Hz4AV_8lmB+VhJ9Gz%rISfs`pq6kf
zs8N}mlb@FgY9+$-LlOs)GCi;o4d{kaBnfEqS0M$u1gTg<3EU7y+^m|Y0o%(Cx-t;t
zvedkkkbL`OI1^)>6Eq+I>Dq%<dw@0@LDf2gS{529paMt-M8dNjB-w*J1l|Jz@i}6F
zjxF@`800vID%JyUvw<`NVPhh=l|h=VI<Q$443|UN%`j=u;?Mj79Ew0Cx+Y}s1>HV~
zDWDFi5@=7Oh9bzX$PTTkNrtquA=^u!O>AiQAL4nWID&W%)Za%j3E~%AMnPmT&4P++
zYU-ra>fqQ|hLVDniopklDcRbBcD3fGDS%FUOR`PUD=x^%EYVO>P|^hLD}f!R2|jB%
z$riHvPaAYo9(b#tc2cxqY)y>;Xvr2hU^4T-27!YvA3TJi2U!IGlC=d5`lgjY29sfH
z;Xo3aI?x$7{Mx~$Lb4Uo{5m8Yb(8eKGgDX%2SqAQqd{W^NuU80RIMfX1)4fakW;3V
z@M^~4EJ&2-Ch0-Uz%(5)yM#PAhKM2PkRBumAxa>{4aED<IvOIO0U1$)j^QI~fhyC0
zEzU!1fPrUG#1=_t+X1rC17b3+{VV9L6f`}M;u_f@prQeERR(w&i8jP1$eQ#Z98fn6
zd~ywF{u!sLko*F0t^tQTnk_JYA&qhCfl5AT%MML7V&9n(=$3U*S&Pk3m@?Es4p2kC
zG*d4Vy!JWC7Q6=+Hf&p~sRQOi(iP&a2@KOAWeTn<Eg<C(G}jPm3MdT0J!8aW7oe&v
zJ+%aNH!X5n%S_Wyg6+PA2LjUWSx7GpI(Lm+gu#kbcnSmi8oW3I={gRuub~MSJWc@0
zkMLVIAQ=Oa03gW@ni|0I3<-inaKgc7B&Zlc_!y^|pwQ9Ktc9*|1iKa<XP_=MXjeCM
z+ct6lfqeiiv7m(@d>jNUha4ziFG3W9tb@A>Tw)TX4LpDX8a)9OtuSXnDix%H55s|w
zAVyMwQo%xGQAaf)WfY_;M3#q*_JC3j>h@h^OF^@F;63=T<uK5;kTtAn0a~yEYovkp
z{(?>fK;}cTIK*PK)`bpeflD&@&}>kOOhwjKQ=<ggLxdp%8qtEp2c+KwveY)(0J6jZ
zlKJ&u2_2H8z^b7#kj4#ITnC39(6ts=w1Ac*DZ$Dd3|B$gZ7^v_eFbZ@K|BHzgE$lt
zAV~2Dk%mY@5*Da~omPS`kchAp68oT0Hn5jq4g|#nsLX`69YKvfXpV#=3r&baFkJ~T
z4<ZY5W=VcQtfr2BoCeJF8i<c;Ac3u^0zC%@C4x0;YBZ8;6E#o;LEYYD3{iL;r;}m}
z8w~}mmeEMkgcPoz;SkWiKv1&}bY}y!g9Aw#pc8=8N|0^?0^Jl0(FZA%K{*($IK`?O
zI`j!r4$tt=fPw`DsEE=@2Dda2WjVTinD-jtvktkSK(h^$Bw@Zwu?Kh1L8s0pL8B7v
zC!Hi{=z)2lJM|zr0m4NpZqZ!{@+Mdjl3%g;2^uQU(Nt)O26ZTA`T>vhq9z~YFvH>t
zNP>iW1Hwi41Iowa5zOGmsu=1I*g!QQkKoJ*pt2l&TQZ_VO#+SCf=*$9PO!mhS4jIV
z#TKRcmSk^erE92@iX;jj=0P;-pzR*y+Lfw}I!GylY&@hgfutiyb*__UtFHlSU)6w0
z6;1t2$QfCwpmGMf@gLSe1y{(BECMc)AjTky?2`NfE$9MPs1&3a0c9$!6kQFaw9Jas
z6i@*S){fMKv4^B9WS2s70=SuBm1b{Xm5MB)sg(k0dq6W0*g&YIC{+k{2Z0hUxh?|b
zE)7i-CqaZXwNgMeGWwY$NGS-?QUi~tLn>Ejm8_EnJ%=O$bm1KM`mjiyj3JPAGO?ze
z3@m8}(SoHcAAlnoIh`P77)bm>k~L(#09Z9d7@kZaArD&lfZF5+^;#h6VF$!O4<3T8
zpFpabz`Z4;oykxu5S?iout`WdAVVyu^X{NZF4`a#(j3MxLK8HngxCm<B43hUfN6ta
zteTnz^xSS_n+>tq0Pa9Tjt78lW=639ltCav%E%@efo#Cy2P14YfQ%sE2TU7`K{jCV
zgE2N6Kz;yCM}iJr1l@oHiCNg@H1PR8+Tg0SD8Do>MMEPUQp%tx(9}=W1L==8jMdbF
zGhwGyA$i^&x_}=gm`d^sptk}bsf-3i1P;~ED+iEO8^_uwTj5ZS)o}Y{UARN7lC_c8
zu=xvQA4Z@AK^kTdM8Jc<01*TRv9Q?yB&XV^Ky{-J9bs{%L9Ch@F6CGP!6?=~#R`{t
ztj61?z(T<w)+z-S3Lv&7w0jSWZe-V@_YmN91-b;H=F+C1-paH$u*yKGw;;6^EE<rV
z2Ffoe;R|;gh78nkAaU|s2dS{Ekevq+(gf9D@EzBPsw)w6`lb%(<bC^OQ0blsUSI(k
zS_T(&NW=f2;Up`_ZZwcmh-1P1l+3*1)S?n6@DZbsQBqWGI*_>~_%IP{zlJ^BG$eCD
zyWxW~lX5`&RUu<q$@!(A%~_CQ0Lrn~h7_+*u9YEpjSh4j8B`E*wO)KmYEELM2GYbk
z=nh%1=b-AKV{p*LTJW`g8j2~<sdUhGTa++ES%eM_L--McaC<<3ia3HOQ71(wNe_1H
zP!ecu1K0`hZI7VycR*eH6rEJiHR_-#b+Cf?ynOgpNT@@Rhdm&%paGj=fT}<Wem%&^
zuaIa#(g~f+K{g&TH4C;C(oKjq0Id!N3n1wPr33JcZi+%?9(W~{9%6PuQv-6k7%Z+4
zGSMlqn1?)~NW;ewP(*D(7agIy0o+*x3nJ7KvGW*tG9NKbqKCBo7;I)*QGTv}X-RP=
zXnU<<5@@*)ctJiqZWEy+#fXVI=mEK)yY|3Fz+xKAK{5}rdlFp~8f__PyIWy_h!ptX
zU9TGW7Pf<1Bw!0rj05j+#cCi}27K&9O-)iwO)6xyEFQl?7RO+C73?*T#qgFOB#7Y?
zilEjNXt5_j3n1&~v0H$}d5}fx3UC)EX;vp9a-I@AYM?WI$Wa5zhltgd(BcNo*_xoX
z2uA!9uoM<XWZMavRDzXwdC*leSe7mzA}m=$33=N)C?cT#fsD$5R^6n;!e@<<1!2Q{
zpp}Hl8L6;+@6e!5)=&a3T%puN=;9TSF`(-$;D-sq+TpOVD(G@RP`6bHI+_GIB2Wq9
zAINEfkb?-Jr5HpAaljySsUp1T4=p61NB=={8>EZ_mn2HCv;QDApel#j0TqOt;D^Ns
z$mx8b12IcW^5LCf6kYa8unXEC4u+ToH6OMa9=!GgI)Z>GUm&G8=s*!H*#hEfq(UF9
zeum^H+_gGHKji!f$bffHYHog6Vh(Km1th4Dx@1Tt5~93;sDg(*#8ikNxN6bVQ3P$@
z$}iFY-3gaslL}4G)+yTBnxH)oNI5YPb}d{<Q6}t=LC966;PeB_!<wiECm<EHpkRcY
zxQoSKkUPXc<|3+fP@xeHKAm2#peVm2A2dS?FGWCe?$AX9I`C`OG{Lt_K$8N*77ft$
zAILEi2$SJk-IE~E3SB1vI|>1|&;aG6_+;c|k2N)k8qu+uh^h8u_<nL7c%J~;tF=l7
zU3mmK2^A`&1L@mXA#^z=6+?DaCBs&IfK~wL6sP8;q!w8v*~3>-g3oEda@c<XczLRl
zPIXyo5$K!&D<wlcLqk0iB^~Gi_0X03R!TORc?G2<c1k*stt_Y~{}*KDfzHYYZ)>xv
zPA<(UDJ_B?GM|~8pI2;E4cdZh1v;f0#Mdn;%1q2l&q>ua)Gb!hDJ{S%lc!XxlbM%X
zlnUyHC+2_-*w0O@0Q*EIH!}~y$SciFN-c8BFUn1Xo?j2@_FEYm=zy*T0bSmfk(ieb
zbxUypOdGaC?m@$g;C1AP7>6|v;ODYyfN$o3<Ot~CkX~+L1vKk}j$ro(-`lJKzAgw&
zU1lB@bs%R#3q+WKAR$d1CD8de;7kI(cms4HGMERs8w1h~gsy`DUA3j5iL_iPr6{o+
zwm~31KM$ffKD8`0ucR2}252)GLm6a-L8ls0QkCZA<R_+Jgb2)HNQvYKUf!BmT9Tif
zpIeZV3OYo%7QEvuJ+;Ic9Hx+9LE3c&8EZ=d9mEeEu!Wil%~cACkcGC<kdTCgyAmj9
zlwy%~#)0}gpyqa}Z8BuVcZ#MpXl<GTXwz>hsKp1_T>)ydfNm&E1uZ^Fs?~u829}F|
z;B7*18qrA9gcb~-dzC?{7%Y+qZoj4GmAIs)C6?xtfXWNV6(CBWnxa5SCoMm@6veyX
z$OD};oS9z=J!KQ>V@UMX>Llfq79m0!Z6`3KTyn}OEwTsuFC`Te&X8t1LJoGiI{11J
z%$Nr0gd_%-Ltt$@6sN#^3@@``tKJedL02q*&%`RvNKHjLqzH5?K{fnPEJ%S3%5Hg?
zdFik<h|rsT5@GlGC>lb0b|8fs8cB8r;8A%^EpSjF=LVfbO`T*=?=2)VH#NVs1mXvT
zJ3zukQ17CNLfT%Koky@8Ad4X`1arYrr;(^xt7B+j09wEU3MG_CuGLWjn-59|3VNlP
zx?mGhi*%DpOG@(dln~Jesv)6Ue!&}@L5UQ)1^^n?NWC&xlL=JcgU`54g_gV4iLk00
zs!0!=u3(uK<UVk6f*l5r(MJaR3!$u56S}+F8oHDgYAi8sfy`FG%!15RK(#|sFlay&
z)DK3=6*|d?wg5DK5Q!CZITYA^n6ZOBb)%RDJ4y(es**IJ2QNZQEJ`g%O)P=j(G5C9
z2HMaG0iXD<sh5#hjI{p+QVZ&q7AR?gQ=m?gCM=>$3$R8rESE!4Ln>%k1FJgZz6`Xd
zLC`fNi6yDJkW`=q-E<B2Be<mkx_kkYlOdTuo>H$`fz2|2`8X#vu`Cs<XP}<0)rkky
zFNmZLDaxUVyEHQx5}c5X2TLHR=O05<=z^ORpu@m1>kl2J{IoPBO}+A>MChLAc(}<P
zCAm2onwroVb`98`2}q$356Ov8HIM=Z?g+3wMfo|YN;*oQoC{G4o7;x)ift32Jr^wb
z8+ve)Qb}SG_ylkz9bH3BJ%~mP%z=yK{Gz<nBHhHC95g%N`-bd%6H7Aml2bEtH1tfh
zV8?-IXljBMNI_;oH8kxEka$RHbiipHR#3vO;DDCiP%fxuf>m9JD1$d;kxc-v!Y$1N
zoh9X*pOR_~y>2ZDCZJiJoLHQykfIkFU<FOgVC^U=&=7PKwxR*}GHZntJ@6G=I2G%n
zsfOKrhEqc_c=8R^3a};u_8{wnE?-gvUEqq6rVzmc8wFId0d3e(0B@_aRYw%}pvz$(
z?O+5;7c>%|npXl6LBzYdosB-o3_GP-9i*g*&8kF9d!W?{$VgCf1*N6Z0uT>sK}nIi
z9l8@i4QvJ2edXZBXt5qhtXQwKKwC-OPEFa;%+$ad>MR@mL^~VeYzEhPrJ1@=yOT(=
z8>AU#yBUh@pnw54wGd%~*7N~;Ju@#I((8iv<>2SlCqjyT=#k&h!C+Xu3FX=vLaQH`
zVW7$fv?~Cd3?M})k^?})>6+Dvwuv=0pu-$7+a4vExv8)g2bc{h?l5aIlpJDW05-T5
z)SiJzfSjX|gr&uk4C;Y`WKmoNDQck&W@x{lrp5qL%t5`1#ph5B(521btA#a^wG$!M
z#=|>VkP;MX3~Yo6<Obw661-6ek^t>1ss_8mD!CTYkA_(f?WZI|!yRg>wl>ILa2pYx
z!&)Ng!4)Rv!1@Kr_9(}xBx~9yYb0q}fy+_IMb}AMNm@zzrl}^nVA{Yy+t6GqN#6*>
z(6j<&d-$!<2>T%+3$4UJR~<mE#YVqY8q@)St+!AB?H_?Ppkbx(Aib#?a$5>G<`I5|
zorwp!RT`3hp}v5HbrN{IN72?cMK3oq&mK%#8R#V2Ch8{XBtv#6K_+jL^;5tXacXKo
zXq`mcB<*CKM56Bx2k+B?*pyhIrj}@z0_s?Utc3RYA#$L5z!Po24gtw!=2?L*m;-fp
zP`m}sT%ZIBNx2$0GccwExP1@q-5~cWpvl)3daDD>Xwc{s*e=8fAIL3AI*Fi;5@I|6
z$#FVK;H{2I&`}c52xDSRjS})e23QP|AYnNdyz&*2KVhwzvP4iT2o_afS3sjLIx*HZ
zNeA4l0}CVT01L#Yfd@=9k~KAJAwwFV(_?CCz<q5f6O_^+4pCFXvEKn=7Q|^unwmOF
z;CcqE2{srEX&M#lrDYZsmuSFl!UDCdKx)zMOaq$-^#i=lLb~NGNw2g3TAaYl1s(fE
zhOwaP2*qHq0MzVw<cs#8%_#7)s6?2rAa%cnrd~;YdU{SOQda`pc!%rJQB+KV8VZYp
zf};Ea4JB+UU|xdI8cFsrRZ3P$sd=E2cOe%X!Uv;@tuhhQp@?CN(t^|?P$yPXCmtL%
zNNEq=u0h|wlBlKz9&ZBqFwqt=1f=Jllb-}WCKcMEgvAVUQniOG0yW2rQ^7}}Xe8<w
zLNf|X4>YxFT4^VOhPEJSEVI}z(N7~$(;ifif-^ECU1D=FI8}iL-pO+u#9)m?)Fv~s
zPf%sx?gbSu(4jJfv!LUGus8+p<E~apEXqvO1y_c-nR(C|0+|1EGxKzi6(m-mD@d$B
zR*;up4pjh&L~L0fG{Tly9F~}qi84TkG|~We419Y5xV{2~Jg5Vi2%AGhX%v9QJ|Go0
z!n5F^9gv~P*6=ifS}Y}M!b<OC&^R0ThzxLEMlm}Xv?mHu%^;OOXxRf)sKJl9gN8e}
z3q$ffj%a;MjC^MZ>#kuNy@XDFK%~GOMl{tZQH@hBu>xMgL5xBq5l{p}{SNPh=oO`c
zCx1W(?x94uW-WL)JG20MjxR|q2rYnSc~G$(igXh(qFex7{|6dHhL{`=s=_oh5<!O!
zK-z(@qzW<t>N3cH7^o@(3A*H$=izh!ND|2jATCl8f@T=#I0n)Jfr89Dm?Lz-Nd~Vg
zKx6y(0|A?dK)OJ~z91UxF0937NooN|66P8d$AEN#OaSL66mLO$s_?la=u{YFj5ZS*
z)L?Czh><XzMChhdJb4>B&w{WFR(3;1ec)*Z;{xZB#H3>E6FNDGl~%?E20G9nwyK5<
zGC?L%lJj$N5(|nmlX6l)$9RM13apgCD<+kodq~0avQ|paey);EMrI0ZVkINL9AXUE
zNZ3`uI*>U8$K;aCGBhzC(5wQe*w+EiFMwE}6IhFV@{<#hhLs_WphR1JWj!qweOOxu
zc~lKtFzKXNgLYqnH}ry5GHECpYJ!e**2^eLO@rksjYJ(KCD1{DIr+(nps6Y>vesNB
zMU~abwkfH}`6;QPL7vX}xdr)osd*(D$(psv;B&cCHLGhus#372N<mfyO&m#};YQfW
zXLg2aYM^WFQ)+89G<D)3o1~Fr8RQ|zZbThuDGQA+NGGqTG!N9Kg*QCmbx=wQq8S28
z1E667NIM0=!ahc!gxQV(8K8@lB$PlyuZR=^D;^4p@{?1Gi$g%C6lm%s>w#k*x_B!-
zGcU6wGcgAo`=DcuK;1U*;o%y|@N@1!B>{qGo2XZsmswbvilhRxrXe{IbSZQ$Y$Oom
zIK8yYoD$HTb)cps=*HPpU3i;H6KQ@3o@+q2y(SgwW#*-%R)EVXO-((}`AG1!1<+82
z`T=<`IWaFeBOiWQ9b_0B#iyWqlcC;(g#k2!LzN}M2JB(yxx)Amd1#>lZDxToga+Ik
zP_94@NbE@kcAgc~^=K(a4=E;fQfv|FKe0GNuedY`(i+q-MCsUq?xF=<fD3gMIM7j#
zzDWk1kOWQRi5jV}u~Bdx2P!0r@^gxnK!XA)_8LjH$*7m`f^t063P@_#1KR+JA8_Fd
z<|9WlNB}-CuBoX59^D6-QB$J}Iz<J#%^IN@GWBO~0J;TNQzr=;ryBU|OD)s@^<*IC
zff_Tm$)MJffu^R8VzQcA5_kX}8YHOc0<73TQwKD;2%q)@Pm{YOmLwua8zji8OA?bH
zlPHixpi_{Tmzskt0!<c>1P59W9{^I}mR}T-m;|X=AUZ)OsDc-UmLw*5r&fZxG6?J7
z<0|kA6CnEnF{YX{LFXY9rxurJDCJ~=%Sl8)LSiKubXcyU0qAaE$OK<J<c4F=N^ZZz
zGEl%(;}|mr-;$G^S_v9g)(i4<_Xx29k0qmsgU4`Fw6(1v*9&1P2o1oZ%g5C%#0q?2
zb&9SoPOYwfE>_SfFVtw$HN>gM!{67{3be!pmwSQ(9GzWZL*YpnQ^HuLEWr_$SOQ)X
zi|C)nLxoc{QZyk0=P2Rg>KEb~L|toOjepca50uhVG_9daKcF_&lI$^PILCvhD*aL`
zN<ir~MJE-s+aS55D90OgS4EOuZfZ#)m<cNEz%w)8lA|~^CpEbwHAP8BDJ?Ol7=9ly
zDEEVol}kY>XOL8v6qUjiLjx3al@B--;~1BPcwa*atUOgoCq)x_yDxYi6||@j)Q8SX
z1vwcbTR{v)&jR36`5>Nz-l+jf^PpZA=nhg?76=Uh6&IK(25ct8HL#gp(0D0|B`A3t
zQkEzr=_Tfrc!TcmfX~*TTM3>f2@Qabk|UBF*h<v60t-RHrWjhI=o*5GZ}1uuD`G7J
z<!3Uj(>4UHW`S4-&L;-7I`N=t7Mh%p!T_}G57r=5NYOx4_;#RUl#*->G<6K@Am?*{
zQeZ9U3{FrR3))NpCo4!rp=)TZYY5u?s+XAuX{e;Y>S<VDz}gs^)|yGS$@WRwhE_?s
zuv3;5Kt(@tqDQzA+=qt76>N+d$vYY#dB^|+*gdI*8i|^)1fT;Nf`AYDU^Nq#fI)E%
z>3V>p5E02qnpUvUB*;h>vZ~_LlF|Z~%wo_GQwnG-9a6cV41*!HAiyIru#qrW^Amj_
z4CD>e24s>Z=sZ`jyI`RSN$B8e88){A7D_Bh)d1DFO5k1y)IP9I(1>bj0k~ELUk(RK
z8ye8dK)~G-OvR9GtYAq{4F$?h#fhL6RaI&*xTwj;y67g+J`vt=(2rJBQc+b?*U;3`
z*3pa6x3adewX=7KiH?bliA$)isjZ9EPuEe3iBVBg(zH@i!g8)Zq$2}uc|iRSYo(PW
zCgo%nmmtm<RI<uQEY?Vj2K8QILC1tA!5hrBiF%-Ra5Bm5-(;kwFC?YKqqg3YpgA2J
z9avj9kcJ32hG0uR)zmO9H-!2IwBH;YWf1kC%?1$tpp*e^*?`(^aGycN>@{Exfp>8r
zCfFuwXhK`nh;$9M0l8q%0M7$~_G%mGzzotg)C3n^pn?n36-CbZkd_VD7>G6C3tk~i
zYz}}19rDN&l#R%k@WBq0d<C`x8uM^Z!#YynEC@~3C<?(j07VsYdPY$SSuFrg=ui#d
zpw7#OE|-FM3R-(YM=Rmgrxmoag^od{Rum-WrKF}P!Np-K9;|c?VJmOI4c21t6$D_1
z;A^64>VZZJKx;KXH9gdJ=<%zd6JSeIm0-p~+zC$(V56a8D62?7zJqoLKs{VYClI0#
zwx$GX50WpzjRZ_jLWJRd1Rco)wiln5pxaF#%MPJ7!F>d2y41o_EXb{(#)|<o_>mTn
z7=TJ7q^yXXjzIMkq|87nD~e&;2%!yG*!dxl=zxq8Kr<n9v^71o#3vIx{el^Qd5LA9
z(8~ZH)23ULTAT`A!2sohr^nJVD?myhg9*ABsfj76MIZs_LICjU7Dy;4frm<UK)wT&
zXiA!TpoLuNpz>VFP9Y~#32FHpbcq5ufrE}LE-pw+PDS+GL7P9o^^m4sX0e76wr)PC
zeFa*MhO$Br*-DTmP{`{-LJHKP%ug;YCSWt@L|0JcqjiYzI0K|w543ty12jko=7Fq*
zgg!JXplgaip@3GpBaU<it&fHzV`vi`DU`vd{y;*x8WhS_pg>mAfhSo+wuE>Vy2KRZ
z4seYDYa$^UNQoLsiIA1YpwsATk*32y?f_|og&Q={LhS|JNtc>e0v<xc>HtVW1eMp2
z(h}+*$a-G5JCfl`cXiT0_ep@x1lEL(|9GarN(%6;csih40#eZ8Lnq5N6A~Vfc@@Nn
zgLRT#d?sWhQ6ojuUITPFa7JQrhEBR|D#~yNcwaxP1p{i1X(Z{zqc;vTQZ+R-tu)ec
z*#=tFUtNpra!}Vg6SV(NNm)rd9n+FjO&!pI^q|vsYicw=XA3}w0m1!yjdYMSWGkj4
z?1W=b$G<o_Sr>F(9C#!Pl)XR~sUn9!PG%WsVOv3dP9|stHpm!A!xqxl0Gk0m$RIB@
zrx=v#G}1IRb+SPB)PS#EKtwxeb^{)sI$5C08Ib3=;8IrU(4sUaF)1}CCp9IhQpqZ#
z7GyJ6JtSt3By}?2IRuhQK+ZrNx6}nofKooRzyaBYx~>XxCLFAgM=Er{T9q_)K+{m*
zY#5)PmZp)6sG>lr8n&<nESG|igC<iH=~RR?*z98P0%%aJ04h+Ci)v`&9&9T#%R}3=
zC<#m{KS!rD2X;U@e9Hki<`Kpv!Fw^F6Vy{O%k1Eu%}i0!Ny3&_!R{k2*id5|I<uw(
z>T%WTKw8+a-T;b|5Cgc7kv3Qr4LV{Cl$c?I3ebRrN`n#~=$KopBwIy8$ju?3YAqRb
zBZxJ0gc}qs(J8Uu4MgA}HUrR*9%@%iCkcESD4N%y#U-@!0uLqdNCK?0rlg|;uHQl9
zWXZ6(Iz*zwFal*$11KxN4T5fFLT|;{f;xUkO*oWL1A7*97jqJ55hr*A75SV<M2!dP
z16C(TC&k(-L3Ss2B<7{$q!z&&M&JYsPGGPQPE3K`1q%v5aL9nGOg(T~C`P2@JPk$Y
zd^}XAPBnOD2jS2}(6%Xz$`sZlgYO}MX@{-qf=hrLpi`X<9eq@aM+`+GIUl+a1>!nn
z)nF0m&?Q1WxGN3nltMfOvI5$$jn4p`ONAx{OS?!7WQ6}<!=SLX6D(80_FY>mrDf*i
zfO?Nf_8Q5yu<J!MG<A}7A@w*+M}BDu(t-Zq=zvK<THvrT1DGgiPAxMpy;wuZ3ViuM
zPAVw-Cnjeg7H`0MhmbK^&>U3~WIrS95F;f`YsC3Qpp{T+YS7bqARLWkUC^Z#NKOOY
z1`mrqm`jijv4{5xz(HS(d8&P~t}WCxkVEevp{k*1fL?%uQ#8C*M>L+Gfq~Q?OV)*%
z2;OxDHBnO=CJNO7Dq^AgMM1F)K7C9FvKt+AurFwv5jdW}M~Xm`HN+QaEey?S=n^$h
zcQ9E8%^J`}yKoz8HDN2VK}({byMv(l4>J)#5(KmqfTbu%&qD`vTNM1-0_b)F9nhUL
z$vOE*qwDFmX^=e^pkr`#GHlb;)RIxAX)<jy>=R+<+<___a1{X^{7=)=$+CrA-3#ef
zqbo@Pm3Eps*|ydBIVmBDNmeO3`8g?IL#(oN@>0t|Vh}6RKwOASX00`r;odaR1SakR
zv!(`30Vt>Hf~K)D^U^`rK!7s|bmFq62DBdt#jntM60w91b=nxT#xxr=jihJ@T3G@e
zrm)QbjaGwA23ZFk-AIEL5Rk~QO$P^I8l)Lokx>L4)~LuR(o0OrFDlW{)Pda?SW^SL
zAFie*Q7^TqD8EQU33B<fLa3(#Xo}NH!8fxQd^dAuUb;eBQDQo1XQD!8N@`w7W?E)y
zk)9H$r37npf!ziQ1w`?Ma3yS6SUhClOe0Ar8??*<%0)_Y7{i-sdeD#r4Ns&Yt%e5s
zIk6-a6kf@iwXiIykgB0sova6manv~;ER8R)A*rBd1f*Jo@Iki)!mD${onfH!7VOjX
z;z6`Vx(=#@P70{i4DBTAq-a2Q9zl*L(n+@kI|-cXbTVv{^<aq;(tm|}(Le__aSn|;
zXs!bfCqPp^cw`|163NKYh^iG70FZ2e766c{9+9*`NeSnef=()^e`louc5Fyu5=CZZ
zfPDbE?FTdioq^nrhYljZS}i(o`@n5#=tu+7m<D950ooGB7`ds{)JccO9V{^IQOyMP
zB@z2stPtwKX&4kJu<=G%szP)l4M2m=;3N+1CL#>e1a&Gw<2?u=(0&=6bgaIGcmuSI
z0Gd{Dco*E3!}Kjg7~UU-+;|91zM!QiaCf6O1i*ub(8>EGO>0nb3|rC-)(kpm4>S!9
z4MNb3WRT(?A`4n(k^=49qYpQLy48?WiPE0as4fBTLbFQNLD`jNm8^r>0JBQe%gfI%
z0PWd>OnyL|iBveiy9wY%vmv;&Lqr*PE*o-AHaKz-8sQr(Fc$Vg7J!1yfVTCZWfqDM
zY*rpTLakz}uB4r)t)w2SqzPK$2ihN&T3k|;Ux}~~IwXp{2nHJsYolPxk)YxT(iuds
zbTPYyi8(nSc~EjinR<ZM3D8~{bZH-2o~PC@7{vLI#eSe+8rZ%sSYSfr(JY5ZqAeAK
z=!Uu$VjwJW!&QcYSIdA#OCaeC=Ec&yq|7{M*8p{Z4G|WQ5dd)5Lt0OmZ9wQ1xF9t;
z@WBCCcM;SZ1IfTTR2rZL2eJUdlaQ(eX-o?u0Lek1D1-1}-7Js@bZoICA9=eIq~8yc
zhNK4MGyslugo$7-*kAC#!V!iLVQ_~LJb(i850ZFNX>lc*F<|xZG8l^<q(KiXvd|(P
ziwwN{MwNr423Uh0<U5SUE~ujkI`<bG2jJCjsQrAflR>!#vM$Fu***!m9EQv2!28Ic
zg)18Hh)2_Jm4uQu(PUvR1xG<KtQ7!XI|wUc;nj62=*lqg+y%6rhiU{L2M%ebD}k2p
z)#^Z&!Xt_nSb+{Hm0<?L(vo#DbUsT1G*zeos;rXilWi3ZtzgT5Kn-Vb@u-mmD$Egs
z9LbvY(8)GLLjqoKDkLh}+9ug2f>%9)?xY0|vVwvhyp9P;2dDuD9UKC=CCNS+st1}C
zQ3qVWTQYQ@t|!`)nQ0mzvlR`%TT2i=)l9ZkGyq>c3ErCz2_h5^qfK~&4$*~P@nfBA
ziyjuKMd_&;(MhqO6jBUsK3hd6#nys-jp2>jTFBB)M9m8d3CL`Q9<m$2C%!?}jKHQc
zAn6;l6bsyS0uRlCrvN|_@KI^lDUcw;zzs=g?<iGMC&L!JyebvCs4BfyC({=05b!{Y
z61W2Z?MQ-ddI1lLf;R7HD1sLs=%hl^H=-N^+YV~cgZni)=}-k2C4~-Xaeay&xV8gL
zfRunX%~oU-)j}G#@WE+N7Z7w>H#h(*GKy>y^%AoZE5MB@y?78aIJE?{Sg2SdO($6=
z12&)oHdqO=kv=sAeohFeTLUUdON&END@wq}#beI*AUhx2z=Dj?f{QqKixcJ`y_EdC
zRKzd^=!Cpf&FbRR642Ht&^Zk7Fx9M1*8`nWtdR)1f)CM^16ij8cDqidMk;t?y&<Ss
zn3kBCgJLi)V>7{PBWiU(y1+do<X}O{AfP>LkYN<a^e%L*aCK=>4rtyN+zJKFrz>ef
zS0x9h<{@pHNYY7zH>OgNI#rOaC}_1Z$QOxvsTC!uc_|vzS%ncEK~_mRsIIBiNdYYy
zg0#7ik|dHlA#Mbn#10z81v?9^=!Ci)vd$aUECOc%aI|1fP=KZxK*JWbpd%|FH6y6h
z)+@=+&nd|)z_u71T1;A1gG&9>yb^>1A?}0MBhVV6B(nrGY*kaEqy%#wXk<DOG%j6|
zT2TTzFCHBInzfK+;fe;}gNcf*l%m0UW350VPSMbUEhSb{32_Qib#A4V66ml@1<=hU
zhNen7i6u}0NR6+g16qEP2|1uBEhn=eEwe-cL@U+mfcl=Gqk*8F1!q=p0jpC|l$e|i
zTFVX|d4Y)K7o<WC4g%lvlj4$EoLrQdl$zp%)K&$Rfz_bOG{qLQ76B1ODKOPZm7q}#
z&;SzTz90RVVr_j*&|R{n#TgpOpmlDDsuvOox}b6UWLOUg9OKBw=_Klv6lLaWr08Yk
zXXZgJ5CY8$Lz;`&oe7DlWZNV?Y?grr5lM1BXygjM@Ch_I2U!f23c3^*<jv$%jZ_^&
zkl&z=N-RkPB{N-U$b)<cvJ{I?bW%{88Yn(b0i8GxF%qdDMOFd|2+Vczkj#*ur%?^w
zu?ZR~v{C}auM*_!oy<Ha7uFPky0aK`<PcahWb7Bghh_@+;tXg@Bp#Y*VdJ`>R$@?U
zdS-r}EhrBl&(1(+NOSVjLFdPTrVc=gm8_H!i$N!=LgwedkzbUWlUkOTR|1ktNy!9l
zM<`YTb(fKs@k1x!A&o`d#AMJ~d(Z|A&@>15fY*?GNL_(^ehlcmJy3{YSuuu`vOxg=
z&B-VW!;&Bi_M(&Rm0<o>vQmnNG`f^xH8jE7N+GsF!wWQHkqnw51(~S_T{Q->3ZfL=
z<^!$vflq;e)xu%~xwVv}S)HO6Us{loSdt1laT2uk0)C8{W-VxNSO?}Z%u)+vtTpuH
zC=eS~1{Nc%03~g3_D;1;)B`WM(NF@--79HYr|Lm^=C-M@<J2GnxV9;<D*-{PnxNx8
z8mZt3GiWOgvz&&84&=^9@Z5}3VsbW?`(r^x4ZOUyP6DqpfEJocnxHif7}*<KqJr)_
zhE(7Xt|n@S0V)XEBM6N><j?|#4Heyt!--($BRdjwn>Bj50d*<(j9yUwMYt2CX%9M`
zL<4lB9VCt*3+16+Kr9Uadki(`tziS@YHErpdKfOvOaX<mMha?82P*Y2ltNspgQgVJ
z;K5J|@(6fFRVPVJ4RT5lsDuKyH}ybA5`rv%7C^Yt1lY$Q4}q!{>^6Y*&m^IzV;#^6
zfui)(62y(;&~ywk478I6G!>zd1WLak$0J7&$iNh&RTw&;lT(UP^Gb@NL7Me4Q(_S}
zoP$Jkz=2|g7ACc5fduNh!6%O5i&E1wi%U|AoI&n@&axD1B<Z9;GZR|&PtgILv#f(E
ziby5k<~%49fu@u}PJ(ZSfi`ZSy$aAm4ErQ-;DZ|ju;LH0`vq~AUkY?s85D&YNjiz(
zfo#x}Aoz0XL{Jd`Z}ui@R;TJ=E-r@-oPfK|(E1-_8aSbWmm-5*VVef?FGvz>6{r~p
z3MWt(P9qss0U=9+igpkm;eYTYQb;FRr)nf>R%hwur`aazq=QQnD@Y9jYP6)oPn^`q
zf*b_~UVNjIsgq@kXx&0r!Nc+qY!(uHr)&zij|myZ*8`89g8Hn`9xlk;3Td!X7kOM1
z8Vt}VQPPC;7C`$Qz)nOe@HBAb7|`vS;Kmp@#eqiytddc>U=Rt=vKVMj7h1u9nq=v=
zaA!fr%Hk7KklTM6$?#!mP>BE<GzYi2A>B?~u7?-}s^lRp0>m0#*n&r$6wow5UaGxD
zrY)4I0h%R3Zt;LDgoaggW=bsDP!mX2(<;+8MF*+50d8z(!j8UzwF3|ifu<~241(Lj
zYHCSpYWi{D<`VScC`fkDgjD)^@Y#G=dqM}&w#v;fOSMX^)znD^t)R9-N<)Ywlb>dl
zj4RoI0uww*19cT_!U!d^f*SHrd6=s~LeM;bECgCqm{_T%rjY@OX7FZ>)Rf?i{Bqmk
z)Dln7X>6c<<nUYy>YRcW5hCW_L7ig_P#)2QY|?@2$pG~+6ZO(6^fIBwz&hQCJ}oHw
zfhO6ip~=fCy%xOv3Tv^3l20K`_7q#tLWxqOP1=wnL2z!}a1C~L3~+^MhP7HivlVFV
z6wulKkR%E2^Jt`iiul^vT5FI5Y|IT>XM)fB)kuM6AjIehbf`Wal0ZWsDIe0{gXMNu
z{sxs)sF@WsC<ZRuK=UMe;FOk=npl=<s|0ossPhe4xd2*)nVAO~xPT-;uxjvfkNnaS
zgj#U=03}LA1911gRtIbfQjkKz1Xl2ax-j4-0_wa9*chm<HDUK=K>U&l-}0CSTK0h`
zB0vS1Mj9yV7K2Zof}9`&PbOd^k<uOLXmN}h8d@BwsVSzSH!e^GbW$;!B~Z=K9083D
zq>i8lcoktrW(sJJ6DWK@XK@#R)@SH|9TyMIaLEu3EcbxK5G`SFOB*$sp=%^S5t|B4
z8Hhn(NK()RCx4i`K<n#Lp{shqF|7cLMg{PBs7jhTpcyo5X%FH|r~wdXz-CJjE1lpa
z5u^<TDv6+p2$8su8&$|{e`xax;bBmxq&iU}8P=MIb;luL4Z2+pG|Zu?10S=4ngAN)
z1g&WVr9NnILmUr33kxIzo_L3s3CZA9kdXKRt@4B=CD0-`(1KD>0#hIm#-QV^A%TvW
z<T3i5@MVw?9iToUa$gc!Rv{)&KrHAi3v}WPGIRu=R8i7~<a$`*ftmmwVF3*Uflszi
zMrtcU6FI29g0`&`kZLT{p-6}$VRnHW3+vD(gJyss_m{w`HCQ45EvyB1Zy~7~>Y!rK
zxxUrV{B4z_0~NMP2Hlkcs>2b12Rrb}Hc<~Fw<0?`3DN|Fnp7N}6bo)K*6Kj>A+%IP
zF&MO62$VcE;OPgPM&M>7A_Y$@_Bm2eBNj41PIezwCk@eA#oeC;4Ls|h^kYG73uPs3
z_|%UED7|BZ5hSC4`Uq)I-#|q`OMsBO5jts@0Sr|NG8mHEF-jJg3fPDZqB#RCi!?Mr
z$4aB_?^l9V^GGfD)U?bz(7+X#)=SJyu}=XrHKLWW3QJRqDwSeEXK*OxCuOB3mmoCe
z=BJeAq^hamkkCu5D9A4=DYl2GgK=#WHHuOTOEZg7HDJbTf+j;DtA{jek;b{<W6Ur|
zgWBp!rNyZVpk7FFi4rK{p+n4|$=p=XG)rocRbFa2;$94-wtkWZxb+X(h!5M>2yV~Y
z7DA3=f}dKTlL=Zblx3@=q>~Mr6H)>dnptXU+18pV+S)qF(J8T@7AlC=OHR$nDUME!
z)yc9g)Jsn-fu2PSnpDt8(#h0G)znG1P1MK)jRmHpCY6HLuI1+y=jWvA<>aSpC^=`O
zCTD||NM)uefR8>=C{HX_NX;!MsZ_|%Qz*(WS5VSU(N@w?NY2kG&CRn?P|{A-R<}}6
zQrFJXR##Hj)U?V5-J=8YlC`dGhMlc}wPt3TMjFCf(HXHiX=-XppuuNQJ0eXlGeu1;
zO)s+;LTY4zd%;OLsXCcD>97;071Ce@6WC(`iABY!MNXBTDH;%ikXB74Yb1i^t3X*Y
zMJE-qMFG@H(#h7z(aF`x)5+H<uuTL__T{AN6xkZ+fW{F)TjLY;R7#TaQ!-OQ2g#~{
zBN5RnPy$I+g2%%3l(Z8;i#$E^((;{h@{_Z*l{A$!b@FVLO7kG86|_?mG*pnErT{wh
z5N51ZvQEBj9&|m54roR*A39~Hkf;Za4|~v=`=ID3Pb|vQPzp~h0v#D*rJ&^sjsvip
z6txum@=FwwN;7jnO$dcV1@K{EMGDEFTb#k$7_C9!4>eLvO(WM9lnPxEOHy^9=0`(m
zz4W5|(gJ%WFr{Rr1RDR0)lhOtElEuVO<zHcE>=j(FH!)l7llT=66i`6+v?N`Q1_%H
zzo^(MI#vhb3=p%{I^V9y8r<DXvCWGviq$L1FE7@C4d-ZroR?+`x=tOGii&m8Z4Io`
z?9#2%wY4=fY!mfVAX}Bdle?)Y(dn@|nUDnS3{H07;-^3dbe=9~M^mv*x~5JJL;+I5
z04Ef%(hQwU9VNJ1L2l0`q#BZYK}xf1p&RUMZ6TTvMnXKS1e&}7<&n(P;^_2PTMcxJ
zK~V?l!6)j0R8@xL*VJgh*^s+c?UkVOC00t{?Lwe)U3~J(LD#_)Lr!1;l`?thSS^4^
zL2Q7qK~{jz-A6YkOHEA!)9*@o`MNN_XzGCO9LWJSc6739YBaKKlQckAXXzS(GNTS6
zQ58okX((x@Yb$9gC~0TtfwHrPW~^;B#2~9|J<vuPSo*NavCq-VOtDhR%g;+y(t)_r
zDp3!@0QpJ>95z;vaDjv*sM`uF3_$^#t&<9x#Vblo2BkQVNRD-pwrwg*4K!of=UW-p
zBHUT1mst$XJ^tV-L!(#|Et4rI_~paXc?vk?r=}<>X<9+^2t2QVbDuqEMO;oQJg*dM
z!txZf2!-CGkfH!F3RIdxf}~hUyHGDFH7_|MH?b&NBUcll6P*2A^HS8*pmsv?rE4B&
z@uf~8%!3H8>VUiN(2%f24i?1f(G(4E4Fl<D;V1`nigb!~z@v@%d1;yHI;FNHFv~zC
zVhN%|1TjI&_HmVnC0I(tY^)_>iap3INI`3rqEn&=F1NsQJ9;JgC5bsf`Q^p720DtR
zu)?u~lEM*eI-*pBnx&?ukq0joHFZkB>s$gLha!P5J^&>f1RpZws*`1FV4Y=?4NYj)
zS=!o~;CtALZKGpBW0erEL}$g?R_B4v>CDNjN=>nfj;+<nx6O{uid9nsk>J7*YDP_s
zflh|4fpxxJhPAeK2B@wqu&qwc$jkxh(<w?U2W!u<P1JyEjn0VG)X4=|nWG0k4j&x;
z;0uO=^2;^V)IhgrWIzjA&|avbT=0RAup(I3P^ZWiSv)!|Ho63~j=eNDuQ*nxNKd6G
zzuXo=fmR!9<Y?;TfRDY<KstmU)z+FCxC(fmp%9cVK-eR(80<Vy6C?*Y6=mosl%yzu
zy7xs8VQA3kK)KOru^_)@+8S7A+Q6M?ovE#@iBJ)p84D?$!4*IXxW!YVlOCNJtCOh-
zSw{n^bP6Ee%F!v%%P&evEwatfK{r=hJ5v*>B3HD9R^+A8nX&fZh74N6szfIT)V+bU
zy}<VA6zCNtmP0RD1Nj$RBcQkpO^Z&NrcN$IL%OC8=t$YrqReDaOHTu2FLYoAG;dv!
zk5n(Hsc960d=B5L0cL>C^h(zRr7VzSO^pGl*9uSfuo4E+!hjcj3TdFLT*37`$R}1x
zXueWP$xkg-$ShIF09`VWr~s*<?UgjGbCJ@GZGjGQqJsD+SF;v$qkWEVVufw7P6;BD
zgUW71K7mGiE#bTf%CF$&5~92WH(#A#O(Jlf2m3`yJ6~G~)Nn;Bee*!;UG*}H-Jmyp
zXe4W@sez88MwFl6(Rj${xPDv;?E3CR&6*m}kyVKZg=reF=`NiVaC0+LCkxcr1h>MH
z^dKPx+I0v@#xOo~h7=+M^^8U~QjwGd%Z#>#dZ5dBN<p)#pym>|Riu%mhuJ~}*`%XT
zl9r!e0=l;iREQL%=4mLE6oDEt>7Yra;$qL_{5*Sgn@s4L^-Aj68sIHUAaQULC%G7M
z?7TfB>w-@EwSueAR#E^}V=y(E+UiPnHu{-%>Q+jiX-#Out=KkE1F`}S?o3d3UL#2l
zvhXs$$OF6=y%?!On4yym?_;IdCTe7WCb%HOILIXq#3ku@`9-Oqf(~*Tih-3zG9>#W
zH4s5_X`o&NEX0d-vO$BYIxs#o2BNcLL7T?FH&f_<J6A9TA*s0qIf*5yH8t>c;xNC1
zLOQj`GY@v_XHAVprY*WY_$efXdPS+}sTF!9Py?Yh>!d)YQo!@S;NwFz&{cvWMF+!n
zP?W%I1|6)M4(iY4=LLZ;4}-Z{O%1$38C@89k6MaObhb`rtR}cC25E&MI@4)tY8sig
zpe@Ew7pmK&WR@Wk3?yN|!T^*6)U`9Um2C7OD=Ls(1BqwQTsX`j5D{c&B<a9XNvx($
z1~l12jvx2TD}m4Ng2psJtHVok^OQ7o3=KePA%%D<Qj<GHCs{`c)Oz;>ofMOp;}0t4
zL2ctC@S%aoqMG*6hB^j1MzL1W20Dg1MzLVaOY=%>bqztASMrmyQ&YhDAw6(#DGqM^
zgDnB|{Gjq6^A!zsuvHsbYHC@qg{&E{N=FY#uWhPE7T6_*I)-4E80Z+pg3>-(6$%M%
zaQ*}50Z2H4!Wtq2DquiqIYS4uCK5F93)+bf8%RWsvY`BObYnnS2|6wWUazd9RFq#1
z8m<L(lfea!ni_nfI1#i&J+(qf2NVUMg&m;ygE#`LG&KcOs^!=kSm)TlOEK#lZEejI
z+ay@u4s@_M_#8;}Xrzd>RZ`c^(N<TARR?(tTADx&jm`mORM28HC2&-x7U@Dao<M63
zd&rh>3|ZKo2P@E#<4T%Vp!@{3S_vv*4NHHJsXWY53KBHc#mV^vsi0$2bCh&I!31WO
z=H@~C4%+^jp#d#*K+cDi>aZFYUPqNcYtLdUP<evr5@aKF2|$Vwfu)HwzL5@ER|y(7
z0*!D$deNY^yLB3@MgSMJY4D;Je3N7<Y>f$MU#v!&rcMfIy=T5gnog2VDw5$DpkXbL
z!Qj3FX!r!&O$S+^1Dc41MoBR=$RSmnt$}sAU6OSYIEK>@F$~_uqLYeIGAHV!L2Jcg
z9q?KPon)+?Y|!uxI4`FbfpQqOemGbOq<;lE`4H3)17&{LE_mByofOcDC|F)nvQmPK
zV1mcOm0~rZ#=}z*WGEE8&<nbF40N0wXn0j84Jj{ZB-_L0-ylohN?@4+l)NB@z=d>_
z3_$g7B6y$+LnqiS(BwK~aX)-L2CBFYNH=mS$V6^*p!DuQ)jXs(mt&g^&MBaxK_}NX
z2O4QQd7vgmaWPoVFF!98TpDD98tEXOPQGn4q__Zuq+@Y1LfWx7SqC8nn$tqafq1bx
z1-8*(gFqD*NHv@TlGcIqK=#Dy6xl{AB^D>A=7GkslysCpO9!ExSRGIsA_;cw0Ju$~
z0BXlTx(J|V4R~diMxsWxUS48uD)<l@ZKZhdFi$)rM;0rAt5(q1J~+NL@{ty4f|G7G
zBC#T+3lw#r&JRR)9&FYL95tZ8QPP17XuzDQ2g=Xzwh?sb8=|=Y$!dg=1<^*aptCs*
ztaI&Bty8tNK^;INMO)jP=+xL~!&vZ6>1;hv!R4Hj39664g`u5+J(A1e<y(4*hLW}h
zrgB|FP4Ez<6+)9vGH4rTeu)OI(h{>+2D!)}7F;-MYk-=-x%SWk)Jh4IzLTNJOB2#3
zP6LhU*}w#?)3miUlcUpO!HEu*J!@)`L1!za!3rlxP=Uf3R&V7;Lqj4KOW+qFNrDSK
zC43P83Tot#hZ}4SE6vo@@YG63-Y3er;NuE&Z4p5Z4IZ6zWHD^jnNF%LB0Xf-rh|eA
zv@-%~0BBF6Z8~U_AG9t7+yaW$NYMk|bE0jisj30V^g*Blq3n&Vj5I;h0noL*uyHy~
zZ6(myeW6}XVqSV_VtQ(H24W}yk;5H}lQr$ZMWkbKvXT{6HK2?QRRm%xS%KAqGPqK#
zHj)LP;qFX(rM%RN60l*Q6a?i%^?{@y`gBls)q*!<Dd}V(7k^ox!7a$p7N`mUPo2O9
z`4I(Ru5B`COahcu!DV2cZ7wtr!MQ&NoESkepau(Q7$(my!#V?!3$tx=K~oheh=yo3
zXaO0h-I-#O18t=itEuI{iV$$lOihVSiPeN1rkieyMHXaAs;!2Sl6H2qVXUSecwf4P
zew>D3O-fC1O@2+Draq`lNVNyezk~7?`1Up>LnZJTx=JZZR;jjzNN3+F6@x@FLAOaE
z&bw90SF*~oO^38NqcuRXnyMNQA0sD?R9jHQWZ4^9fg&W!-oVNT+2}kat8_@xvW3#x
zhB~QmbD?5b42Bv4-8yKMYHLuN3AQT3KGiByC(SlG1u|g(YT~DYn)5X^2C+I22ZEvm
zGIo##3W-Gc>h`o~!&n`tr$B3yz=_^A)y~$yKGg~&iRqGBL`OXv)N+D%G85I*5~Gu1
z?Lh>5fCY30By5IHAqSMmK!;s{u1D3&EDi;&Z3dkH3>g(rz`mUZrmI%R)IbxwMG96u
zgGL4Nbn+4Dv%pp{B|0CR3Vlm+N-~4<i$G_=f@;QmXlqWV*ft-Q!eHeTXlS+wwCw<N
ze>S8E6I_y5R029*2((BvAJm6|84QkW@6^gzdn3>WcyNe;iwTImU}<nMp#v8HnFSp>
zOa{-*6hr4`@{rw<S_nGuDi3lPMp{jcVu6}k9(YM0yc7myJW%G=R?<Nc1C=W^H5wqj
z(8Q%{2wtL?hRAJ+8t_dQNF4-d&#wSHw*+x8D6xR@FX&uyMO#~lpj&=Xaw^ylsmLPW
zvDOU4z2~63o*JDI3%OW5O-&7=8)PIT{edLGF3SR)bO7p0MuSekD9tO0)iJUIO{bvi
zh)&bViUqBNNY2j*E=bI?Gt>mTBg59vI>QE}87vGgW-#??XMl9qrsfo<R%fPZKomHF
zS6HAp4suk5ogvg{1M3VMWVNtT4&*=3d=L1tnbK5G=;^q~N+G_7Mn1^nnmXBbwgxD+
zL3fd4>p)@&G&T;tkPK#C8nSjfTLTPNfy_m96T}H1aZo9ng-BSiViZ)`g5pI7#IUus
z1r17o3QXH9Xqg5IN=Q7|+S-C-)YPEi1u|6+>gEj4&X+7iDuWCLD`ci=&^Jai)4+$`
z!xJbZPQd{MOQ8@UGLtA;dEk_q4!YSrNmB=VAqDC_=;VSn&K81(Vp8)`oI$h48u^+!
zXePPlfzK@i@8g4)jJX)yM9@Ki;0hQ#$8Kw&laJ^)7TD&4=LbQ>TWS$#1(Hq?G*^P6
zN~hSi2%0!_N<aw#G}WG&id@<$=Ia%w7L}zI1!tzDf{X#r(I|ovBJ$i`K4bz0+5*jo
zOdEj*!eA5NppC)?)+Khy*2&u1n(4Ms9ns0Lpc>sbu|g*USqw2ct&;&RrV%Sbl0o|p
zL30X8wg%S4(C#lN&!*ZIMJIt%ZYG3f7^{;9uKF^e*(4Y|lc=Va9Gw~qO4-q=v1)3d
z>bDp+<CPqp4{{H9E(Vg^b<;3}K-EBst$rSCXgXUXA2xZXlL}hn1<u1IMW7?BqEln-
zHBxMqlJfI&QWNtKV}1G1Iap9N1XmhsuaO77Pgzq7l%>GpXbN-<tqe7-V7ftzPV8YE
zRFyR~237_-pbQSVvkMe^sYUkrddOT2P*CWkff}`WI^ec#qNY`0G^8n6nhTx`(bmYb
zR{}R3l|Xfhl4dNDt`vx_RM7Q(RvJ0BdG^UxX*#*KdG={m$vU7peCR+w!si9{1sb3}
zfKD#NT995VjP*kWYH9_brm=r{UO-WPL26M+rADfzeL-|;ET(RlixW#qixP8`@VYov
zCs8LKbc!P^&a<G`+bR$h`L&wX@brx`zyu0k(4=#Io`RBgkzPrDFgW@&G_{o!67y0N
zQZkDalt9C^3ZUChK^<1a08|=i4=g;B=Yg6(n$^$|Eu{7jXgC)-`v6}@3ETITTL8M<
z9yAvKPUN7q5ty?qppldu<YA|LkX1S<kOn<ydsk*L<Q#X<C81W3p<8fKk%o0j8FU~*
z5qQOwRkC#&_@)ogY5o{R21pR>EWONP#N@8M2FRx=nmXX3FsCv+GbKH>1U8ZfIe;2=
zY_>gos1WXRP$MTlPe~^l=?q-WYKW1wI*JCdnpW5~fty}RI?=EI*MRB5?U347q_MgJ
z_z)1HMVVro3~M;1+JdtW*cJsy^gt=l1Ur=J2s(KM)T~W~j3*Z>B&MVw$vdaQ6@V^O
z0>!NY#KQ`Zm7d^g18NwAomfx+3q#KokSZ9jSOI$AHY9+H6`%)_D1a9Pmli;1$XaA2
zaQ$5Z-cJh|IY~wy=21`r?W}?xmXeAw(E=U}D%Md_01W_vMynx>WN=U@X(O40SYZs_
ziv(Jbl3xJI=ZWdyQ*t#xi2~$buvW;b+GNP!S`uh8Jj85B;5z2y;5HkyA`QFgaLuTu
z>m;L_k7BsC5;V*~afKp-;w3`X60#GTC~#W<I(!mz^a6UAL3{<(j%o|Kzd%V0w*}zs
z1J(F~4x}H|2C$x5O+85LKoc~1RzNl5GauqrSnj}K4X7AJbRcaN4dKoMrLO!u9NIwV
zHh{OiVh;e2UVrG>oUmkx=6P_}0h}>$Sdpv)y5OZc8N3StJsOenI7$$tqLu3@nrdpG
z3n<{ef(8nxO^L%^u-EV>AF#7g>;>%ufZKsm(BQNs8J8XDsU?tt2)v9m8FXt$QEp<1
zMiOL=Iy5}NOTi&*J;*Y9f5_GBh-8f9j$+cCfutK$2_lR|Ei7>x45~J<Cl6E;K&FH4
z$${kyXz5Fi!BDN}CW6nP56K6exe*MyP8WyKDWL5u*a{8E5IiJOz$>mmbuZ}7YS6Mj
z(BU1520Dd$&>^K_(CK<bndzB%i8-*tRzS0E8HvTvNnX(6E6~hsp&s~zUyy4-Ta`hx
zTZQ2LXV!&!WvNA=!zpZ)jP#6*^-Ps?;LEQ;Lkfk^C<m|aLfC9uU6PTSn`)&5b&3+`
z%Eyunx6F#v6wt91pxtkX<^@OuG9Lk(nzvGdo!(Kaqyw85hf9LSG2o(*5){0LK?ibd
z4CLyQ%=|p?*%^sR;Qlg*4cd3_23mDiVx^Ruo03vlSy`#111chr$Cj*=iZe3PK%-0$
zIdH}1omy$71ij!%NvE{fuQWF)wFqjMq5)`IO=2Y|R6%~hXjOp(p{*}P109H0i><0_
zbuz)rG@KKQQ$g+nxdc2c1Mv-r3u@AVRt|&Mklrss4$?^inGKQ!S)K`<%?BOIkPLA>
z_|nN#P}!SU1it+eq!#QYn8u*gV$g6Fhznj}8j^1XTWbqlh6)nNO{`GT0WD#5g{)Ww
z1+P+4VsU0NL>M&5mzh*r0*dp*l0;pQQiu$wxeZ$8Uz(GngWRKmcmz^nfR;pql1O@L
z3AFIAs;){+DoV79249q;q@$FdlA;t_s{^`u5t9CkK|u!54xSaUQi5=Ft3k6}wMt;6
znUFPo5WBz)Tc}zko#f(T$Kqtrs+{EFVo-kx$^;FtLz&RDr36+C;RNNELnV>YFGK-&
z@g7(nY!N7+Q;T%LD;0zC%fV)VCjG#-8{~l7;;BWtpp`0cDI}{wDiO{D@sOMdUssQ2
zR$f}Ze_l={*gU^{P{5-q$ODUkr9HtZ55u*P1POL-K|Xk!D0o&4ep@P35OkZY6=d5Q
z=<YDkfj3~qp#@OU(gGzNw3SR&N_Gk*ptP@0lA)sjXQv<(LLCfQ?g-ZonVq*%f=(9d
z=7KIWOHC?G2c=k$d8tLPTmnkJnW^BM1zE8JW<n;vK}oC@GB*o8Kr1H|C2YWf0$YKJ
zBBKjhK?+(a1`ZWibfPMOiGok_0k2g?lh4lqi-NA31ue)&m4$c$CWjFx5NWXO5T<7y
zHvPKblc$w*Kq(4U9wefq1HFeOGcO%g79kEPF~F$~IR!&31&u3!%SuQ(#8dzhhnN6K
z#+WKX^FT42nxX`X2iUxtZ8a#PfGu@|&2)o1P~eVHW@?I#0>o61`Bvb84af{QRz(o2
z{qiv+K~ra7OTgzSCYGcsl;neLs8mSIQ-II0gY_xtfK)^5!=fD2D}zqSBPoa2jI10|
zS%cC%L>b7};AL*M)oAP7tn_1G^<7M@e!31!8kFrpa-axAkpNvP1CjuhbTPI1nL3dE
zoE7-ArgWXW{Jik|q7*Crm~j1c9nk&o(0xwDR{9#5c?G2<HIU3%lT=z#lAl)tDy<WX
zQWG`xGeNG*%quQQ%u7!7O)bgDPXX=z(LozXMC_?fgiL0G+6+kwnRyC{(9s%2*wt~0
z1|TC*mjolUgICdj=PDGFp*oe6U~@vYN#IdYM3n;`83moM4B6^tpKJx11c7dR!Z`3X
z%^q4qfrb#()UYf*(*RA>ffu7dY=YNfnxF#`!N*pmYFa_3hLgdLfi6v~sYwTOK^J#n
z*`}9f57m^Wkq(;9gbopb&QP<$RIY)!0tlud4WtETSSqGrP-{SzfZc=XJZR`67FQzz
zAKb$LwT_X3#um1mI|V$A4qnm+O+DZ><6u3S&}lncB_-_?9ncahXdxS&91Ge&2WpN&
z_g+LN$3o*r0W?984%#D+G18c>2TG)gpo9HVY+)RY6wuLOpe+?Tpk57Vo)c*w4k%9b
zGE+dSJJX=LK{LjvdO(YUz!e>+iKV87kwQS%D5lz`>Y=O|2kqPf1sZ73u%xIoxdahl
zN$|N*aIXin-wQF`4H=t*T>Ak!-v$&2&^CEB$UJCU7__3RP!BDOfd*^x(c0>^Nji$j
zppjK*(+<>HS5qt01Mh1K0fmd2no@|PlaDKCmmt_ddHE@+pt8XpS(OH;e{2P7<AXS$
zlaru)B)@@H%w?u&C??g^C?@HZfZ97XHK4igB)t+R@UB1T90X{P5Umqo3%UjcI_V4A
z{;iP;pIQK45su^qw9Q4qCHVyfpy60h%MRRJ1CJ}|fsUnzwUQJv5{nfQbBa<EQz{jb
zQd9F3;EGdI5c`l|N895tQW3O`30y1bfC}Zr6ovdE1<*`NCFpQxYc5a`mJZrQnqiv=
zn)d;n8Uwn>6*ReOjqVFjw+VEf6`~brs|dQ557H5~O$F@(1Dyty1i3K`+T2qDZ7@Xy
z4Jd`>=cK~-Pl4MA7<&!jVFwB&u=_zZCTPVUk|p3aJm?sv#GD+^uyqlr5-V2#ZD|Ch
zXT9Rm0`UG`(CS>sJ}*SfBc1#TnyUt9WzeDn@OeO><s2Y}ogs8tKlpGBBsGSyptT8h
zwkEY2iF#>ydXS<SHae*XTKJR-okFp#&P}YaGStb<%(K!pgluR7v0==_3XpJBYEizG
z0jLs7wK4#0^~lLlvNF&q$u9u4_#xW>trQJwL7Uw`I|oDZLHoNPEYzH=1G5;c1kxl7
z$wyP8j})Xay3oU8V9RTga}tX|i{xr*G(bs1(H2x#fV#H!N(xB&bd|JI^`Ko|(6JDZ
z;d|R8omA*pvuy@qVHITc5Lh>OaUkeuwxpa?aK}VD9kz-Kw0u@cM=8Asw0R$74x|}Y
zY?}dDgPRIpz6#2ysYS)0b2>onfnv~QbM~o-!C+g^qAw&q#$YhCxd1xI$_h!HtrEl=
z(A1_4-a1p1n3s~Ds{z_J37s}EG}F{8&dE$p)i44%0XppgZV^KkA;Ov9Z5EJ~!mtw^
zAd9F$p#<6PW}AUnzKFV^I2E+|65jCvuhxSY1-&!?w4q+fN(p*H81xK%<f904azN{k
zK~{l^P9$rR6T#zEO0W$BYHAvw+tkoKq6Ak5s?gK*GE+c_LN7A~v`Y-Oz7iS|pyh;c
z<)Fv|$2P>hkV9#~OST}lih)kDN&#n5NCy^_-$9%GQo$8EqVZ!3cRRSnq68|J!2N7p
z@RH7C&_Ro!Rlw-_YHFa(Ae}UgRM2pJT4n`g7f5(!N=XK&s6(08f%d>PK<l1$l0jNP
z6(nNYA*lSyfsA(4)PTk`bqc`)$>0MAL1&$%!k6QKx08ToVL&+%qXfd*BvZ)H19?nC
z6Fi#?x(m)e70d*6@@z3At+LeAGQjt3Lv*3?z#2hjfDT0hbD*Zc%5@}bKp}%V)Tn3x
zO3<L>57Gs#{Ok<uGf-C+L8i9grt4JK>L{k_fodq|Km}xqO9Q;307U{+o1<B22u=v7
z<6|H{L1%Kn6IPI=3))CoRa*(%#Q?2DKo*7#WP-dvv?iqK5zT7wC7G}jkyG`ceMOK!
z5h%QnCka962+4V%t24lh#=t?3tPymO703j%LzY233`A`T9^KRgtq?QN1RdFfS^t7+
zTV(q|H8Ln^f)8!bfL5)LEyw<4sYRfJU_fz#Xkvh;cOi>B5fi+Lkkpr?ql8(bg06so
z+W@lwTxa9lnT(WFz(oKkCP1S;kgYeM79Ds=8fKS30g_O_u1!r*Q$yiuBx!;gl&JX_
zQJ*JiR)Y@ROafif0q#nHXE1cYOF$75p_#TB(8>w9EQAeIfR}W^t_=cRqX-%W0ab<?
zkm@TLs!$Uo2kGf*fc6`egNhXJIIo%-sO^Z?4rrEw^dLbOVXE7}%thZz1rrDFr2?%{
zfg23A5p>xM*gueJ1X4vRl@wW}Wfm2q?)5{Qlm<S49kNagyoe8Wzyi{W)>P2a;&e^W
zD0fMQhNgb9mSL(fsJ)|aXrQg6s-%+%T^ytVIu0l~KL>PbbaHXA252y{Btr?*d$Wc+
zwV)`q0MsMM1f8h{?pZ;~VNjzCDf&PYRG^I|;BGNe*9^YXHd###GzP9{YnzN7)#*B*
z4ZEOCMc^GNS+;4Q+n->YQgpIyGhu}@cvu{iw9rMOQ(|jsvS7F3U@UV_(N<TA1@8+|
z2PYEHxhl|}yF#ixh-Z}?odvyGC0jEVypT8pG&GP5TDy<Y2g?B0x7jfJG9bGaK>WNE
z4bZvpuq%7uC!HimXT;WmG63eTPoz+UcE@xuRzE|II04OG6o80A&;^E|WlG7m2G+?o
zup1x2%b!5PnYKyb#ZRD<V{}q%4XjgaVEF=ksUvuQdxmXhbPBlZ3)+^MWt#z7XOx;(
z;+LP23fj#M4s4xl+bnG*T_x>wXy||r<;Va@gO)+o)EMgIg4#cjRgoYrQryG4<@w-U
z@){t@HX6D$BGm@Oh2|!0L)bP6T-u{kV>PSuY*QgCkipCF3qc#>@?ghARzunrkRxoA
ztnxtTOxR{wXKCj^_h5j+1-t2>g<2Z<pk-Si#}(Lum^x{;dDeN_xprybO%4U1{pv~;
zO0d;D1yF~BVicu7PlJvVfaaw@qZE)r4P2t7+9rW^GC_J<po5`6eNwa?4v+@3rggHt
z29jIhnFw5{g34o*${oBGE)A9#;VwY!_k(o7c4&aEY6DeWD9b&;-6OZ0{KOIs=&^Iq
zwjZdG0^g#E+`7=Tvo)yI1WnI@F1}0yX994K09xKcE6~imbZDO;xfp4IjwWaY4OAnf
zFeX7SDBPjOhk%YCL&`&-k_f$oNresPq=4?TM~N`-S$&Xe1vD^=a^woIII%1>w-UUi
zS4rPa9W=I+2<kkhq?RNmXV@p}K^PjE@MBOx18o}M8wg>0iC|R%axX;}*<jEbW8}+*
zQ$Ya^2_D#C-{@U<L(mzSg?f-?52&Bul%G<G6d;<_prHXo(t{uWfv7`4w{(L%p#iR=
zK`SgE4Pzuzbdo`1Es*3KZ4e7i(P=vAwxB{?Cj(wZTc;|5##KODob+J(^E5IL9Xq7X
z2Kufp@R(d$9{6Ow)Z!BRWEe{WdO8cJZD0jI02x^nyx|!#tOOoogN-SvsilFAz*JL9
z)Id(2c-;eza?l7snyp5L9@69yI1$4|LJLs&;5jE~n-+4`q5}BfSa5oQZvh8)bRlb)
zV51EnW#C%|kX!{a8k7>ir9%e1*9@A90OvA|WLR!TlLXy+4T?UHcOf*QX`BjL+X@;m
zf}CWKYn!M6>c)dkrUsvLr2rlfs4M{Q90V;xRn#z4w6)bp)ho})OwOpON!5c4y=$te
zDds_UxPVR$fQJbz3~InFdxaW!IMmcA!PvI8ws~r5hQ{Dw38=w%4FjFhjIAt$I}59B
zNc3o`silK0f*eu~Ne-Z^SV2pAvFZcO5`se?);s`pt0B5|vTbuQM~a}Q>KlTN^#Cnu
z2b~6E7;9q!YW||$AE%)SZhJtp4D3(<&>%8&th!jQB(=B%9w~aTRIFK3lM5PCg_MsO
zpg{%5Oet6ba+*T1257_tSq@r5*%^Rz!xced5I$~TX8`r5Vul{tN(Ac+$icp#u05#J
zhkD==NO^KbDs+Vq=tg)@Q3yVFv$(__R)IkI8cLw)Q_y)ZR{9|xH6bq05i6AOU-$)P
zRxsUgN5gdMWZNb~n<1H?hCBKWN?QZFY<t)(^eEMqRkjYOfdgw(MrUB`zKjLkysnr9
z?h?c5Ni{Xlwx2A}Ug}zqeP|&Bx+4}ctWlZ=nVSNYzMy&kJSBKHHZ><TxdhxVQvxk~
z0Y#ohHRy=JB3+0cCD{2{zWG(5#i>P*r65p2=%{yoQ3-hc14?-eX)J<v--C-RYs7+D
zP!lmzBSlju7es&uO5l3|lF$};L5@gC0T=v`^<9oRIS6|oQzzgH8d6~A>shBDEgJ?6
zA%oI#T2X3o26XTMe9$p?93>63AsuC?1vJ?Kiw3Zg0+1WiHB!J6CZKv9;tCR-kb&J4
z=r|*aVW6dBC7_r>^980`Vdn|L&#o&5yEqTL;|$?c&{{==4dB^9a9s(h<k4(_uNnrI
z?TAweAWH^dn@}|%lU3mEFK7b>=;|A=n?a{CfX4qbQ;R{j34^8*b#iQBT^DeB1e)pW
zvytjgP#Z}}(<&R<#4px>3{)zC+9l9a6QI3L&>>VwkR2D%IiRiIIL$0VGq4DYY1YZM
zph6LTt*@F|4tN`qM!IblsGFJtazGyFyho7k%)FG;3XK9yolM(YJ;W{z&{2UIw%O2}
z4?0r{+z&;}4uTuo8Jaqo(HXI}X*!wFpuQyNRGs2j$k9**pdoq4h67t$P*{Q+yG6y(
z8L{B;9?%>uXm}X)6sBCzZVlhW3XrMbfn?Cd)nEqbFs3x{VN6JBz-Kb)psZyF-3D%-
z0=}9L)c)21wMG;T?LiCU({xfbtw8I^Qz6Ya=$cgIbOi1NLUK8z$_DSk(J9a=vc>3;
zra<<ZfKnH9H~}(9pr)p8Q&I#iZ&Sej)F}qdQG+r7sFE+z1f9#10&2y>PPBv#52PTr
zRViwusHvqWz-9pR(-a`5sj8_#CQx8$4t%6O<X&xXa#aGi*<fdvfRY`^Ua%<W3Tfz!
zF}#<Y1e<|_jZ{G|euf5)LN0i6Ujcf&Yq5fcp{7D2)F}#(;xxYqv>-jTC^at`yj}uy
zMx{bYMk4HtE94ou#FUiO6wsoIl8jWy)QApfeoezj6Lh$gf=7t25BMP1ymXMFq*Tx{
zdWeQZh;oJU%#sX+{Jb2{Nvf%^i8&obLr};Tqvd>1j|+KU6Ev4;YG!B@YwDzH6obc4
ztW!a|1VNqEJX^$>Cg4L7AaxCNk_9{q0j=Y83P4A&K#K)vHbD+^NbZL<8I@oIOrSW2
zW(3gY4=59AW=##~;4JV#YI$~<;Dgz~qXyZwDbbm+kV9#qN}<QrA)RmsI%du)1(d-v
zHFdz7*+GX*fz}O27sMjvY^VXX;4}EL?LggiZOvTJQG1v<9ARyAR;*4I+JS0GppvaP
zwWv5c3tyIohB?R;$@!qO%RqL4vouQH1~~zoy|JkW=W}c5!EQOAKm?ym1~L;-W<fTZ
z=4#f0@;a#H4Icb~RBhlD(1?r<s$x??l@c@pK$kK>nb7b7#YG}$8a71(RwaQZIzTlL
z(pqj56CuS0(jY3h7J=!`woL>L4<eQ>>g0e9XoaRANPOmjw)%mh43w79({3I-%O*lg
zi_{`}1XCkRCs)%d3n>HGgU;av<$c6F1T-+9M{9zP0<cn20*|~Q&iTwlIy()tl|RD<
zcHRkit8HeQMyhQND4k`1`pJ+Y4>B|hKAaeG^doqLKqE^Bd_$B@vTYuy*hfT_4rqG~
zL@RhmH3hma8XCjN(dn_#@KbFe6$+>g1qu1oA~iJ)#YDY=#B|UmNGJok?hmw$Lro1-
z>87U^LC-1&iGi-P2WtS|FR2MWtsA_gUjwUU)`jp%3{Xzi$kIszH6?2i;SEYMF!zAN
z9yH6I3Z7Mfm877fhm?X+K?^ZTAcYs|F0o9|Kn}=ZFmq~Zzzs*(J|B%NO&#P21z8E5
zZiH`|!i-T+5(U+K{&|Sh32GpLas;?h2|B+HTvH&9Yl0gG(g@uGpRTEsrID_atf`X;
z+Mf=pC!o`Lm|YWSo&|SJz=x=zI}>CsWNHa?#&9mkK(JR4ZDi2Nji9O&HNk@Pfu^fK
zy1*LXVUrF@5J)@XK>earjdXCMx+t}{B)<r@6ALLAkg_Ov@djdq20X|Qbv3w|h-Km&
zbZ!$Q(SoxKXdpNpx&b!DHVu>|l0oN<fwhCWhL9-`$oL}Sh&#{$VBouJQlV!zLDynM
zC&z*v58V@h<Z8(98tCi<n4>{w@1ZQu*Q^G02tWt)K>7pVc`;Cm1rHjfg2s6?l0YYD
zf|_aIA%D<$DBy#&K=;DJCPF}Ng;iBLS+<!l@gn%C10WTtMM3%Hux2x)hm7o1*s*Bo
zppF-$Hvm$vlWhwcFa@_fK_@Fh>;bLt1+_zwX8$1zdo`_-!TS$Ei9Qp$-Cn6Q6TEst
zNhcjzmKK8sL_veGh%ydorqnY<Nhcbv33Nyw9%bN#<VvxcpsR@>Q3!4UfDV?)f_WA^
ze*~Vr1osW0TgRXjsF;B=F?Rz(^C@T-AgpBt6@nJV;PIRMJkVlOSf+q!0@Vm0aah_X
ze>Y%uYGpxDYH_iGk~Y{E;4BHY*)=ak0e#zv0_Ntybi}YCc*sU44O;Gk=BA*-gP=SM
zT6Uxdos3S!SV@93BnLWt1lBhNjb3VG!@?Spu%IVsL6V&gQj&tOK}TbO1wqSjA<MSG
z!wDd9NSXw>22Ij0KQA>FvKbPxvk@}b3tH8wfik55a|%QTd|DNFK?dlu4)8r(U?HUQ
z%}R<&Q<Xr4HaG#Lqm3d$!vnD(9<ouhv;Z_v2aOkuAxiWR#~+xWQUJN^17&*9l|Jd|
z(3L~bc>-|x4~jwUbV!#O9NOCGtCi9rtCe&hSrOFkLR-+MXs83dDh5`tK>D#dSf;8$
z-5HR3GSE(&1-k_lO{qoT6@1{8dypteQG!f?g4aXqC1;f8W!vg&#A!rp$LPk|YuH=G
zq-be^C_NAZBoLkI8Viw)NzvA{*R)rui8H8(Hqf<9)J==kR;d9A>!)YxfI<p%mMGZJ
zVvwmZF$Og;F$OA{`f$mN)CyaD6#e=jogl~hLH4F2ifQo1*UU5x(9PFL&>=nr1916^
z)+W>eog@PG5~!V*t(O5l(zF<Kg)n$77inS{bogsYa)t(2k*1EJ8K^4`ZmEJ+-X%dt
zgpp<KQlNJ0f_p?Mc4<()f+2Vc4|Jz_Q7UAJJR1_EI!YjK8^**KAPt{G<%&Vey<mwF
ztU@Q%7Ig1DB_?Fq!rT9_bIo*M8^b{(5eC*-u>MbGnnt>9X0czQpGI<YW~`<?hy)#l
z01gDm+!;s++;zx+s!Ro|1d(VeK|)}a5EIii6>XtfGT^Oim=yTj22cb+&#g{}PYHsj
zqP4+GKtZIYPKI4NG>{>Io^F=`<trG%rZ2(E+mRBEV{tM{+5uJapdl>mDJabrwni~J
z6@2>v=w$!oSkMFkXg5n`NIq=&H2CD*M98`2pq1_D=TxNGr`dzfoUqbOtEtg7v;wP7
z!mr-YO4raTt)|8hv^+S!s05n!;bU@0-U1c11M4raJBjucG!zQKwFb;zNjiz(rWnXy
zpw;Xs9)i#DCfX(08(JmVC4#~e9KGqOB_QSCIbIY!pzY(CX&T9p_Gb#{mNxrDXiwA1
zKqt*MSvv{brUWe<NVQ7=uNX+v26YEB5{sPkQ&JsEG*aL<wIyk#VJ53m@L(JEWCfar
z!k(}|ZCdE`IH*MkS^OHE4o_pLv7jvsc+yw~=*kVWvrsbZGeBWtXr-Hhk;ZVT2dA+N
zP#V*K<iJGGB}<8rGf&~63c8X8v{*(5q9zHXCJ9{)sJ8=JDVeAXSpWr!Mn6dK;7FbW
z6+U49BBxcnp#u#~s)bLIE+Uyj!v`hRB2v0;5~x?1oRJ9Ht&v*fT3DJ{mY4&&6W6vn
z(Msv?!ov#=FFL&V@RB2~hnFhpI9e$kZamy@xan~7;g%yUhg+3&lC6{uFF(?Lq*qDD
z*-Ghf`;oRIJxV&MR!WCg9$s;H)#24gW*?cUq~mI(bhz_y$KkHS-A85}nW3bUX{B^{
z?cp^?HXL4ec>R%$N;;laN{4$7_Z-=9xbJYkl1{#r(&5dAHyz$`c<bS9M|+iY{H>G@
zPd+^9@RY+-4^KPVqoh+@Y^8K~zLHLGu$9uoUGtQ5O0AR*?>fBm@b1HVj;>eI3AIu>
zJnQhx!?O?1Il2zK=L}jsIwmKBeF$IO0lPa5bjohDl1>Wf^j9oF0;)3<3-#ck6$Co7
z9MnNW6#<{i0$WrB-V>Fgi800ux+*tW+cqUSDHhbah1mu+5^MnI>T%GSOhKvXt`!9u
zO3_N%AjR5Bv7lAqN}8J1=q>>d??9C&gVbr(W~PCfg(!wY=0y`BN3P*>U7{`M+BZmR
z0NpB>3qiLR!<K_2f>ILdF=}Xu4m4j5y3aBRG(rmLZ-b6x1dY#vy4)$yE;pz@9Gwh0
z9}2XF6jt9RL+#Nu1lg0Ak^-KxC_=IVQU)jKfDXC`HzE)>gr$J)1q0cW1X|+-J&Fpx
zkv%#oRxdLJbz1<)Y79Z}jwnS#P3siUND0i2g3@Bpq0mrgd7|x|gD0{i(6D4G<N`E|
z{XaU80xdnY1mZ2wi3=!R%S_XNpYDvb#SRpt*nAAGbC5j?P6<#K<Mc1$C?wRtfW-lF
zh(V(Rv=5^Y)W3raPoTINemDSR02fjwWh54(D+TTDs)lYJf-H*Bfvv(*Q$t$kg~EZ3
z6M$yaqe1N@h(l10tUz%LG^D_p8?w$Geta4%VWdD42B<=}g*zUULz6+%(;11y$Y)$B
zfi`A<#IYtF)E#9|&n1J?2;%e~=t_HpJHa6Vaw&Ma$~GD5Nw`Zv7sY{3!~-=a(xA-=
z=;lF4sDcuX23#NLs8t>CrGMZp4#i5Dc?zICZ!iTg2Y@e20<BC{GypAMPla7Gu7jo!
zI=zPQ0gBUgQZUwvK^7f@#>+wXeLz=U!g`cC1-76iFZqy;svdZ+4QTfosQao@WE&j|
zDsUk^RPdHG)GjJmD6`lR<e1F7bcpwh)zlP0Yr5bEk%AVdz>fh#xjqDPyAia!REmiy
zR?^OghBvs+jL{#5?aBo?QAbH5Iwq!EH&$CyNmCoFTSqBfNmHi)+H=bTHDGdW5nM=t
zn+88$7kq|s8gxA+%;I85P63^_2Dd&>M@hvHRNjM6yF^X8kl}fdhtYxow2}aBsBNNN
zdQobD23!EKjtQLLps5pah-{J$Tq$T~5p>@x=paC--8D7Qu{vqCuw}U@9swPkj*<s8
zKxfry>g0h>J_T(l&C@F=%FHjyEU5&YZwlwwg7%pef!2-YX@U!{B5=bUvAYu73x~TD
zW`<1?+yqd=G!f3TwY5c(GO#iP-C2t`MG>APphNluw%~zB&J~ojHInU>;F}0C^U{^9
zl)$5sASUSeIA{ogwt#^S_lCx9hAqfrI-uSqXwiLUicS`2vjW@=pwswLp?mdoG?Hs-
z6k)*+F5NO?L1_t12o%BSdm=!U64*JAya3JI8lc-lAUy$19kA;`r2xn=Ss+8;t{^TX
zKrRArN&sy}gq)HG@w5_XQ4c6=G?H{OKo_t=4*}DISPjitP&a{gQYa>awgQ8XW1+-B
zu$&G(vJc5Ipw(dD(~98b4UB>67|>|CrVczDKu6X>!veB<1ax>xPHIVN3YG+*fRq9h
zlr+Jo211>Ha+h5W(!~{ccZ^^;v=E<qo#dJt#E2YxAR`5`F{>8)(WY3-3q#N}7j(xe
zXe}5d4S|Z4%w+J6T%--9wK@h!0j7~_3rn1^iVD|_f1n%$8vHjv%|_^<n5(U%01HL%
zy2)I7&=KBBN}4Evnym>sjS)PihnOHCwnjp%vIST7poO;Jnl%};;41@B{X;wR;MvR!
z=xiovJ{01<V$gb;H1NHwpt}hn#W(1}R_Jn%WLu3yJ>;Vrp`+6}pk2%06(p!FE$D!p
zesoN+POP>*q$td=MGU6d8dzsQixrS7P|I4-8KI!LAVf(H64A+orgzX~Qfg{SkP%o=
zo&#;j&x9=#Ne3?`LQeVW;B{2sjIOQ?GD%w<7BA|c$rSJ`6Y7|+MvA>sP%3!+8mLUP
zQi2(wq^YeAx&#-)7}z`m`1)O#OQFStP725xNJxVUo@kKnSn$o85Z9(a7f8eO6@$Ys
zIaMQF#}GWwgL=Rh;j{ry72vyEAT}54ASDMKPzes{yXa(rl1es`p^(+#h^Z*3?XUtw
zNwXGQwSjIg$b?2>Ms#Ydni`0NUVZ|aHik`$L4|eFHEj$u)zq>e$qOn9>HtEb5|ULl
zl60~VsSCWg4iY@}8mJSjNuWYQ(NHH_Qzsd%$^gwSf+RGpvY~s-(o;(ydz3&UHAr3s
zjcO9t+Cvmi@I5Rkpq5`^PL7hTt!=VSk!>~P7Dvc&_uy+CRlry5f$oI_EwF-AA)wYE
z#(~Dg(4&kqZHp0W@uBg99L}INe!6WjWD+Af6?x%|4(JvDs20$j99htPDtVylF~c@J
zIxSWw$F{&e1G?VcK&KeAm<@FFu%=Z8=){W*+l*+qSgcMqSTV>?8K7$pK`L^=LZGEQ
zNE-#LGQcb9kVK$U&H3QVH&ZmKL5oN#!Fz|SQgw>*%OT7(SU}}~ufNRJ0htRmOa~Hj
zxuCryd7#{3sHUb-1X<9N0!cqPpcAa&*Dq#+cwkKs*<4NdXk<}sF|2Ta6$|h?5y8uJ
zpjRU5DkLW57lCg>MoBL4YrPefz?m^UwFESqh>?mw9Ukxv0N{~#@KiXocd3v8Eq?7m
zTR-62eC?5U{DO{wN&|N!G|+bKgUeT}caA}~5vOR@)L>f<50geMn>FpzwP72OK{|1$
zvI6zD5cgce>*Q3>J>==ywjkOH)b_!m2DEz)WDAJ4Qc?h&>jAD@AU9xuI!h^_4P>D9
zAZUCSB8)sr1n$Ow)F5?FG@}h;AwdB<EJjlkbc+MH;sno><>%%m+Uo1*r^AI(GSf3l
z{POccgKa@|QB90qEQV|<=mglZ)R5HT5?lSam}0FMjcC1?lvwQ;q=`0&K~SYZkm)Iy
zYN&Eeh<ZqK4LtFKl0v{UXRz@zcxWbpd<1Ib!^S3(z!P$y5qNNC9a3a~_Pv1Hp?auC
z_JK2o6}G5PwokTFG=L?)B->Pb#GDv>W)T!#py@O4VpP}&8F=1L58_`?z=0INJ8@`Q
z^^`!nr;&9)LkJX@kP$lQ2sozg5F4QCp&_cHqzmpN>Of~0!J!D6l7)<>r@&7$O477S
z0S!VRSq-w%RzEH}Mps)S);=ahJ6bc=UIj5#3bqewkF9>Rj-I+wOfe)iWEQ)C(g`BE
z5GRR1EKbz4hxr_A49G5s_Y#rL-Npzduv(~<pkM?gS4CUf#M;_g$Xf0s*z$SM3_xm;
zHF#Y$bZo5}Y1$dIQZhfU7<`IPt)@<SW?o8uIjBccoS&1briRJ~wf1XjG?G9x_&iH!
zp$9sP0m=kP*}~YMvJlPzFRq32z)nB}3+QayocwfX?>-uID2rZRez}IGPGV7dX)b6m
zIu^3YJtsdMSsTnM(1J6#Qq5YOB*Zn@2<7m=S5g4oa-{((7eH2N>Vc-OGILWkG<6dZ
zY)x&Y++s~7kYVuARE=uL738qX&UG@2t>6Qguvr7pNE;-xV#+Bg)#`wzRjrgjM~Z<C
z+(-fq4nhVsA*O>Rup4Yp3qGtYu>@f-=(r;A;<i*<&<#$Y6;80snGD((2TBM<nYkLN
zdXS?FK?gnACxZ*_<iwm*q($gf$)IiH(6c1+L6V?$Sz-}V4u?(*Xe4Wb6=Qk@l5O(x
z^S~+8RzEr}rd&r)Ax2k26O<z`{0dg4gyLCvEGdAxVc`6u0U8-a4^bqKCqd7*g5+w@
z00HQpW9Vdt2B?GpmEtg0fijE^VoDKI(?E{hL>%m&YM*MA3_DaT8MJN<Qd|-fhE~b2
zV9A5byg?!v5;Do9MWDsvmC(Fvs}EYSp`)h&2^>^4pt1l|6KH_ToS0GrgG6JMm{KEy
z#AGnX1WcNONh5o`*qUfC6R(<>6zv#IP~n9U6EK(Iii|{CjYLqD0$LdaDbZo!3eySo
z6F7L$<v@OcmTQ`L)9}!V%F?2ofTH}8{N(%`kne2u<1{i#N(zeYYtl*zYSJ=uQZ=n&
z^kek(bzp&kqyrjOw)(jBpp`kLMLD>l28;P17vTwSSV^UTNaXN328(G>*MeeJ6O_Ec
z(<CXN!=})SGDr$eNi5E=)z{TehkHG<I3HBff|7GewMlJsjDC!6Y)neEp^gzM2NYUp
zK8NZh<a?+x+`di(twjJerBiGZ?O|oV24W5m=5dhgb(Hj#G&QXfVMQs*ZWNGD)YLMI
z-9V#xsTwJo_9=*3!zvL^_Af{+0?n-2>Z>A!4O9>mWw!bnF)1;{TK1|nsvs&RMH5Sa
zKs68w5U4Vcxv)S1Eh&X`<ZKL0G4mlfgkVF+_NZAAGn}C2gHnY~vL+6HqsL`#VtOi?
z!$EuTKr<syi$VKPKucvabJLM_j$%3%vep4MEtaT}0^8jM(FoqZ0=nP{R3qwT=B9&|
zGS<{6CFYcX&VWj)h4m2?4KONXSSl__g{FK^yaa1%L^}q=`f94^XTsBUX|Yd!UOFg2
zfP&c&)J$~Ljf$-X9f49Cqh}vetPM@&Iv}=23@G($Y9NHIVp6J&YBeB~raedoVhd;i
zA5M#mAQ=gidt!>Uqmirx+h+ng@f4$kN4OO&0^p?qEC(P|f_()`J)k2bAVGtwzzC)Q
zGm^k5il{sX4{OkDj)IC2EwW#6Mt%{fhYjtLX~aR}22>msBNs<tj!CU%4Oj`JyaJ1X
zLL5akIDbL{1#UV#(L~4S>gga??QkU#5s{!Y1t|bEAtr(n2grORu1PI6^CNv-Aev2T
zk<_AT1#__!9&jh%N(8todZfk67_|l5Sg7a01t>h5z-2+{32$lvokj!h&_b7-q=9Y)
zvxVhj@ZchJ(KL9dCp86h^Ac#iKBQPvQ_BSHY(N}j4@$GpVHFKfwuO(sfCgGLl65km
zTM>#uJDxyGpi?1d)`Q9j@c0Fk532~$krsWxvJ2_qf;e5@*48%5KHWAQcYsDjMCvH1
z80)JT>VtBHl~PJdZf+&$WPTF#8tH?&zg9{heV~*5K?93f;B$rW*c|EW0?Lf~Dn|M$
z#*jlQ;MHcjrcN624oy%Ih*T%0Y1*fu)QQl-9be@LI+YWYK0qxgjc5a1BT#4CD%wET
zG&Uwhvj!w&h%6LSY!5AwHKAoPT4e(=5LYUP#T`fu$WpwC60&dxrP-ilWME*RZ(yiz
zV5p#^jafN@QXo7ls2EbcKtuB??6^Ku@4^apY#mZ)^$9AQQxW+KwAvQjx-0TcElC8O
zY5<zdw@-zPkD>@dZs`TD_*8=B4sb0DbBl&%bXqLd#!zBP3Uo*w+?|H(Khc3rSzB2e
zVDxg4U5mbC0%chjXy*;=o&g=DOeN4^BcS`Np!<|TM*t;iAYI=CzwaA7BB7*-7;A=X
zTDJo2g3$wALy}xvjC#5zWbO%c5)XLqn+Eds!7N(?>nxi*=-{k%mbNx{?kwHbKqu8U
z4>XFMg<@3^;?Olckd4Xk4HV${p;XX8Sg>{CI@z`c);V_B*4ZFaK}Wk5YGiBb<U*2g
z8mRn(uN2X&sY%z?*2%C<S2eP=wKah6S^=-%&`8k(hkbO0y`hx>=zeV2rP&Ax11m$&
z?kvbe3S!tH5j4L6UA3*43dta_vKqFvTPM>NW<yO4>OB>j(1{oYB}gcOrWMj`V1wD<
zQ?Njr^^i|p(n!?F00mr{CV1*59T8KYE-7e!6XK^#&}I!Zjp?8%Y|!9Xtp;Q(xh7(T
z2WUrZvL^VH4DkNz<Pym7>hKdNAVX+1HPyA&DWEHkiW1XP5razLg-AN-n$?h<?Xc5|
zG9XKOK+70%K;vV%@X;BaJlk9~wOr_wBWxls-!@%MEnTm)I5jx67<8XZa7jMMqM91;
z$`H`bmc;bbcno=arD7EIN>)laps^dMb|swxTTrIdDTJ60I+L{ka?}>sKJe5znjKIv
zP-U2?3(gk0U?EVIh~gNqoF`~19embnq6X@DxSG(-;RTvHMG)Idi*jmekgW&pOGUFC
zB7|%?NCd;~G|){sp&;|Xfr;RPMkgWj@p=V`B^jUte?jwN`JnUlk~B+-Dyx&C^J78x
z`FNJ3=4vR#m*f_JPQp>rQ39=BQUV=x0XnD}qzIDe(bQ?yCMSY6rW9*dgRMrJ<OL0S
zYUFDxDP$Ha<mHzrK+ly<1@#~mKxfb>B!Nx|0BsY4tz-x7<1H#q^$Pa)Q&ZE(wg+vG
z1{cC05e<-Yqd|+&l|ZLofdZns)=DE2TxREIXQqN@bW1e!qpf3#YiwinHFYv<5%b%r
zI+>c<hB`U628y<}8TLq4X@Cx}sHs6VwHh=jrjZ63<^i2-r3qSw3UY&*8i)j)3WT!0
z53*!FGp$ld(_SMdx+u1$229yj*J|p3_|b)+6Ed>xp<b{Bn*!IRk)vs)kp(WjL9GX!
zEKsC?&OO!0LNpz;jSWqW%~H)k2UI2JgZyios;y+Jq>W(~yalBnqokj%qpqZ`sjXzK
zkXliYS(I9AtE8Q!SCa4U8v;F*87v7(A-4KTn&5Ml6bv-2a@5p74z~vp(S@;~Ss+-E
z0UaFINy$$Jk4PgIAy|qJv=Ml4@sR}CR90+Tos^$nQe0A$SYQPijfdViq5#fPx=G+u
z3_yoJfc6CIf<mkyHAP7WdSbE_{G?^*RY{=xh@j@_LiP(nZUg~s_XAzV11iD5cY8pD
zL0bVp!r;3&QbDW?(81^+2IwM<Vi*H-0vN;yxN~(u3Uo{JKqi7*1mc2}flUW-bdxhu
z%Zl>zbV~~q(sL>cGC+a|7LqjNA{LNlh<iW^;nJW>a}c@^EEEMwI%%1p^JKsm!YJv0
zw$_3-=z`o2;eZay0edI4EHw`#oS%{cic_7e(oA^BmuBih)-fo+S-Q#jc_pcNB_NUH
z{Gz<nBHhHC9Ha=qPzk%7#!3kx1&In&GeEpz(9LGL(Ay3mQ345O2pb%h5GEvKlyqP*
zRhp>_(F_q#(t$=CTpY}YglsX`DWFh=@IfIBv8FT=5{=1;MTsT4M!I>r#Rw%}+fh{*
z>gFNjAx=V9P)u@MAc6@R)=E0y$bowW7CyDLI`GxENucJPPIY-vVnIP_5j4|)(_)b>
zR1h-Sj@H72@1BOYF%2=>nBcvNNG%yi4Xy(@2Pa>rK&Mcr$QG7`b&73MV5b8^8kH%?
z8-$_94T7^XsOMAyQVmHD#i02fjYJJ>>Y*w?I!bL*Af-i3jZ#)=rjkyXZBcY-ET|mO
zDTht!M3;dVfr6q{2f_qJ50nYo30$TJNh!#ieswC4w1d(IEM@4F>A|>AV_;mz;$&nK
zz>9QJU`roR8otG#S_0A#gB+v?jU6TJQqUO*5HH!<+NOX`^2o_dO$h;A763ZG4jM=C
zpaq(lsVOxz8mW3{Vz!C~I(fE5(WsgsVNz(T2wF&neCAD_rcS<Xp?!27B9I_Vu<syD
zP$1=D1`?>OD1hjNg#kE_^H4(w!9@)rkoH3Gx!#cWwLvT_$U#dKQlYJGgIIW-1rpBF
z1C>&s;Z)G^A`p#+ST!1=Ys^ncf#?IJNoZFGey#v&^Eeu6O`cwUN(yqMYU-4M9f0C&
zZScAghy+MMehO%bGRy;pu`v1kloU<SsvpobV4zD4;58Jg<#~G0Dh$-b03R+1Nh)P9
zaZo>}7`m|@BBg;E+4g9u3QZbpt`%q<Bq&5R@*pec!J<gkp_x$%T2HU7QHG)z9(+nA
zpt?i}biM^NX@Zk1EPLv}&WKS{%RzKWAU8Qc+K&)_<mrKo0oPAp=YUE9h)fwm2Bl93
zJq-dSG+?HHD>fYFfaNrGN>DUvfb#*Qe9_6%1J@He`AG2(3N#D@A?h{3T~Z}*E=n!Z
zO-sxvPE~>*{t4OCpPE;aTBKJ}49&5S{r%vJm=S{Ta|*$?H4~)+(M<#G4gz1~su_)B
zBWN5e34E%Wy%OvMSS2gy3QlnFD#dD)LA(q0T`eeJuwP3AJqgkpblfRu0zywo8(iP$
zL2DM+^%pfY$zUPRyu8#R4RxE8%reAb>?k@w%R!4vDsxh8l?w8UGeP%HSQVw_B$i~B
zrCMjCW~OJ9SQ#1^s9J-MXa_Tu>}>Q?GRy4LLCYOdK-C@Sjx#m266k>>a7TfPCDhCX
zj$x2+u}%S6#3Cm)unKTk=pYx?8HvSi;MP<z=nT|i<fIHr1t=pUa7Vz~U+6B$gP#8t
zlwS_A3Y55z-2m4IlGFt4>^HDZvjMGN03W0W?*C_zT4iESr4Xw$FivSt(^glCRR{I<
zAW;Si7JJa4?kG_Y64kUy)Bqh+SVD#c&|~0ra-kzZYHAu;DEYEnQzsimph8n87c_(e
zsyAUrgW97ifmGAQ;IOmONVkR5{NVa2!xkb5uhNmua)tO4WUgazvZlR8x-GQ%0ICDA
zG!%4@4FhSh!fF_(GKH+SgBk}C&>>_VND=6`5Ll)Kor{!>NFo_v&uM~g{X*+sgI4+|
zfmYpDg4bPZg9>lR(Ky;ji+(gRK|8S^<uCR@s}%Ic1+?X73mPp1b-Q%ZZIe+NDX@kZ
z==^E0jm6RFv7q?{2uClgG!uNH5K_&7o^v$82g8D*02Eu`Y9|9+tb&3Ai3^I6Y}*WY
zV*^PwC`E!|7fA<9$gw!t8n#*-T=t<HO9MJqA8G}-SqiGqprtje%>^2*O0B8UfSy(a
zNiZNkq!yuOaM-K~X!SYD*)BvC>KJB$dY@pYWr4{IXnPDap$qEYflnKTI0llNL5C`#
zWE#+wPau^b2_4wkP4H3*6h7#7g2al!wq<K-;u;wwx?7Ld-GJN+Pz<_K6ta`c%Gf|B
zAF{*Hsv0V56|GcIl$o1YRH>w+RGgZepO*q*m!uYzWP+HnnDeRl`Y53C5*)KS`Culb
z9jH@an*vT^pi}&H3T<JR3Fs8rrh=N?P}hJ4XbCw-rx?CJOxF<H2gtE4LJZ`BcYvhZ
z<U@-(>vZt&G-#7qesXGYG2~#pWSxA_AZ|Kj5I4g%4Y{Hz0`HMRubnf~G_q`=m9vgg
zUVdIGXxT4lC`}Jsx$32478m3sR)WUPY_kyNp+<R*rcQyHS^@ZSHjQkM8$j%6lu_>@
z5Lc(r&QKGw88O$^(7Mnr*E&~QTNA1!7qsmfsVP|$of}(IQxshcU7v_D@SF@eI}bGe
zm}#2|TN58&0?Jb06}I-#N??vcNs&@4=o)JzMWE&)SP|#~8SoZrNJ|u?7L@N`6P_9w
zwxHTJFGV908W%cBnn(>vj9@5)dCmatIavO|tR@Sh!9IpmmWc8h+1onk#VmRvMNW;G
zpd;Q%NOR~D1u1&a>0i`dLMEs*Qvs)bL;`?>7fQ<oe6U$Eyq5wy>l>vo$%M5>@J~m8
z=8jVfH87_mAZ>s2R18hP2-l&;OD3qjhmlvH^A?)0F-SsVj^LZ_!Jz=EV?bv_R@Z`0
zoJ=k*wuX<Qr07(`%Td%Z6o{}c=(tzt*cvu@*jNv&d19r6I0y`4LQsCWM`lW@l~P7#
zN@{K@XiO#<lz5P5{U9ol%1BeBG7=&g4~{9&>2lyb4B+M|M9irYvgrn0JUp``BRDe&
zeDyiZjC@d=656%}tyx16cg(Bw1r6sTOQh!HK$L^J@i5iJ(B?6c7<7aRs<yfo8f5XQ
z70EfJDXCb*OHzyS5_6D@fS8_|0v^JIabV#a4_WeB0=pa@A|DT1Z(Izyv>hr63Tg1*
z2a-=fVh~ppBLx&<9Wato(CvW1sfk6&8AyVlvxXhZ5;JqGlpwa~!bRY21g{0n$j?bh
zEwZXEhM1rPyRsZS)(X)Y4?bfL#mS(nNHCoTF~cP_C$ZAX*uVf5s1RX@@>KBJL#Vls
zlbD0^ON)|IQH?K2EGj7mr3fU?mlmgj*IK85)_)+07pE4Lr4|)u!lDgy3%H^o%yMW<
zgO-qGCRsryr^*s@N>ky%fb5Fk)B@1RYJQQGQjHR39S)v4)vSiKGm!?&ko#buh9ziy
zA@tmzT8vUQ33P%pXyOqxg%6%?gx`OtlMQA<8vr@Bpsq0}7r~BI1f9hQIfD@@f-DI;
zl@T<=nwJ7TK3D+~)R2=OA#Bj8iI6D4a#kYB#d{F-pov~kMUGO^Dj|Cqc4%S_d{8V|
z54x}lbYUmt9urWL5ZXZltrLW``Jkq1XzD1YL$>@w&hO2JwM8<twKYLgW+>Hjk`B01
z&w#W=GI15npw=+RqIif;z?oH34|D^e2543a&B#p9RI@c)4>;9>u7rV48|i_zHRXV|
zr=)@#+F+x>%5;>Hb25{&K{um-rY*tCinO6Q4|E)0t)@<rEogKCq{X%x95_}`N<S_}
zUjuX=U`&jDO>|t0eypapW{kc@bZ%yPY_)-oaV>b+H@HBxLcY;e7c3N%U#<^L?5QbM
z`Y@mBLzYJBgPfd}nU|VU16e7ruajDlm|S9|uMrm=qZFfV8><akpaW&9XzHiy<QJqC
zC6?qD6<g^?+t}HHR>2jPrWRFNDQOhefLWSKI^~%;DF%jC`Z4zU=@5=@eo?BGevB4q
zGgWDR35X4v&C4wIOHDVl($}!FwT~&*(giP!1q&Kk>1)`41wmqv<tD{e)%it;ZXdKg
z0y;JanxgWH5Nm!?^fDo(iY6$_fdf@9zbLpMC$j{yq5_uCG@(62(26wB+<+~-LIqW_
zppk?W$c(p6jxG2=^y1W%=<HY>(9}O9K%rB$u(d}}TR=-x;EuqhBp-e*2Dsr3S}&0g
z-G*76rI(jlT#}js@kTLdlpHjW0Zt`KO4=IG<H{k@8p%4jpbeYZIys=tec&@Yp#cE8
ztQ<pe9;)IDTP4um8FV9I_JIyDffx(AfYur`-JY2SogjdoBm%n616<|WXILr4DQRbD
zE2$`<pQ8dDK8nwTUruhXl&J(7M$$>Q&4k2DmL50}f};(V2`dXyi#3vUK)0yC_PwP;
z=j#h#tDzJ?^XRp($@lb{8b$a~g<u(-#Jm)Ii6=2H1v&LVq82@I=zvZ=hi$m31?|%Y
zB?|DJ6W{~^p5IRaU3!5yc^@tA6Z2BQsSq@afh&C=)D+mlR~v!0@`4gb0W5)JV<r&L
z^?^7O2sqAjbaEjvsgn)MAy^YgJ}7}86ldCMU`-(~3w7X1K`8{(2nM$x;Jb7nMFQwx
z&fsdpTBKt+VYvpZ08~tX)o3Ycf>Rk}9RWrX%LFH}OcIk=hHVxkiDlzXV%eYtqv^Jw
zD?HQeGpy3p)H0w6t&qrsX3Yhv)YDTd5Qz=ETpFpIf|N#}<tgw>xS$CQypI!>OTfy&
zHFY%f$|CT%6j&Hq;-yxkCL_!Mo%xNtdJ__E;DAi4se!AD2b+Luux%=M#Rf!&MryQS
ztWIjQ5$Nz}&^^ykr$RC&G(5m-qY!y41(x$5nGI1-z}mGMDbRIguowp^LFBkpSZdT%
zQ&R$s1f=R^x`JvWl;RmQJp&%a%d!RC44aZ#0d5pQvt1Tw!+J8xt}(c=@a6}y_28Ne
zG{vTq2^tE97VqE-AawF<bD--VHL}6$X~4%(f@UUi!7~$}!BNnXoD$GBJS9-=4lQr-
z+XOnN0=1Y;(aF%s0xy2cu~mXp#7gk}zUiP5Q(Ifx^qLyT*3xuM`y4CKI7_yg8c20&
zQD!nIxFC*#sRCC5@ai3D2OQ)e0DBGi$+ECewugl`-1)F}8uA7^E0`+K5uYdlouQMd
zsc8jTXbRpU4__mmUV<%-?Lo@`!O2iBy(AT@iZnah9IG_D9Pnmi&_=%;tR{h1JHz5M
z2ZvcXcD89&Id*B9I^ghBw6)CxU1Dwvy6HL{HR0yvmw>A=MD7LeNJPrLdHF~VftTRW
z3=BG%9xetCN+m@la4G}&8k|<)m3EpAtaSlRd@0dTfmm=c4NZayFdu@mAfyya2M_jR
zF7yT~0b2(?h%?<@(ZCA610Hmn5G=~AG(ek6A-PNs(&`7@4FXEf>6)542;GYClhvT>
z8et_A_)ao#U(6m<Vy0T9+S!8ct%fcOhZF^1_uvjrur$O+@PLB_rY&3q9+W5n0rq7Y
z=)|kUqGD*zTq9X0mB>I%(MyDm6WAk`)`4QAD8C$h)T5@It$|e<Xjua!lu(mOQDR<t
zD#BxlpxsVL>7*ndk*?wXfcZ=Zys8#_=N))pM+Y=725CoRBbu4u0u8Pgtszm84{1lh
zl1Q3u4rqo6wm%kI_5~Ft;0X}O5CmjnEoy0$sFS9X1v(=IJYJR)jkG8Mr-`70dWbU-
zy(on)Tm+Z6@KQC^7DX6hvWAk9HpqWEnL3E8)Ij6CpgToCg(^6?rosxqR89MIt5ndr
z#LzYF;7fgwjWUeIVN`}KhEW+-shT>9XeBO+BSAYRVRol$!dMxa_8Mu>1G!UR+0Guu
zf~RS00c!<Qr2|^W4{<mozS6)YEhy_kO4@Wg(4l5&w&^<Qwi!AZwrQF=sdk{1xfyo0
zsh}8#R3BhZWuT^DP@@Yu0Vjj^=)kfVNY)>zOO*_-q9JuM=*}BRk_9;tT&|^nZi7z4
z(x6P#f$IkE1p>KC(^?VPDnxEc(*&I_iPHN4U5Np@xUm>qINPULDaC0hX{Tu`X{sne
znu@S8C$(Gw+KK^9no-&c)j_-D2v+i8_Fy1ISTeL}iD)Fj+*O*B1Mi(c3dXe3s;Wxd
z!4H;31PVO-phXC%sR%x48=9`5V<O<}4Qq)M=VT_QY8Zmn4x{JtbWnukff`WY+i*dh
zT390!Qt^Pg8_36PCPVFsPKmX(wFMo<q^72ks%>isKQ|{8Bo1{3sM0|+4#EDd)d3BB
zA^ZzI`UW&$mXny5UYeK=%J!*{b7B?2$8lDd<Xb6~<SXfbhTQUtl)ybWrNq1xrCOb2
zJ(w=Y$r#{~GEg@aa@HnjSs(aR|Mb)f&^%2V(xN`-94hi4l}<V=ULn;WXt{C`<XU35
z49M}=#35O;B(=ynzcjDJ)&OA^Tn2Q87wF6^xLJvL(1C8qMV<LYwrC3(K+95Nb)rE#
zb)eT~+bSjIRVu}*BaF{2%_+$&$Vr6^nPWFe%T`HO3DqDiTO}QkIeE59F)`Jk#W0X|
zSRrT_2Xv%otrB8oW}!|scp%9Nv_lM@t&)q2VViL@5yMMJO5h%a^r9hSYdVRLd-EV|
zpVSm&GnF)AVv4mjKpS#k@v4_!q^(q=TZ1B2lCQ0#2~w)51la}zsbo=%0!eG&(g)WD
zt~*imfrr_OwKeRmaA^ivnhx501RX0t(GIp2#j%NbDcVXkYHDByLoJ5&>`}BLY{so0
zZZ~9*%Su0{MqdXy)I^M7pwI+6q$Vb&25wkpASl+6_2)stH8UNn4Cts=Sij9mKQ7wF
zF4opwUkB32x6-!*F;hWhmX*Gpt-cPV$!?`@17bqOZEW>*piO8i{kRxKeeeh&q@J<T
zkB+gA(Tb^wg@{5-0txBsz>7mG{kS^lNF_u*+BQZhrbaPVzZNv+mWG&0grq(VC1~b`
zEOFCOfVK!AT=-^mM8<;5V?vT?F?6mLbfy@R$*@`4Bt6h&XrOr>4M=gOlSTJo`84De
z$`CIrC~4}zi#+fh-dTtxcgZ>#h@lKycvc0?DuHL3K&J_yUeufh={17x?AAy_zR?+U
z3M}k$Cs5Bg8PbMB*bTlm2y}HAY_t`$ltZs1A8~yT+<u75!9|5mo~Dkz2Batk9l24G
zTBHfReiUj0cr>H9B)=e_D8C>PbRbuLo(5=#7&tmyQqvMkb4oP8m-T7tK*!p_^Bf3Q
z+H1f=2*Z`&l>i!Wr>TIdCD0TfG)-vgl_lnAC@Fy~gt#&@FI^*5Cps2%!WhIOu6Zd)
zc0tn#io>ilGHjI~+L2UdSSdl~a6qT@fR0~9l7l-KR4-^KfsQMMOztUxPKwge*MR7(
zNlZyW3okV_bW;^=Z6RR^YFR;Uvd+&<0!;=$JPE1&(!eqhOKhWK(LJ028n)2XQ3Rbb
z3=b{vqz9;54$XFuDMI9NsYH8J#d_cg62zIun$>Wh!Y}fJgeoKsHEThO_fXA%E#t&F
zDTAsUJ}HAG_b6$C(l}%)hXh@S97cruLDz&qyo8we1@9%z0qp{{NrSB_vCaWaaiwYG
z+a`l{PeJN>&?KiuDx$!G4Y3vL<Y;PUrfGmKrh~4hfNiJG0j(`Z?52cf30=tiCg}Wb
zTSd^FOo_$N))B;Qup+XiCL3u!6Wr2=FBk?jE|rvY^1<iZs;L!dLen~=L86hWlLI{y
z7Ic(<eo|IyatUHQDj%c)d?#!sXeVDj=7kZNYHAu8pj(MRjZ1rV8_0Sq1@JVjt&)<R
zy0%8P9wa}2+xn0>YtVkWY(4N{A&_ZZG&y**B8fxy=7M`B+DbP15S#2k(-S&*wwa*o
z19dVXQ$hY|h{6F9gpi49_!Kc{-~fD>WhS)K4!01ya-A&OJkXeHo^2j@u@cC~Fs~|U
zYh>Bl+UD6SDOst5e5wnJZ(Y!QqOFp;b|z>^vbv_WIy6|+wez&qL1B}H>=8|Cc(#I+
zc;H1!;2XC=ldlk$=_zT$%4%)2Mya}X4s5{?<fhRK(85QoKGVs!#d7{>7N}Q%nU1q`
zax``FLAw&cr8hL;q(Rp0>*VMtDd{L0=pdy)xRvmA3!0j>&}4^F#DWft%gjrGlwY74
z8rBVf_#erykjY}W!LR}!>?mXtFjOFAWKazXDLjio`jEJw<wR-Vx#a-Jb+Vax>7X^k
zw$OYCIcFV`=Ri~NnD-Q7DW*^=dFXOY&?;nblGcEYDS)S&i*+FP0-`qsl0XX$vTf7t
z(GmtYU_i^+Kr2Kc&eBjq?v2EPQw?aQ3AxmUbala__vz8Fl~JG+tDyvGQz>c2)`F|5
zWWCH{L{Mm?!s=*nK!9pI$m)Ncbo*@3>>y|ZD{Sr^+(Ia}1ziGIl9&Tp;s9!Mfd|nb
ztD|&5JvH!I?WrjWpk2mAPN`}6MX8`(7)+R60Sp-^NwftoYlI#)2icYA4_P;Aookx}
z+8_%}w#A@Cs*|V*zH0z!bvbIQ3lu=P&{ct;k`8pNKnXPEX{74pLTY7roTAmCZuz;1
zB_*jvp#`ARER-~Lu%DKm2&=x4f)g~A4oME6z=X9>G}1I{bqoy*Kx^I7Ah#HUP6h`D
zy&jToH8n+e_CXOww8Y4BY7*3`SRDmFm=5k`q-kLA?FyikHlSMsp%>6Ymsf)?m<OGi
znU)E=oD~*lu*DkjNWK8KNFiZ^Sl|V65a>c9Ly#lD>)b#huy8{Rg&^)x1JA3Vq!7^h
zThORpX<jmDr-=rraRIdl$$HT00Qk})v`_@usRX+B7!*!<pw3FMMl!T?h3kQ2Q{*Nk
zC=F`Xf<{l!ci_RYBEqAf3+N%$Jh(DX1>cMdDjpC@K(2re4(Wi#m0-8R8G`ntLn9DX
zb#zLsnp(QHwsmq&YGM&+>?Oan1hKdV<a>}{5vZ?&86q_`>58^k+yNe@v4?vBWD2xY
zfG&{-I~ybnHry6_?#R&4tkp3!FwoSr0x@ernFyAL5%HP?9_s|3;|U$_2aT;mnsTuG
zngq`5pkPjgg#ywFI?zBU^pprtliD^Jc2tE%k`Bs#H%I^!gNg(2H6@@p1J7ZAwqT@z
z=2St$z(|FLB4|oD+ZI04lMR;xw?jem5zsayWNRzjb(p;&h~413y5Oo%*4BY<<<fyH
z-U6SP0b09R47q;YHp3P)!2+ouitUv^Ltj=II@!?~v9_@FCzuPEK`owGbxlYU54)wB
zH8mhZK<zo$6bWb_C20B>+F(RV?VuTtZ0O-}keETlBKRl~(BuxJep5(+owra_9Gx5s
zodwlM(n*BospweH!FfrwI^gCEXbmW=!KMLT-3O@@(sj_rED>on8NO6irvS0QT&ECp
z07Nk)Qu9HlZ>Zap6e$$tgEpdp*7hQ{tHD}uu$!w>^+3nmfEV3>gg{M0@OmRqj1<^q
zfFq(v+g8b@Bt=Q5NZYp1K0i7m)?OW9B8ac8uB2|I1Zoc}+S=x$$U>z+dO=&=N>c2U
zz!s$HsX!7(v2CIT*arQQB0JD^!{8QVNWMlYtVsqQX9RCDg*8i43pEThVM_x`Qb4;1
zYz?eo?#%{mYXPmlho(|kPbUMkGz-0vnWO{H@UXZj)&VzPF~!x?azQt=K+9XiRD5nt
zO(s$=2;wh94+^xeC>?fd0Jw*iqyxJV9c)*&E&L`kNC^N|1UlGECmq)Q0cBr&svuo2
z(CRMxBHKg_B^yYi9X&)LZYu^&k7a0TT504$EJW%(A_oZgE}D|mB2a+jf`&yP+7X2@
zxX9Gj)+w?D9XJe&QHbdvO+{*Ipy}TtXz>m@c^|Y=6=Dq36^Lb+N||{Dr6r)v@I`8B
z8W4>IiAAY-B^t0!d`%7b=ze4&H8q4#v_Y(*Es_n<8L^sbYKXK3aT#cr7wB%UB27&z
zP++OsfGt)4P1V5%UhF_+2vS-^akHil$c1^fnb7hA+_FY=Ff$>g57rJQJXs;>fzGjm
z3M8E(s9q##C7nFb{XifqbC9o3fg6<!Tdb~WkL?I|Om(0<j8zom1W-=KlmyTHfLw<-
zG71tT;7wII&;l3YWk`{&1WEzfpg70oCD4h@@Xdg*VhOgxKoc}y4clY@T8sfY;v3%E
zLKMK@!<fKRlkn4+Kr_1<sh}P8kfB(3nF_96^3pQXbwD?kpthv4Y%?&&N|ki7Z9#j>
zz|}r_-DaHz8viu_SG{mW7_&FpN;*o~aB1xGGT{Ad5IbOt4s2od7O0BOR#Ss5Yqp0Q
zh3*{O4h3z)&`8y^!mTw`2c?^kqLTqDd9gSBbkaa0I)<9yx%KSSO2~cg*{PMK1qzT+
zONHbN&<Y4FE5*SZ{y>p~Gy;RDY(ecRB^_+%w8M9wBUZKG?#C*D-J+z8JhTl?B(R<*
zsg~;)nS(B7(JRl$OwP~*ciEuhDN5F<ImM}<JN4k<i`ZEK2_{I}0Mv{F_kR(()zmaV
z>$H+mix9(JSWHn<Lui4Pqc&KS)zlaogNJUxj#N{#K<0p!>44mBV{8Q8%?@JQ*&3UJ
z8j)c2Hnt`Pny`z(Ye5}P(AE&p;B^XUh(!_9h0_BM5<my0VNnc^f6R_EG_GOQD(p_^
zR9kRe1-jK8OMF0!4ow|H15InVH$jbVXj@!OO~cR_5gRo%PzQm!zL0V2ni?fY`a=jI
zhau=(ETqBf=u}V@p^>atPy{-TqXgPk2VF$~Ieq|Ic!BbQE>THU2QByv!M*NU&00`j
z02-`_A`H4a1k}|8&2wWN3P9=Rz{-YrNL~ZwnIcUcq;emAt59-H4fwK11AA<GaP(i2
z^pZ1Dld~aB-D3D|6u1e9<c)4BWDAd>fhOpZ32bH{8;l45$n+SvE0h6l)8Z_n5j~eQ
z(CYgv`!p+Xa}MTK@T`tbj;%&ExQ7bww!j+sApPKpEPwD|vqlDV_R792KQl!m12ndu
zSPANls;OnbMk}BU)X@rf0SWI<L*`e&D`%B-qTxv%bk7B{uR#+}hC1n*wV?SR4bXwC
zC`E6oPPUGsp$@2f3R-}OE&12fXk>s>uQTeTj1s8X1lNEx!U*yUbfYB3*d}Dottc}+
zJ+(*!ybLJE9&*?Q_#_V{D+mX?$s5$j#$vIet!++C4Wvc@Eori~RRmqIgw>6p#U45k
z8OXpZc;X1|Xp~Hj8N`s*24oyiCptS8biE>IQx0OZ5FC#R*t_MBQdj|LpaT@xIp8TO
z9b*GcD-CQ?nwnOiw4q?2S*wE-rijFw1ZiHRS|`EkOzeRSDLN77pdg)>qJ)?pf{ym2
z*(U3x!*)QUj&Xn*HaIe_J~*0cKzr+<Q=(~*NmqMNor##?fwi@udp1E6X0W|V(0%x>
zIjNv4STywz<6cGJK`%vH+jQ`TYH(Uf!jc?7XIf&k>R>k2>KK8?0-;BnfE(R93XqNp
z{H&O?{N&PNg`}L)BBX#xg9LNBZ5rsXLuk2-;yR*(3AHSRE@nk3Mqp71+lmZ2A0-22
zY8ovFb(Fx41}(NuhXgsyr?ooJ(GExvg-AEBrNiKWOonY;Nd{lplnPs)qz74qp_68t
z0=+~Rwki&~2m{tD0^QALX9&N)L=!r-q#skPuW1zxUE-Up84EfW7TSc+HPp$pH2^Ix
z1$V~{K}!YG>_AyJJ=!o99L<{6sgR{>S(?_GS+<B7gjAjM=uB;G=p9;cMQUmpcA22@
zBt=_Wjr8bDh&*^UBL%*qF;yoEai3aNtxkGsiBBSE7XhS1K!i{dd?`YbeG>RU1H^;^
z$|b!T$tZmfv?^LtH&G)AuYy`ltE8HmM9{DuY6BhVrXO&0fvafP@?6kx9cXKdP9FSH
zYUm)aPCj^lKDb4XRHW6^D8iDB25A32SRSLp0FTiE(6TVlxDI$1K@w<+7df0jw;v$2
zVqvW&Q1?v})YR0Ei#E`;jMY|w76pZ{ww(gJ@l^<EVx?*1tEuVhBGiGF_knKGgxsYD
zx}ZW^6TAhlSW6=&MO#xp9ke4N4VsQXCyiR?+U0<!qrpSG>9%RnIkAW&sHGcItOY)$
z6mB)B5CPd<Q)8f$iD(XjQXWJYbpAVdBv98-2b`!hQo$=&K?km+YU*U#flosPt58#e
zo{b9T=^AQUXWH392CfPq7x-mpS{K@aZruWRsWm{Z11%4)1zjJlrlzlh>h&z!LL|5A
zK-`{dn+5YP=rHD7=wZy@27Oj^cC4D3Mh?OsAQ6y1baHIq9#K<+x+X^x96^e(b2-3c
zs*t&TxMFZ%!qvl?F9o$a$lKl!Sp~Y^5tKgDbkZT~Gcv#wIB$c_ZC8Lyn-yy!FK18H
zgYH}hFP+u2F;G(jRnegNbkN*7=<Gw#{<`S2SPh63Iv{CK`x)Hr%|K-2bhy({1~sAG
zbCAQ(1~p+t9Qf!G)V_EDXvU(@HXk<Ttpe*6tEpj%L1V=}Ne?aWYNY63s@AlET%n$-
z2fp927&KB;1iJqWc0dHUX9`{U@0OF84!R8#GK^qn2<}0q>cLzCa%HMsCS=($gag|g
z05TRdQd_K-n^=HUYQal1L?k5X6l&V(8ro|>Ph3xlPKve91vP^clQUAmBf8N^u~r%&
zp`t{{-h=2Q&_E`%REK*KY29%y__nX|)FRN`UmBWLxuC-`KvSSTpp&9gL9<MWMW9>n
zL8E`rT>-G0zH&h$O}VgUPc8VWG!0O&K$>5+hyZ|8X*%$IRG@uVu+tUba^O82wyAos
zpn<l@K{M2_4MT{SM)CqEX(lF@pm_u;s*?(7xT6FU{4P>mLs-QPvLy{AjoYT_<>kX1
zsgniT9|D<n4*?}~&_*<!G)-74&(bWg%>wuD6+lG=EIlH&wt%y40cf<j(AGDxBttJZ
zGfxA4sF@CuuOVqj(^|1WO|8(*z*@6VS68RNwxFg4G|Guk7+n~v2VOYup9Z?X4HAry
z=`)1_TaXZV=bLsaWY9DyzZ`T6ttJ*dcD4qfdH@k!AZNllam9LB`I&j3b!xVt(Naj%
z!Wtn3wV)cH(AL1Z5b1=rLTznLn0EN^RB?1+EGPkhR*Tyf>R^O5w0MDd1ELmU7ifVv
zmN*0{fhTB`lN)Mk;2ESa)*hM;VDS%HFP93sSQe6B3c(Ez9hf5MX-LRP-ySq}1g;HW
z$v#8VDg%_tGr{3&tC$CF$3dDuC6xuK`DqGJ^E8o)ArcZSte}9OX9Js+fbLd|#hgF@
zSHPfdmu-Pg4kDL8>Uv0+7Tc%5=TX1|eJOhABZHu65>Q(MbEd2ix@HH`V}Ufo6(DPy
ztRTG96wriBNlB3gWLy{4uLUnJ0?$Z*=6rOpgfKXQA#rVs5!kSFq^YTs2`V|^QI67B
zR#VG^Hh>|~09xq)UcKp@p9ArIbRl@?24<XXk{*fy8ZZeR>{>yV8-gPpVjLofk>V9@
z2)Jp5Q653Or~_J82MZi<rbq{!fdpA61B>WFEKv*zX3(q+xVqK>ja;Owsbzw;kY<C1
z4-IN+((S=pS|JsUJ!rQRtmM>$&KrQr1&9|wtIMol-UjDwZ~<(EWyw{xeU@#u1~gH_
zN>m+~UY$anRPbHQ;CX7S`lE9|nGzBJpaxJbXdnQtKg%{dIyaU`^EDx5F8F>M4ML@|
zeTHoos6qt!8k}2kmWHT1TT(zJ6(pFzz5};LQ$T45v`|qIo(K`;yP8_AovlGl4OS^o
z!JP}5<hRYzDX`73FR)TXY<MXEoecz8P=RQsL0dzaY2Z2nG|Gjg0}Wc4fOP*PO4A5d
z10nS)p#5U>8Dr2c7o8%VVx1D5Qk^oLa-9mDN}VblM;#{}XB`(ESHw{k(XpU??QZb)
zm^)&c#KYDd?a~TQ+iF<z2XT~6u~jN`s|V8daVyYG<zBYch}zaFS_!-@QVDdV8)PS~
zl8zE+%K&(<wNfm67^E0{FdE94O3|^fjx;>;gA_rtyJKD@BwiuIfk=~?DLNjoK!d7<
zDAaL>Eu#gE&4RKv<RW@c$PR!MTX)1>0UT{OcZkxWVl_25Gdd|2l?PFi0vdCNUP`5=
zrUXfNkiluFs0Q3VSZR?Is{<aCK=F(_{PL<K_~La?F$^0=&p=<L3$;oU-j2(+HL%XN
zf&1P%Ut3$#OAk?W<;P-72qT3dT%At7rj8e^w1r1WG=ANvF^~_LQ1pVe&ma*4GC~8>
z<M3ESX;J9p!(tC<#6w$O6Wr@@haXptd}pu{#2PCF@HisqL{UfqrU1!k(D^GRP@X6S
zpL+nhsX|l79h!=uOAHNk-1SQGp^FSbm+aVTxS|d@>*U%RSm)Zf>%s2Efp%2DM+<_c
zi$KE$u-;r!eoCcAiVl+E)IyD1$imZnTX<yYWPsS9enE6@tX>{yay}=sDm6t1bXsB}
zxUZ1`&qNxCYjqPrSDUDS`Z?*TB^sKbC6nM`r?i?Hc(`IY4oed>;DZ=8ge!#v7&s(g
z2SqDsyMxw|z_)&ZI2xcs;y}kVf;YH>o6#VDgT|3S7al3;p=;7fM|83^;I<+4{xHR$
zfr|ak`qXH6$bp*)p75?4sAmUicOZ#?m*9bSry^@Z3LqqRU=GG$x(u=r1f0Y*5oHjh
z=?3e6XhKe|s<K6Q2Xy?wO%JvwOjE}Z)O;_uHLxzXse=02x?EdZ)5*3fx*RsxqGY9{
zspABd29M=ABL*d$q77m}gA%%iI?i^s25M@~h++WLT8nm$wRHlmG_L|%pPZ^uu4AaF
zQ?9EEvfMyZ)7nu@O#|JjwpGxsgo2uyf|8~tXi%ln79JjuDJn>wOHI)!vULYnd62Qb
zni^1w$G++cy!1_{65PWAc{^X*(5@Wp<1*XS=yFI4zp|!Aque%MQ>W6l60`~g(#wJ@
zIVpqpiHe}gL7SA^^w72%LYkIk5IJyL3AA$zNmRp44}9#DAxx~M1}Xx*1+z>Oq*((z
z6jTN({b8$MklCPhC*`1)IAS?He0!Oinj%K&Uyh}%2<;9)O1BEzEa>UfO4{(yM#-6w
zz|g6L1V@FMnntCqq9Ld#!*;+jB#NvQATa|f7fUjV@=Mb*6qK|zD%I4|?JDdmtiVg~
zG_{o!KsOpGY3d-Q2Jm2shC6tm7JZljNf{)cVe|;lRcIn*8kA~7P0bCZQvk1o;B5d<
z(;3}3jGh6y0z_qoFh>UxUY>fHunY?cBt+^)bQ3^vjo{g%8;{m)K$iwxf?!~s4jn|z
zOw(|&%>oUf!f$ocDX`4}`5e3w4w4XEG<6g;3TkR9LE^B8he>II$ErNR4S3ruP~yu0
zMHcu}0B|4KHUo4LRi>>cq!SJnLn<zHJmI}*+e{Es#}j41!4|af0-o%^u7VxV2`STD
zKq?Atp-1fLfO2rTO(C>o0%v0v$W0Q3pwbI67@+`a$tWpVqgjP&4QN%rJzNMW$X(FF
z*adVHWoDX2F{t1yK@9W+<(F%?>v-yTfo701!6BqmW?KT<f1+rp19CFBri6s3hLTl!
ziH3rKf~FEuf&}{)<PgN@AUM3?&H^id2MB011yu@kL?!6Z(wZ8LLQt<Ava<@V24Xj)
zg4M~k1)o`Hps9&16roXE2#Vrzv?zuKesp;(a&#icxK0_?a4EJeuBj>0QG`1P>>rq;
z)zr#B{!T5_C<h(pMWBIT4K}Q#7PLx6q1d*}IvZso4Q>UJpLG<AVavZj%?I0J(Do+C
zG0?TOs0}e~VoO1!<{C&3v}^>e`9M0VIz=ZBbe3Z+q>e(HUr*D42tx`;TUT&v4SU_C
z<BF76aIM%zEZ0uKzFZq*3cL-A(u4(#--7mkrYJx{4Xy2}ovfFXnwOlBn^=^sQHorW
zBJ~?V1r~Hw0DKJt#5B<MR2_F*dq3bcHe46zj+9EsIlsk9nzcFxpmi?ksU?uvFv#vV
zj6N`YwH|oF6Es)?S@!~-poBEVA^MBKgEZh%^dZiRhYXoO%+<-ZO^409gVyJu?tBHc
z$aQjv-forxK1C2TXbN5wuV`zV9i0jq*hmA{n>pa&7|l%EEa)&Xyh)pbvV#@0AgQD%
zGcO&~!Ak@WBWmPmf-Z}J4eTQAAOwxqz{Xv3tU>Ejz(uh}j;4L4ZH|=^d{-psI-$yf
zRE;c<N#H539H=uiVF$Nlf*c5%z|FJ;w@{%02veq$qzCP9AWLLw!e?%v!iczn?or50
z(*WPJ1aVm^Y$8$7&^pN$G`9-70TaHD!8QrHIYuYj7HL@${N%C}$TSn^z$rDg6mVNK
z#U=~hA<waePSV&W>ZKQ@7JxQBL6=->piKPgW#&QLl%$iY30e_WtErQ%rj`Zky2HBC
zDOeg)kW{3bmk*j2QG)qNAr;(p1g#y177?Iz@R`tc@aeXx(HXHiIgnY!>JqDTodPSc
zh2U;BXe1yD(%~;EhE{bT*FYtsQ{Wo{(shz_KqDHU%UWw8?YT7Y34|3T!TCicpkut1
zlyq{yZ7Ia`Q6lJ+Jn&Q+=oBQqlKfzBGSdK!UZv_4APK-G3_-^d!Mf~-C5CDCX&Ru}
zI7I`U6rChZkPi^)3_8}G2HK{Tkywm;{bP!zeOh!%EQ;P_up9jnOG=9pbL>%gAa$Bn
ziUzfsI;o(!>`YtO#Yy1p9<V@7g@k5KbVjUR3F5#Q@WKFGDH2DzgB|jMNPnQ2c+}Da
zG_4Mf<8)gC>vWqujQ%<J5`+9A&^?uqwo!CCXxRklBCF(#)aZ2NjyE)tbwFotW<by0
z1fPDI1)A@&2b0lhu~wj_dQom7xU(Le78{)hOY5=V_6MkArkGk&qnN1&Z}CCbd%#B?
zA%!2LO#s@+4VOThCCP&&Ku~f6r@WM!nml511VphCr0EEqdsYHnqKO!20J%LSRueI?
z3T_xcT0(FKfyGc7KcLBTR721L02+?EhTxlyVUz2)-GHPWY+H18Y;;PjCZv&(nWh2N
zi6_{L63an4Xyp@~Y+FNXm_KsBjTAib4{E$+qg>#STBwntsRQ+f66olc^wbjQsw~ii
zpGKZej!p_<`n>?UqX@D=8c~8LLyimw9qW;qrjcx$sF4h6TInDy!A%8?3Fv@U9)Jg=
z!CeG3HE@BCyi^iZfhJ_wITNu6MhA2Z0kjS;u+2vsHwMk-qix1Xjnyf##ky&~5c{5r
zLgaP0;JG`*ev1O=@LW8SIId0mI>om6ur>o^<_or~2*QKZ4B&mvkW7cU**z6HaRxf;
z1H70+1F4#Wuf9dTR#yXb6d_upNCOl*8Je0ph-yC#IwX_{n!L41gXRnCOwe^CwrSCs
zv9_S;9}ol7^agttevWP-==5wIB{dLj4W3cT1|8%Jnws?oWeJF9P?}HZhZ5x2W`oCm
zN;KdB3JDEJYYU-VCkuR{piZ`JPPAdHCU|ofX!RS&W%f#F#}j0O+V41yCje={IH4d5
zaza5i@(Bf2N=nvgw$ZV*xwabl@F`Dw1k(y0so)|3dAk^F+yyC4L7590An5a@YHAv}
zkPEvZO#u5`P!|mmBIxQht>A%$AqBen8=5pV)FDBMyjLD{Km#-_>A((i2AvHNoo=s`
zQIeaZWCcA&M=4gL2sNF63U$bV{TgYIvBqLeojmaAGsU3$jUYP=p=;R@1p@daN>CdD
zyyzOVmJ-%f%e2iv%e0_9F^~bvVsMR_3cBLnF4Z~}e9cb=dYzIQtCMc4sF8*_kDUg&
zKd`0-Sq@y?ARQHgO(P`4K*Iv)GXjZ-O*60tPBEkrsA!<6rj`ymWdXd$5>g^+B<iGs
z4vR?9L2?3o-7)f65uo$q(o<nu=51kygY#+{=u8Aq;K8?Ng2ondZIkVx<tj8RLDzlc
z+2-1#UHJ}5!kK9rsnC5xd1`8k@O6NYaE6R871z`tmk6Mi7-WD%3Dn5V1rMO2c1~eE
z2#_<Ng(qSaq!PG<$^|8Bc)kI5Aadbc=z3h_`~gZ#xHCwmZ6@fFB4`H51ZNPqUodik
z6>cdVBy%9Q6y?~af%|QshIfWdF07@bZ3y0qnho9)3>USBn~brL61?*YE{(c443a4F
zi>xq?G06az?4Sc(VA(bsbZH&Lqu`aS;I0+QO3W<OoN2F-4r=v7w15ZUK~o;E^A<sk
zbz57w2cTD2K|)#s?pzGtfR0mvZvxA<0-bCM&g*HQ4UT&7zIZZt+m(`bE@CqqXp<+X
zac!Fg)&QQ7&;f0%hP%N&3%Yd55L8fNE)~%N6;oNrwJ#*KDrtfP3sU-ktkASVG6_^S
zf(0>r3|mPFD(Rr191oveu|--P44Pqw^%=kmEJ4H9IiMU`j3tMHXV>95)HcOFQ6mM^
z*g?vapbJ3|nOg(Avnf?49p3B6P*Y0-Equh1#URTw(Dp8%Z1l;1?(qg0h}b~~j~Yl6
zqo1&$siUZvS&QwqC!HiLm(hXFqCh&&1avnv;+Cgmz2xFzo$BI}%;fA!)N7m|Vjii9
zDXB$DIuKr1W-&HJx@DQgnMpaRFlCTyoscZmg=p8!$V^E|&4Vcm2VHHighd(jE>-xA
zP!LB1r50yarMi}-=9M7I*d!hBGHcL5$*_S19oSF;q`{eLTV0Zwn_6ULWNJ{WlZIHu
zP+bc;+8MMV5vBp_ND{m_PlT8Uwh`P$1|8y*4y)2&y?1c6m!Ve#c5HlFPGUM})-V~=
zn@s{&hDp{*+S-~apg}0eS|9M1<|I&$Hw9V{gU0_-f-|d9AqOxR=orL;*7Jk*x8|p%
z6{nVjXQq^7=w#ZaAcQ=?H^u5`fVP;XMjOP|)MSEoHG`U3YHAu-OxB4`)5(klUrtk6
zoS^|SN>kH18QOkSQ%eNZIfkIU8R%nv5WgwuL?_3B_R~PPP_G)+!UhsDH9%PpymP`6
zbnh=HbHl?093z@K$@Us>AxKaef<{xp`)3d`V8x&fEO2w+aiUp`qQ9ml6SO2hO%JRE
z+@`^}QVfz5AxR4P_C+(Ko5fJnfU0H`f%wFdlEmbUkbKBZQmAqj!O2DWIXT#*Dsf9e
zqSeX(n$MuFgI^{Tk{^;^0J?Jv)vn~6{Jd1p6e}fY{(@yJnD)e!6r@apsXsFhd<U6x
zBKY(mO!+GCXqc4|=JizIf)hM}p@=wh0kM)KBe6IbT%<r<0&0#S)-OYksZ!EOg|;4x
zK|`8qYKrjF8&FJwws4d*p*={@I25=S30g7@E<JQ|Y!fxo^iTr_7D=Fu2Pk(<L6kxB
zo`RB29v02er~)-VA<Cg1fk%B!O%mwJ6-;ZP@lQZ!fo(QqatzVuuu97;DlSpd1Yf_2
z)E_BQf~}Z<xCC~J9zs9p@D3E?K(|7IPGW+d6^<S<ki@2GkLh@*3@F8y*uqLQ`(i!F
zHPjlKH8loS;6^xTBQADhK|=$eEgGe^*`Q%1$e|1HT~~Ubaf#&OVo1HGiPY}LOfvS^
z3;@SBL^o&@HWjkR3|e19lM{3ZP)`LCU~p%ER)3Y*mO@K7`%<{KtPFI@ZPQ@tK~V$B
zSQ_ASJ0bIIO3C?oC5f4NsL5IZ<{OAb;6n}2LIo^_l>Fe$CT*qo)QXa##CWielr+J&
zg`-~-4z8Y|=^9j9f;+jIIu*9%a8H5S(GWKxD+blTnxMK}qZ)pxIILM@uauZnoS#!#
zlBxu{vacdFMM<Y1F(n0bn;krIkt~3prjcA+tf2%|shg9U21=}k2AVo0`2|)b+GRQ*
zAu9tNaAP1dC$ppye6=IE!iSb5Xn_+C5w58*ss*jbC`Tk|$c?A)EKvoT8g{fb&~ZZ4
z{NQVFKs_sPSp>On%NBObn1+%S*cmyg;8BfCXq<y9XV7s`S#~MbDcaha>F}%4kad6t
z*HS=j&`c;xDJj1wCACO5DZc_VLz4jxS*4`>3f<z&D$ulzrhTeyhF*SYNoo<eZr0GW
z0v%G9lUPuk3eu4d(*ZUnIX?#?qiGNB8h|F}N=s5xf<f27+d~K1Ajk7#%4=kR#(qJY
zYBWLVy(B}^N+S)jWCx-J?mDnt;9KKC`+U(Is0)s36fLN6tBFTN5$IZaB~4A;G)*gz
z!C+f7K&Kai5=k|fYn7^_l$)8S3+5<+d5INpUae-Wjx!=QHLEEta6rkU0vycM;DiWI
z?qGj{3alKkES3}uD%P^~AcY_J)R?pqh~GiFvLU*16N}O_^N^CgZoXbIxT^O_O)JsR
z)OFMWd(<i$B^lIe>Nsg+>y(42LY*wlS{)aJr<1@nXtrKvF>>nDtVSuM;La+^FVM|{
z+8L5xprNUaT!MioMN@1M-T<9xqL*15o|%`DU#<Z;2o%)%g$w0_&jwAm)qsaosy&MN
zR(Xgp0p)QNNlk4~md~)whL@tc8WnK1wnh=0T~h;Eh>&TUZkM80l3$>vmTm)PXlK|f
z!7?eLq{y<Z1`9$8kjz?ZnCn12X^?)~RQq(@98{O(AP0-44yZ#0>M^F3Accn>C{>UV
zt(rQp8UyYEjVzEuK>h*+f~HOd^lC}WayTrr7+eEjmd)@D&+ss?wYAN(M^*^xZ6Wg!
zg?g5zjs~cCUj=H0sHtf<YiR0J*=B0if)Ch3gqR{M$>$emf{yzG?Mg-$(orf(%}FfD
zECUsl<<KsBW(r8DMmeZ|k(r`xi(YU;Tb`Oa<<M~;@OU_A;fsN$jzUQhw9bOJRY3dT
zHIP(;R<G(Plt3CP(9lDYPlmKel{BFXKQJ11s4Z8}NJk~2@<5&z(J2RK-)cw;22|05
zx=vOGI*|Nq1)6FEoeKwAV+U`XKzcOr>+Cf&b+QrFEa*N`w8ky;kQ49`m7ua5w9rCH
zI~TF8R<qg}w1!qE8LSfAg)P=d(ZTL!&?;9*v_smcnqceGN>Yn7DnL6=^7DdH^HNfa
zAWc&6YR61lB%>f#OT$}`ka`R<v;;c+(K^E}9enM2svfFIpcAfgDmB1$Ub?1Ebh=Ke
zPI;`Rbw0@N8hP;3bd(^)o&qG4u$<SEi<oH8k15vHPe(p4mI&R5a7)yzcF|CRSOls@
zAxk4bCxgPf3ecl!l^{(pNSG8u4<psi)dUB)1`b(-MId{?=hf(-r*zal6zJ@m#FP|>
zHAsCc(9|2!k;0%f0`Inf24f*3Iq{G|FsKY@91rR|h%{&w4Qi?ZH*ahcH3*-z06NbO
zv?K=6Sc7j*g)C~-NYS*eK(x0Z2@DcwVVT96AV)%Y5Wf|p_C3|qG?L(DtOn@#WLUFO
z1C&P#G<DL!Ycde0rlFspmJS*y1m&_s*y#;A3gE*W5NH1)wb}H*ha+fcf}$FBJ}Nk@
zAWNw<vUM;rEhG#zk&f>K6*};+hMR&Us!^_!3eH{d5jT_|0G;Xrx>6V8R%LLD6EYf<
zZj02o*M_DuNWLvrP_l+6)1p+wqBl_LKrcaH$rz;!fv(j8o#Bk)Fi7&olJnAW<h;Dp
ziV_V(xdJf^)S&>W2RTdw6l~D`5-2G^nb2l4vIxW@;FFF(M<k@AV3f_!9x%A~gdqv-
zSYwxjciCarJQFM|aCle;Jn92U$tbxLG`dt<s|g!C)hP$Jjx-Sk0r&`CrPAV5h2oN;
z%;XX!aJ!0_F;s9V1zOza4CyMS7NHK6!sT_LeM!);DqPSbF)t-26_<_-u&j~}T)AI9
zWIh5_1N87ah*V~N9+HOOlKi5?bX*pIMp_dQtA-#+JIPkbrWn*Cu>;lCsFfqgpD;IQ
zD=Abf=;jvdmKLWLK~J!>Qpn5COSM+e&CRbu6$gueC3Ukw^OdNwU<n1?^3<g4%o1!;
zSnR09bQ(Mgz;1&TRaOeHmX5Uov^}6;SWscDfW-tze4uHE^_#5~QZkD{>rAZ_GV^jW
z^HOz_a`Kb2twD<_OERn!ED9>DK@Dbz>B*%<#rZ{63aRC~;P^|mR;bbiuj{i?Ft%2}
z;v;YvVG*yj(T7Bck~L@%9jL-i%}WW%*H8k*kP@V@1ls|MAKPls+D*hfZjw$4xWAzY
zJF5m!8-PkAa6SR)11;x)D?v0<GZKrDlz_7ZbV3+>&oxYkPPQ$0K^u7BM<)l;F$MLb
zvcL^7B}ltVw<NznNfR_y1it7P?&kQi#G+!`>eAv=Sb~MGc?E57gsTIOP3x$DCJL;w
zb-+g?MFc<_xmE@`DkX_U>8T}<L0A<~=?7tg&N)iU$uGB3N-QnO2el}my*ro$XrK~W
z=-`sYp;Na4zh02M4(ROVRLICaXtN`DI0Ce<p*XV&6!PHvNHmfl!&{(jYC5?PHh4_I
zHVe|<*U;3-)k`bQ$$^N14-rUAD%Qw`N$Vo((zG!$(8<+9gs7TYt{%+0YHAwr@P*rp
zG9v>Xozl%O%1qD9OU%(tE-r@l;8C0g+LKL`LEs2XO@W#Lnpgw}rw&pefX=T6`%EKC
zCleG1po1vD`anShP9We@tD)g&n_;Vg>^;zeLP%K$_YkD512+PivOwp0Kz0mav%FXX
zw30OgG(7^>s0TT)4Wu7xIY<%6c`9%<@$kakHWB-19$YD+kOG~c3>~cl6&pFVpu-u8
zQ;SL<R}E-nfhMUyOAkR4Rp29QzzulN`XICwQt7ce&<RVVJ)p1zl?2}jnhu(6!gexn
znocIDKL|~aN}4*UH8q6%0WB&ao`9?`3CY(;(Zd!f&_k7~Ax8s1n!`#~={lu(kaZiN
zD7I3{&r_<^gwBOQ+EPk7Y4E0eYEEi$33$V`5~w=2&eF@zONAb@UkqLfi+pDT(t%*0
z+X3OB4@zbbm&3{pNMs@>2G9X)nR)5O;IqS^W6V0>gEb+m)<78!zCf#36MR}DMjAmB
zz~Ht8s7Vh#7{@jdwoX9@6p?U;fm1lRWB_$V@{6EJ4K#t6Y-?bhYL{%C44y!QUt9{F
zrAbYRPL2ilUf^1ylVfdD&<2<6Q$UU`$<WZWG5{Sd37JYnaidPMW_2RCu!fG~C83Pt
zCEF)~<_DB=5rcUUA<&2(Y;F?i7%WgeN`<s2z^lD&LFalw6ByX9plfS2k`Sv8;3MOZ
zs4oVO;KHgGL@ysSzM5W?Us|Aq)ZYgQDrs7Cf!54`t}D$zE-JulL{gz`TF9Ow&??+C
z8$`BB)7I8RP606gXe7brd0~N_2D;KbEmkK3UYKg?z=oN@Cmn(N(P@x|ZWd@9IZYF_
zG=ZC)u9F&#YLcck=qNvIVFE6Xl|TcnkRH97nqo4j9*1nEfERhtIt(;D0_w8D6Bj7e
zLkib)9e9u;4_hPq2YmKu32G)mq!e&-0+gCTmsAsQgAVAbYUngFq~!%(fsVb5KtwU9
zS^-yYX*v1%MH=A6W}u|2Z=`7r8skg1H9+_RbB+lzPLWy!>F6K^MD$V<lQS?|yU-2s
z*6G@|pkp1Oi(0@9E-hOnh_jVIw*){!-X2t(f`-90AZM3m=A=L-^FU>ok|uok6SQ?Y
z)fOJuu*N8KoLMIWt7|~ZZb1c&rVeyyAJl?Mh7QhwcCA3~@r1UaGQi8%!8L=fp-z@<
zGHT(eX$?9xGz+~b(8#b$gB-(|fzr5&PfSViNh~gbR3YHobHStfutu*Ea-&yC2NE(?
z>5%!KEIl+I>ZWREp$v)ZX4Yz2CF_Cu;ToV0eytAV20zduWq8*GTRO8v$q*&Q;8dNe
zWSs;m(h%h^WbFkg7Qn@e9<*1KVw<9q2x}=r#}$zWY{901biw*HIw_hupcO&T#x*qX
zk!vc@SrmEjLnt9N7^Gs-P6bs>RtWnb-DXGdu{bD3APuV_RczX+(8J3?)ej;pQefLT
zK&Lx`uImEd$E2-<2n)~wETE+)Adev0B1l;ZJc^<LIioctzdR4AeuSP&3OWuh6)g}!
zt3EYS@Rre;p!GL;kcKx}<*jLrl!{T#xrep@AUy%_wk%M)-8Rz}vOX{ay4DNx9HKPH
zIx<i}2(i*OO($Is+|&nMfs~P%R^pvn2|8>B9<T8bg`kvepNW`1MJg8{XAHnKz(=nk
zLrWS;R-hG<N}yxWL0t;RoE!}$E07*UU_rEKDrtfWd;^r+3w0ed8DZvOs61$05Xf}!
zpes@S2dM`89<>_;+NPP9o*IGDw#I0kfOdMJR!dkiBY4#tsCS7NiG;Prz;=R0kd(C3
zkVa7;^?efP5I1;g1a<AKli=A=P0c{j);38GYy!OV23mv*?Y)5x7(j$<JZNuuNl8ws
zy#{zq5$FhO&;>q8(6v4~PzGq75KInfnGkZN4z|%ZzbqBxd7VVfTAj>dzeGO`<U|j%
zP1D}g3adD%2!p2-h$oPY1Rb6NYCS?TT4@1F@Mu;e8wm;*q)-9hwFYe;L5nGrk`WXc
zhNw{ny1EqHHwXI&O)eF!1_yZ>RP5@2hY%o+1bZYEd;>akSRXtVjTEDV+RmVosTSN7
z0=H10r3@r{LxwBSLI62Jim|$}7B*rGnOlM`j{)b4M66{I*k<r>GH9F`MHei&f_i7E
z6(zZ;d8KIX0kvcjZ9&UNG2#ZP*A8twT0>8UM)Cxt@16qbuM-mmprig!@&<BK71Y{K
z1U0DPX%$fkKpWJVX&Rsmgx;ElBt@kBgrNYMy&zc>RM;EnWMFHQXF!Tm@IG3kAczJn
zS_PHTu{zndpab^OQzLXU(5waRh(&4{gAZ}h&bBjvw7OAR<p}e%ZL?7dD|iDLe6Bah
zN*x?JLBj;#9d+n!`E+etR4r+-)<}_tXb!{MXNf5(8i`oDBhcif2|9`$*3t)`tPUQA
z0?m{{8l0f@0EqS;cu@eTode#@o`D#+0WE#R8mypTKy`G69;l3u)x{A$;IRtOnr(Dl
zkP0srWFR(AL-kpsM;<Iz5p8Si^CQrF4cfbnD1i{^6yDuU0Us0wEz-bkGL$&Ltdl@G
zby85qtdPd3U>9RyAJzdKELZ~X0)sLlD3BA=Q#D}vu#9g(%0Jk!lujaSuNN%xKm{8(
zC&KfUt$_~s`Y%wb1RdK4iXg~(Z@6ZHfd-zWfOg!fGgGV}6P=)zo03jJQD%M-XbF`G
z(y~;rGePp8rJ8UKYI7ZQ#u`Ej>;drEXb3S_)rP7Pl2$;CBUEwtKqGhrwN?jpOc`{U
z8K~&5MowQKCE!}77GvfNTz2WCfybe-H&r3U5@;$DYx@=)=t()LgsTDA)E1<Tk2b=M
zXb?kInkgZg;V4xEXrK)1Ko(-n0<zC>w4G3^Ye-Fz1UfVpxjhA&0R*QrNQ)|6TM2UJ
zKdAkXu31}K3rf%Mm;@Vyw3-Msz7MX{vGs33yP49EZw>{W{|=hiL*46~VGBC=A0@AX
z*4BeJIlynMhmL_jD??bBju=!1)euQJso;SI@DMZH$%q0McAuyYvSM&Ko`I6_k%pB~
z&%6K^$IuxSc+Q24>x1@3+8S6VB3*o)2s(-uw8j%Ms08&vbYiRyvVS4j1+?ZJ?&5fe
zSaf16_yAaF$RPXyx;Pt)V&riYt5nbk4Ky9X)k3-oph*Md6a=sHQbBvqkg8B?Sb!mR
z?m(t-A+wyYB@dtk0xj^=)D%-dgFjF%cn}k`X}7o-(W(ZGWhbVm>QsZqE;ZqsO0dj}
zV%b@e1Ug^>R2&t9M_s`?OOikt6S+(S?PUngFDgMQ(u|ObG?+AK(?6E71-!W<33e$W
z_}Uv#8o^wU4jxhk6)d239C(E|s8j~05gpJ`s4#mV6Gz#$)gU+fWEPiLK@XzMEH0_F
zPJy5Qmw|MUAM!nYpk>O5WvO5vY1(Ij!Z#za7_?FVe$`MCxFMIA4mvCw&eljqO}!xZ
zfSjNNx+)TGEy|HCASEDsK(mUV$t;E7#4^w!TcA#;0!Xiw0_b*a5DVlH?IfflTrxC4
z?E!En8k+7<91c2ULkYAK2{Kax9<L<qRM6>1>7dMkcF2Pg%n6`1V~A~t>ELr7Ku*)N
zN3cO-$5{QV4)d>-0;m=O`%ob#KQSdW#Y#a*T{|0eD<rxnbuytn4VY$dnTRx|kq8>g
z2DMHCit-B*(-T3f;50N5UdJ6TN}%~v@LEEo%hc=)>=Eh3HXAgIg%<lLia{G55zT=7
zq7u-YJm?x4P0Xqhyq+0;fi7gc2y5KIBMQ`4hGp(VT*(XM4a9;6(6&QxrT|4*YEdoH
z$_LGASa(?=5p)nFoR<VTK}83=<^{A>4s<k?bsBiJPdfPg3R~#Ls0`awd(c3(Rho5*
zZL&s+P7>(klMJ0C_-QjKuw!RnW<#zB0A<@0+Y*fwoirU2P4LWex~-z4MzW@wTCrYs
zYGtuTGH4Z>MtV(6GW@cOOxr{|1A7Cj3|&K5cPz0ey%cl_4Q%IvjWK8p!8SQM-5zwc
zh*f5+PNuePqNYv~)Z%oVOq~qP+FF=<6p}zbhj#8@f)MX(Rwvt*g0w--UI7&|skT)b
zNuV(vh(l6!4WZ$Z3JVv|0SX#Ppuzn#oh0~yF=<fu>KY>1oU8$AOC`gP`-j^O4tQ9r
z2-H=p0xjjrOvAhfE=?2UkaSy6<k+WKfk)1B6Du^*v@>+lHLWrr5)k3cJdHGML!Asw
zt2FHlZA0+6M4%JvlfgB825fh58aN_THFZ*=(_%qqL))iW=^BE1cc3lFsR(6B8rgcu
zi8-JHhSEV-I2MCWKuq-0)PXogI~}AAlyuU-(UuO5Hjo_X0+=-GG*GmF4mpNe12-63
zP^Ex^3KAm8wr<c?h)xQ4LM^Yjq^LBxB)>=})fVIiH`pmaDVm@$?t-HHl6=s4H8nLE
zI%&3`Z5=QTkSk`3K~=RzqD~s<fW~6boF91GhX$y*2Fh;*puKWwn%2p>y4IR$wr=1_
zH-*eRg+w*A#OO5eO`_3hv1)3HxHZ>85)Wv6Unk8rRWDvA-4=W(5$Lcbi1TzZY$5lJ
zAqi#L!aRc{m}Q#|J`4wZsug&{uuhIG=;9&BK|eaVwizHFA)U#ilLxgd6LR^lPCm>k
zP)^e+u!R(<I)yOd<f7EXl2n}{L`ze%x>lzc!9_YX7Wq`GV*5lZkRMUSKv!ddn<9Gg
zpw$}%sVTOJnpSzK<qE|biJG<6NT*`J4}VInD9A4=DYi#GG6OD|o1apeld7f$q4l6@
zK^Y&S%NA9_wpddKszxu~wpi0D6-4P2>xH=n1$+AY*(w?8S?C!<)_oyuG==8Q%rp&<
z4-`NHMM<z!nrK~Io>`Kdp#j>JVQZUgZ)}yUS)H6%oT^}Gg<hH<vUnmS$AHeKs<j5I
zHo{a5YScrGK&aPA(S+(S#-;-_OMpd>PAW{733gqef*7kloixo_jItYER3(BIBIQ(q
z?yQCtz@RaKQlu231M*}w)NDv7CE6G3Wu~O&m4JG=C|Na8)4oIl65duI2}n-RNYu11
zh8%H}TBMPvX;lo$1_h}_C6(ZWQ>>R+l3J8llA4NQFWi--U?UCn4K!=PRZJOnW$<zr
zdaqiFEqbj2D*cS?Ku08%=H%GgB3;A<D&HV^+t4}%cIribkp@UC4Pj1nD(KjYM2$31
zrIrpWzd+}=WY}eb4{iZpY?x&Ws<f<=)YKp;4s<tXbXIIljYe{GR;+DWbXF|9W=*cG
z1#Mx26?Tc>4z?mn;6W2>HF%3aA(W?3sFA2?T?7hANWo*92o9ViaPzkaTKXy=D*(lw
zPExH-1ycCI0~sEANpK;MdRyBh$US=oR!Px`v9+~2m5|F%3i8V}jC4$mHFXVjs%$GX
zlpu4fN}$7w;buYG7fH5NV8^DGlosV-T!NaUrj`V5lvLW;Ce>OOgQrz(i$Prn*Tm!u
zB*#M1Vv=nMsA7jSH&S#`L9yznkq9|ZBE{AKynP1Z8tYW(Zm}ed#ORb*ofMr!$n`4V
zXiBq%wowuxEdz*N_&GetdO=5_#p-}a(5wSAHzd~TfRc5AEvUlC0j+Jp;?`1#TVV+-
z1=KuBL^O{QLF;)mQfg`v;mxBoNGT7x)fjYaSt@kVKiJ6`wkh^0(dn^P>DFn{>9MvT
ze`Un#WFWaJ4dkk#)RfX>P(7NKpOcaUs!#K>Qj<$;6EzGqbwIsHkaQ4e4jdfNIVqrv
zv30?6pmULIi}g}cOF$YBQ3(lrP=-i>C9V`(P`KL{gLjgEJLce=nheU}AY;5!E1?29
z@Qje6rlxBMIt<Vr6eHmM;tHVkEYSHv+hRS)Y%E4lf^7yJ76=XfBwI+(>Oc|<sOE=f
zBAsMVL7D`<&NLO$d;rz{iJ+OV6iE1hg9F`nP@_Q}0xu#+)G5}>OHEHKN!2LTNCK?_
z(FEyEElVw`v@O<4%*nxUCd^sjbwCg|D}q7^-XO*r<Dk_+pth7Yq;ZrEj^?yjt29vJ
zRs_XzdaO>mP9m%&s%Qu;)D^*DSDc><itNO^N_w~li*pQM&M^dq4`?6`wB;6@?!X(>
zixEsT7b4Y?pkS)0(MYr{1|42fnhI)GXzIXQ%kXwXa!n1WO{kG<YXC~j;03w<Y0#8r
zXA2II%)GMvZ1nmB6dlQ+O~Rn&F1&KkG1AmY0lBXj)=JYzf*%qB&fq9%3lc-Awkh^W
zR*BI`v9QblDJ@g&Q>{{=wJNAz2$~5h)+@*<P0mK~IJ}UBS%6e0CTW6GS$Rfk5xNhs
zB~b85;i*NS^a%=lP{s?#uQd<U4hLCWlAM9in45@PF(74k(2*Iox*DJgSSKCI0HsTa
zkCR~MdxARbkOCpm3MmHR86m?Kbp2l<wAQqS9SNCYn+WP{rr3ej1*O@hXhIJ5gXJR}
z**itEIu%s<fe#VU(MYvRuc=A3wS~G)O$~HKEyT&76T;JM6Lr#UQ#EVh@d_>_b2IZ$
zA_cU54wOc~9XDG;eFL3z5J`2vrrD*ascDew*L1s7h+hr$4Imx`#SGX$tiCMHC{0Vt
zK~71KabJ*6lXQ}?M43*CE$lQAom6OTlmhB58(61+JILCaNw&p$MTvPS`MDYfpz-h|
z$W1mHpkV~t)aayGO&t(vn;e}6&mpOx<XN1UTY%yiNJ4`qY-p0IsY$liz+N0AM#C+J
zB_&-$%~(*C1NEpzq9$~&zJU&;%bZxDVF2pIgYC~RDsjRrCZYBtr8;n))d1y^0+jp@
zPI1r%aW(i}c&kJma2aHktdm>>YRYCNT0!cb6wTUNP4HkEV$m9CiVR$rCxg1ZQ1v>X
znKqbaP<l%SRgvJfU^1w|3aLIpr{2Pvf8efsid}L|4O}h-DyIvp927t&cci3N=q5pS
zlGSSJD1lw91Z_zpZ_0<4NbpJ#d|nQ$xT}UA4+9%bf#u93#Oje0P(K8euF}Dy51^qF
z>qL!IofOc_tENtBEvR`1Ui#@&Y3qa%CZN0r>%u2%+9yUQ$AY`Z8cCW~AdYQxQfw{A
zPH<3T)ecsc1Xh%sUz!JsW`cHTYeP&o1ZykF2lwWY3I%wmfIB^qemAH;106F-)U*O6
zQ*ieNluQsEBT#|_hc&1c18o`5Db@p>f`rX%NUBe?H-H!hOV?KL<|(wy1f}1C#G(@L
zj$kB%AXx~OcER0%6wo>Z&`G?o>Ir)*DNVCl1CmtJH0@KYQZ*rA4sIw#r|6`{f~*9u
z->?OpC6WlLCrc91DppX`LGusHCy+D=o_MsiO#)@-#At(9P@ga_vm`SyM<Y=O=1biq
zaBT;gddy73Y)?TAhK08dN}h(B0qwtoZ8Ee<(uCBYpz(H$V1gQm&!uo<4M9#WN-YL;
zYLSW(xIDC`2C1+Gos5zRYHFtx<rm<x748j)^>Fusf;l-qw;(YYdEf$`_)r?8u&y^W
z4<jAL0PcB%8dR{}1}Fi5R#)hx+ophycFBNr#9;e~!NpLfZDMqKEU3(J)W`%?mY}{T
zI2&kWYSz?1c+k;VjZDx{K1nq-8kx4v8kyj92kD1p*&66%+rk!Cfa`qNdTnjnZ0l^h
zENjiw=rnEZSli6#EN$&rNG+dSQv<3pz{2n@aVn^kNXtnqDM>}GpW)%*3~uZx8iG?!
zd1gsQekqP{OUX=2OD#&xOHS2D)PaRQY^+1a5Ry(x^D+x<i}gTMDRMmt@*gNTL1EyO
zpP!SOn5U7XSyQ8tVw<d!Y@4K$1U@Ss6qky&$)NdC=s+{1KM5)bp)n8*8aIFp0Vit0
z_i-bIKWOQ%eX>R-xRGy_X`KW<SP;~T$pS5f1P@+jf~w#wO{-*kP=^z8s*OgPP8P^T
zX^@PY1=?l~RSYVDU@dWtR2@)cLXY3hL<(vhu)p(>0vaC5V3|S<XAMMCS<wJAi3bk$
zOwiF_#i_}lc^RbSj?}gQ6+y{}!4qg9rUU6_gGU5lU2Jebq}hUcgrJ0oJ_3s{Gu_tE
zI@vBA)R}^N4emP7+1+WH;0-p`>7cq2Y1kJ&2$lrOYKT;U;&M=gCD~&5R|j#^A5uny
zSCjBTR8(h!%21G9RhdYo0ZQ0bWfmZU796Ifc_^wA5gt#nO$2!wG%1j%Qw19<0Ojdq
zXag+?)Qd5&PJ)hjBuA&j+CqCC8lZz<VHH6#$Wf4+29P`tI)D&XY9!lM*J6vMB>UuO
zP!z@5CPk;jT0uC`2C=c=h>JFaH}t?(fchceF#+2o$e;sA05m@c6NC&mfTy!kAYzCh
zh2=bGTLTmWFxREpCPU_KK&^9dDoVFYvxYQNG9Y79kWB{~Y1-+UpbZDf8lWDArcJ7S
znr()*p;fwV2DH1X0PY5WTNM7F2@^vdPz2{eoCB(`LDS<99;oR7s!zZ!1uNEtsfK$B
zqy~KJAxgl4sz*=}VQZTN+Kg|T2#U2tP~SD#Ho2z85L{S-l3ohL^`JNgS2oG1nK>F7
zNxF%e`pKF)2B485NV$yK7S~DCwoL{VuCca>ut-jYjFcjsSOcvaK;t5rX&Q<eDaeES
zh#4-}h%jgX1>BHGvn|(1M2s?m_Orp%r0Jx>`%|DI5<1$Ou4$icl?E!qK}%Fof&$#2
zEl^WS1ke52+S(RCo2&{2@IEuPLK<2qWFmU#iJF?A)llUMp!o;Tb<VCuMfpV<N=})1
zDGIrz#U%<!sS2QJt<)5S{5*w31z6frg49>Ih5=y8G~hYa1(bVqlEAyiK#MT)^O6%w
zU~^{hvIo@SfCWBygbCbELut=Il4ug<_ycH>5h9onc^*<wCc(;09OHtJaX`>upsj7O
zJ={UjDcahxR!N|$9h7sdQ*7W;Py?+sp_K+)0;~rfr67+dL%a=|3<Aw0z<dbK;Go!b
zL>U2t`ViDZ!YKAZQD|sqn}QT=&?tkN1CO<W#Ny)A6nKOwfLD_#L8{awThRDC<RDI@
zss(gMI=J;;3{F@YAU0^I7uwc?4AiFP=4V!+R__o8CnEws1tOAan+&-Q0yNX8q^*%;
zp9D>x;E;d^n5I<<Jh&j8msFiJP<0IM2E+0RnjTQkI4u^@or2f|Ds#cXnv$B6h}u7e
zxCv{Dg+)klY6+I5^Dys2-3}^*bdo{aQ^1u?N@`ka5vYm)^(Yc^G(cm%If<1z#h{A-
zi}gU+3$$t<5jfx?1mYO*2#HQQWZfj_@Mcg$4peVIa#toolV)`WcrYOmbV?og&Ki3I
zt75&p{BqEtV-N#Chg*R!76Pw5)JX@ouu{Qtn(%N!%9)_TGRqcfh;;_&zSW#mum#{n
zLZGF+wpkFDWZNd`YGmnVz@sSzypj$yM*wdH8ra!p*VJU&LE2mzD4P`0K?NQt;6O7z
zS>Quxak*5}3be{WucRn3Gbb|-)BsU5tf|pRN8Z<vsgn&l=LEDr542z@zceoyHAR9d
z3y}Aq0Svn77db3JQgEN^rduc3WvQuU+1VP{r=VJsq?@H_rI7*-Lmg1$WZ1%zBdFNc
zNvWyPNVA28u_o3~hO9Y638{2=phFyz3|grMOM@UI(OsdbsRP=;hGse3Vx0_dNPwo3
z5xxWukU*1eu^zM>1x-<cQ!QjT9!WL4phij{5Z#I}AERYJu$`dZR(>&3;6oC2qAfgg
z>ws3tLFSPV3ssOT0TrvDU;uRlK!cb`vCw>mW*ub30Z2u1EM(potN>ARq<|fi2s$SU
z$zPxr8N?s(q7Ysw>FOrh7~(9GAf0cpp-HJ}`51%9U`NAZ4aq|g+jMmk?F_(u860Jv
zrjDT<s5PpQ1WsL=I-n`cV!eD&QbxpAu^z;39V19abhTBihFxL=9v7$uH7dZ9z@Ejf
zd8N6jMW6+V8cHxlN}4)uw$YIBD*rSk9i`0T0N5H3Fdwc^N2#C)bhC6xC9+9MI-r%q
zNXsXbbd*Z+A(vG`mRKmoT0=%ykU|~YLcu!y3c02#AJ$;W2hC`LLNW<7Ck0On-~}a`
zkh%ag{txehB*RM}S2Z=z_<NEjXf75!iR7JHiMl8Q)IvjQQNgEuqGQ2rGHg~RK{|jq
zt$~b1q4*T$XwX<LXa$Kzq9&+U3vC|gq(D0s$)JX(fps!;T0A8>71ZEQicXD%H~7IV
zp4`L&NDC0j5>Pu{vl>1!1+y^)yv7G+Cuk)NB%kS|gQ`JLeUb*fg)0Se3s*X*Hv^h?
zf=%K=(yBr_s54WLm|27xelUB;@L4p-V>*do3eAI=d1a|ZsN)O>i>hmNk`eRC(C!m#
z6df@S9i12r>Y2sH+JY!pCIoj%VL1^rSC*Svl98W+>M7ibEfc9-3_98yOQK7Hj6#Ep
z(A0{O)VvhiG7Wg*19e;=qW<N1poz`m;>`3sunJHlfuupbH}6!`h6$*$A{e)zZW?ST
z$QsmD1MSoYEf})}HIj6YA{Cakz^SPq6K%!}WEm(3z%?T%nWWn$f*O^e%GuU79i}<W
z8kBL6X7cPcz*D0+IiOsokq+u5L)H&yT4|)BcJ@I>n1dQWDHtgjn%t5=**m#bCmp)N
zN+Vqp(k=x#3^Kn3_bP0D3p}=w1xd!)w&~GXvDPV|Q_ytML4$3ewIH_H@bMUMe>6Wg
z6FHSZ@(}29Q$3`JPSOO=!9c1*(1ayumlD`6&=@V~7JHO&44Bs-C7-5s5{egLbtv)(
zMha;8C#;`btOtq@@TeQ80SRg<rX`l<loW&0NFpR~K|@12#d?rcXK3bw0w@{Om4p|A
zNucozc%sut)=2`@Bq05uBb<@6!yKmoidaYq0~&z`@gUvdL{0ld=!_3&%nM?sMs=-D
zqNWwN>0gqFGz5d(yZ|j4)d4HXEcQ(-L0fDBX%WD4HF$spo})9<pkvO7(3Gc`0`JJD
z!jeZKXv7XNX$Fp-bjX|-Xm3VzI%L&hdTdRNqDDF>aUor}2n~Bh14v)q9VtjaNdh!5
znVF`MXlrW=U(N>FR+v~*W2g@jHPlZ+<d4Lf8c0Tgs|6`ZvQ9)E1}Iij(@3;Ugs<<@
z)Bz><;*!L?<kb8$1(0--Z4yEnTp6X>=0I9CiQubeK&wlk0`O4<MMKy!yHv>HI;CjH
z0F**dYPxGhL9CJ$Xb~M;6p~0|m7r_gl$5j+Z9%uSCxO@6!Ik-y<|d^U!IfzzD%#p=
zC)#U+<|4I|tUwF>v=i+O^+CFA4fT_(zzl6PQ(O{DQqdg%9qdIi+Sb-qI|;n}GtCz6
z0C4h)1syj9UWB9w*&U?>@tYESy+UG54Tcyj8Wat|ftU`O3(Q9>frT6k0q29_F<sHt
zHbYHKQ3I6l;pH2s5CJ6|cqD<xMv=;i3{5q)4CF`#381W=g)D(Z7eY9&7CcM^y1^1O
zi4YwNPv)TWiXip2btY(0EojX&=+-h@TUee@NP+Od2{9ScLP-Q|$pa5jgH~XJ+gq8o
zuo)E{(Al`K5f50#f{c*C?ND^rNQ};m)ky*oplv2_b>KM#a3;&r$wpMhpwP>-g<Ytl
z18MVVB*6wz6>V)Z;YNTx2e&HAHXCG#BBVW+1RiP!Tb~88J}VY9(t)ugM<H3S0CdQ+
zP70I;<zP^xxfYh93<x2$@ZCX0E4XsbECyf1hm_gj<sT#iCxR}o22DDusezLMI1y?j
zLZ@mVSqIK_gmrR3>*MS}IRX~a;OqenibPmYfLc?T#n7t<u{c3dLlIQGDB9X4>gDC9
zq=E+Cpsofx!#1y`2G)#0tjEWaU!WxfXa_$iWFVzFiiMyGBgq!D;5$D}0XD9w1T!3z
z=aLZF3RDKFsVORgi*oQDx@aZ1*OhdXVA(}UM+p)@N;*oA(nCo{2~+?m=_o;pA|)Lq
z@UWCpEMitWQM0-@S}C(wNjotX;YP$dNvLO%Ko@qw{i>v$sI3&M1lsrq@*&(cNF)9=
zHP8rz&aNTMhEFLdKvG_!juLn*GZnP6MF$ZIup&lZPhU+9qm1#)E3p7a3pAy`LII0C
z2qWPa8Yb4%C_-k%GmG6ov$IHjWrX`+avGpDjf#-d7{JH2Lyo6UgiNr3#j#imuF@e9
z0X6_qf<savv<$|k3siL}8r0N)X~UWtc%Vb|fQw{ktiY0(A85%hEcqbPrUE2W*@9C}
zW^rg<N@`kWUMg}65T5@a{c2lVh~kVy<mNe2UIv+{2<jl`LhD6PLkhHzFyA>pFD)k%
zd5RZqHfSw-8hEf3?0e|yYOJ0IDFAIZD@jDYP6-hua8JSwPXvzz<mDsJOM`a;z`NkK
z6*`CoX#Q!~>;-wt);7@|$@p5tmT^RG0Ii7w+Xr2jW(!(E16pW?99#&e*%s?T8f^aM
zd5|_6BI6+p1!W;{0}V0`1PTJsMM20$g4#ro78|VN3Z6s(&88TD7EW42*A1i2B^g*J
zBKK>PG!Ro7;BE+HjT2IMphYx%Qbz|oqm!r&wiGe}1!h7F(9qNZP2^}pC!F*0%WXl$
z4rmw@sl<eZiUw#>10=7hmkt@&)qqa+d)QVhsVP}0sU_wXSS#r$*?`zNB_O69h?x#z
zsw=5m!EOfCQBntqD_0nqgA^q|IA#XcO0_zkphb`1KCOm_rj8eqCn4d8)JH(X1UPzi
zl5LeV?5&iv5fupJ(!v@gO>HGjC7l#oNO20<{*?-6>nNow!Q21vbc9H`iQoYxP$E-O
zvI4dGbW-$6QbDUPKrQ^DRLB*msi14D6TwS~Qj3!l3sP;pK<)?4R>S$8pe}1sYH?`}
zW={%Kvp@z$K{i1$HOfj(h>)$VEohZqifuB;ETk4yil%)EG-qpCr9c|z-nItTAO~a?
zmZo~579Jq$l5DlLy|tB;VEz3>`$X*|D{!yBBsI4nC$S_oIJKk%bYzrmbt-76Cb1;d
zO5a9RBRZxyCOB5xUQ^XhKV1hr=U$KxQV)`~MU#ejA0(rTDg$w(kFCCjo@SiBj<0Ps
zI9aGG=_tj-C|Q9B9i^BeB`c*OkWikIl~NvvQEFshWT9lG1fg}5Vn7T_sDPzXt&X3q
zeoRb_dQD7GO-x=5SlR+YS?Z_j_@g8#NFN$xm$olxD}i;f9?bJd>LA%zF-c7gw4fph
z6#Af1oRm~Ze-l(hB<Ub@!h#Jl$Oun%(Hcp5kkF{9@d2&CD=kV+)zJX0gDXibf`lNN
z3@q4@gk$xPQgw}r5;*<pq}m#QriJ3;3$$(3m8=u>U<oq?spJB+3_&;Bz_PRgXrCOk
zlbWiN0XpIUlA8T={6XVu8QQQ`uTHXknl|VX#+W<}jrjNyTMZ@cWNjr)O<Qp8uvb^N
ziii3QB(15b9h0Z7WR-%cD+Ntgd<j%-I%u&d$PVk6JSFXPZKaqzsBb`HlA1bT`$2L#
zNqS|8MVX+1S@3*;5@@ZBMt)KjXver_HAr`wwo+|Oo)V~|s{~5w@$n@(@$m(=>gqc2
z@mY`|L{K#Y*`xvvP|y(>$W@nSHQ4s}_$+9)f;C!o)YUbuYe5dtPSaL`q#uR&_yUlK
zbxBbrxT&8G-tYoz+h`!W7}O$C(ou?60?l0}gZlRx8Jg9giLG*l487ufP@=F+)5!q$
z>yYNG5G7JN#6{o%`$U~$&03u-TMQelp)SjW83}JqX((xDX)7TDN=YXZRCOh1B%-W5
zh84G<rGhZSlJw#s$`lQBk|6mv041BiQ&u8WrF}7|PXpEjI@qw*x>zqavjWW`=rX`!
zJy`JzvJ)xYLY$IpTO6GP9_0lMk;AuMg2Z6@G$1MyZKFYf10NHB4+&>MCqoi-;1epE
zIsxGQgP=3s3kq^7HHty?GU!lu9jH?^ia}*9v;kj`U!bI;1nMa&fljt9OD!r+Rnk!^
z2AvQGqVqvV6DSoI<YXp;#7pxaGN=uAP?AitO^;4Q^$2o99^#Q?@Vp@0ABbpxO!p-t
zdjskQP&Y_T4dwz6ucihx0s|W(s;Nmy1zjkjkQ{9g3-`Mwq)PzxWHNX;fs&3AsH6e;
z3hWy)`~XdZ&=5wRx`F!%$qP_Nz+)D&;R2Dq;E4+*azSYqO^ZKh6BR<NB;PC8-w!mY
z44bNfm<(xMLdyWy#0{o(N=n*j7Q(ZV61-yqX`!pBL1?|i+!PoavdgrnI61#4RY@lr
RDHP%UDX!J5MdWEsYXH>gL=*r3

diff --git a/gui/slick/views/config_general.mako b/gui/slick/views/config_general.mako
index 096874d1d..d96ff7f5c 100644
--- a/gui/slick/views/config_general.mako
+++ b/gui/slick/views/config_general.mako
@@ -14,7 +14,6 @@
 <%block name="scripts">
 <script type="text/javascript" src="${srRoot}/js/config.js?${sbPID}"></script>
 <script type="text/javascript" src="${srRoot}/js/rootDirs.js?${sbPID}"></script>
-<script type="text/javascript" src="${srRoot}/js/lib/bootstrap-formhelpers.min-2.3.0.js?${sbPID}"></script>
 <script type="text/javascript" src="${srRoot}/js/new/config_general.js"></script>
 </%block>
 <%block name="content">
diff --git a/gui/slick/views/editShow.mako b/gui/slick/views/editShow.mako
index 2bee5ca1f..ebde82a8a 100644
--- a/gui/slick/views/editShow.mako
+++ b/gui/slick/views/editShow.mako
@@ -15,7 +15,6 @@
 
 <%block name="scripts">
     <script type="text/javascript" src="${srRoot}/js/qualityChooser.js?${sbPID}"></script>
-    <script type="text/javascript" src="${srRoot}/js/lib/bootstrap-formhelpers.min-2.3.0.js?${sbPID}"></script>
     <script type="text/javascript" src="${srRoot}/js/new/editShow.js"></script>
 % if show.is_anime:
     <script type="text/javascript" src="${srRoot}/js/blackwhite.js?${sbPID}"></script>
@@ -45,7 +44,7 @@
                 <div class="component-group">
                     <h3>Main Settings</h3>
                     <fieldset class="component-group-list">
-                        
+
                         <div class="field-pair">
                             <label for="location">
                                 <span class="component-title">Show Location</span>
@@ -246,7 +245,7 @@
                     </fieldset>
                 </div>
             </div>
-        
+
         </div>
 
         <br>
diff --git a/gui/slick/views/home_newShow.mako b/gui/slick/views/home_newShow.mako
index 62a72a473..6905df264 100644
--- a/gui/slick/views/home_newShow.mako
+++ b/gui/slick/views/home_newShow.mako
@@ -7,7 +7,6 @@
 <script type="text/javascript" src="${srRoot}/js/qualityChooser.js?${sbPID}"></script>
 <script type="text/javascript" src="${srRoot}/js/newShow.js?${sbPID}"></script>
 <script type="text/javascript" src="${srRoot}/js/addShowOptions.js?${sbPID}"></script>
-<script type="text/javascript" src="${srRoot}/js/lib/bootstrap-formhelpers.min-2.3.0.js?${sbPID}"></script>
 <script type="text/javascript" src="${srRoot}/js/rootDirs.js?${sbPID}"></script>
 <script type="text/javascript" src="${srRoot}/js/blackwhite.js?${sbPID}"></script>
 </%block>
diff --git a/gui/slick/views/layouts/main.mako b/gui/slick/views/layouts/main.mako
index d392987ce..b896d3c97 100644
--- a/gui/slick/views/layouts/main.mako
+++ b/gui/slick/views/layouts/main.mako
@@ -311,19 +311,16 @@
                 </div>
             </div>
         </footer>
-        <script type="text/javascript" src="${srRoot}/js/_bower.min.js?${sbPID}"></script>
-        <script type="text/javascript" src="${srRoot}/js/lib/jquery.cookie.js?${sbPID}"></script>
+        <script type="text/javascript" src="${srRoot}/js/vender.min.js?${sbPID}"></script>
         <script type="text/javascript" src="${srRoot}/js/lib/jquery.cookiejar.js?${sbPID}"></script>
         <script type="text/javascript" src="${srRoot}/js/lib/jquery.json-2.2.min.js?${sbPID}"></script>
         <script type="text/javascript" src="${srRoot}/js/lib/jquery.selectboxes.min.js?${sbPID}"></script>
-        <script type="text/javascript" src="${srRoot}/js/lib/jquery.tokeninput.js?${sbPID}"></script>
         <script type="text/javascript" src="${srRoot}/js/lib/jquery.tablesorter-2.17.7.min.js?${sbPID}"></script><!-- Can't be added to bower -->
         <script type="text/javascript" src="${srRoot}/js/lib/jquery.tablesorter.widgets-2.17.7.min.js?${sbPID}"></script><!-- Can't be added to bower -->
         <script type="text/javascript" src="${srRoot}/js/lib/jquery.tablesorter.widget-columnSelector-2.17.7.js?${sbPID}"></script><!-- Can't be added to bower -->
         <script type="text/javascript" src="${srRoot}/js/lib/jquery.qtip-2.2.1.min.js?${sbPID}"></script><!-- Can't be added to bower -->
         <script type="text/javascript" src="${srRoot}/js/lib/jquery.ui.touch-punch-0.2.2.min.js?${sbPID}"></script><!-- Can't be added to bower -->
         <script type="text/javascript" src="${srRoot}/js/lib/isotope.pkgd.min.js?${sbPID}"></script><!-- Can't be added to bower -->
-        <script type="text/javascript" src="${srRoot}/js/lib/jquery.confirm.js?${sbPID}"></script><!-- Can't be added to bower -->
         <script type="text/javascript" src="${srRoot}/js/lib/formwizard.js?${sbPID}"></script><!-- Can't be added to bower -->
         <script type="text/javascript" src="${srRoot}/js/lib/pnotify.custom.min.js?${sbPID}"></script><!-- Needs to be removed -->
         <script type="text/javascript" src="${srRoot}/js/new/parsers.js?${sbPID}"></script>
diff --git a/gui/slick/views/manage.mako b/gui/slick/views/manage.mako
index cb8264528..19035aea7 100644
--- a/gui/slick/views/manage.mako
+++ b/gui/slick/views/manage.mako
@@ -5,7 +5,6 @@
     from sickbeard.common import statusStrings
 %>
 <%block name="scripts">
-<script type="text/javascript" src="${srRoot}/js/lib/bootbox.min.js?${sbPID}"></script>
 <script type="text/javascript" src="${srRoot}/js/new/manage.js"></script>
 <script type="text/javascript" src="${srRoot}/js/massUpdate.js?${sbPID}"></script>
 </%block>
-- 
GitLab


From 7532232c3526e87c1d5170527344164cdf62432d Mon Sep 17 00:00:00 2001
From: Alexis Tyler <xo@wvvw.me>
Date: Sat, 14 Nov 2015 17:13:02 +1030
Subject: [PATCH 185/215] add libs to bower

---
 .build/bower.json                             |   3 +++
 gui/slick/css/vender.min.css                  | Bin 1812 -> 3303 bytes
 .../js/lib/jquery-ui-1.10.4.custom.min.js     | Bin 132041 -> 0 bytes
 gui/slick/js/lib/jquery.qtip-2.2.1.min.js     | Bin 44296 -> 0 bytes
 .../js/lib/jquery.ui.touch-punch-0.2.2.min.js | Bin 1190 -> 0 bytes
 gui/slick/js/vender.min.js                    | Bin 504707 -> 641866 bytes
 gui/slick/views/layouts/main.mako             |   6 +-----
 7 files changed, 4 insertions(+), 5 deletions(-)
 delete mode 100644 gui/slick/js/lib/jquery-ui-1.10.4.custom.min.js
 delete mode 100644 gui/slick/js/lib/jquery.qtip-2.2.1.min.js
 delete mode 100644 gui/slick/js/lib/jquery.ui.touch-punch-0.2.2.min.js

diff --git a/.build/bower.json b/.build/bower.json
index d92b4f39c..ac3062b66 100644
--- a/.build/bower.json
+++ b/.build/bower.json
@@ -20,6 +20,9 @@
     "jquery-tokeninput": "~1.7.0",
     "bootstrap3-typeahead": "~3.1.1",
     "underscore": "~1.8.3",
+    "jqueryui-touch-punch": "*",
+    "pnotify": "~2.1.0",
+    "qtip2": "~2.2.1",
     "jQuery Confirm": "jquery-confirm#~2.5.0"
   }
 }
diff --git a/gui/slick/css/vender.min.css b/gui/slick/css/vender.min.css
index 16f33eb6152f17e9301150733d3242ef26430c9d..f4a14e40997d6bebf9c2f64070e38628db120a38 100644
GIT binary patch
literal 3303
zcmXTT(JRT%PR-NJ%qu7@(ap&$E~(BhOD#&v$uGCc$V^E|&9lx(%}mcIu}Um0$ydzG
zEyyn_Nz5yOi5jX}muIGwWLTLP7!*`kC*>EVq!w8j7E~w{=jUXmC@5Q6T3RQU78U0g
zS(T(#lvt<b=auLdXI7<J85$K-K)7j%xtTeYR$-|{DT#TBI>m{3#k$3*MVV>VRl1pZ
zDXA4!AX9P^i_$amtPHFR5>rw#^U|#htdkOxv(t<6OY>56lk;=(i>#E>($cI!zR)c$
zsmw{$EvYO>waUxSOSMkUNlh%W%1KQtsm0=Hg`CW4Y}#<BRR9N9HPp8T&>%221qA`j
zb;bo13KpOs!Rkic^3<g4%o5$if`Zh<qQt!9RIB8~qErmWrDPT-Cgr52=%6_oCa#c^
z33CjFJ+2lYi0%a>ohWe+P6ySPA?jl3YV7Q24Gmv&7Z4=LOoift#Jp;#erGojgr$g-
z)U?FXoRZp{Oe{_zH623JhjBrLHF6x7VvU0ogVeM{1DLN23=AMCu^f`t%?%9DoM@er
zSzM5lSZS4%lb@W8)xin{)oD5Ti6!7f26uviHPl@O*foIz2coYCl+R#JGB-DeIiVmw
zGp{7I2wi`1YEEi$NotBNu9!2hurM)6g&CNZmWJO1lz2)?N~%rCEJKNwl%o8Cl>G9%
z>Vo{@%#zIfJgdZ{;{2S_l2m90fR+Im2@#Yj(PI;mcXUA+61liYPELjvBD&z<z#*5E
zUs95vi!KQ*XP~JH5~Cy+HHJ9-tx!-6i%WR)f>IZ_NJCCJkfO-k+#I)2r8$^p8Q@b6
zDxoklCn#i*5<AwSkASIIqgXeyBsCXHVUU&xf@GU$gw4pbGy>)+q~=zmhcTEBF5|88
z@{4j4a|oD$;!AkWfu(3%-i4GBwR)wQx&?XpC7EfJ)g}1_Rz{#$ha^uh6Ei;`)tSh3
zm}PB7Np6l^QhrLM9kQWt1JW`pQd5xaQ$SLtTbz-Yl3!j8t2>hNE1*JF1`0+66$*w1
z1r-WK=}CzirUp6?q-UyWt(%))rAw@0BGn<gQ8zh1uOu-uFSQ6cdf|RDP(W1KdKRg<
z@TP--fhwYKMD{1#JY>P*jKrb>B)@|i8oEV^DVe3kRt7LXq6$LG7?>gyH<x6V<fK-k
zl<H8&=t2t@J(JX2m=Gw|4N&!`R+OM>N0H7<&d<|9c0Nb|Qo^Fz2`TzP#URWsNW#)H
zO3g(!QLnfpF*zIRHjr{;)1i_j`2`@EY7l{(NI^|EQq6({0@y9p5H`d_P)MMgr<<IU
zUz}Qm>>}OblFa1n)FNn=2sQ`iL9p}C{imCeSzMA|REd<B;3)`R&44U7um&4uWe93q
zLE4_?pmrBDvO!9~4L(@0Xkd-VFW}@+l3xI>cCaTNOj(4%=-QxdI3xvNr{OjjO&YgG
zSi9HIz`y`C-C+b1aw3CCf{PJEH4Ww>CjiXAMk!}t#$==>rlb~C!$K0&UI(?|brW+k
z)AOv7Q^BngZ1%%5utHL4NlAWQHMC}iwq#HnQ_#kPp@D%a8Ez~n&B*~bN>H;EtfE!`
Gr&R!n4${#8

delta 63
zcmaDZIfZX>0;>e0&SXVK;fcb66N_{wD=><H`C^l~88sQJC$C{rnCPN6ae?W?SBjg>
R8I74ISFt2-=4O><0stt25o`be

diff --git a/gui/slick/js/lib/jquery-ui-1.10.4.custom.min.js b/gui/slick/js/lib/jquery-ui-1.10.4.custom.min.js
deleted file mode 100644
index ce23cf3e604b1ce1abbdf84d3cb40d6bf3eaa2af..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 132041
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
M#^*t!3n&Ym0c^7-R{#J2

diff --git a/gui/slick/js/lib/jquery.qtip-2.2.1.min.js b/gui/slick/js/lib/jquery.qtip-2.2.1.min.js
deleted file mode 100644
index 411a0f8f98f112b9319f0d6696d6951641d587ec..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 44296
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

diff --git a/gui/slick/js/lib/jquery.ui.touch-punch-0.2.2.min.js b/gui/slick/js/lib/jquery.ui.touch-punch-0.2.2.min.js
deleted file mode 100644
index 33d6f97e5e6da98a226d5c223e70b014932fd3de..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 1190
zcmdPb;!@C3$O<e?Evi%q^;8JSFHO!+2q?`<&QLJWGtx8SQUI%P&M&Ae%1qBFQ7|$v
zG}KXWNi0iMa4RiJOD)O=ncz~In4^%BnVgzeoSLFgnwOGVq)?KPs^IGxqL5#t;2z+k
z5SCh0oSC1eU<6ZFtOqsRCAA<mFQwQDWROBuA;>LyrI~u=nJMY1C3;!KXyUo~rNyZb
zVSO%*w9>rflFa-(jU>(LB)#I&f`a^_61@_TKWvrq^T3SMyc8vc%shpZ{N&Qy)Vvbw
z%rp%}G{u_LMX4pFMS0e>Wr;-!$+k%#CqS$!D9SI%FR3g@)k(EY){6%Vdgf)8=p<Uh
zY*$FpNY}~Gtj<i+NY~3R%1qD9OU!XCOU;8iCAC;DCp9m<B*V@SVNtqXK~XA5jZ11;
zVrfo^hNd;h?o3;BBa$-`^U_mOz>$+$9BmM*lV%I^i(Yb3YGO$$*e(qvUr^Y9*~Lnl
z)@gc~d6^{$F^vqJlA_X72vMGymy%zuW2lp<SDajwnwl2@XGQ8{>Lur7rskD^#2~Cl
zowUT9;#4f8flgj&PL8H^x?V|Q5h%t|GK&imOOi9d?$Ainw60Coiw8$Ua7kiOi7hP9
zG}1MzK^{)CEy>6%21QC@O^sq2G=!ZK3rb3hQZd34BQP`(A)06l@}G4Y)H>h%veXn?
zu)D265u^l;y8N=#A|*{Ef!zGER1|@f{PH{{P3u}~n7cs+A)K8Cj%US0guNj5qu2>{
zMv6w74#Y~R4G05W^HT7chtOGC0CpM7p#0JjB~4IBDWY4cSq;{doRgWH4RU)T)Zbt`
z!Tts%S%jr1L7%3Vnv)938G1>Xc_|u7;K(WlMV69Il3qbkenln7FG!K7q^XIl7VJSx
nrJ!&_Qwhq8m<nC<Qj|0`tyA@q6LWIFNyfTXQv*^iX<7pSxpkw-

diff --git a/gui/slick/js/vender.min.js b/gui/slick/js/vender.min.js
index e37f67ccef5b5d5322859284153e21292d0efd20..c479c1d2b91e11d3ede44cd18e7019c452b4cb65 100644
GIT binary patch
delta 126485
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
QWhQ8jLuC7+_3RIs0gPAxV*mgE

delta 79
zcmX>#O}+WKTtf?E3sVbo3rh>@7B*4!sfJAM+m-A&!UeWh`E%@3V&vLxQN+<6wf(>u
ij?*As_j`^5QQLjII17{+xwh}g<(wF~-S0T(A7%hklpL)9

diff --git a/gui/slick/views/layouts/main.mako b/gui/slick/views/layouts/main.mako
index b896d3c97..e91235eff 100644
--- a/gui/slick/views/layouts/main.mako
+++ b/gui/slick/views/layouts/main.mako
@@ -41,7 +41,6 @@
         <meta name="msapplication-TileImage" content="${srRoot}/images/ico/favicon-144.png">
         <meta name="msapplication-config" content="${srRoot}/css/browserconfig.xml">
 
-
         <meta data-var="srRoot" data-content="${srRoot}">
         <meta data-var="themeSpinner" data-content="${('', '-dark')[sickbeard.THEME_NAME == 'dark']}">
         <meta data-var="anonURL" data-content="${sickbeard.ANON_REDIRECT}">
@@ -78,6 +77,7 @@
         <link rel="apple-touch-icon" sizes="72x72" href="${srRoot}/images/ico/favicon-72.png">
         <link rel="apple-touch-icon" href="${srRoot}/images/ico/favicon-57.png">
 
+        <link rel="stylesheet" type="text/css" href="${srRoot}/css/vender.min.css?${sbPID}"/>
         <link rel="stylesheet" type="text/css" href="${srRoot}/css/lib/bootstrap.min.css?${sbPID}"/>
         <link rel="stylesheet" type="text/css" href="${srRoot}/css/browser.css?${sbPID}" />
         <link rel="stylesheet" type="text/css" href="${srRoot}/css/lib/jquery-ui-1.10.4.custom.min.css?${sbPID}" />
@@ -86,7 +86,6 @@
         <link rel="stylesheet" type="text/css" href="${srRoot}/css/${sickbeard.THEME_NAME}.css?${sbPID}" />
         <link rel="stylesheet" type="text/css" href="${srRoot}/css/print.css?${sbPID}" />
         % if srLogin:
-        <link rel="stylesheet" type="text/css" href="${srRoot}/css/lib/pnotify.custom.min.css?${sbPID}" />
         <link rel="stylesheet" type="text/css" href="${srRoot}/css/country-flags.css?${sbPID}"/>
         % endif
         <%block name="css" />
@@ -318,11 +317,8 @@
         <script type="text/javascript" src="${srRoot}/js/lib/jquery.tablesorter-2.17.7.min.js?${sbPID}"></script><!-- Can't be added to bower -->
         <script type="text/javascript" src="${srRoot}/js/lib/jquery.tablesorter.widgets-2.17.7.min.js?${sbPID}"></script><!-- Can't be added to bower -->
         <script type="text/javascript" src="${srRoot}/js/lib/jquery.tablesorter.widget-columnSelector-2.17.7.js?${sbPID}"></script><!-- Can't be added to bower -->
-        <script type="text/javascript" src="${srRoot}/js/lib/jquery.qtip-2.2.1.min.js?${sbPID}"></script><!-- Can't be added to bower -->
-        <script type="text/javascript" src="${srRoot}/js/lib/jquery.ui.touch-punch-0.2.2.min.js?${sbPID}"></script><!-- Can't be added to bower -->
         <script type="text/javascript" src="${srRoot}/js/lib/isotope.pkgd.min.js?${sbPID}"></script><!-- Can't be added to bower -->
         <script type="text/javascript" src="${srRoot}/js/lib/formwizard.js?${sbPID}"></script><!-- Can't be added to bower -->
-        <script type="text/javascript" src="${srRoot}/js/lib/pnotify.custom.min.js?${sbPID}"></script><!-- Needs to be removed -->
         <script type="text/javascript" src="${srRoot}/js/new/parsers.js?${sbPID}"></script>
         <script type="text/javascript" src="${srRoot}/js/new/meta.js?${sbPID}"></script>
         <script type="text/javascript" src="${srRoot}/js/new/core.js?${sbPID}"></script>
-- 
GitLab


From 3ba1af01dca2e30f8c40bc6fb5bb2f4ae4046cc7 Mon Sep 17 00:00:00 2001
From: Alexis Tyler <xo@wvvw.me>
Date: Sat, 14 Nov 2015 17:25:03 +1030
Subject: [PATCH 186/215] remove old pnotify

---
 gui/slick/js/lib/pnotify.custom.min.js | Bin 27440 -> 0 bytes
 1 file changed, 0 insertions(+), 0 deletions(-)
 delete mode 100644 gui/slick/js/lib/pnotify.custom.min.js

diff --git a/gui/slick/js/lib/pnotify.custom.min.js b/gui/slick/js/lib/pnotify.custom.min.js
deleted file mode 100644
index b530874b9c8496d26425c0e3b3ca2d7fbddff6c0..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 27440
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

-- 
GitLab


From 1805c0a92503d98c9c4113e2c77094f5646e42f0 Mon Sep 17 00:00:00 2001
From: Alexis Tyler <xo@wvvw.me>
Date: Sat, 14 Nov 2015 17:51:47 +1030
Subject: [PATCH 187/215] update js to load it's own file and not home.js

---
 gui/slick/views/config_postProcessing.mako | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/gui/slick/views/config_postProcessing.mako b/gui/slick/views/config_postProcessing.mako
index d8726aa80..182f48771 100644
--- a/gui/slick/views/config_postProcessing.mako
+++ b/gui/slick/views/config_postProcessing.mako
@@ -13,7 +13,7 @@
 <%block name="scripts">
 <script type="text/javascript" src="${srRoot}/js/configPostProcessing.js?${sbPID}"></script>
 <script type="text/javascript" src="${srRoot}/js/config.js?${sbPID}"></script>
-<script type="text/javascript" src="${srRoot}/js/new/home.js"></script>
+<script type="text/javascript" src="${srRoot}/js/new/config_postProcessing.js"></script>
 </%block>
 <%block name="content">
 <div id="content960">
-- 
GitLab


From 7b11623592e4f3529e7c81b52c8946cc063b8dec Mon Sep 17 00:00:00 2001
From: Dustyn Gibson <miigotu@gmail.com>
Date: Fri, 13 Nov 2015 23:14:52 -0800
Subject: [PATCH 188/215] Test travis caching changes

---
 .travis.yml | 11 ++++-------
 1 file changed, 4 insertions(+), 7 deletions(-)

diff --git a/.travis.yml b/.travis.yml
index f250fbdf4..74d73d121 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,6 +1,8 @@
+sudo: false
+
 language: python
-python:
-  - 2.7.10
+
+python: 2.7.9
 
 sudo: false
 
@@ -8,13 +10,8 @@ branches:
   except:
     - master
 
-install: echo "Nothing required!"
-
 cache: pip
 
-before_script:
- - chmod +x ./tests/all_tests.py
-
 script:
   - ./tests/all_tests.py
 
-- 
GitLab


From 674bec6a5be4bbe6b5da3872367efcae4c863df1 Mon Sep 17 00:00:00 2001
From: Alexis Tyler <xo@wvvw.me>
Date: Sat, 14 Nov 2015 18:30:36 +1030
Subject: [PATCH 189/215] update tablesorter

---
 .build/Gruntfile.js                           |   8 ++++++++
 .build/bower.json                             |   2 +-
 gui/slick/css/vender.min.css                  | Bin 3303 -> 8295 bytes
 .../js/lib/jquery.tablesorter-2.17.7.min.js   | Bin 30757 -> 0 bytes
 gui/slick/js/new/config_postProcessing.js     |   6 ++++--
 gui/slick/js/new/displayShow.js               |   4 ++--
 gui/slick/js/vender.min.js                    | Bin 641866 -> 658226 bytes
 gui/slick/views/layouts/main.mako             |   6 +++---
 8 files changed, 18 insertions(+), 8 deletions(-)
 delete mode 100644 gui/slick/js/lib/jquery.tablesorter-2.17.7.min.js

diff --git a/.build/Gruntfile.js b/.build/Gruntfile.js
index 8716d54c5..470fad0bf 100644
--- a/.build/Gruntfile.js
+++ b/.build/Gruntfile.js
@@ -8,6 +8,14 @@ module.exports = function(grunt) {
                 ],
                 dependencies: {
                 },
+                mainFiles: {
+                    'tablesorter': [
+                        'dist/js/jquery.tablesorter.combined.js',
+                        'dist/js/widgets/widget-columnSelector.min.js',
+                        'dist/js/widgets/widget-stickyHeaders.min.js',
+                        'dist/css/theme.blue.min.css'
+                    ]
+                },
                 bowerOptions: {
                     relative: false
                 }
diff --git a/.build/bower.json b/.build/bower.json
index ac3062b66..8ea36cfd9 100644
--- a/.build/bower.json
+++ b/.build/bower.json
@@ -14,7 +14,6 @@
     "bootstrap": "~3.3.5",
     "bootstrap-hover-dropdown": "~2.1.3",
     "jquery-ui": "~1.11.4",
-    "tablesorter": "jquery.tablesorter#~2.23.5",
     "jquery-form": "~3.46.0",
     "jquery-timeago": "~1.4.3",
     "jquery-tokeninput": "~1.7.0",
@@ -23,6 +22,7 @@
     "jqueryui-touch-punch": "*",
     "pnotify": "~2.1.0",
     "qtip2": "~2.2.1",
+    "tablesorter": "jquery.tablesorter#~2.24.5",
     "jQuery Confirm": "jquery-confirm#~2.5.0"
   }
 }
diff --git a/gui/slick/css/vender.min.css b/gui/slick/css/vender.min.css
index f4a14e40997d6bebf9c2f64070e38628db120a38..c23d4637c1e42dbea7d6a89964b962a45fffef9a 100644
GIT binary patch
literal 8295
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
N3G7s}q%=#*S^yAm@@N16

delta 49
zcmaFv@LY1Dq{`%*ObQd{>rJ%P-FW6SGk<<rYEfEFez{dfW=cwG-sEX4DHCmVH~(b0
G%MJhp_7rgd

diff --git a/gui/slick/js/lib/jquery.tablesorter-2.17.7.min.js b/gui/slick/js/lib/jquery.tablesorter-2.17.7.min.js
deleted file mode 100644
index 8ac7a9c071f3c9d92d57b2fbd61e53a1654a3e62..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 30757
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
RK?f*nHL?OhTS+yoxd4}n&yWBB

diff --git a/gui/slick/js/new/config_postProcessing.js b/gui/slick/js/new/config_postProcessing.js
index b09818bbd..731025565 100644
--- a/gui/slick/js/new/config_postProcessing.js
+++ b/gui/slick/js/new/config_postProcessing.js
@@ -1,2 +1,4 @@
-$('#config-components').tabs();
-$('#tv_download_dir').fileBrowser({ title: 'Select TV Download Directory' });
+$(document).ready(function(){
+    $('#config-components').tabs();
+    $('#tv_download_dir').fileBrowser({ title: 'Select TV Download Directory' });
+});
diff --git a/gui/slick/js/new/displayShow.js b/gui/slick/js/new/displayShow.js
index acc6c5d6e..dc83839e8 100644
--- a/gui/slick/js/new/displayShow.js
+++ b/gui/slick/js/new/displayShow.js
@@ -272,7 +272,7 @@ $(document).ready(function(){
         content: '<div id="popover-target"></div>'
     })
     // bootstrap popover event triggered when the popover opens
-    .on('shown.bs.popover', function () {
-        $.tablesorter.columnSelector.attachTo( $("#showTable, #animeTable"), '#popover-target');
+    .on('shown.bs.popover', function (){
+        $.tablesorter.columnSelector.attachTo($("#showTable, #animeTable"), '#popover-target');
     });
 });
diff --git a/gui/slick/js/vender.min.js b/gui/slick/js/vender.min.js
index c479c1d2b91e11d3ede44cd18e7019c452b4cb65..c245f1543ebd54fe038c79c995029862505ada3e 100644
GIT binary patch
delta 42921
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

delta 33206
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
XsWk^z2KapcOwbk*k?n!(To0K6(56o=

diff --git a/gui/slick/views/layouts/main.mako b/gui/slick/views/layouts/main.mako
index e91235eff..abaa0cb89 100644
--- a/gui/slick/views/layouts/main.mako
+++ b/gui/slick/views/layouts/main.mako
@@ -314,9 +314,9 @@
         <script type="text/javascript" src="${srRoot}/js/lib/jquery.cookiejar.js?${sbPID}"></script>
         <script type="text/javascript" src="${srRoot}/js/lib/jquery.json-2.2.min.js?${sbPID}"></script>
         <script type="text/javascript" src="${srRoot}/js/lib/jquery.selectboxes.min.js?${sbPID}"></script>
-        <script type="text/javascript" src="${srRoot}/js/lib/jquery.tablesorter-2.17.7.min.js?${sbPID}"></script><!-- Can't be added to bower -->
-        <script type="text/javascript" src="${srRoot}/js/lib/jquery.tablesorter.widgets-2.17.7.min.js?${sbPID}"></script><!-- Can't be added to bower -->
-        <script type="text/javascript" src="${srRoot}/js/lib/jquery.tablesorter.widget-columnSelector-2.17.7.js?${sbPID}"></script><!-- Can't be added to bower -->
+        <!-- <script type="text/javascript" src="${srRoot}/js/lib/jquery.tablesorter-2.17.7.min.js?${sbPID}"></script><!-- Can't be added to bower -->
+        <!-- <script type="text/javascript" src="${srRoot}/js/lib/jquery.tablesorter.widgets-2.17.7.min.js?${sbPID}"></script><!-- Can't be added to bower -->
+        <!-- <script type="text/javascript" src="${srRoot}/js/lib/jquery.tablesorter.widget-columnSelector-2.17.7.js?${sbPID}"></script><!-- Can't be added to bower -->
         <script type="text/javascript" src="${srRoot}/js/lib/isotope.pkgd.min.js?${sbPID}"></script><!-- Can't be added to bower -->
         <script type="text/javascript" src="${srRoot}/js/lib/formwizard.js?${sbPID}"></script><!-- Can't be added to bower -->
         <script type="text/javascript" src="${srRoot}/js/new/parsers.js?${sbPID}"></script>
-- 
GitLab


From 45216cc4e2e37fdad6af1ee3e2b4771a21bcc0d1 Mon Sep 17 00:00:00 2001
From: Alexis Tyler <xo@wvvw.me>
Date: Sat, 14 Nov 2015 18:32:03 +1030
Subject: [PATCH 190/215] remove old tablesorter refs

---
 ...ablesorter.widget-columnSelector-2.17.7.js | 317 ------------------
 .../jquery.tablesorter.widgets-2.17.7.min.js  | Bin 33207 -> 0 bytes
 gui/slick/views/layouts/main.mako             |   3 -
 3 files changed, 320 deletions(-)
 delete mode 100644 gui/slick/js/lib/jquery.tablesorter.widget-columnSelector-2.17.7.js
 delete mode 100644 gui/slick/js/lib/jquery.tablesorter.widgets-2.17.7.min.js

diff --git a/gui/slick/js/lib/jquery.tablesorter.widget-columnSelector-2.17.7.js b/gui/slick/js/lib/jquery.tablesorter.widget-columnSelector-2.17.7.js
deleted file mode 100644
index 22d641b83..000000000
--- a/gui/slick/js/lib/jquery.tablesorter.widget-columnSelector-2.17.7.js
+++ /dev/null
@@ -1,317 +0,0 @@
-/* Column Selector/Responsive table widget (beta) for TableSorter 5/22/2014 (v2.17.0)
- * Requires tablesorter v2.8+ and jQuery 1.7+
- * by Justin Hallett & Rob Garrison
- */
-/*jshint browser:true, jquery:true, unused:false */
-/*global jQuery: false */
-;(function($){
-"use strict";
-
-var ts = $.tablesorter,
-namespace = '.tscolsel',
-tsColSel = ts.columnSelector = {
-
-	queryAll   : '@media only all { [columns] { display: none; } }',
-	queryBreak : '@media all and (min-width: [size]) { [columns] { display: table-cell; } }',
-
-	init: function(table, c, wo) {
-		var $t, colSel;
-
-		// abort if no input is contained within the layout
-		$t = $(wo.columnSelector_layout);
-		if (!$t.find('input').add( $t.filter('input') ).length) {
-			if (c.debug) {
-				ts.log('*** ERROR: Column Selector aborting, no input found in the layout! ***');
-			}
-			return;
-		}
-
-		// unique table class name
-		c.tableId = 'tablesorter' + new Date().getTime();
-		c.$table.addClass( c.tableId );
-
-		// build column selector/state array
-		colSel = c.selector = { $container : $(wo.columnSelector_container || '<div>') };
-		colSel.$style = $('<style></style>').prop('disabled', true).appendTo('head');
-		colSel.$breakpoints = $('<style></style>').prop('disabled', true).appendTo('head');
-
-		colSel.isInitializing = true;
-		tsColSel.setupSelector(table, c, wo);
-
-		if (wo.columnSelector_mediaquery) {
-			tsColSel.setupBreakpoints(c, wo);
-		}
-
-		colSel.isInitializing = false;
-		if (colSel.$container.length) {
-			tsColSel.updateCols(c, wo);
-		}
-
-		c.$table
-			.off('refreshColumnSelector' + namespace)
-			.on('refreshColumnSelector' + namespace, function(){
-				// make sure we're using current config settings
-				var c = this.config;
-				tsColSel.updateBreakpoints(c, c.widgetOptions);
-				tsColSel.updateCols(c, c.widgetOptions);
-			});
-
-	},
-
-	setupSelector: function(table, c, wo) {
-		var name,
-			colSel = c.selector,
-			$container = colSel.$container,
-			useStorage = wo.columnSelector_saveColumns && ts.storage,
-			// get stored column states
-			saved = useStorage ? ts.storage( table, 'tablesorter-columnSelector' ) : [],
-			state = useStorage ? ts.storage( table, 'tablesorter-columnSelector-auto') : {};
-
-		// initial states
-		colSel.auto = $.isEmptyObject(state) || $.type(state.auto) !== "boolean" ? wo.columnSelector_mediaqueryState : state.auto;
-		colSel.states = [];
-		colSel.$column = [];
-		colSel.$wrapper = [];
-		colSel.$checkbox = [];
-		// populate the selector container
-		c.$table.children('thead').find('tr:first th', table).each(function() {
-			var $this = $(this),
-				// if no data-priority is assigned, default to 1, but don't remove it from the selector list
-				priority = $this.attr(wo.columnSelector_priority) || 1,
-				colId = $this.attr('data-column'),
-				state = ts.getData(this, c.headers[colId], 'columnSelector');
-
-
-			// if this column not hidable at all
-			// include getData check (includes "columnSelector-false" class, data attribute, etc)
-			if ( isNaN(priority) && priority.length > 0 || state === 'disable' ||
-				( wo.columnSelector_columns[colId] && wo.columnSelector_columns[colId] === 'disable') ) {
-				return true; // goto next
-			}
-
-			// set default state; storage takes priority
-			colSel.states[colId] = saved && typeof(saved[colId]) !== 'undefined' ?
-				saved[colId] : typeof(wo.columnSelector_columns[colId]) !== 'undefined' ?
-				wo.columnSelector_columns[colId] : (state === 'true' || !(state === 'false'));
-			colSel.$column[colId] = $(this);
-
-			// set default col title
-			name = $this.attr(wo.columnSelector_name) || $this.text();
-
-			if ($container.length) {
-				colSel.$wrapper[colId] = $(wo.columnSelector_layout.replace(/\{name\}/g, name)).appendTo($container);
-				colSel.$checkbox[colId] = colSel.$wrapper[colId]
-					// input may not be wrapped within the layout template
-					.find('input').add( colSel.$wrapper[colId].filter('input') )
-					.attr('data-column', colId)
-					.prop('checked', colSel.states[colId])
-					.on('change', function(){
-						colSel.states[colId] = this.checked;
-						tsColSel.updateCols(c, wo);
-					}).change();
-			}
-		});
-
-	},
-
-	setupBreakpoints: function(c, wo){
-		var colSel = c.selector;
-
-		// add responsive breakpoints
-		if (wo.columnSelector_mediaquery) {
-			// used by window resize function
-			colSel.lastIndex = -1;
-			wo.columnSelector_breakpoints.sort();
-			tsColSel.updateBreakpoints(c, wo);
-			c.$table
-				.off('updateAll' + namespace)
-				.on('updateAll' + namespace, function(){
-					tsColSel.updateBreakpoints(c, wo);
-					tsColSel.updateCols(c, wo);
-				});
-		}
-
-		if (colSel.$container.length) {
-			// Add media queries toggle
-			if (wo.columnSelector_mediaquery) {
-				colSel.$auto = $( wo.columnSelector_layout.replace(/\{name\}/g, wo.columnSelector_mediaqueryName) ).prependTo(colSel.$container);
-				colSel.$auto
-					// needed in case the input in the layout is not wrapped
-					.find('input').add( colSel.$auto.filter('input') )
-					.attr('data-column', 'auto')
-					.prop('checked', colSel.auto)
-					.on('change', function(){
-						colSel.auto = this.checked;
-						$.each( colSel.$checkbox, function(i, $cb){
-							if ($cb) {
-								$cb[0].disabled = colSel.auto;
-								colSel.$wrapper[i].toggleClass('disabled', colSel.auto);
-							}
-						});
-						if (wo.columnSelector_mediaquery) {
-							tsColSel.updateBreakpoints(c, wo);
-						}
-						tsColSel.updateCols(c, wo);
-						// copy the column selector to a popup/tooltip
-						if (c.selector.$popup) {
-							c.selector.$popup.find('.tablesorter-column-selector')
-								.html( colSel.$container.html() )
-								.find('input').each(function(){
-									var indx = $(this).attr('data-column');
-									$(this).prop( 'checked', indx === 'auto' ? colSel.auto : colSel.states[indx] );
-								});
-						}
-						if (wo.columnSelector_saveColumns && ts.storage) {
-							ts.storage( c.$table[0], 'tablesorter-columnSelector-auto', { auto : colSel.auto } );
-						}
-					}).change();
-			}
-			// Add a bind on update to re-run col setup
-			c.$table.off('update' + namespace).on('update' + namespace, function() {
-				tsColSel.updateCols(c, wo);
-			});
-		}
-	},
-
-	updateBreakpoints: function(c, wo) {
-		var priority, column, breaks,
-			colSel = c.selector,
-			prefix = '.' + c.tableId,
-			mediaAll = [],
-			breakpts = '';
-		if (wo.columnSelector_mediaquery && !colSel.auto) {
-			colSel.$breakpoints.prop('disabled', true);
-			colSel.$style.prop('disabled', false);
-			return;
-		}
-
-		// only 6 breakpoints (same as jQuery Mobile)
-		for (priority = 0; priority < 6; priority++){
-			/*jshint loopfunc:true */
-			breaks = [];
-			c.$headers.filter('[' + wo.columnSelector_priority + '=' + (priority + 1) + ']').each(function(){
-				column = parseInt($(this).attr('data-column'), 10) + 1;
-				breaks.push(prefix + ' tr th:nth-child(' + column + ')');
-				breaks.push(prefix + ' tr td:nth-child(' + column + ')');
-			});
-			if (breaks.length) {
-				mediaAll = mediaAll.concat( breaks );
-				breakpts += tsColSel.queryBreak
-					.replace(/\[size\]/g, wo.columnSelector_breakpoints[priority])
-					.replace(/\[columns\]/g, breaks.join(','));
-			}
-		}
-		if (colSel.$style) {
-			colSel.$style.prop('disabled', true);
-		}
-		colSel.$breakpoints
-			.prop('disabled', false)
-			.html( tsColSel.queryAll.replace(/\[columns\]/g, mediaAll.join(',')) + breakpts );
-	},
-
-	updateCols: function(c, wo) {
-		if (wo.columnSelector_mediaquery && c.selector.auto || c.selector.isInitializing) {
-			return;
-		}
-		var column,
-			colSel = c.selector,
-			styles = [],
-			prefix = '.' + c.tableId;
-		colSel.$container.find('input[data-column]').filter('[data-column!="auto"]').each(function(){
-			if (!this.checked) {
-				column = parseInt( $(this).attr('data-column'), 10 ) + 1;
-				styles.push(prefix + ' tr th:nth-child(' + column + ')');
-				styles.push(prefix + ' tr td:nth-child(' + column + ')');
-			}
-		});
-		if (wo.columnSelector_mediaquery){
-			colSel.$breakpoints.prop('disabled', true);
-		}
-		if (colSel.$style) {
-			colSel.$style.prop('disabled', false).html( styles.length ? styles.join(',') + ' { display: none; }' : '' );
-		}
-		if (wo.columnSelector_saveColumns && ts.storage) {
-			ts.storage( c.$table[0], 'tablesorter-columnSelector', colSel.states );
-		}
-	},
-
-	attachTo : function(table, elm) {
-		table = $(table)[0];
-		var colSel, wo, indx,
-			c = table.config,
-			$popup = $(elm);
-		if ($popup.length && c) {
-			if (!$popup.find('.tablesorter-column-selector').length) {
-				// add a wrapper to add the selector into, in case the popup has other content
-				$popup.append('<span class="tablesorter-column-selector"></span>');
-			}
-			colSel = c.selector;
-			wo = c.widgetOptions;
-			$popup.find('.tablesorter-column-selector')
-				.html( colSel.$container.html() )
-				.find('input').each(function(){
-					var indx = $(this).attr('data-column');
-					$(this).prop( 'checked', indx === 'auto' ? colSel.auto : colSel.states[indx] );
-				});
-			colSel.$popup = $popup.on('change', 'input', function(){
-				// data input
-				indx = $(this).attr('data-column');
-				// update original popup
-				colSel.$container.find('input[data-column="' + indx + '"]')
-					.prop('checked', this.checked)
-					.trigger('change');
-			});
-		}
-	}
-
-};
-
-ts.addWidget({
-	id: "columnSelector",
-	priority: 10,
-	options: {
-		// target the column selector markup
-		columnSelector_container : null,
-		// column status, true = display, false = hide
-		// disable = do not display on list
-		columnSelector_columns : {},
-		// remember selected columns
-		columnSelector_saveColumns: true,
-
-		// container layout
-		columnSelector_layout : '<label><input type="checkbox">{name}</label>',
-		// data attribute containing column name to use in the selector container
-		columnSelector_name  : 'data-selector-name',
-
-		/* Responsive Media Query settings */
-		// enable/disable mediaquery breakpoints
-		columnSelector_mediaquery: true,
-		// toggle checkbox name
-		columnSelector_mediaqueryName: 'Auto: ',
-		// breakpoints checkbox initial setting
-		columnSelector_mediaqueryState: true,
-		// responsive table hides columns with priority 1-6 at these breakpoints
-		// see http://view.jquerymobile.com/1.3.2/dist/demos/widgets/table-column-toggle/#Applyingapresetbreakpoint
-		// *** set to false to disable ***
-		columnSelector_breakpoints : [ '20em', '30em', '40em', '50em', '60em', '70em' ],
-		// data attribute containing column priority
-		// duplicates how jQuery mobile uses priorities:
-		// http://view.jquerymobile.com/1.3.2/dist/demos/widgets/table-column-toggle/
-		columnSelector_priority : 'data-priority'
-
-	},
-	init: function(table, thisWidget, c, wo) {
-		tsColSel.init(table, c, wo);
-	},
-	remove: function(table, c){
-		var csel = c.selector;
-		csel.$container.empty();
-		if (csel.$popup) { csel.$popup.empty(); }
-		csel.$style.remove();
-		csel.$breakpoints.remove();
-		c.$table.off('updateAll' + namespace + ' update' + namespace);
-	}
-
-});
-
-})(jQuery);
diff --git a/gui/slick/js/lib/jquery.tablesorter.widgets-2.17.7.min.js b/gui/slick/js/lib/jquery.tablesorter.widgets-2.17.7.min.js
deleted file mode 100644
index 18996733f54b6a0ddd4a7c38a870633426d3a447..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 33207
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

diff --git a/gui/slick/views/layouts/main.mako b/gui/slick/views/layouts/main.mako
index abaa0cb89..3499cb7e0 100644
--- a/gui/slick/views/layouts/main.mako
+++ b/gui/slick/views/layouts/main.mako
@@ -314,9 +314,6 @@
         <script type="text/javascript" src="${srRoot}/js/lib/jquery.cookiejar.js?${sbPID}"></script>
         <script type="text/javascript" src="${srRoot}/js/lib/jquery.json-2.2.min.js?${sbPID}"></script>
         <script type="text/javascript" src="${srRoot}/js/lib/jquery.selectboxes.min.js?${sbPID}"></script>
-        <!-- <script type="text/javascript" src="${srRoot}/js/lib/jquery.tablesorter-2.17.7.min.js?${sbPID}"></script><!-- Can't be added to bower -->
-        <!-- <script type="text/javascript" src="${srRoot}/js/lib/jquery.tablesorter.widgets-2.17.7.min.js?${sbPID}"></script><!-- Can't be added to bower -->
-        <!-- <script type="text/javascript" src="${srRoot}/js/lib/jquery.tablesorter.widget-columnSelector-2.17.7.js?${sbPID}"></script><!-- Can't be added to bower -->
         <script type="text/javascript" src="${srRoot}/js/lib/isotope.pkgd.min.js?${sbPID}"></script><!-- Can't be added to bower -->
         <script type="text/javascript" src="${srRoot}/js/lib/formwizard.js?${sbPID}"></script><!-- Can't be added to bower -->
         <script type="text/javascript" src="${srRoot}/js/new/parsers.js?${sbPID}"></script>
-- 
GitLab


From 04f5541531de7551e323ee52401f11d6049c94c4 Mon Sep 17 00:00:00 2001
From: Alexis Tyler <xo@wvvw.me>
Date: Sat, 14 Nov 2015 20:55:01 +1030
Subject: [PATCH 191/215] fix broken js when there's no failed downloads

---
 gui/slick/js/failedDownloads.js             | 37 +++++++++++----------
 gui/slick/views/manage_failedDownloads.mako |  3 +-
 2 files changed, 21 insertions(+), 19 deletions(-)

diff --git a/gui/slick/js/failedDownloads.js b/gui/slick/js/failedDownloads.js
index 4b991fc2a..7b8a16a81 100644
--- a/gui/slick/js/failedDownloads.js
+++ b/gui/slick/js/failedDownloads.js
@@ -22,26 +22,29 @@ $(document).ready(function(){
         });
     });
 
-    $('.removeCheck').forEach(function(name) {
-        var lastCheck = null;
-        $(name).click(function(event) {
-            if(!lastCheck || !event.shiftKey) {
-                lastCheck = this;
-                return;
-            }
+    if($('.removeCheck').length){
+        $('.removeCheck').forEach(function(name) {
+            var lastCheck = null;
+            $(name).click(function(event) {
+                if(!lastCheck || !event.shiftKey) {
+                    lastCheck = this;
+                    return;
+                }
 
-            var check = this;
-            var found = 0;
+                var check = this;
+                var found = 0;
 
-            $(name+':visible').each(function() {
-                switch (found) {
-                    case 2: return false;
-                    case 1:
-                    this.checked = lastCheck.checked;
-                }
+                $(name+':visible').each(function() {
+                    switch (found) {
+                        case 2: return false;
+                        case 1:
+                        this.checked = lastCheck.checked;
+                    }
 
-                if (this === check || this === lastCheck) { found++; }
+                    if (this === check || this === lastCheck) { found++; }
+                });
             });
         });
-    });
+    }
+
 });
diff --git a/gui/slick/views/manage_failedDownloads.mako b/gui/slick/views/manage_failedDownloads.mako
index dbce4121f..4c56c324b 100644
--- a/gui/slick/views/manage_failedDownloads.mako
+++ b/gui/slick/views/manage_failedDownloads.mako
@@ -47,7 +47,6 @@
   </tfoot>
   <tbody>
 % for hItem in failedResults:
-<% curRemove  = "<input type=\"checkbox\" class=\"removeCheck\" id=\"remove-"+hItem["release"]+"\" />" %>
   <tr>
     <td class="nowrap">${hItem["release"]}</td>
     <td align="center">
@@ -65,7 +64,7 @@
         <img src="${srRoot}/images/providers/missing.png" width="16" height="16" alt="missing provider" title="missing provider"/>
     % endif
     </td>
-    <td align="center">${curRemove}</td>
+    <td align="center"><input type="checkbox" class="removeCheck" id="remove-${hItem["release"]}" /></td>
   </tr>
 % endfor
   </tbody>
-- 
GitLab


From 0c5dec742a317c9b43c22a2280ea9244b674fa69 Mon Sep 17 00:00:00 2001
From: Alexis Tyler <xo@wvvw.me>
Date: Sat, 14 Nov 2015 22:33:54 +1030
Subject: [PATCH 192/215] fix jquery-confirm bower package

---
 .build/bower.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.build/bower.json b/.build/bower.json
index 8ea36cfd9..3fe6fa1b8 100644
--- a/.build/bower.json
+++ b/.build/bower.json
@@ -23,6 +23,6 @@
     "pnotify": "~2.1.0",
     "qtip2": "~2.2.1",
     "tablesorter": "jquery.tablesorter#~2.24.5",
-    "jQuery Confirm": "jquery-confirm#~2.5.0"
+    "jquery-confirm": "~2.5.1"
   }
 }
-- 
GitLab


From 949bdab7564ba6d20e8054d25ab5313f346a2c3d Mon Sep 17 00:00:00 2001
From: Alexis Tyler <xo@wvvw.me>
Date: Sat, 14 Nov 2015 22:34:25 +1030
Subject: [PATCH 193/215] update for loops to use cache for length

---
 gui/slick/js/configNotifications.js  | 4 ++--
 gui/slick/js/configPostProcessing.js | 2 +-
 gui/slick/js/configProviders.js      | 2 +-
 3 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/gui/slick/js/configNotifications.js b/gui/slick/js/configNotifications.js
index 5c69d7d47..f2bae59c2 100644
--- a/gui/slick/js/configNotifications.js
+++ b/gui/slick/js/configNotifications.js
@@ -271,7 +271,7 @@ $(document).ready(function(){
         var nmjv2_host = $('#nmjv2_host').val();
         var nmjv2_dbloc;
         var radios = document.getElementsByName('nmjv2_dbloc');
-        for (var i = 0; i < radios.length; i++) {
+        for(var i = 0, len = radios.length; i < len; i++) {
             if (radios[i].checked) {
                 nmjv2_dbloc=radios[i].value;
                 break;
@@ -498,7 +498,7 @@ $(document).ready(function(){
             var devices = jQuery.parseJSON(data).devices;
             var current_pushbullet_device = $("#pushbullet_device").val();
             $("#pushbullet_device_list").html('');
-            for (var i = 0; i < devices.length; i++) {
+            for (var i = 0, len = devices.length; i < len; i++) {
                 if(devices[i].active === true) {
                     if(current_pushbullet_device == devices[i].iden) {
                         $("#pushbullet_device_list").append('<option value="'+devices[i].iden+'" selected>' + devices[i].nickname + '</option>');
diff --git a/gui/slick/js/configPostProcessing.js b/gui/slick/js/configPostProcessing.js
index ff1bb61ad..f5a1ff8a1 100644
--- a/gui/slick/js/configPostProcessing.js
+++ b/gui/slick/js/configPostProcessing.js
@@ -395,7 +395,7 @@ $(document).ready(function () {
             config_arr.push(season_all_banner ? '1' : '0');
 
             var cur_num = 0;
-            for (var i = 0; i < config_arr.length; i++) {
+            for (var i = 0, len = config_arr.length; i < len; i++) {
                 cur_num += parseInt(config_arr[i]);
             }
             if (cur_num > cur_most) {
diff --git a/gui/slick/js/configProviders.js b/gui/slick/js/configProviders.js
index 2f6e1bc1f..e2a7a49ed 100644
--- a/gui/slick/js/configProviders.js
+++ b/gui/slick/js/configProviders.js
@@ -325,7 +325,7 @@ $(document).ready(function(){
 
         if (finalArr.length > 0) {
             $('<select>').prop('id','editAProvider').addClass('form-control input-sm').appendTo('#provider-list');
-            for (var i = 0; i < finalArr.length; i++) {
+            for (var i = 0, len = finalArr.length; i < len; i++) {
                 var provider = finalArr[i];
                 $('#editAProvider').append($('<option>').prop('value',provider).text($.trim($('#'+provider).text()).replace(/\s\*$/, '').replace(/\s\*\*$/, '')));
             }
-- 
GitLab


From 3b5cb718661883b9295798edd82a73f62f6ef7ae Mon Sep 17 00:00:00 2001
From: medariox <dariovizz@hotmail.it>
Date: Sat, 14 Nov 2015 13:48:12 +0100
Subject: [PATCH 194/215] Fixed js breaking when shows accessed from 'recent
 shows' dropdown

---
 gui/slick/views/layouts/main.mako | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/gui/slick/views/layouts/main.mako b/gui/slick/views/layouts/main.mako
index 3499cb7e0..e3375a7ce 100644
--- a/gui/slick/views/layouts/main.mako
+++ b/gui/slick/views/layouts/main.mako
@@ -117,7 +117,7 @@
                                 % if sickbeard.SHOWS_RECENT:
                                     <li role="separator" class="divider"></li>
                                     % for recentShow in sickbeard.SHOWS_RECENT:
-                                        <li><a href="${srRoot}/home/displayShow/?show=${recentShow['indexerid']}"><i class="menu-icon-addshow"></i>&nbsp;${recentShow['name']|trim,h}</a></li>
+                                        <li><a href="${srRoot}/home/displayShow?show=${recentShow['indexerid']}"><i class="menu-icon-addshow"></i>&nbsp;${recentShow['name']|trim,h}</a></li>
                                     % endfor
                                 % endif
                             </ul>
-- 
GitLab


From 226dea57fb503704c1d59f4e719b080554072328 Mon Sep 17 00:00:00 2001
From: Dustyn Gibson <miigotu@gmail.com>
Date: Sat, 14 Nov 2015 21:14:09 -0800
Subject: [PATCH 195/215] Temporarily re-add the sys reload hack until
 remaining known encoding issues are fixed correctly, so that we can merge to
 master

---
 SickBeard.py               | 12 ++++++++++++
 sickbeard/postProcessor.py |  2 +-
 2 files changed, 13 insertions(+), 1 deletion(-)

diff --git a/SickBeard.py b/SickBeard.py
index 4780cf802..e9a3fa0d3 100755
--- a/SickBeard.py
+++ b/SickBeard.py
@@ -155,6 +155,18 @@ class SickRage(object):
             (sys.platform.startswith('win') and sys.getwindowsversion()[0] >= 6 and getattr(sys.stdout, 'device', sys.stdout).encoding.lower() in ('cp65001', 'charmap')):
             sickbeard.SYS_ENCODING = 'UTF-8'
 
+        # TODO: Continue working on making this unnecessary, this hack creates all sorts of hellish problems
+        if not hasattr(sys, "setdefaultencoding"):
+            reload(sys)
+
+        try:
+            # pylint: disable=E1101
+            # On non-unicode builds this will raise an AttributeError, if encoding type is not valid it throws a LookupError
+            sys.setdefaultencoding(sickbeard.SYS_ENCODING)
+        except Exception:
+            sys.exit("Sorry, you MUST add the SickRage folder to the PYTHONPATH environment variable\n" +
+                     "or find another way to force Python to use " + sickbeard.SYS_ENCODING + " for string encoding.")
+
         # Need console logging for SickBeard.py and SickBeard-console.exe
         self.consoleLogging = (not hasattr(sys, "frozen")) or (sickbeard.MY_NAME.lower().find('-console') > 0)
 
diff --git a/sickbeard/postProcessor.py b/sickbeard/postProcessor.py
index 7eda8ef84..e66f7c4ec 100644
--- a/sickbeard/postProcessor.py
+++ b/sickbeard/postProcessor.py
@@ -514,7 +514,7 @@ class PostProcessor(object):
         if not name:
             return to_return
 
-        logger.log(u"Analyzing name " + repr(name), logger.DEBUG)
+        logger.log(u"Analyzing name " + name, logger.DEBUG)
 
         name = helpers.remove_non_release_groups(helpers.remove_extension(name))
 
-- 
GitLab


From bea68f65c79ad08d7b4d01567288801139bf3a64 Mon Sep 17 00:00:00 2001
From: Alexis Tyler <xo@wvvw.me>
Date: Sun, 15 Nov 2015 02:02:10 +1030
Subject: [PATCH 196/215] move js to SICKRAGE object

---
 .build/bower.json                             |    2 +-
 .jshintrc                                     |    2 +-
 gui/slick/js/config.js                        |    0
 gui/slick/js/configBackupRestore.js           |   24 -
 gui/slick/js/configNotifications.js           |  575 -----
 gui/slick/js/configPostProcessing.js          |  475 ----
 gui/slick/js/configProviders.js               |  570 -----
 gui/slick/js/configSearch.js                  |  222 --
 gui/slick/js/configSubtitles.js               |   59 -
 gui/slick/js/core.js                          | 2269 +++++++++++++++++
 gui/slick/js/core.min.js                      |  Bin 0 -> 51335 bytes
 .../js/lib/jquery.scrolltopcontrol-1.1.js     |  131 +-
 gui/slick/js/new/config_backuprestore.js      |  119 -
 gui/slick/js/new/config_general.js            |  131 -
 gui/slick/js/new/config_notifications.js      |    3 -
 gui/slick/js/new/config_postProcessing.js     |    4 -
 gui/slick/js/new/config_search.js             |    4 -
 gui/slick/js/new/config_subtitles.js          |    0
 gui/slick/js/new/core.js                      |   73 -
 gui/slick/views/config_anime.mako             |    4 -
 gui/slick/views/config_general.mako           |    2 -
 gui/slick/views/config_notifications.mako     |    6 -
 gui/slick/views/config_postProcessing.mako    |    6 -
 gui/slick/views/config_providers.mako         |    2 -
 gui/slick/views/layouts/main.mako             |    8 +-
 sickbeard/webserve.py                         |   68 +-
 26 files changed, 2387 insertions(+), 2372 deletions(-)
 delete mode 100644 gui/slick/js/config.js
 delete mode 100644 gui/slick/js/configBackupRestore.js
 delete mode 100644 gui/slick/js/configNotifications.js
 delete mode 100644 gui/slick/js/configPostProcessing.js
 delete mode 100644 gui/slick/js/configSearch.js
 delete mode 100644 gui/slick/js/configSubtitles.js
 create mode 100644 gui/slick/js/core.js
 create mode 100644 gui/slick/js/core.min.js
 delete mode 100644 gui/slick/js/new/config_backuprestore.js
 delete mode 100644 gui/slick/js/new/config_general.js
 delete mode 100644 gui/slick/js/new/config_notifications.js
 delete mode 100644 gui/slick/js/new/config_postProcessing.js
 delete mode 100644 gui/slick/js/new/config_search.js
 delete mode 100644 gui/slick/js/new/config_subtitles.js
 delete mode 100644 gui/slick/js/new/core.js

diff --git a/.build/bower.json b/.build/bower.json
index 3fe6fa1b8..431e80790 100644
--- a/.build/bower.json
+++ b/.build/bower.json
@@ -23,6 +23,6 @@
     "pnotify": "~2.1.0",
     "qtip2": "~2.2.1",
     "tablesorter": "jquery.tablesorter#~2.24.5",
-    "jquery-confirm": "~2.5.1"
+    "jquery-confirm": "~2.5.2"
   }
 }
diff --git a/.jshintrc b/.jshintrc
index 1509de9ae..e24a91c93 100644
--- a/.jshintrc
+++ b/.jshintrc
@@ -10,7 +10,7 @@
     "indent": 4,
     "jquery": true,
     "latedef": true,
-    "maxerr": 2,
+    "maxerr": 100,
     "noarg": true,
     "noempty": true,
     "nonbsp": true,
diff --git a/gui/slick/js/config.js b/gui/slick/js/config.js
deleted file mode 100644
index e69de29bb..000000000
diff --git a/gui/slick/js/configBackupRestore.js b/gui/slick/js/configBackupRestore.js
deleted file mode 100644
index fc690ba76..000000000
--- a/gui/slick/js/configBackupRestore.js
+++ /dev/null
@@ -1,24 +0,0 @@
-$(document).ready(function(){
-    var loading = '<img src="' + srRoot + '/images/loading16' + themeSpinner + '.gif" height="16" width="16" />';
-
-    $('#Backup').click(function() {
-        $("#Backup").attr("disabled", true);
-        $('#Backup-result').html(loading);
-        var backupDir = $("#backupDir").val();
-        $.get(srRoot + "/config/backuprestore/backup", {'backupDir': backupDir})
-            .done(function (data) {
-                $('#Backup-result').html(data);
-                $("#Backup").attr("disabled", false);
-            });
-    });
-    $('#Restore').click(function() {
-        $("#Restore").attr("disabled", true);
-        $('#Restore-result').html(loading);
-        var backupFile = $("#backupFile").val();
-        $.get(srRoot + "/config/backuprestore/restore", {'backupFile': backupFile})
-            .done(function (data) {
-                $('#Restore-result').html(data);
-                $("#Restore").attr("disabled", false);
-            });
-    });
-});
diff --git a/gui/slick/js/configNotifications.js b/gui/slick/js/configNotifications.js
deleted file mode 100644
index f2bae59c2..000000000
--- a/gui/slick/js/configNotifications.js
+++ /dev/null
@@ -1,575 +0,0 @@
-$(document).ready(function(){
-    var loading = '<img src="' + srRoot + '/images/loading16' + themeSpinner + '.gif" height="16" width="16" />';
-
-    $('#testGrowl').click(function () {
-        var growl_host = $.trim($('#growl_host').val());
-        var growl_password = $.trim($('#growl_password').val());
-        if (!growl_host) {
-            $('#testGrowl-result').html('Please fill out the necessary fields above.');
-            $('#growl_host').addClass('warning');
-            return;
-        }
-        $('#growl_host').removeClass('warning');
-        $(this).prop('disabled', true);
-        $('#testGrowl-result').html(loading);
-        $.get(srRoot + '/home/testGrowl', {'host': growl_host, 'password': growl_password})
-            .done(function (data) {
-                $('#testGrowl-result').html(data);
-                $('#testGrowl').prop('disabled', false);
-            });
-    });
-
-    $('#testProwl').click(function () {
-        var prowl_api = $.trim($('#prowl_api').val());
-        var prowl_priority = $('#prowl_priority').val();
-        if (!prowl_api) {
-            $('#testProwl-result').html('Please fill out the necessary fields above.');
-            $('#prowl_api').addClass('warning');
-            return;
-        }
-        $('#prowl_api').removeClass('warning');
-        $(this).prop('disabled', true);
-        $('#testProwl-result').html(loading);
-        $.get(srRoot + '/home/testProwl', {'prowl_api': prowl_api, 'prowl_priority': prowl_priority}).done(function (data) {
-            $('#testProwl-result').html(data);
-            $('#testProwl').prop('disabled', false);
-        });
-    });
-
-    $('#testKODI').click(function () {
-        var kodi_host = $.trim($('#kodi_host').val());
-        var kodi_username = $.trim($('#kodi_username').val());
-        var kodi_password = $.trim($('#kodi_password').val());
-        if (!kodi_host) {
-            $('#testKODI-result').html('Please fill out the necessary fields above.');
-            $('#kodi_host').addClass('warning');
-            return;
-        }
-        $('#kodi_host').removeClass('warning');
-        $(this).prop('disabled', true);
-        $('#testKODI-result').html(loading);
-        $.get(srRoot + '/home/testKODI', {'host': kodi_host, 'username': kodi_username, 'password': kodi_password}).done(function (data) {
-            $('#testKODI-result').html(data);
-            $('#testKODI').prop('disabled', false);
-        });
-    });
-
-    $('#testPMC').click(function () {
-        var plex_host = $.trim($('#plex_host').val());
-        var plex_client_username = $.trim($('#plex_client_username').val());
-        var plex_client_password = $.trim($('#plex_client_password').val());
-        if (!plex_host) {
-            $('#testPMC-result').html('Please fill out the necessary fields above.');
-            $('#plex_host').addClass('warning');
-            return;
-        }
-        $('#plex_host').removeClass('warning');
-        $(this).prop('disabled', true);
-        $('#testPMC-result').html(loading);
-        $.get(srRoot + '/home/testPMC', {'host': plex_host, 'username': plex_client_username, 'password': plex_client_password}).done(function (data) {
-            $('#testPMC-result').html(data);
-            $('#testPMC').prop('disabled', false);
-        });
-    });
-
-    $('#testPMS').click(function () {
-        var plex_server_host = $.trim($('#plex_server_host').val());
-        var plex_username = $.trim($('#plex_username').val());
-        var plex_password = $.trim($('#plex_password').val());
-        var plex_server_token = $.trim($('#plex_server_token').val());
-        if (!plex_server_host) {
-            $('#testPMS-result').html('Please fill out the necessary fields above.');
-            $('#plex_server_host').addClass('warning');
-            return;
-        }
-        $('#plex_server_host').removeClass('warning');
-        $(this).prop('disabled', true);
-        $('#testPMS-result').html(loading);
-        $.get(srRoot + '/home/testPMS', {'host': plex_server_host, 'username': plex_username, 'password': plex_password, 'plex_server_token': plex_server_token}).done(function (data) {
-            $('#testPMS-result').html(data);
-            $('#testPMS').prop('disabled', false);
-        });
-    });
-
-    $('#testEMBY').click(function () {
-        var emby_host = $('#emby_host').val();
-        var emby_apikey = $('#emby_apikey').val();
-        if (!emby_host || !emby_apikey) {
-            $('#testEMBY-result').html('Please fill out the necessary fields above.');
-            if (!emby_host) {
-                $('#emby_host').addClass('warning');
-            } else {
-                $('#emby_host').removeClass('warning');
-            }
-            if (!emby_apikey) {
-                $('#emby_apikey').addClass('warning');
-            } else {
-                $('#emby_apikey').removeClass('warning');
-            }
-            return;
-        }
-        $('#emby_host,#emby_apikey').removeClass('warning');
-        $(this).prop('disabled', true);
-        $('#testEMBY-result').html(loading);
-        $.get(srRoot + '/home/testEMBY', {'host': emby_host, 'emby_apikey': emby_apikey}).done(function (data) {
-            $('#testEMBY-result').html(data);
-            $('#testEMBY').prop('disabled', false);
-        });
-    });
-
-    $('#testBoxcar').click(function() {
-        var boxcar_username = $.trim($('#boxcar_username').val());
-        if (!boxcar_username) {
-            $('#testBoxcar-result').html('Please fill out the necessary fields above.');
-            $('#boxcar_username').addClass('warning');
-            return;
-        }
-        $('#boxcar_username').removeClass('warning');
-        $(this).prop('disabled', true);
-        $('#testBoxcar-result').html(loading);
-        $.get(srRoot + '/home/testBoxcar', {'username': boxcar_username}).done(function (data) {
-            $('#testBoxcar-result').html(data);
-            $('#testBoxcar').prop('disabled', false);
-        });
-    });
-
-    $('#testBoxcar2').click(function () {
-        var boxcar2_accesstoken = $.trim($('#boxcar2_accesstoken').val());
-        if (!boxcar2_accesstoken) {
-            $('#testBoxcar2-result').html('Please fill out the necessary fields above.');
-            $('#boxcar2_accesstoken').addClass('warning');
-            return;
-        }
-        $('#boxcar2_accesstoken').removeClass('warning');
-        $(this).prop('disabled', true);
-        $('#testBoxcar2-result').html(loading);
-        $.get(srRoot + '/home/testBoxcar2', {'accesstoken': boxcar2_accesstoken}).done(function (data) {
-            $('#testBoxcar2-result').html(data);
-            $('#testBoxcar2').prop('disabled', false);
-        });
-    });
-
-    $('#testPushover').click(function () {
-        var pushover_userkey = $('#pushover_userkey').val();
-        var pushover_apikey = $('#pushover_apikey').val();
-        if (!pushover_userkey || !pushover_apikey) {
-            $('#testPushover-result').html('Please fill out the necessary fields above.');
-            if (!pushover_userkey) {
-                $('#pushover_userkey').addClass('warning');
-            } else {
-                $('#pushover_userkey').removeClass('warning');
-            }
-            if (!pushover_apikey) {
-                $('#pushover_apikey').addClass('warning');
-            } else {
-                $('#pushover_apikey').removeClass('warning');
-            }
-            return;
-        }
-        $('#pushover_userkey,#pushover_apikey').removeClass('warning');
-        $(this).prop('disabled', true);
-        $('#testPushover-result').html(loading);
-        $.get(srRoot + '/home/testPushover', {'userKey': pushover_userkey, 'apiKey': pushover_apikey}).done(function (data) {
-            $('#testPushover-result').html(data);
-            $('#testPushover').prop('disabled', false);
-        });
-    });
-
-    $('#testLibnotify').click(function() {
-        $('#testLibnotify-result').html(loading);
-        $.get(srRoot + '/home/testLibnotify', function (data) {
-            $('#testLibnotify-result').html(data);
-        });
-    });
-
-    $('#twitterStep1').click(function() {
-        $('#testTwitter-result').html(loading);
-        $.get(srRoot + '/home/twitterStep1', function (data) {
-            window.open(data);
-        }).done(function() {
-            $('#testTwitter-result').html('<b>Step1:</b> Confirm Authorization');
-        });
-    });
-
-    $('#twitterStep2').click(function () {
-        var twitter_key = $.trim($('#twitter_key').val());
-        if (!twitter_key) {
-            $('#testTwitter-result').html('Please fill out the necessary fields above.');
-            $('#twitter_key').addClass('warning');
-            return;
-        }
-        $('#twitter_key').removeClass('warning');
-        $('#testTwitter-result').html(loading);
-        $.get(srRoot + '/home/twitterStep2', {'key': twitter_key}, function(data) {
-            $('#testTwitter-result').html(data);
-        });
-    });
-
-    $('#testTwitter').click(function() {
-        $.get(srRoot + '/home/testTwitter', function(data) {
-            $('#testTwitter-result').html(data);
-        });
-    });
-
-    $('#settingsNMJ').click(function() {
-        if (!$('#nmj_host').val()) {
-            alert('Please fill in the Popcorn IP address');
-            $('#nmj_host').focus();
-            return;
-        }
-        $('#testNMJ-result').html(loading);
-        var nmj_host = $('#nmj_host').val();
-
-        $.get(srRoot + '/home/settingsNMJ', {'host': nmj_host}, function (data) {
-            if (data === null) {
-                $('#nmj_database').removeAttr('readonly');
-                $('#nmj_mount').removeAttr('readonly');
-            }
-            var JSONData = $.parseJSON(data);
-            $('#testNMJ-result').html(JSONData.message);
-            $('#nmj_database').val(JSONData.database);
-            $('#nmj_mount').val(JSONData.mount);
-
-            if (JSONData.database) {
-                $('#nmj_database').attr('readonly', true);
-            } else {
-                $('#nmj_database').removeAttr('readonly');
-            }
-            if (JSONData.mount) {
-                $('#nmj_mount').attr('readonly', true);
-            } else {
-                $('#nmj_mount').removeAttr('readonly');
-            }
-        });
-    });
-
-    $('#testNMJ').click(function () {
-        var nmj_host = $.trim($('#nmj_host').val());
-        var nmj_database = $('#nmj_database').val();
-        var nmj_mount = $('#nmj_mount').val();
-        if (!nmj_host) {
-            $('#testNMJ-result').html('Please fill out the necessary fields above.');
-            $('#nmj_host').addClass('warning');
-            return;
-        }
-        $('#nmj_host').removeClass('warning');
-        $(this).prop('disabled', true);
-        $('#testNMJ-result').html(loading);
-        $.get(srRoot + '/home/testNMJ', {'host': nmj_host, 'database': nmj_database, 'mount': nmj_mount}).done(function (data) {
-            $('#testNMJ-result').html(data);
-            $('#testNMJ').prop('disabled', false);
-        });
-    });
-
-    $('#settingsNMJv2').click(function() {
-        if (!$('#nmjv2_host').val()) {
-            alert('Please fill in the Popcorn IP address');
-            $('#nmjv2_host').focus();
-            return;
-        }
-        $('#testNMJv2-result').html(loading);
-        var nmjv2_host = $('#nmjv2_host').val();
-        var nmjv2_dbloc;
-        var radios = document.getElementsByName('nmjv2_dbloc');
-        for(var i = 0, len = radios.length; i < len; i++) {
-            if (radios[i].checked) {
-                nmjv2_dbloc=radios[i].value;
-                break;
-            }
-        }
-
-        var nmjv2_dbinstance=$('#NMJv2db_instance').val();
-        $.get(srRoot + '/home/settingsNMJv2', {'host': nmjv2_host,'dbloc': nmjv2_dbloc,'instance': nmjv2_dbinstance}, function (data){
-            if (data === null) {
-                $('#nmjv2_database').removeAttr('readonly');
-            }
-            var JSONData = $.parseJSON(data);
-            $('#testNMJv2-result').html(JSONData.message);
-            $('#nmjv2_database').val(JSONData.database);
-
-            if (JSONData.database){
-                $('#nmjv2_database').attr('readonly', true);
-            } else {
-                $('#nmjv2_database').removeAttr('readonly');
-            }
-        });
-    });
-
-    $('#testNMJv2').click(function () {
-        var nmjv2_host = $.trim($('#nmjv2_host').val());
-        if (!nmjv2_host) {
-            $('#testNMJv2-result').html('Please fill out the necessary fields above.');
-            $('#nmjv2_host').addClass('warning');
-            return;
-        }
-        $('#nmjv2_host').removeClass('warning');
-        $(this).prop('disabled', true);
-        $('#testNMJv2-result').html(loading);
-        $.get(srRoot + '/home/testNMJv2', {'host': nmjv2_host}) .done(function (data) {
-            $('#testNMJv2-result').html(data);
-            $('#testNMJv2').prop('disabled', false);
-        });
-    });
-
-    $('#testFreeMobile').click(function () {
-        var freemobile_id = $.trim($('#freemobile_id').val());
-        var freemobile_apikey = $.trim($('#freemobile_apikey').val());
-        if (!freemobile_id || !freemobile_apikey) {
-            $('#testFreeMobile-result').html('Please fill out the necessary fields above.');
-            if (!freemobile_id) {
-                $('#freemobile_id').addClass('warning');
-            } else {
-                $('#freemobile_id').removeClass('warning');
-            }
-            if (!freemobile_apikey) {
-                $('#freemobile_apikey').addClass('warning');
-            } else {
-                $('#freemobile_apikey').removeClass('warning');
-            }
-            return;
-        }
-        $('#freemobile_id,#freemobile_apikey').removeClass('warning');
-        $(this).prop('disabled', true);
-        $('#testFreeMobile-result').html(loading);
-        $.get(srRoot + '/home/testFreeMobile', {'freemobile_id': freemobile_id, 'freemobile_apikey': freemobile_apikey}).done(function (data) {
-            $('#testFreeMobile-result').html(data);
-            $('#testFreeMobile').prop('disabled', false);
-        });
-    });
-
-    $('#TraktGetPin').click(function () {
-        var trakt_pin_url = $('#trakt_pin_url').val();
-        var w;
-        w = window.open(trakt_pin_url, "popUp", "toolbar=no, scrollbars=no, resizable=no, top=200, left=200, width=650, height=550");
-         $('#trakt_pin').removeClass('hide');
-    });
-
-    $('#trakt_pin').on('keyup change', function(){
-        var trakt_pin = $('#trakt_pin').val();
-
-        if (trakt_pin.length !== 0) {
-            $('#TraktGetPin').addClass('hide');
-            $('#authTrakt').removeClass('hide');
-        } else {
-            $('#TraktGetPin').removeClass('hide');
-            $('#authTrakt').addClass('hide');
-        }
-    });
-
-    $('#authTrakt').click(function() {
-        var trakt_pin = $('#trakt_pin').val();
-        if (trakt_pin.length !== 0) {
-            $.get(srRoot + '/home/getTraktToken', { "trakt_pin": trakt_pin }).done(function (data) {
-                $('#testTrakt-result').html(data);
-                $('#authTrakt').addClass('hide');
-                $('#trakt_pin').addClass('hide');
-                $('#TraktGetPin').addClass('hide');
-            });
-        }
-    });
-
-    $('#testTrakt').click(function () {
-        var trakt_username = $.trim($('#trakt_username').val());
-        var trakt_trending_blacklist = $.trim($('#trakt_blacklist_name').val());
-        if (!trakt_username) {
-            $('#testTrakt-result').html('Please fill out the necessary fields above.');
-            if (!trakt_username) {
-                $('#trakt_username').addClass('warning');
-            } else {
-                $('#trakt_username').removeClass('warning');
-            }
-            return;
-        }
-
-        if (/\s/g.test(trakt_trending_blacklist)) {
-            $('#testTrakt-result').html('Check blacklist name; the value need to be a trakt slug');
-            $('#trakt_blacklist_name').addClass('warning');
-            return;
-        }
-        $('#trakt_username').removeClass('warning');
-        $('#trakt_blacklist_name').removeClass('warning');
-        $(this).prop('disabled', true);
-        $('#testTrakt-result').html(loading);
-        $.get(srRoot + '/home/testTrakt', {'username': trakt_username, 'blacklist_name': trakt_trending_blacklist}).done(function (data) {
-            $('#testTrakt-result').html(data);
-            $('#testTrakt').prop('disabled', false);
-        });
-    });
-
-    $('#testEmail').click(function () {
-        var status, host, port, tls, from, user, pwd, err, to;
-        status = $('#testEmail-result');
-        status.html(loading);
-        host = $('#email_host').val();
-        host = host.length > 0 ? host : null;
-        port = $('#email_port').val();
-        port = port.length > 0 ? port : null;
-        tls = $('#email_tls').attr('checked') !== undefined ? 1 : 0;
-        from = $('#email_from').val();
-        from = from.length > 0 ? from : 'root@localhost';
-        user = $('#email_user').val().trim();
-        pwd = $('#email_password').val();
-        err = '';
-        if (host === null) {
-            err += '<li style="color: red;">You must specify an SMTP hostname!</li>';
-        }
-        if (port === null) {
-            err += '<li style="color: red;">You must specify an SMTP port!</li>';
-        } else if (port.match(/^\d+$/) === null || parseInt(port, 10) > 65535) {
-            err += '<li style="color: red;">SMTP port must be between 0 and 65535!</li>';
-        }
-        if (err.length > 0) {
-            err = '<ol>' + err + '</ol>';
-            status.html(err);
-        } else {
-            to = prompt('Enter an email address to send the test to:', null);
-            if (to === null || to.length === 0 || to.match(/.*@.*/) === null) {
-                status.html('<p style="color: red;">You must provide a recipient email address!</p>');
-            } else {
-                $.get(srRoot + '/home/testEmail', {host: host, port: port, smtp_from: from, use_tls: tls, user: user, pwd: pwd, to: to}, function (msg) {
-                    $('#testEmail-result').html(msg);
-                });
-            }
-        }
-    });
-
-    $('#testNMA').click(function () {
-        var nma_api = $.trim($('#nma_api').val());
-        var nma_priority = $('#nma_priority').val();
-        if (!nma_api) {
-            $('#testNMA-result').html('Please fill out the necessary fields above.');
-            $('#nma_api').addClass('warning');
-            return;
-        }
-        $('#nma_api').removeClass('warning');
-        $(this).prop('disabled', true);
-        $('#testNMA-result').html(loading);
-        $.get(srRoot + '/home/testNMA', {'nma_api': nma_api, 'nma_priority': nma_priority}).done(function (data) {
-            $('#testNMA-result').html(data);
-            $('#testNMA').prop('disabled', false);
-        });
-    });
-
-    $('#testPushalot').click(function () {
-        var pushalot_authorizationtoken = $.trim($('#pushalot_authorizationtoken').val());
-        if (!pushalot_authorizationtoken) {
-            $('#testPushalot-result').html('Please fill out the necessary fields above.');
-            $('#pushalot_authorizationtoken').addClass('warning');
-            return;
-        }
-        $('#pushalot_authorizationtoken').removeClass('warning');
-        $(this).prop('disabled', true);
-        $('#testPushalot-result').html(loading);
-        $.get(srRoot + '/home/testPushalot', {'authorizationToken': pushalot_authorizationtoken}).done(function (data) {
-            $('#testPushalot-result').html(data);
-            $('#testPushalot').prop('disabled', false);
-        });
-    });
-
-    $('#testPushbullet').click(function () {
-        var pushbullet_api = $.trim($('#pushbullet_api').val());
-        if (!pushbullet_api) {
-            $('#testPushbullet-result').html('Please fill out the necessary fields above.');
-            $('#pushbullet_api').addClass('warning');
-            return;
-        }
-        $('#pushbullet_api').removeClass('warning');
-        $(this).prop('disabled', true);
-        $('#testPushbullet-result').html(loading);
-        $.get(srRoot + '/home/testPushbullet', {'api': pushbullet_api}).done(function (data) {
-            $('#testPushbullet-result').html(data);
-            $('#testPushbullet').prop('disabled', false);
-        });
-    });
-
-    function get_pushbullet_devices(msg){
-
-        if(msg) $('#testPushbullet-result').html(loading);
-
-        var pushbullet_api = $("#pushbullet_api").val();
-
-        if(!pushbullet_api) {
-            $('#testPushbullet-result').html("You didn't supply a Pushbullet api key");
-            $("#pushbullet_api").focus();
-            return false;
-        }
-
-        $.get(srRoot + "/home/getPushbulletDevices", {'api': pushbullet_api}, function (data) {
-            var devices = jQuery.parseJSON(data).devices;
-            var current_pushbullet_device = $("#pushbullet_device").val();
-            $("#pushbullet_device_list").html('');
-            for (var i = 0, len = devices.length; i < len; i++) {
-                if(devices[i].active === true) {
-                    if(current_pushbullet_device == devices[i].iden) {
-                        $("#pushbullet_device_list").append('<option value="'+devices[i].iden+'" selected>' + devices[i].nickname + '</option>');
-                    } else {
-                        $("#pushbullet_device_list").append('<option value="'+devices[i].iden+'">' + devices[i].nickname + '</option>');
-                    }
-                }
-            }
-            if (current_pushbullet_device === '') {
-                $("#pushbullet_device_list").prepend('<option value="" selected>All devices</option>');
-            } else {
-                $("#pushbullet_device_list").prepend('<option value="">All devices</option>');
-            }
-            if(msg) $('#testPushbullet-result').html(msg);
-        });
-
-        $("#pushbullet_device_list").change(function(){
-            $("#pushbullet_device").val($("#pushbullet_device_list").val());
-            $('#testPushbullet-result').html("Don't forget to save your new pushbullet settings.");
-        });
-    }
-
-    $('#getPushbulletDevices').click(function(){
-        get_pushbullet_devices("Device list updated. Please choose a device to push to.");
-    });
-
-    // we have to call this function on dom ready to create the devices select
-    get_pushbullet_devices();
-
-    $('#email_show').change(function() {
-        var key = parseInt($('#email_show').val(), 10);
-        $('#email_show_list').val(key >= 0 ? notify_data[key.toString()].list : '');
-    });
-
-    // Update the internal data struct anytime settings are saved to the server
-    $('#email_show').bind('notify', function() {
-        load_show_notify_lists();
-    });
-
-    function load_show_notify_lists() {
-        $.get(srRoot + "/home/loadShowNotifyLists", function(data) {
-            var list, html, s;
-            list = $.parseJSON(data);
-            notify_data = list;
-            if (list._size === 0) return;
-            html = '<option value="-1">-- Select --</option>';
-            for (s in list) {
-                if (s.charAt(0) !== '_') {
-                    html += '<option value="' + list[s].id + '">' + $('<div/>').text(list[s].name).html() + '</option>';
-                }
-            }
-            $('#email_show').html(html);
-            $('#email_show_list').val('');
-        });
-    }
-    // Load the per show notify lists everytime this page is loaded
-    load_show_notify_lists();
-
-    $('#email_show_save').click(function() {
-        $.post(srRoot + "/home/saveShowNotifyList", { show: $('#email_show').val(), emails: $('#email_show_list').val()}, function (data) {
-            // Reload the per show notify lists to reflect changes
-            load_show_notify_lists();
-        });
-    });
-
-    // show instructions for plex when enabled
-    $('#use_plex').click(function() {
-        if ($(this).is(':checked')) {
-            $('.plexinfo').removeClass('hide');
-        } else {
-            $('.plexinfo').addClass('hide');
-        }
-    });
-});
diff --git a/gui/slick/js/configPostProcessing.js b/gui/slick/js/configPostProcessing.js
deleted file mode 100644
index f5a1ff8a1..000000000
--- a/gui/slick/js/configPostProcessing.js
+++ /dev/null
@@ -1,475 +0,0 @@
-$(document).ready(function () {
-    // http://stackoverflow.com/questions/2219924/idiomatic-jquery-delayed-event-only-after-a-short-pause-in-typing-e-g-timew
-    var typewatch = (function () {
-        var timer = 0;
-        return function (callback, ms) {
-            clearTimeout(timer);
-            timer = setTimeout(callback, ms);
-        };
-    })();
-
-    function israr_supported() {
-        var pattern = $('#naming_pattern').val();
-        $.get(srRoot + '/config/postProcessing/isRarSupported', function (data) {
-            if (data !== "supported") {
-                $('#unpack').qtip('option', {
-                    'content.text': 'Unrar Executable not found.',
-                    'style.classes': 'qtip-rounded qtip-shadow qtip-red'
-                });
-                $('#unpack').qtip('toggle', true);
-                $('#unpack').css('background-color', '#FFFFDD');
-            }
-        });
-    }
-
-    function fill_examples() {
-        var pattern = $('#naming_pattern').val();
-        var multi = $('#naming_multi_ep :selected').val();
-        var anime_type = $('input[name="naming_anime"]:checked').val();
-
-        $.get(srRoot + '/config/postProcessing/testNaming', {pattern: pattern, anime_type: 3}, function (data) {
-            if (data) {
-                $('#naming_example').text(data + '.ext');
-                $('#naming_example_div').show();
-            } else {
-                $('#naming_example_div').hide();
-            }
-        });
-
-        $.get(srRoot + '/config/postProcessing/testNaming', {pattern: pattern, multi: multi, anime_type: 3}, function (data) {
-            if (data) {
-                $('#naming_example_multi').text(data + '.ext');
-                $('#naming_example_multi_div').show();
-            } else {
-                $('#naming_example_multi_div').hide();
-            }
-        });
-
-        $.get(srRoot + '/config/postProcessing/isNamingValid', {pattern: pattern, multi: multi, anime_type: anime_type}, function (data) {
-            if (data == "invalid") {
-                $('#naming_pattern').qtip('option', {
-                    'content.text': 'This pattern is invalid.',
-                    'style.classes': 'qtip-rounded qtip-shadow qtip-red'
-                });
-                $('#naming_pattern').qtip('toggle', true);
-                $('#naming_pattern').css('background-color', '#FFDDDD');
-            } else if (data == "seasonfolders") {
-                $('#naming_pattern').qtip('option', {
-                    'content.text': 'This pattern would be invalid without the folders, using it will force "Flatten" off for all shows.',
-                    'style.classes': 'qtip-rounded qtip-shadow qtip-red'
-                });
-                $('#naming_pattern').qtip('toggle', true);
-                $('#naming_pattern').css('background-color', '#FFFFDD');
-            } else {
-                $('#naming_pattern').qtip('option', {
-                    'content.text': 'This pattern is valid.',
-                    'style.classes': 'qtip-rounded qtip-shadow qtip-green'
-                });
-                $('#naming_pattern').qtip('toggle', false);
-                $('#naming_pattern').css('background-color', '#FFFFFF');
-            }
-        });
-    }
-
-    function fill_abd_examples() {
-        var pattern = $('#naming_abd_pattern').val();
-
-        $.get(srRoot + '/config/postProcessing/testNaming', {pattern: pattern, abd: 'True'}, function (data) {
-            if (data) {
-                $('#naming_abd_example').text(data + '.ext');
-                $('#naming_abd_example_div').show();
-            } else {
-                $('#naming_abd_example_div').hide();
-            }
-        });
-
-        $.get(srRoot + '/config/postProcessing/isNamingValid', {pattern: pattern, abd: 'True'}, function (data) {
-            if (data == "invalid") {
-                $('#naming_abd_pattern').qtip('option', {
-                    'content.text': 'This pattern is invalid.',
-                    'style.classes': 'qtip-rounded qtip-shadow qtip-red'
-                });
-                $('#naming_abd_pattern').qtip('toggle', true);
-                $('#naming_abd_pattern').css('background-color', '#FFDDDD');
-            } else if (data == "seasonfolders") {
-                $('#naming_abd_pattern').qtip('option', {
-                    'content.text': 'This pattern would be invalid without the folders, using it will force "Flatten" off for all shows.',
-                    'style.classes': 'qtip-rounded qtip-shadow qtip-red'
-                });
-                $('#naming_abd_pattern').qtip('toggle', true);
-                $('#naming_abd_pattern').css('background-color', '#FFFFDD');
-            } else {
-                $('#naming_abd_pattern').qtip('option', {
-                    'content.text': 'This pattern is valid.',
-                    'style.classes': 'qtip-rounded qtip-shadow qtip-green'
-                });
-                $('#naming_abd_pattern').qtip('toggle', false);
-                $('#naming_abd_pattern').css('background-color', '#FFFFFF');
-            }
-        });
-    }
-
-    function fill_sports_examples() {
-        var pattern = $('#naming_sports_pattern').val();
-
-        $.get(srRoot + '/config/postProcessing/testNaming', {pattern: pattern, sports: 'True'}, function (data) {
-            if (data) {
-                $('#naming_sports_example').text(data + '.ext');
-                $('#naming_sports_example_div').show();
-            } else {
-                $('#naming_sports_example_div').hide();
-            }
-        });
-
-        $.get(srRoot + '/config/postProcessing/isNamingValid', {pattern: pattern, sports: 'True'}, function (data) {
-            if (data == "invalid") {
-                $('#naming_sports_pattern').qtip('option', {
-                    'content.text': 'This pattern is invalid.',
-                    'style.classes': 'qtip-rounded qtip-shadow qtip-red'
-                });
-                $('#naming_sports_pattern').qtip('toggle', true);
-                $('#naming_sports_pattern').css('background-color', '#FFDDDD');
-            } else if (data == "seasonfolders") {
-                $('#naming_sports_pattern').qtip('option', {
-                    'content.text': 'This pattern would be invalid without the folders, using it will force "Flatten" off for all shows.',
-                    'style.classes': 'qtip-rounded qtip-shadow qtip-red'
-                });
-                $('#naming_sports_pattern').qtip('toggle', true);
-                $('#naming_sports_pattern').css('background-color', '#FFFFDD');
-            } else {
-                $('#naming_sports_pattern').qtip('option', {
-                    'content.text': 'This pattern is valid.',
-                    'style.classes': 'qtip-rounded qtip-shadow qtip-green'
-                });
-                $('#naming_sports_pattern').qtip('toggle', false);
-                $('#naming_sports_pattern').css('background-color', '#FFFFFF');
-            }
-        });
-    }
-
-    function fill_anime_examples() {
-        var pattern = $('#naming_anime_pattern').val();
-        var multi = $('#naming_anime_multi_ep :selected').val();
-        var anime_type = $('input[name="naming_anime"]:checked').val();
-
-        $.get(srRoot + '/config/postProcessing/testNaming', {pattern: pattern, anime_type: anime_type}, function (data) {
-            if (data) {
-                $('#naming_example_anime').text(data + '.ext');
-                $('#naming_example_anime_div').show();
-            } else {
-                $('#naming_example_anime_div').hide();
-            }
-        });
-
-        $.get(srRoot + '/config/postProcessing/testNaming', {pattern: pattern, multi: multi, anime_type: anime_type}, function (data) {
-            if (data) {
-                $('#naming_example_multi_anime').text(data + '.ext');
-                $('#naming_example_multi_anime_div').show();
-            } else {
-                $('#naming_example_multi_anime_div').hide();
-            }
-        });
-
-        $.get(srRoot + '/config/postProcessing/isNamingValid', {pattern: pattern, multi: multi, anime_type: anime_type}, function (data) {
-            if (data == "invalid") {
-                $('#naming_pattern').qtip('option', {
-                    'content.text': 'This pattern is invalid.',
-                    'style.classes': 'qtip-rounded qtip-shadow qtip-red'
-                });
-                $('#naming_pattern').qtip('toggle', true);
-                $('#naming_pattern').css('background-color', '#FFDDDD');
-            } else if (data == "seasonfolders") {
-                $('#naming_pattern').qtip('option', {
-                    'content.text': 'This pattern would be invalid without the folders, using it will force "Flatten" off for all shows.',
-                    'style.classes': 'qtip-rounded qtip-shadow qtip-red'
-                });
-                $('#naming_pattern').qtip('toggle', true);
-                $('#naming_pattern').css('background-color', '#FFFFDD');
-            } else {
-                $('#naming_pattern').qtip('option', {
-                    'content.text': 'This pattern is valid.',
-                    'style.classes': 'qtip-rounded qtip-shadow qtip-green'
-                });
-                $('#naming_pattern').qtip('toggle', false);
-                $('#naming_pattern').css('background-color', '#FFFFFF');
-            }
-        });
-    }
-
-    function setup_naming() {
-        // if it is a custom selection then show the text box
-        if ($('#name_presets :selected').val() == "Custom...") {
-            $('#naming_custom').show();
-        } else {
-            $('#naming_custom').hide();
-            $('#naming_pattern').val($('#name_presets :selected').attr('id'));
-        }
-        fill_examples();
-    }
-
-    function setup_abd_naming() {
-        // if it is a custom selection then show the text box
-        if ($('#name_abd_presets :selected').val() == "Custom...") {
-            $('#naming_abd_custom').show();
-        } else {
-            $('#naming_abd_custom').hide();
-            $('#naming_abd_pattern').val($('#name_abd_presets :selected').attr('id'));
-        }
-        fill_abd_examples();
-    }
-
-    function setup_sports_naming() {
-        // if it is a custom selection then show the text box
-        if ($('#name_sports_presets :selected').val() == "Custom...") {
-            $('#naming_sports_custom').show();
-        } else {
-            $('#naming_sports_custom').hide();
-            $('#naming_sports_pattern').val($('#name_sports_presets :selected').attr('id'));
-        }
-        fill_sports_examples();
-    }
-
-    function setup_anime_naming() {
-        // if it is a custom selection then show the text box
-        if ($('#name_anime_presets :selected').val() == "Custom...") {
-            $('#naming_anime_custom').show();
-        } else {
-            $('#naming_anime_custom').hide();
-            $('#naming_anime_pattern').val($('#name_anime_presets :selected').attr('id'));
-        }
-        fill_anime_examples();
-    }
-
-    $('#unpack').on('change', function(){
-        if(this.checked) {
-            israr_supported();
-        } else {
-            $('#unpack').qtip('toggle', false);
-        }
-    });
-
-    $('#name_presets').on('change', function(){
-        setup_naming();
-    });
-
-    $('#name_abd_presets').on('change', function(){
-        setup_abd_naming();
-    });
-
-    $('#naming_custom_abd').on('change', function(){
-        setup_abd_naming();
-    });
-
-    $('#name_sports_presets').on('change', function(){
-        setup_sports_naming();
-    });
-
-    $('#naming_custom_sports').on('change', function(){
-        setup_sports_naming();
-    });
-
-    $('#name_anime_presets').on('change', function(){
-        setup_anime_naming();
-    });
-
-    $('#naming_custom_anime').on('change', function(){
-        setup_anime_naming();
-    });
-
-    $('input[name="naming_anime"]').on('click', function(){
-        setup_anime_naming();
-    });
-
-    $('#naming_multi_ep').change(fill_examples);
-    $('#naming_pattern').focusout(fill_examples);
-    $('#naming_pattern').keyup(function () {
-        typewatch(function () {
-            fill_examples();
-        }, 500);
-    });
-
-    $('#naming_anime_multi_ep').change(fill_anime_examples);
-    $('#naming_anime_pattern').focusout(fill_anime_examples);
-    $('#naming_anime_pattern').keyup(function () {
-        typewatch(function () {
-            fill_anime_examples();
-        }, 500);
-    });
-
-    $('#naming_abd_pattern').focusout(fill_examples);
-    $('#naming_abd_pattern').keyup(function () {
-        typewatch(function () {
-            fill_abd_examples();
-        }, 500);
-    });
-
-    $('#naming_sports_pattern').focusout(fill_examples);
-    $('#naming_sports_pattern').keyup(function () {
-        typewatch(function () {
-            fill_sports_examples();
-        }, 500);
-    });
-
-    $('#naming_anime_pattern').focusout(fill_examples);
-    $('#naming_anime_pattern').keyup(function () {
-        typewatch(function () {
-            fill_anime_examples();
-        }, 500);
-    });
-
-    $('#show_naming_key').on('click', function(){
-        $('#naming_key').toggle();
-    });
-    $('#show_naming_abd_key').on('click', function(){
-        $('#naming_abd_key').toggle();
-    });
-    $('#show_naming_sports_key').on('click', function(){
-        $('#naming_sports_key').toggle();
-    });
-    $('#show_naming_anime_key').on('click', function(){
-        $('#naming_anime_key').toggle();
-    });
-    $('#do_custom').on('click', function(){
-        $('#naming_pattern').val($('#name_presets :selected').attr('id'));
-        $('#naming_custom').show();
-        $('#naming_pattern').focus();
-    });
-    setup_naming();
-    setup_abd_naming();
-    setup_sports_naming();
-    setup_anime_naming();
-
-    // -- start of metadata options div toggle code --
-    $('#metadataType').on('change keyup', function () {
-        $(this).showHideMetadata();
-    });
-
-    $.fn.showHideMetadata = function () {
-        $('.metadataDiv').each(function () {
-            var targetName = $(this).attr('id');
-            var selectedTarget = $('#metadataType :selected').val();
-
-            if (selectedTarget == targetName) {
-                $(this).show();
-            } else {
-                $(this).hide();
-            }
-        });
-    };
-    //initialize to show the div
-    $(this).showHideMetadata();
-    // -- end of metadata options div toggle code --
-
-    $('.metadata_checkbox').on('click', function(){
-        $(this).refreshMetadataConfig(false);
-    });
-
-    $.fn.refreshMetadataConfig = function (first) {
-        var cur_most = 0;
-        var cur_most_provider = '';
-
-        $('.metadataDiv').each(function () {
-            var generator_name = $(this).attr('id');
-
-            var config_arr = [];
-            var show_metadata = $("#" + generator_name + "_show_metadata").prop('checked');
-            var episode_metadata = $("#" + generator_name + "_episode_metadata").prop('checked');
-            var fanart = $("#" + generator_name + "_fanart").prop('checked');
-            var poster = $("#" + generator_name + "_poster").prop('checked');
-            var banner = $("#" + generator_name + "_banner").prop('checked');
-            var episode_thumbnails = $("#" + generator_name + "_episode_thumbnails").prop('checked');
-            var season_posters = $("#" + generator_name + "_season_posters").prop('checked');
-            var season_banners = $("#" + generator_name + "_season_banners").prop('checked');
-            var season_all_poster = $("#" + generator_name + "_season_all_poster").prop('checked');
-            var season_all_banner = $("#" + generator_name + "_season_all_banner").prop('checked');
-
-            config_arr.push(show_metadata ? '1' : '0');
-            config_arr.push(episode_metadata ? '1' : '0');
-            config_arr.push(fanart ? '1' : '0');
-            config_arr.push(poster ? '1' : '0');
-            config_arr.push(banner ? '1' : '0');
-            config_arr.push(episode_thumbnails ? '1' : '0');
-            config_arr.push(season_posters ? '1' : '0');
-            config_arr.push(season_banners ? '1' : '0');
-            config_arr.push(season_all_poster ? '1' : '0');
-            config_arr.push(season_all_banner ? '1' : '0');
-
-            var cur_num = 0;
-            for (var i = 0, len = config_arr.length; i < len; i++) {
-                cur_num += parseInt(config_arr[i]);
-            }
-            if (cur_num > cur_most) {
-                cur_most = cur_num;
-                cur_most_provider = generator_name;
-            }
-
-            $("#" + generator_name + "_eg_show_metadata").attr('class', show_metadata ? 'enabled' : 'disabled');
-            $("#" + generator_name + "_eg_episode_metadata").attr('class', episode_metadata ? 'enabled' : 'disabled');
-            $("#" + generator_name + "_eg_fanart").attr('class', fanart ? 'enabled' : 'disabled');
-            $("#" + generator_name + "_eg_poster").attr('class', poster ? 'enabled' : 'disabled');
-            $("#" + generator_name + "_eg_banner").attr('class', banner ? 'enabled' : 'disabled');
-            $("#" + generator_name + "_eg_episode_thumbnails").attr('class', episode_thumbnails ? 'enabled' : 'disabled');
-            $("#" + generator_name + "_eg_season_posters").attr('class', season_posters ? 'enabled' : 'disabled');
-            $("#" + generator_name + "_eg_season_banners").attr('class', season_banners ? 'enabled' : 'disabled');
-            $("#" + generator_name + "_eg_season_all_poster").attr('class', season_all_poster ? 'enabled' : 'disabled');
-            $("#" + generator_name + "_eg_season_all_banner").attr('class', season_all_banner ? 'enabled' : 'disabled');
-            $("#" + generator_name + "_data").val(config_arr.join('|'));
-
-        });
-
-        if (cur_most_provider !== '' && first) {
-            $('#metadataType option[value=' + cur_most_provider + ']').attr('selected', 'selected');
-            $(this).showHideMetadata();
-        }
-    };
-
-    $(this).refreshMetadataConfig(true);
-    $('img[title]').qtip({
-        position: {
-            viewport: $(window),
-            at: 'bottom center',
-            my: 'top right'
-        },
-        style: {
-            tip: {
-                corner: true,
-                method: 'polygon'
-            },
-            classes: 'qtip-shadow qtip-dark'
-        }
-    });
-    $('i[title]').qtip({
-        position: {
-            viewport: $(window),
-            at: 'top center',
-            my: 'bottom center'
-        },
-        style: {
-            tip: {
-                corner: true,
-                method: 'polygon'
-            },
-            classes: 'qtip-rounded qtip-shadow ui-tooltip-sb'
-        }
-    });
-    $('.custom-pattern,#unpack').qtip({
-        content: 'validating...',
-        show: {
-            event: false,
-            ready: false
-        },
-        hide: false,
-        position: {
-            viewport: $(window),
-            at: 'center left',
-            my: 'center right'
-        },
-        style: {
-            tip: {
-                corner: true,
-                method: 'polygon'
-            },
-            classes: 'qtip-rounded qtip-shadow qtip-red'
-        }
-    });
-});
diff --git a/gui/slick/js/configProviders.js b/gui/slick/js/configProviders.js
index e2a7a49ed..b8ac98a50 100644
--- a/gui/slick/js/configProviders.js
+++ b/gui/slick/js/configProviders.js
@@ -1,572 +1,2 @@
 $(document).ready(function(){
-    $.fn.showHideProviders = function() {
-        $('.providerDiv').each(function(){
-            var providerName = $(this).attr('id');
-            var selectedProvider = $('#editAProvider :selected').val();
-
-            if (selectedProvider + 'Div' == providerName) { // jshint ignore:line
-                $(this).show();
-            } else {
-                $(this).hide();
-            }
-        });
-    };
-
-    var ifExists = function(loopThroughArray, searchFor) {
-        var found = false;
-
-        loopThroughArray.forEach(function(rootObject) {
-            if (rootObject.name === searchFor) {
-                found = true;
-            }
-            console.log(rootObject.name + " while searching for: "+  searchFor);
-        });
-        return found;
-    };
-
-    /**
-     * Gets categories for the provided newznab provider.
-     * @param {String} isDefault
-     * @param {Array} selectedProvider
-     * @return no return data. Function updateNewznabCaps() is run at callback
-     */
-    $.fn.getCategories = function (isDefault, selectedProvider) {
-
-        var name = selectedProvider[0];
-        var url = selectedProvider[1];
-        var key = selectedProvider[2];
-
-        if (!name || !url || !key) {
-            return;
-        }
-
-        var params = {url: url, name: name, key: key};
-
-        $(".updating_categories").wrapInner('<span><img src="' + srRoot + '/images/loading16' + themeSpinner + '.gif"> Updating Categories ...</span>');
-        var jqxhr = $.getJSON(srRoot + '/config/providers/getNewznabCategories', params, function(data){
-            $(this).updateNewznabCaps( data, selectedProvider );
-            console.debug(data.tv_categories); // jshint ignore:line
-        });
-        jqxhr.always(function() {
-            $(".updating_categories").empty();
-        });
-    };
-
-    $.fn.addProvider = function (id, name, url, key, cat, isDefault, showProvider) {
-        url = $.trim(url);
-        if (!url) {
-            return;
-        }
-
-        if (!/^https?:\/\//i.test(url)) {
-            url = "http://" + url;
-        }
-
-        if (url.match('/$') === null) {
-            url = url + '/';
-        }
-
-        var newData = [isDefault, [name, url, key, cat]];
-        newznabProviders[id] = newData;
-
-        if (!isDefault){
-            $('#editANewznabProvider').addOption(id, name);
-            $(this).populateNewznabSection();
-        }
-
-        if ($('#provider_order_list > #'+id).length === 0 && showProvider !== false) {
-            var toAdd = '<li class="ui-state-default" id="' + id + '"> <input type="checkbox" id="enable_' + id + '" class="provider_enabler" CHECKED> <a href="' + anonURL + url + '" class="imgLink" target="_new"><img src="' + srRoot + '/images/providers/newznab.png" alt="' + name + '" width="16" height="16"></a> ' + name + '</li>';
-
-            $('#provider_order_list').append(toAdd);
-            $('#provider_order_list').sortable("refresh");
-        }
-
-        $(this).makeNewznabProviderString();
-    };
-
-    $.fn.addTorrentRssProvider = function (id, name, url, cookies, titleTAG) {
-        var newData = [name, url, cookies, titleTAG];
-        torrentRssProviders[id] = newData;
-
-        $('#editATorrentRssProvider').addOption(id, name);
-        $(this).populateTorrentRssSection();
-
-        if ($('#provider_order_list > #'+id).length === 0) {
-            $('#provider_order_list').append('<li class="ui-state-default" id="' + id + '"> <input type="checkbox" id="enable_' + id + '" class="provider_enabler" CHECKED> <a href="' + anonURL + url + '" class="imgLink" target="_new"><img src="' + srRoot + '/images/providers/torrentrss.png" alt="' + name + '" width="16" height="16"></a> ' + name + '</li>');
-            $('#provider_order_list').sortable("refresh");
-        }
-
-        $(this).makeTorrentRssProviderString();
-    };
-
-    $.fn.updateProvider = function (id, url, key, cat) {
-        newznabProviders[id][1][1] = url;
-        newznabProviders[id][1][2] = key;
-        newznabProviders[id][1][3] = cat;
-
-        $(this).populateNewznabSection();
-
-        $(this).makeNewznabProviderString();
-    };
-
-    $.fn.deleteProvider = function (id) {
-        $('#editANewznabProvider').removeOption(id);
-        delete newznabProviders[id];
-        $(this).populateNewznabSection();
-        $('li').remove('#'+id);
-        $(this).makeNewznabProviderString();
-    };
-
-    $.fn.updateTorrentRssProvider = function (id, url, cookies, titleTAG) {
-        torrentRssProviders[id][1] = url;
-        torrentRssProviders[id][2] = cookies;
-        torrentRssProviders[id][3] = titleTAG;
-        $(this).populateTorrentRssSection();
-        $(this).makeTorrentRssProviderString();
-    };
-
-    $.fn.deleteTorrentRssProvider = function (id) {
-        $('#editATorrentRssProvider').removeOption(id);
-        delete torrentRssProviders[id];
-        $(this).populateTorrentRssSection();
-        $('li').remove('#'+id);
-        $(this).makeTorrentRssProviderString();
-    };
-
-    $.fn.populateNewznabSection = function() {
-        var selectedProvider = $('#editANewznabProvider :selected').val();
-        var data = '';
-        var isDefault = '';
-        var rrcat = '';
-
-        if (selectedProvider === 'addNewznab') {
-            data = ['','',''];
-            isDefault = 0;
-            $('#newznab_add_div').show();
-            $('#newznab_update_div').hide();
-            $('#newznab_cat').attr('disabled','disabled');
-            $('#newznab_cap').attr('disabled','disabled');
-            $('#newznab_cat_update').attr('disabled','disabled');
-            $('#newznabcapdiv').hide();
-
-            $("#newznab_cat option").each(function() {
-                $(this).remove();
-                return;
-            });
-
-            $("#newznab_cap option").each(function() {
-                $(this).remove();
-                return;
-            });
-
-        } else {
-            data = newznabProviders[selectedProvider][1];
-            isDefault = newznabProviders[selectedProvider][0];
-            $('#newznab_add_div').hide();
-            $('#newznab_update_div').show();
-            $('#newznab_cat').removeAttr("disabled");
-            $('#newznab_cap').removeAttr("disabled");
-            $('#newznab_cat_update').removeAttr("disabled");
-            $('#newznabcapdiv').show();
-        }
-
-        $('#newznab_name').val(data[0]);
-        $('#newznab_url').val(data[1]);
-        $('#newznab_key').val(data[2]);
-
-        //Check if not already array
-        if (typeof data[3] === 'string') {
-            rrcat = data[3].split(",");
-        } else {
-            rrcat = data[3];
-        }
-
-        // Update the category select box (on the right)
-        var newCatOptions = [];
-        if (rrcat) {
-            rrcat.forEach(function (cat) {
-                if (cat !== '') {
-                    newCatOptions.push({text : cat, value : cat});
-                }
-            });
-            $("#newznab_cat").replaceOptions(newCatOptions);
-        }
-
-        if (selectedProvider === 'addNewznab') {
-            $('#newznab_name').removeAttr("disabled");
-            $('#newznab_url').removeAttr("disabled");
-        } else {
-            $('#newznab_name').attr("disabled", "disabled");
-
-            if (isDefault) {
-                $('#newznab_url').attr("disabled", "disabled");
-                $('#newznab_delete').attr("disabled", "disabled");
-            } else {
-                $('#newznab_url').removeAttr("disabled");
-                $('#newznab_delete').removeAttr("disabled");
-
-                //Get Categories Capabilities
-                if (data[0] && data[1] && data[2] && !ifExists($.fn.newznabProvidersCapabilities, data[0])) {
-                    $(this).getCategories(isDefault, data);
-                }
-                $(this).updateNewznabCaps( null, data );
-            }
-        }
-    };
-
-    /**
-     * Updates the Global array $.fn.newznabProvidersCapabilities with a combination of newznab prov name
-     * and category capabilities. Return
-     * @param {Array} newzNabCaps, is the returned object with newzNabprod Name and Capabilities.
-     * @param {Array} selectedProvider
-     * @return no return data. The multiselect input $("#newznab_cap") is updated, as a result.
-     */
-    $.fn.updateNewznabCaps = function( newzNabCaps, selectedProvider ) {
-        if (newzNabCaps && !ifExists($.fn.newznabProvidersCapabilities, selectedProvider[0])) {
-            $.fn.newznabProvidersCapabilities.push({'name' : selectedProvider[0], 'categories' : newzNabCaps.tv_categories}); // jshint ignore:line
-        }
-
-        //Loop through the array and if currently selected newznab provider name matches one in the array, use it to
-        //update the capabilities select box (on the left).
-        if (selectedProvider[0]) {
-            $.fn.newznabProvidersCapabilities.forEach(function(newzNabCap) {
-                if (newzNabCap.name && newzNabCap.name === selectedProvider[0] && newzNabCap.categories instanceof Array) {
-                    var newCapOptions = [];
-                    newzNabCap.categories.forEach(function(categorySet) {
-                        if (categorySet.id && categorySet.name) {
-                            newCapOptions.push({value : categorySet.id, text : categorySet.name + "(" + categorySet.id + ")"});
-                        }
-                    });
-                    $("#newznab_cap").replaceOptions(newCapOptions);
-                }
-            });
-        }
-    };
-
-    $.fn.makeNewznabProviderString = function() {
-        var provStrings = [];
-
-        for (var id in newznabProviders) {
-            if (newznabProviders.hasOwnProperty(id)) {
-                provStrings.push(newznabProviders[id][1].join('|'));
-            }
-        }
-
-        $('#newznab_string').val(provStrings.join('!!!'));
-    };
-
-    $.fn.populateTorrentRssSection = function() {
-        var selectedProvider = $('#editATorrentRssProvider :selected').val();
-        var data = '';
-
-        if (selectedProvider === 'addTorrentRss') {
-            data = ['','','','title'];
-            $('#torrentrss_add_div').show();
-            $('#torrentrss_update_div').hide();
-        } else {
-            data = torrentRssProviders[selectedProvider];
-            $('#torrentrss_add_div').hide();
-            $('#torrentrss_update_div').show();
-        }
-
-        $('#torrentrss_name').val(data[0]);
-        $('#torrentrss_url').val(data[1]);
-        $('#torrentrss_cookies').val(data[2]);
-        $('#torrentrss_titleTAG').val(data[3]);
-
-        if (selectedProvider === 'addTorrentRss') {
-            $('#torrentrss_name').removeAttr("disabled");
-            $('#torrentrss_url').removeAttr("disabled");
-            $('#torrentrss_cookies').removeAttr("disabled");
-            $('#torrentrss_titleTAG').removeAttr("disabled");
-        } else {
-            $('#torrentrss_name').attr("disabled", "disabled");
-            $('#torrentrss_url').removeAttr("disabled");
-            $('#torrentrss_cookies').removeAttr("disabled");
-            $('#torrentrss_titleTAG').removeAttr("disabled");
-            $('#torrentrss_delete').removeAttr("disabled");
-        }
-    };
-
-    $.fn.makeTorrentRssProviderString = function() {
-        var provStrings = [];
-        for (var id in torrentRssProviders) {
-            if (torrentRssProviders.hasOwnProperty(id)) {
-                provStrings.push(torrentRssProviders[id].join('|'));
-            }
-        }
-
-        $('#torrentrss_string').val(provStrings.join('!!!'));
-    };
-
-
-    $.fn.refreshProviderList = function() {
-        var idArr = $("#provider_order_list").sortable('toArray');
-        var finalArr = [];
-        $.each(idArr, function(key, val) {
-            var checked = + $('#enable_'+val).prop('checked') ? '1' : '0';
-            finalArr.push(val + ':' + checked);
-        });
-
-        $("#provider_order").val(finalArr.join(' '));
-        $(this).refreshEditAProvider();
-    };
-
-    $.fn.refreshEditAProvider = function() {
-        $('#provider-list').empty();
-
-        var idArr = $("#provider_order_list").sortable('toArray');
-        var finalArr = [];
-        $.each(idArr, function(key, val) {
-            if ($('#enable_'+val).prop('checked')) {
-                finalArr.push(val);
-            }
-        });
-
-        if (finalArr.length > 0) {
-            $('<select>').prop('id','editAProvider').addClass('form-control input-sm').appendTo('#provider-list');
-            for (var i = 0, len = finalArr.length; i < len; i++) {
-                var provider = finalArr[i];
-                $('#editAProvider').append($('<option>').prop('value',provider).text($.trim($('#'+provider).text()).replace(/\s\*$/, '').replace(/\s\*\*$/, '')));
-            }
-        } else {
-            document.getElementsByClassName('component-desc')[0].innerHTML = "No providers available to configure.";
-        }
-
-        $(this).showHideProviders();
-    };
-
-    var newznabProviders = [];
-    var torrentRssProviders = [];
-
-    $(this).on('change', '.newznab_key', function(){
-        var providerId = $(this).attr('id');
-        providerId = providerId.substring(0, providerId.length-'_hash'.length);
-
-        var url = $('#'+providerId+'_url').val();
-        var cat = $('#'+providerId+'_cat').val();
-        var key = $(this).val();
-
-        $(this).updateProvider(providerId, url, key, cat);
     });
-
-    $('#newznab_key,#newznab_url').change(function(){
-        var selectedProvider = $('#editANewznabProvider :selected').val();
-
-        if (selectedProvider === "addNewznab"){
-             return;
-        }
-
-        var url = $('#newznab_url').val();
-        var key = $('#newznab_key').val();
-
-        var cat = $('#newznab_cat option').map(function(i, opt) {
-            return $(opt).text();
-        }).toArray().join(',');
-
-        $(this).updateProvider(selectedProvider, url, key, cat);
-    });
-
-    $('#torrentrss_url,#torrentrss_cookies,#torrentrss_titleTAG').change(function(){
-        var selectedProvider = $('#editATorrentRssProvider :selected').val();
-
-        if (selectedProvider === "addTorrentRss"){
-             return;
-        }
-
-        var url = $('#torrentrss_url').val();
-        var cookies = $('#torrentrss_cookies').val();
-        var titleTAG = $('#torrentrss_titleTAG').val();
-
-        $(this).updateTorrentRssProvider(selectedProvider, url, cookies, titleTAG);
-    });
-
-    $('body').on('change', '#editAProvider',function(){
-        $(this).showHideProviders();
-    });
-
-    $('#editANewznabProvider').change(function(){
-        $(this).populateNewznabSection();
-    });
-
-    $('#editATorrentRssProvider').change(function(){
-        $(this).populateTorrentRssSection();
-    });
-
-    $(this).on('click', '.provider_enabler', function(){
-        $(this).refreshProviderList();
-    });
-
-    $('#newznab_cat_update').click(function(){
-        console.debug('Clicked Button');
-
-        // Maybe check if there is anything selected?
-        $("#newznab_cat option").each(function() {
-            $(this).remove();
-        });
-
-        var newOptions = [];
-
-        // When the update botton is clicked, loop through the capabilities list
-        // and copy the selected category id's to the category list on the right.
-        $("#newznab_cap option:selected").each(function(){
-            var selectedCat = $(this).val();
-            console.debug(selectedCat);
-            newOptions.push({text: selectedCat, value: selectedCat});
-        });
-
-        $("#newznab_cat").replaceOptions(newOptions);
-
-        var selectedProvider = $("#editANewznabProvider :selected").val();
-        if (selectedProvider === "addNewznab"){
-            return;
-        }
-
-        var url = $('#newznab_url').val();
-        var key = $('#newznab_key').val();
-
-        var cat = $('#newznab_cat option').map(function(i, opt) {
-            return $(opt).text();
-        }).toArray().join(',');
-
-        $("#newznab_cat option:not([value])").remove();
-
-        $(this).updateProvider(selectedProvider, url, key, cat);
-    });
-
-
-    $('#newznab_add').click(function(){
-        var name = $.trim($('#newznab_name').val());
-        var url = $.trim($('#newznab_url').val());
-        var key = $.trim($('#newznab_key').val());
-        //var cat = $.trim($('#newznab_cat').val());
-
-        var cat = $.trim($('#newznab_cat option').map(function(i, opt) {
-            return $(opt).text();
-        }).toArray().join(','));
-
-        if (!name || !url || !key) {
-            return;
-        }
-
-        var params = {name: name};
-
-        // send to the form with ajax, get a return value
-        $.getJSON(srRoot + '/config/providers/canAddNewznabProvider', params, function(data){
-            if (data.error !== undefined) {
-                alert(data.error);
-                return;
-            }
-            $(this).addProvider(data.success, name, url, key, cat, 0);
-        });
-    });
-
-    $('.newznab_delete').click(function(){
-        var selectedProvider = $('#editANewznabProvider :selected').val();
-        $(this).deleteProvider(selectedProvider);
-    });
-
-    $('#torrentrss_add').click(function(){
-        var name = $('#torrentrss_name').val();
-        var url = $('#torrentrss_url').val();
-        var cookies = $('#torrentrss_cookies').val();
-        var titleTAG = $('#torrentrss_titleTAG').val();
-        var params = { name: name, url: url, cookies: cookies, titleTAG: titleTAG};
-
-        // send to the form with ajax, get a return value
-        $.getJSON(srRoot + '/config/providers/canAddTorrentRssProvider', params, function(data){
-            if (data.error !== undefined) {
-                alert(data.error);
-                return;
-            }
-
-            $(this).addTorrentRssProvider(data.success, name, url, cookies, titleTAG);
-            $(this).refreshEditAProvider();
-        });
-    });
-
-    $('.torrentrss_delete').on('click', function(){
-        $(this).deleteTorrentRssProvider($('#editATorrentRssProvider :selected').val());
-        $(this).refreshEditAProvider();
-    });
-
-    $(this).on('change', "[class='providerDiv_tip'] input", function(){
-        $('div .providerDiv ' + "[name=" + $(this).attr('name') + "]").replaceWith($(this).clone());
-        $('div .providerDiv ' + "[newznab_name=" + $(this).attr('id') + "]").replaceWith($(this).clone());
-    });
-
-    $(this).on('change', "[class='providerDiv_tip'] select", function(){
-        $(this).find('option').each( function() {
-            if ($(this).is(':selected')) {
-                $(this).prop('defaultSelected', true);
-            } else {
-                $(this).prop('defaultSelected', false);
-            }
-        });
-        $('div .providerDiv ' + "[name=" + $(this).attr('name') + "]").empty().replaceWith($(this).clone());
-    });
-
-    $(this).on('change', '.enabler', function(){
-        if ($(this).is(':checked')) {
-            $('.content_'+$(this).attr('id')).each( function() {
-                $(this).show();
-            });
-        } else {
-            $('.content_'+$(this).attr('id')).each( function() {
-                $(this).hide();
-            });
-        }
-    });
-
-    $(".enabler").each(function(){
-        if (!$(this).is(':checked')) {
-            $('.content_'+$(this).attr('id')).hide();
-        } else {
-            $('.content_'+$(this).attr('id')).show();
-        }
-    });
-
-    $.fn.makeTorrentOptionString = function(providerId) {
-        var seedRatio  = $('.providerDiv_tip #' + providerId + '_seed_ratio').prop('value');
-        var seedTime   = $('.providerDiv_tip #' + providerId + '_seed_time').prop('value');
-        var processMet = $('.providerDiv_tip #' + providerId + '_process_method').prop('value');
-        var optionString = $('.providerDiv_tip #' + providerId + '_option_string');
-
-        optionString.val([seedRatio, seedTime, processMet].join('|'));
-    };
-
-    $(this).on('change', '.seed_option', function(){
-        var providerId = $(this).attr('id').split('_')[0];
-        $(this).makeTorrentOptionString(providerId);
-    });
-
-    $.fn.replaceOptions = function(options) {
-        var self, $option;
-
-        this.empty();
-        self = this;
-
-        $.each(options, function(index, option) {
-            $option = $("<option></option>").attr("value", option.value).text(option.text);
-            self.append($option);
-        });
-    };
-
-    // initialization stuff
-    $.fn.newznabProvidersCapabilities = [];
-
-    $(this).showHideProviders();
-
-    $("#provider_order_list").sortable({
-        placeholder: 'ui-state-highlight',
-        update: function () {
-            $(this).refreshProviderList();
-        }
-    });
-
-    $("#provider_order_list").disableSelection();
-
-    if ($('#editANewznabProvider').length) {
-        $(this).populateNewznabSection();
-    }
-});
diff --git a/gui/slick/js/configSearch.js b/gui/slick/js/configSearch.js
deleted file mode 100644
index defb6407a..000000000
--- a/gui/slick/js/configSearch.js
+++ /dev/null
@@ -1,222 +0,0 @@
-$(document).ready(function(){
-    var loading = '<img src="' + srRoot + '/images/loading16' + themeSpinner + '.gif" height="16" width="16" />';
-
-    function toggleTorrentTitle(){
-        if ($('#use_torrents').prop('checked')){
-            $('#no_torrents').show();
-        } else {
-            $('#no_torrents').hide();
-        }
-    }
-
-    $.fn.nzbMethodHandler = function() {
-        var selectedProvider = $('#nzb_method :selected').val(),
-            blackholeSettings = '#blackhole_settings',
-            sabnzbdSettings = '#sabnzbd_settings',
-            testSABnzbd = '#testSABnzbd',
-            testSABnzbdResult = '#testSABnzbd_result',
-            nzbgetSettings = '#nzbget_settings';
-
-        $(blackholeSettings).hide();
-        $(sabnzbdSettings).hide();
-        $(testSABnzbd).hide();
-        $(testSABnzbdResult).hide();
-        $(nzbgetSettings).hide();
-
-        if (selectedProvider.toLowerCase() === 'blackhole') {
-            $(blackholeSettings).show();
-        } else if (selectedProvider.toLowerCase() === 'nzbget') {
-            $(nzbgetSettings).show();
-        } else {
-            $(sabnzbdSettings).show();
-            $(testSABnzbd).show();
-            $(testSABnzbdResult).show();
-        }
-    };
-
-    $.fn.rtorrentScgi = function(){
-        var selectedProvider = $('#torrent_method :selected').val();
-
-        if (selectedProvider.toLowerCase() === 'rtorrent') {
-            var hostname = $('#torrent_host').prop('value');
-            var isMatch = hostname.substr(0, 7) === "scgi://";
-
-            if (isMatch) {
-                $('#torrent_username_option').hide();
-                $('#torrent_username').prop('value', '');
-                $('#torrent_password_option').hide();
-                $('#torrent_password').prop('value', '');
-                $('#torrent_auth_type_option').hide();
-                $("#torrent_auth_type option[value=none]").attr('selected', 'selected');
-            } else {
-                $('#torrent_username_option').show();
-                $('#torrent_password_option').show();
-                $('#torrent_auth_type_option').show();
-            }
-        }
-    };
-
-    $.fn.torrentMethodHandler = function() {
-        $('#options_torrent_clients').hide();
-        $('#options_torrent_blackhole').hide();
-
-        var selectedProvider = $('#torrent_method :selected').val(),
-            host = ' host:port',
-            username = ' username',
-            password = ' password',
-            label = ' label',
-            directory = ' directory',
-            client = '',
-            optionPanel = '#options_torrent_blackhole';
-            rpcurl = ' RPC URL';
-
-        if (selectedProvider.toLowerCase() !== 'blackhole') {
-            var label_warning_deluge = '#label_warning_deluge',
-                label_anime_warning_deluge = '#label_anime_warning_deluge',
-                host_desc_rtorrent = '#host_desc_rtorrent',
-                host_desc_torrent = '#host_desc_torrent',
-                torrent_verify_cert_option = '#torrent_verify_cert_option',
-                torrent_path_option = '#torrent_path_option',
-                torrent_seed_time_option = '#torrent_seed_time_option',
-                torrent_high_bandwidth_option = '#torrent_high_bandwidth_option',
-                torrent_label_option = '#torrent_label_option',
-                torrent_label_anime_option = '#torrent_label_anime_option',
-                path_synology = '#path_synology',
-                torrent_paused_option = '#torrent_paused_option';
-
-            $(label_warning_deluge).hide();
-            $(label_anime_warning_deluge).hide();
-            $(label_anime_warning_deluge).hide();
-            $(host_desc_rtorrent).hide();
-            $(host_desc_torrent).show();
-            $(torrent_verify_cert_option).hide();
-            $(torrent_verify_deluge).hide();
-            $(torrent_verify_rtorrent).hide();
-            $(torrent_auth_type_option).hide();
-            $(torrent_path_option).show();
-            $(torrent_path_option).find('.fileBrowser').show();
-            $(torrent_seed_time_option).hide();
-            $(torrent_high_bandwidth_option).hide();
-            $(torrent_label_option).show();
-            $(torrent_label_anime_option).show();
-            $(path_synology).hide();
-            $(torrent_paused_option).show();
-            $(torrent_rpcurl_option).hide();
-            $(this).rtorrentScgi();
-
-            if (selectedProvider.toLowerCase() === 'utorrent') {
-                client = 'uTorrent';
-                $(torrent_path_option).hide();
-                $('#torrent_seed_time_label').text('Minimum seeding time is');
-                $(torrent_seed_time_option).show();
-                $('#host_desc_torrent').text('URL to your uTorrent client (e.g. http://localhost:8000)');
-            } else if (selectedProvider.toLowerCase() === 'transmission'){
-                client = 'Transmission';
-                $('#torrent_seed_time_label').text('Stop seeding when inactive for');
-                $(torrent_seed_time_option).show();
-                $(torrent_high_bandwidth_option).show();
-                $(torrent_label_option).hide();
-                $(torrent_label_anime_option).hide();
-                $(torrent_rpcurl_option).show();
-                $('#host_desc_torrent').text('URL to your Transmission client (e.g. http://localhost:9091)');
-            } else if (selectedProvider.toLowerCase() === 'deluge'){
-                client = 'Deluge';
-                $(torrent_verify_cert_option).show();
-                $(torrent_verify_deluge).show();
-                $(torrent_verify_rtorrent).hide();
-                $(label_warning_deluge).show();
-                $(label_anime_warning_deluge).show();
-                $('#torrent_username_option').hide();
-                $('#torrent_username').prop('value', '');
-                $('#host_desc_torrent').text('URL to your Deluge client (e.g. http://localhost:8112)');
-            } else if ('deluged' == selectedProvider){
-                client = 'Deluge';
-                $(torrent_verify_cert_option).hide();
-                $(torrent_verify_deluge).hide();
-                $(torrent_verify_rtorrent).hide();
-                $(label_warning_deluge).show();
-                $(label_anime_warning_deluge).show();
-                $('#torrent_username_option').show();
-                $('#host_desc_torrent').text('IP or Hostname of your Deluge Daemon (e.g. scgi://localhost:58846)');
-            } else if ('download_station' == selectedProvider){
-                client = 'Synology DS';
-                $(torrent_label_option).hide();
-                $(torrent_label_anime_option).hide();
-                $('#torrent_paused_option').hide();
-                $(torrent_path_option).find('.fileBrowser').hide();
-                $('#host_desc_torrent').text('URL to your Synology DS client (e.g. http://localhost:5000)');
-                $(path_synology).show();
-            } else if ('rtorrent' == selectedProvider){
-                client = 'rTorrent';
-                $(torrent_paused_option).hide();
-                $('#host_desc_torrent').text('URL to your rTorrent client (e.g. scgi://localhost:5000 <br> or https://localhost/rutorrent/plugins/httprpc/action.php)');
-                $(torrent_verify_cert_option).show();
-                $(torrent_verify_deluge).hide();
-                $(torrent_verify_rtorrent).show();
-                $(torrent_auth_type_option).show();
-            } else if ('qbittorrent' == selectedProvider){
-                client = 'qbittorrent';
-                $(torrent_path_option).hide();
-                $(torrent_label_option).hide();
-                $(torrent_label_anime_option).hide();
-                $('#host_desc_torrent').text('URL to your qbittorrent client (e.g. http://localhost:8080)');
-            } else if ('mlnet' == selectedProvider){
-                client = 'mlnet';
-                $(torrent_path_option).hide();
-                $(torrent_label_option).hide();
-                $(torrent_verify_cert_option).hide();
-                $(torrent_verify_deluge).hide();
-                $(torrent_verify_rtorrent).hide();
-                $(torrent_label_anime_option).hide();
-                $(torrent_paused_option).hide();
-                $('#host_desc_torrent').text('URL to your MLDonkey (e.g. http://localhost:4080)');
-            }
-            $('#host_title').text(client + host);
-            $('#username_title').text(client + username);
-            $('#password_title').text(client + password);
-            $('#torrent_client').text(client);
-            $('#rpcurl_title').text(client + rpcurl);
-            optionPanel = '#options_torrent_clients';
-        }
-        $(optionPanel).show();
-    };
-
-    $('#nzb_method').change($(this).nzbMethodHandler);
-
-    $(this).nzbMethodHandler();
-
-    $('#testSABnzbd').click(function(){
-        $('#testSABnzbd_result').html(loading);
-        var sab_host = $('#sab_host').val();
-        var sab_username = $('#sab_username').val();
-        var sab_password = $('#sab_password').val();
-        var sab_apiKey = $('#sab_apikey').val();
-
-        $.get(srRoot + '/home/testSABnzbd', {'host': sab_host, 'username': sab_username, 'password': sab_password, 'apikey': sab_apiKey},
-        function(data){
-            $('#testSABnzbd_result').html(data);
-        });
-    });
-
-
-    $('#torrent_method').change($(this).torrentMethodHandler);
-
-    $(this).torrentMethodHandler();
-
-    $('#use_torrents').click(function(){
-        toggleTorrentTitle();
-    });
-
-    $('#test_torrent').click(function(){
-        $('#test_torrent_result').html(loading);
-        var torrent_method = $('#torrent_method :selected').val();
-        var torrent_host = $('#torrent_host').val();
-        var torrent_username = $('#torrent_username').val();
-        var torrent_password = $('#torrent_password').val();
-
-        $.get(srRoot + '/home/testTorrent', {'torrent_method': torrent_method, 'host': torrent_host, 'username': torrent_username, 'password': torrent_password},
-        function(data){ $('#test_torrent_result').html(data); });
-    });
-
-    $('#torrent_host').change($(this).rtorrentScgi);
-});
diff --git a/gui/slick/js/configSubtitles.js b/gui/slick/js/configSubtitles.js
deleted file mode 100644
index 5ff3942a2..000000000
--- a/gui/slick/js/configSubtitles.js
+++ /dev/null
@@ -1,59 +0,0 @@
-$(document).ready(function(){
-    $.fn.showHideServices = function() {
-        $('.serviceDiv').each(function(){
-            var serviceName = $(this).attr('id');
-            var selectedService = $('#editAService :selected').val();
-
-            if (selectedService+'Div' === serviceName){
-                $(this).show();
-            } else {
-                $(this).hide();
-            }
-        });
-    };
-
-    $.fn.addService = function (id, name, url, key, isDefault, showService) {
-        if (url.match('/$') === null) { url = url + '/'; }
-
-        if ($('#service_order_list > #'+id).length === 0 && showService !== false) {
-            var toAdd = '<li class="ui-state-default" id="' + id + '"> <input type="checkbox" id="enable_' + id + '" class="service_enabler" CHECKED> <a href="' + anonURL + url + '" class="imgLink" target="_new"><img src="' + srRoot + '/images/services/newznab.gif" alt="' + name + '" width="16" height="16"></a> ' + name + '</li>';
-
-            $('#service_order_list').append(toAdd);
-            $('#service_order_list').sortable("refresh");
-        }
-    };
-
-    $.fn.deleteService = function (id) {
-        $('#service_order_list > #'+id).remove();
-    };
-
-    $.fn.refreshServiceList = function() {
-        var idArr = $("#service_order_list").sortable('toArray');
-        var finalArr = [];
-        $.each(idArr, function(key, val) {
-            var checked = + $('#enable_'+val).prop('checked') ? '1' : '0';
-            finalArr.push(val + ':' + checked);
-        });
-        $("#service_order").val(finalArr.join(' '));
-    };
-
-    $('#editAService').change(function(){
-        $(this).showHideServices();
-    });
-
-    $('.service_enabler').on('click', function(){
-        $(this).refreshServiceList();
-    });
-
-    // initialization stuff
-    $(this).showHideServices();
-
-    $("#service_order_list").sortable({
-        placeholder: 'ui-state-highlight',
-        update: function () {
-            $(this).refreshServiceList();
-        }
-    });
-
-    $("#service_order_list").disableSelection();
-});
diff --git a/gui/slick/js/core.js b/gui/slick/js/core.js
new file mode 100644
index 000000000..94a42be7c
--- /dev/null
+++ b/gui/slick/js/core.js
@@ -0,0 +1,2269 @@
+var srRoot = getMeta('srRoot'),
+    themeSpinner = getMeta('themeSpinner'),
+    anonURL = getMeta('anonURL'),
+    topImageHtml = '<img src="' + srRoot + '/images/top.gif" width="31" height="11" alt="Jump to top" />',
+    loading = '<img src="' + srRoot + '/images/loading16' + themeSpinner + '.gif" height="16" width="16" />';
+
+function configSuccess(){
+    $('.config_submitter').each(function(){
+        $(this).removeAttr("disabled");
+        $(this).next().remove();
+        $(this).show();
+    });
+    $('.config_submitter_refresh').each(function(){
+        $(this).removeAttr("disabled");
+        $(this).next().remove();
+        $(this).show();
+        window.location.href = srRoot + '/config/providers/';
+    });
+    $('#email_show').trigger('notify');
+}
+
+var SICKRAGE = {
+    common: {
+        init: function() {
+            $("#config-components").tabs({
+                activate: function (event, ui) {
+                    var lastOpenedPanel = $(this).data("lastOpenedPanel"),
+                        selected = $(this).tabs('option', 'selected');
+
+                    if (!lastOpenedPanel) { lastOpenedPanel = $(ui.oldPanel); }
+
+                    if (!$(this).data("topPositionTab")) { $(this).data("topPositionTab", $(ui.newPanel).position().top); }
+
+                    //Dont use the builtin fx effects. This will fade in/out both tabs, we dont want that
+                    //Fadein the new tab yourself
+                    $(ui.newPanel).hide().fadeIn(0);
+
+                    if (lastOpenedPanel) {
+                        // 1. Show the previous opened tab by removing the jQuery UI class
+                        // 2. Make the tab temporary position:absolute so the two tabs will overlap
+                        // 3. Set topposition so they will overlap if you go from tab 1 to tab 0
+                        // 4. Remove position:absolute after animation
+                        lastOpenedPanel
+                            .toggleClass("ui-tabs-hide")
+                            .css("position", "absolute")
+                            .css("top", $(this).data("topPositionTab") + "px")
+                            .fadeOut(0, function () {
+                                $(this).css("position", "");
+                            });
+                    }
+
+                    //Saving the last tab has been opened
+                    $(this).data("lastOpenedPanel", $(ui.newPanel));
+                }
+            });
+
+            // @TODO Replace this with a real touchscreen check
+            // hack alert: if we don't have a touchscreen, and we are already hovering the mouse, then click should link instead of toggle
+            if ((navigator.maxTouchPoints || 0) < 2) {
+                $('.dropdown-toggle').on('click', function(e) {
+                    var $this = $(this);
+                    if ($this.attr('aria-expanded') === 'true') {
+                        window.location.href = $this.attr('href');
+                    }
+                });
+            }
+
+            if(metaToBool('sickbeard.FUZZY_DATING')){
+                $.timeago.settings.allowFuture = true;
+                $.timeago.settings.strings = {
+                    prefixAgo: null,
+                    prefixFromNow: 'In ',
+                    suffixAgo: "ago",
+                    suffixFromNow: "",
+                    seconds: "less than a minute",
+                    minute: "about a minute",
+                    minutes: "%d minutes",
+                    hour: "an hour",
+                    hours: "%d hours",
+                    day: "a day",
+                    days: "%d days",
+                    month: "a month",
+                    months: "%d months",
+                    year: "a year",
+                    years: "%d years",
+                    wordSeparator: " ",
+                    numbers: []
+                };
+                $("[datetime]").timeago();
+            }
+        }
+    },
+    config: {
+        init: function() {
+            $('#config-components').tabs();
+
+            $(".enabler").each(function(){
+                if (!$(this).prop('checked')) { $('#content_'+$(this).attr('id')).hide(); }
+            });
+
+            $(".enabler").click(function() {
+                if ($(this).prop('checked')){
+                    $('#content_'+$(this).attr('id')).fadeIn("fast", "linear");
+                } else {
+                    $('#content_'+$(this).attr('id')).fadeOut("fast", "linear");
+                }
+            });
+
+            $(".viewIf").click(function() {
+                if ($(this).prop('checked')) {
+                    $('.hide_if_'+$(this).attr('id')).css('display','none');
+                    $('.show_if_'+$(this).attr('id')).fadeIn("fast", "linear");
+                } else {
+                    $('.show_if_'+$(this).attr('id')).css('display','none');
+                    $('.hide_if_'+$(this).attr('id')).fadeIn("fast", "linear");
+                }
+            });
+
+            $(".datePresets").click(function() {
+                var def = $('#date_presets').val();
+                if ($(this).prop('checked') && '%x' === def) {
+                    def = '%a, %b %d, %Y';
+                    $('#date_use_system_default').html('1');
+                } else if (!$(this).prop('checked') && '1' === $('#date_use_system_default').html()){
+                    def = '%x';
+                }
+
+                $('#date_presets').attr('name', 'date_preset_old');
+                $('#date_presets').attr('id', 'date_presets_old');
+
+                $('#date_presets_na').attr('name', 'date_preset');
+                $('#date_presets_na').attr('id', 'date_presets');
+
+                $('#date_presets_old').attr('name', 'date_preset_na');
+                $('#date_presets_old').attr('id', 'date_presets_na');
+
+                if (def) { $('#date_presets').val(def); }
+            });
+
+            // bind 'myForm' and provide a simple callback function
+            $('#configForm').ajaxForm({
+                beforeSubmit: function(){
+                    $('.config_submitter .config_submitter_refresh').each(function(){
+                        $(this).attr("disabled", "disabled");
+                        $(this).after('<span><img src="' + srRoot + '/images/loading16' + themeSpinner + '.gif"> Saving...</span>');
+                        $(this).hide();
+                    });
+                },
+                success: function(){
+                    setTimeout(function () {
+                        "use strict";
+                        configSuccess();
+                    }, 2000);
+                }
+            });
+
+            $('#api_key').click(function(){
+                $('#api_key').select();
+            });
+
+            $("#generate_new_apikey").click(function(){
+                $.get(srRoot + '/config/general/generateApiKey', function(data){
+                    if (data.error !== undefined) {
+                        alert(data.error);
+                        return;
+                    }
+                    $('#api_key').val(data);
+                });
+            });
+
+            $('#branchCheckout').click(function() {
+                var url = srRoot + '/home/branchCheckout?branch=' + $("#branchVersion").val();
+                var checkDBversion = srRoot + "/home/getDBcompare";
+                $.getJSON(checkDBversion, function(data){
+                    if (data.status === "success") {
+                        if (data.message === "equal") {
+                            //Checkout Branch
+                            window.location.href = url;
+                        }
+                        if (data.message === "upgrade") {
+                            if ( confirm("Changing branch will upgrade your database.\nYou won't be able to downgrade afterward.\nDo you want to continue?") ) {
+                                //Checkout Branch
+                                window.location.href = url;
+                            }
+                        }
+                        if (data.message === "downgrade") {
+                            alert("Can't switch branch as this will result in a database downgrade.");
+                        }
+                    }
+                });
+            });
+        },
+        index: function() {
+            if ($("input[name='proxy_setting']").val().length === 0) {
+                $("input[id='proxy_indexers']").prop('checked', false);
+                $("label[for='proxy_indexers']").hide();
+            }
+
+            $("input[name='proxy_setting']").on('input', function() {
+                if($(this).val().length === 0) {
+                    $("input[id='proxy_indexers']").prop('checked', false);
+                    $("label[for='proxy_indexers']").hide();
+                } else {
+                    $("label[for='proxy_indexers']").show();
+                }
+            });
+
+            $('#log_dir').fileBrowser({ title: 'Select log file folder location' });
+        },
+        backupRestore: function(){
+            $('#Backup').click(function() {
+                $("#Backup").attr("disabled", true);
+                $('#Backup-result').html(loading);
+                var backupDir = $("#backupDir").val();
+                $.get(srRoot + "/config/backuprestore/backup", {'backupDir': backupDir})
+                    .done(function (data) {
+                        $('#Backup-result').html(data);
+                        $("#Backup").attr("disabled", false);
+                    });
+            });
+            $('#Restore').click(function() {
+                $("#Restore").attr("disabled", true);
+                $('#Restore-result').html(loading);
+                var backupFile = $("#backupFile").val();
+                $.get(srRoot + "/config/backuprestore/restore", {'backupFile': backupFile})
+                    .done(function (data) {
+                        $('#Restore-result').html(data);
+                        $("#Restore").attr("disabled", false);
+                    });
+            });
+
+            $('#backupDir').fileBrowser({ title: 'Select backup folder to save to', key: 'backupPath' });
+            $('#backupFile').fileBrowser({ title: 'Select backup files to restore', key: 'backupFile', includeFiles: 1 });
+            $('#config-components').tabs();
+
+            $(".enabler").each(function(){
+                if (!$(this).prop('checked')) { $('#content_'+$(this).attr('id')).hide(); }
+            });
+
+            $(".enabler").click(function() {
+                if ($(this).prop('checked')){
+                    $('#content_'+$(this).attr('id')).fadeIn("fast", "linear");
+                } else {
+                    $('#content_'+$(this).attr('id')).fadeOut("fast", "linear");
+                }
+            });
+
+            $(".viewIf").click(function() {
+                if ($(this).prop('checked')) {
+                    $('.hide_if_'+$(this).attr('id')).css('display','none');
+                    $('.show_if_'+$(this).attr('id')).fadeIn("fast", "linear");
+                } else {
+                    $('.show_if_'+$(this).attr('id')).css('display','none');
+                    $('.hide_if_'+$(this).attr('id')).fadeIn("fast", "linear");
+                }
+            });
+
+            $(".datePresets").click(function() {
+                var def = $('#date_presets').val();
+                if ($(this).prop('checked') && '%x' == def) { // jshint ignore:line
+                    def = '%a, %b %d, %Y';
+                    $('#date_use_system_default').html('1');
+                } else if (!$(this).prop('checked') && '1' == $('#date_use_system_default').html()){ // jshint ignore:line
+                    def = '%x';
+                }
+
+                $('#date_presets').attr('name', 'date_preset_old');
+                $('#date_presets').attr('id', 'date_presets_old');
+
+                $('#date_presets_na').attr('name', 'date_preset');
+                $('#date_presets_na').attr('id', 'date_presets');
+
+                $('#date_presets_old').attr('name', 'date_preset_na');
+                $('#date_presets_old').attr('id', 'date_presets_na');
+
+                if (def) { $('#date_presets').val(def); }
+            });
+
+            // bind 'myForm' and provide a simple callback function
+            $('#configForm').ajaxForm({
+                beforeSubmit: function(){
+                    $('.config_submitter .config_submitter_refresh').each(function(){
+                        $(this).attr("disabled", "disabled");
+                        $(this).after('<span><img src="' + srRoot + '/images/loading16' + themeSpinner + '.gif"> Saving...</span>');
+                        $(this).hide();
+                    });
+                },
+                success: function(){
+                    setTimeout(function () {
+                        "use strict";
+                        configSuccess();
+                    }, 2000);
+                }
+            });
+
+            $('#api_key').click(function(){
+                $('#api_key').select();
+            });
+
+            $("#generate_new_apikey").click(function(){
+                $.get(srRoot + '/config/general/generateApiKey', function(data){
+                    if (data.error !== undefined) {
+                        alert(data.error);
+                        return;
+                    }
+                    $('#api_key').val(data);
+                });
+            });
+
+            $('#branchCheckout').click(function() {
+                var url = srRoot+'/home/branchCheckout?branch='+$("#branchVersion").val();
+                var checkDBversion = srRoot + "/home/getDBcompare";
+                $.getJSON(checkDBversion, function(data){
+                    if (data.status.toLowerCase() === "success") {
+                        if (data.message.toLowerCase() === "equal") {
+                            //Checkout Branch
+                            window.location.href = url;
+                        }
+                        if (data.message.toLowerCase() === "upgrade") {
+                            if ( confirm("Changing branch will upgrade your database.\nYou won't be able to downgrade afterward.\nDo you want to continue?") ) {
+                                //Checkout Branch
+                                window.location.href = url;
+                            }
+                        }
+                        if (data.message.toLowerCase() === "downgrade") {
+                            alert("Can't switch branch as this will result in a database downgrade.");
+                        }
+                    }
+                });
+            });
+        },
+        notifications: function() {
+            $('#config-components').tabs();
+
+            $('#testGrowl').click(function () {
+                var growlHost = $.trim($('#growl_host').val());
+                var growlPassword = $.trim($('#growl_password').val());
+                if (!growlHost) {
+                    $('#testGrowl-result').html('Please fill out the necessary fields above.');
+                    $('#growl_host').addClass('warning');
+                    return;
+                }
+                $('#growl_host').removeClass('warning');
+                $(this).prop('disabled', true);
+                $('#testGrowl-result').html(loading);
+                $.get(srRoot + '/home/testGrowl', {'host': growlHost, 'password': growlPassword}).done(function (data) {
+                    $('#testGrowl-result').html(data);
+                    $('#testGrowl').prop('disabled', false);
+                });
+            });
+
+            $('#testProwl').click(function () {
+                var prowlApi = $.trim($('#prowl_api').val());
+                var prowlPriority = $('#prowl_priority').val();
+                if (!prowlApi) {
+                    $('#testProwl-result').html('Please fill out the necessary fields above.');
+                    $('#prowl_api').addClass('warning');
+                    return;
+                }
+                $('#prowl_api').removeClass('warning');
+                $(this).prop('disabled', true);
+                $('#testProwl-result').html(loading);
+                $.get(srRoot + '/home/testProwl', {'prowl_api': prowlApi, 'prowl_priority': prowlPriority}).done(function (data) {
+                    $('#testProwl-result').html(data);
+                    $('#testProwl').prop('disabled', false);
+                });
+            });
+
+            $('#testKODI').click(function () {
+                var kodi_host = $.trim($('#kodi_host').val());
+                var kodi_username = $.trim($('#kodi_username').val());
+                var kodi_password = $.trim($('#kodi_password').val());
+                if (!kodi_host) {
+                    $('#testKODI-result').html('Please fill out the necessary fields above.');
+                    $('#kodi_host').addClass('warning');
+                    return;
+                }
+                $('#kodi_host').removeClass('warning');
+                $(this).prop('disabled', true);
+                $('#testKODI-result').html(loading);
+                $.get(srRoot + '/home/testKODI', {'host': kodi_host, 'username': kodi_username, 'password': kodi_password}).done(function (data) {
+                    $('#testKODI-result').html(data);
+                    $('#testKODI').prop('disabled', false);
+                });
+            });
+
+            $('#testPMC').click(function () {
+                var plex_host = $.trim($('#plex_host').val());
+                var plex_client_username = $.trim($('#plex_client_username').val());
+                var plex_client_password = $.trim($('#plex_client_password').val());
+                if (!plex_host) {
+                    $('#testPMC-result').html('Please fill out the necessary fields above.');
+                    $('#plex_host').addClass('warning');
+                    return;
+                }
+                $('#plex_host').removeClass('warning');
+                $(this).prop('disabled', true);
+                $('#testPMC-result').html(loading);
+                $.get(srRoot + '/home/testPMC', {'host': plex_host, 'username': plex_client_username, 'password': plex_client_password}).done(function (data) {
+                    $('#testPMC-result').html(data);
+                    $('#testPMC').prop('disabled', false);
+                });
+            });
+
+            $('#testPMS').click(function () {
+                var plex_server_host = $.trim($('#plex_server_host').val());
+                var plex_username = $.trim($('#plex_username').val());
+                var plex_password = $.trim($('#plex_password').val());
+                var plex_server_token = $.trim($('#plex_server_token').val());
+                if (!plex_server_host) {
+                    $('#testPMS-result').html('Please fill out the necessary fields above.');
+                    $('#plex_server_host').addClass('warning');
+                    return;
+                }
+                $('#plex_server_host').removeClass('warning');
+                $(this).prop('disabled', true);
+                $('#testPMS-result').html(loading);
+                $.get(srRoot + '/home/testPMS', {'host': plex_server_host, 'username': plex_username, 'password': plex_password, 'plex_server_token': plex_server_token}).done(function (data) {
+                    $('#testPMS-result').html(data);
+                    $('#testPMS').prop('disabled', false);
+                });
+            });
+
+            $('#testEMBY').click(function () {
+                var emby_host = $('#emby_host').val();
+                var emby_apikey = $('#emby_apikey').val();
+                if (!emby_host || !emby_apikey) {
+                    $('#testEMBY-result').html('Please fill out the necessary fields above.');
+                    if (!emby_host) {
+                        $('#emby_host').addClass('warning');
+                    } else {
+                        $('#emby_host').removeClass('warning');
+                    }
+                    if (!emby_apikey) {
+                        $('#emby_apikey').addClass('warning');
+                    } else {
+                        $('#emby_apikey').removeClass('warning');
+                    }
+                    return;
+                }
+                $('#emby_host,#emby_apikey').removeClass('warning');
+                $(this).prop('disabled', true);
+                $('#testEMBY-result').html(loading);
+                $.get(srRoot + '/home/testEMBY', {'host': emby_host, 'emby_apikey': emby_apikey}).done(function (data) {
+                    $('#testEMBY-result').html(data);
+                    $('#testEMBY').prop('disabled', false);
+                });
+            });
+
+            $('#testBoxcar').click(function() {
+                var boxcar_username = $.trim($('#boxcar_username').val());
+                if (!boxcar_username) {
+                    $('#testBoxcar-result').html('Please fill out the necessary fields above.');
+                    $('#boxcar_username').addClass('warning');
+                    return;
+                }
+                $('#boxcar_username').removeClass('warning');
+                $(this).prop('disabled', true);
+                $('#testBoxcar-result').html(loading);
+                $.get(srRoot + '/home/testBoxcar', {'username': boxcar_username}).done(function (data) {
+                    $('#testBoxcar-result').html(data);
+                    $('#testBoxcar').prop('disabled', false);
+                });
+            });
+
+            $('#testBoxcar2').click(function () {
+                var boxcar2_accesstoken = $.trim($('#boxcar2_accesstoken').val());
+                if (!boxcar2_accesstoken) {
+                    $('#testBoxcar2-result').html('Please fill out the necessary fields above.');
+                    $('#boxcar2_accesstoken').addClass('warning');
+                    return;
+                }
+                $('#boxcar2_accesstoken').removeClass('warning');
+                $(this).prop('disabled', true);
+                $('#testBoxcar2-result').html(loading);
+                $.get(srRoot + '/home/testBoxcar2', {'accesstoken': boxcar2_accesstoken}).done(function (data) {
+                    $('#testBoxcar2-result').html(data);
+                    $('#testBoxcar2').prop('disabled', false);
+                });
+            });
+
+            $('#testPushover').click(function () {
+                var pushover_userkey = $('#pushover_userkey').val();
+                var pushover_apikey = $('#pushover_apikey').val();
+                if (!pushover_userkey || !pushover_apikey) {
+                    $('#testPushover-result').html('Please fill out the necessary fields above.');
+                    if (!pushover_userkey) {
+                        $('#pushover_userkey').addClass('warning');
+                    } else {
+                        $('#pushover_userkey').removeClass('warning');
+                    }
+                    if (!pushover_apikey) {
+                        $('#pushover_apikey').addClass('warning');
+                    } else {
+                        $('#pushover_apikey').removeClass('warning');
+                    }
+                    return;
+                }
+                $('#pushover_userkey,#pushover_apikey').removeClass('warning');
+                $(this).prop('disabled', true);
+                $('#testPushover-result').html(loading);
+                $.get(srRoot + '/home/testPushover', {'userKey': pushover_userkey, 'apiKey': pushover_apikey}).done(function (data) {
+                    $('#testPushover-result').html(data);
+                    $('#testPushover').prop('disabled', false);
+                });
+            });
+
+            $('#testLibnotify').click(function() {
+                $('#testLibnotify-result').html(loading);
+                $.get(srRoot + '/home/testLibnotify', function (data) {
+                    $('#testLibnotify-result').html(data);
+                });
+            });
+
+            $('#twitterStep1').click(function() {
+                $('#testTwitter-result').html(loading);
+                $.get(srRoot + '/home/twitterStep1', function (data) {
+                    window.open(data);
+                }).done(function() {
+                    $('#testTwitter-result').html('<b>Step1:</b> Confirm Authorization');
+                });
+            });
+
+            $('#twitterStep2').click(function () {
+                var twitter_key = $.trim($('#twitter_key').val());
+                if (!twitter_key) {
+                    $('#testTwitter-result').html('Please fill out the necessary fields above.');
+                    $('#twitter_key').addClass('warning');
+                    return;
+                }
+                $('#twitter_key').removeClass('warning');
+                $('#testTwitter-result').html(loading);
+                $.get(srRoot + '/home/twitterStep2', {'key': twitter_key}, function(data) {
+                    $('#testTwitter-result').html(data);
+                });
+            });
+
+            $('#testTwitter').click(function() {
+                $.get(srRoot + '/home/testTwitter', function(data) {
+                    $('#testTwitter-result').html(data);
+                });
+            });
+
+            $('#settingsNMJ').click(function() {
+                if (!$('#nmj_host').val()) {
+                    alert('Please fill in the Popcorn IP address');
+                    $('#nmj_host').focus();
+                    return;
+                }
+                $('#testNMJ-result').html(loading);
+                var nmj_host = $('#nmj_host').val();
+
+                $.get(srRoot + '/home/settingsNMJ', {'host': nmj_host}, function (data) {
+                    if (data === null) {
+                        $('#nmj_database').removeAttr('readonly');
+                        $('#nmj_mount').removeAttr('readonly');
+                    }
+                    var JSONData = $.parseJSON(data);
+                    $('#testNMJ-result').html(JSONData.message);
+                    $('#nmj_database').val(JSONData.database);
+                    $('#nmj_mount').val(JSONData.mount);
+
+                    if (JSONData.database) {
+                        $('#nmj_database').attr('readonly', true);
+                    } else {
+                        $('#nmj_database').removeAttr('readonly');
+                    }
+                    if (JSONData.mount) {
+                        $('#nmj_mount').attr('readonly', true);
+                    } else {
+                        $('#nmj_mount').removeAttr('readonly');
+                    }
+                });
+            });
+
+            $('#testNMJ').click(function () {
+                var nmj_host = $.trim($('#nmj_host').val());
+                var nmj_database = $('#nmj_database').val();
+                var nmj_mount = $('#nmj_mount').val();
+                if (!nmj_host) {
+                    $('#testNMJ-result').html('Please fill out the necessary fields above.');
+                    $('#nmj_host').addClass('warning');
+                    return;
+                }
+                $('#nmj_host').removeClass('warning');
+                $(this).prop('disabled', true);
+                $('#testNMJ-result').html(loading);
+                $.get(srRoot + '/home/testNMJ', {'host': nmj_host, 'database': nmj_database, 'mount': nmj_mount}).done(function (data) {
+                    $('#testNMJ-result').html(data);
+                    $('#testNMJ').prop('disabled', false);
+                });
+            });
+
+            $('#settingsNMJv2').click(function() {
+                if (!$('#nmjv2_host').val()) {
+                    alert('Please fill in the Popcorn IP address');
+                    $('#nmjv2_host').focus();
+                    return;
+                }
+                $('#testNMJv2-result').html(loading);
+                var nmjv2_host = $('#nmjv2_host').val();
+                var nmjv2_dbloc;
+                var radios = document.getElementsByName('nmjv2_dbloc');
+                for(var i = 0, len = radios.length; i < len; i++) {
+                    if (radios[i].checked) {
+                        nmjv2_dbloc=radios[i].value;
+                        break;
+                    }
+                }
+
+                var nmjv2_dbinstance=$('#NMJv2db_instance').val();
+                $.get(srRoot + '/home/settingsNMJv2', {'host': nmjv2_host,'dbloc': nmjv2_dbloc,'instance': nmjv2_dbinstance}, function (data){
+                    if (data === null) {
+                        $('#nmjv2_database').removeAttr('readonly');
+                    }
+                    var JSONData = $.parseJSON(data);
+                    $('#testNMJv2-result').html(JSONData.message);
+                    $('#nmjv2_database').val(JSONData.database);
+
+                    if (JSONData.database){
+                        $('#nmjv2_database').attr('readonly', true);
+                    } else {
+                        $('#nmjv2_database').removeAttr('readonly');
+                    }
+                });
+            });
+
+            $('#testNMJv2').click(function () {
+                var nmjv2_host = $.trim($('#nmjv2_host').val());
+                if (!nmjv2_host) {
+                    $('#testNMJv2-result').html('Please fill out the necessary fields above.');
+                    $('#nmjv2_host').addClass('warning');
+                    return;
+                }
+                $('#nmjv2_host').removeClass('warning');
+                $(this).prop('disabled', true);
+                $('#testNMJv2-result').html(loading);
+                $.get(srRoot + '/home/testNMJv2', {'host': nmjv2_host}) .done(function (data) {
+                    $('#testNMJv2-result').html(data);
+                    $('#testNMJv2').prop('disabled', false);
+                });
+            });
+
+            $('#testFreeMobile').click(function () {
+                var freemobile_id = $.trim($('#freemobile_id').val());
+                var freemobile_apikey = $.trim($('#freemobile_apikey').val());
+                if (!freemobile_id || !freemobile_apikey) {
+                    $('#testFreeMobile-result').html('Please fill out the necessary fields above.');
+                    if (!freemobile_id) {
+                        $('#freemobile_id').addClass('warning');
+                    } else {
+                        $('#freemobile_id').removeClass('warning');
+                    }
+                    if (!freemobile_apikey) {
+                        $('#freemobile_apikey').addClass('warning');
+                    } else {
+                        $('#freemobile_apikey').removeClass('warning');
+                    }
+                    return;
+                }
+                $('#freemobile_id,#freemobile_apikey').removeClass('warning');
+                $(this).prop('disabled', true);
+                $('#testFreeMobile-result').html(loading);
+                $.get(srRoot + '/home/testFreeMobile', {'freemobile_id': freemobile_id, 'freemobile_apikey': freemobile_apikey}).done(function (data) {
+                    $('#testFreeMobile-result').html(data);
+                    $('#testFreeMobile').prop('disabled', false);
+                });
+            });
+
+            $('#TraktGetPin').click(function () {
+                var trakt_pin_url = $('#trakt_pin_url').val();
+                var w;
+                w = window.open(trakt_pin_url, "popUp", "toolbar=no, scrollbars=no, resizable=no, top=200, left=200, width=650, height=550");
+                 $('#trakt_pin').removeClass('hide');
+            });
+
+            $('#trakt_pin').on('keyup change', function(){
+                var trakt_pin = $('#trakt_pin').val();
+
+                if (trakt_pin.length !== 0) {
+                    $('#TraktGetPin').addClass('hide');
+                    $('#authTrakt').removeClass('hide');
+                } else {
+                    $('#TraktGetPin').removeClass('hide');
+                    $('#authTrakt').addClass('hide');
+                }
+            });
+
+            $('#authTrakt').click(function() {
+                var trakt_pin = $('#trakt_pin').val();
+                if (trakt_pin.length !== 0) {
+                    $.get(srRoot + '/home/getTraktToken', { "trakt_pin": trakt_pin }).done(function (data) {
+                        $('#testTrakt-result').html(data);
+                        $('#authTrakt').addClass('hide');
+                        $('#trakt_pin').addClass('hide');
+                        $('#TraktGetPin').addClass('hide');
+                    });
+                }
+            });
+
+            $('#testTrakt').click(function () {
+                var trakt_username = $.trim($('#trakt_username').val());
+                var trakt_trending_blacklist = $.trim($('#trakt_blacklist_name').val());
+                if (!trakt_username) {
+                    $('#testTrakt-result').html('Please fill out the necessary fields above.');
+                    if (!trakt_username) {
+                        $('#trakt_username').addClass('warning');
+                    } else {
+                        $('#trakt_username').removeClass('warning');
+                    }
+                    return;
+                }
+
+                if (/\s/g.test(trakt_trending_blacklist)) {
+                    $('#testTrakt-result').html('Check blacklist name; the value need to be a trakt slug');
+                    $('#trakt_blacklist_name').addClass('warning');
+                    return;
+                }
+                $('#trakt_username').removeClass('warning');
+                $('#trakt_blacklist_name').removeClass('warning');
+                $(this).prop('disabled', true);
+                $('#testTrakt-result').html(loading);
+                $.get(srRoot + '/home/testTrakt', {'username': trakt_username, 'blacklist_name': trakt_trending_blacklist}).done(function (data) {
+                    $('#testTrakt-result').html(data);
+                    $('#testTrakt').prop('disabled', false);
+                });
+            });
+
+            $('#testEmail').click(function () {
+                var status, host, port, tls, from, user, pwd, err, to;
+                status = $('#testEmail-result');
+                status.html(loading);
+                host = $('#email_host').val();
+                host = host.length > 0 ? host : null;
+                port = $('#email_port').val();
+                port = port.length > 0 ? port : null;
+                tls = $('#email_tls').attr('checked') !== undefined ? 1 : 0;
+                from = $('#email_from').val();
+                from = from.length > 0 ? from : 'root@localhost';
+                user = $('#email_user').val().trim();
+                pwd = $('#email_password').val();
+                err = '';
+                if (host === null) {
+                    err += '<li style="color: red;">You must specify an SMTP hostname!</li>';
+                }
+                if (port === null) {
+                    err += '<li style="color: red;">You must specify an SMTP port!</li>';
+                } else if (port.match(/^\d+$/) === null || parseInt(port, 10) > 65535) {
+                    err += '<li style="color: red;">SMTP port must be between 0 and 65535!</li>';
+                }
+                if (err.length > 0) {
+                    err = '<ol>' + err + '</ol>';
+                    status.html(err);
+                } else {
+                    to = prompt('Enter an email address to send the test to:', null);
+                    if (to === null || to.length === 0 || to.match(/.*@.*/) === null) {
+                        status.html('<p style="color: red;">You must provide a recipient email address!</p>');
+                    } else {
+                        $.get(srRoot + '/home/testEmail', {host: host, port: port, smtp_from: from, use_tls: tls, user: user, pwd: pwd, to: to}, function (msg) {
+                            $('#testEmail-result').html(msg);
+                        });
+                    }
+                }
+            });
+
+            $('#testNMA').click(function () {
+                var nma_api = $.trim($('#nma_api').val());
+                var nma_priority = $('#nma_priority').val();
+                if (!nma_api) {
+                    $('#testNMA-result').html('Please fill out the necessary fields above.');
+                    $('#nma_api').addClass('warning');
+                    return;
+                }
+                $('#nma_api').removeClass('warning');
+                $(this).prop('disabled', true);
+                $('#testNMA-result').html(loading);
+                $.get(srRoot + '/home/testNMA', {'nma_api': nma_api, 'nma_priority': nma_priority}).done(function (data) {
+                    $('#testNMA-result').html(data);
+                    $('#testNMA').prop('disabled', false);
+                });
+            });
+
+            $('#testPushalot').click(function () {
+                var pushalot_authorizationtoken = $.trim($('#pushalot_authorizationtoken').val());
+                if (!pushalot_authorizationtoken) {
+                    $('#testPushalot-result').html('Please fill out the necessary fields above.');
+                    $('#pushalot_authorizationtoken').addClass('warning');
+                    return;
+                }
+                $('#pushalot_authorizationtoken').removeClass('warning');
+                $(this).prop('disabled', true);
+                $('#testPushalot-result').html(loading);
+                $.get(srRoot + '/home/testPushalot', {'authorizationToken': pushalot_authorizationtoken}).done(function (data) {
+                    $('#testPushalot-result').html(data);
+                    $('#testPushalot').prop('disabled', false);
+                });
+            });
+
+            $('#testPushbullet').click(function () {
+                var pushbullet_api = $.trim($('#pushbullet_api').val());
+                if (!pushbullet_api) {
+                    $('#testPushbullet-result').html('Please fill out the necessary fields above.');
+                    $('#pushbullet_api').addClass('warning');
+                    return;
+                }
+                $('#pushbullet_api').removeClass('warning');
+                $(this).prop('disabled', true);
+                $('#testPushbullet-result').html(loading);
+                $.get(srRoot + '/home/testPushbullet', {'api': pushbullet_api}).done(function (data) {
+                    $('#testPushbullet-result').html(data);
+                    $('#testPushbullet').prop('disabled', false);
+                });
+            });
+
+            function get_pushbullet_devices(msg){
+                if(msg) { $('#testPushbullet-result').html(loading); }
+
+                var pushbullet_api = $("#pushbullet_api").val();
+
+                if(!pushbullet_api) {
+                    $('#testPushbullet-result').html("You didn't supply a Pushbullet api key");
+                    $("#pushbullet_api").focus();
+                    return false;
+                }
+
+                $.get(srRoot + "/home/getPushbulletDevices", {'api': pushbullet_api}, function (data) {
+                    var devices = jQuery.parseJSON(data).devices;
+                    var current_pushbullet_device = $("#pushbullet_device").val();
+                    $("#pushbullet_device_list").html('');
+                    for (var i = 0, len = devices.length; i < len; i++) {
+                        if(devices[i].active === true) {
+                            if(current_pushbullet_device == devices[i].iden) {
+                                $("#pushbullet_device_list").append('<option value="'+devices[i].iden+'" selected>' + devices[i].nickname + '</option>');
+                            } else {
+                                $("#pushbullet_device_list").append('<option value="'+devices[i].iden+'">' + devices[i].nickname + '</option>');
+                            }
+                        }
+                    }
+                    if (current_pushbullet_device === '') {
+                        $("#pushbullet_device_list").prepend('<option value="" selected>All devices</option>');
+                    } else {
+                        $("#pushbullet_device_list").prepend('<option value="">All devices</option>');
+                    }
+                    if(msg) $('#testPushbullet-result').html(msg);
+                });
+
+                $("#pushbullet_device_list").change(function(){
+                    $("#pushbullet_device").val($("#pushbullet_device_list").val());
+                    $('#testPushbullet-result').html("Don't forget to save your new pushbullet settings.");
+                });
+            }
+
+            $('#getPushbulletDevices').click(function(){
+                get_pushbullet_devices("Device list updated. Please choose a device to push to.");
+            });
+
+            // we have to call this function on dom ready to create the devices select
+            get_pushbullet_devices();
+
+            $('#email_show').change(function() {
+                var key = parseInt($('#email_show').val(), 10);
+                $('#email_show_list').val(key >= 0 ? notify_data[key.toString()].list : '');
+            });
+
+            // Update the internal data struct anytime settings are saved to the server
+            $('#email_show').bind('notify', function() {
+                load_show_notify_lists();
+            });
+
+            function load_show_notify_lists() {
+                $.get(srRoot + "/home/loadShowNotifyLists", function(data) {
+                    var list, html, s;
+                    list = $.parseJSON(data);
+                    notify_data = list;
+                    if (list._size === 0) return;
+                    html = '<option value="-1">-- Select --</option>';
+                    for (s in list) {
+                        if (s.charAt(0) !== '_') {
+                            html += '<option value="' + list[s].id + '">' + $('<div/>').text(list[s].name).html() + '</option>';
+                        }
+                    }
+                    $('#email_show').html(html);
+                    $('#email_show_list').val('');
+                });
+            }
+            // Load the per show notify lists everytime this page is loaded
+            load_show_notify_lists();
+
+            $('#email_show_save').click(function() {
+                $.post(srRoot + "/home/saveShowNotifyList", { show: $('#email_show').val(), emails: $('#email_show_list').val()}, function (data) {
+                    // Reload the per show notify lists to reflect changes
+                    load_show_notify_lists();
+                });
+            });
+
+            // show instructions for plex when enabled
+            $('#use_plex').click(function() {
+                if ($(this).is(':checked')) {
+                    $('.plexinfo').removeClass('hide');
+                } else {
+                    $('.plexinfo').addClass('hide');
+                }
+            });
+        },
+        postProcessing: function() {
+            $('#config-components').tabs();
+            $('#tv_download_dir').fileBrowser({ title: 'Select TV Download Directory' });
+
+            // http://stackoverflow.com/questions/2219924/idiomatic-jquery-delayed-event-only-after-a-short-pause-in-typing-e-g-timew
+            var typewatch = (function () {
+                var timer = 0;
+                return function (callback, ms) {
+                    clearTimeout(timer);
+                    timer = setTimeout(callback, ms);
+                };
+            })();
+
+            function israr_supported() {
+                var pattern = $('#naming_pattern').val();
+                $.get(srRoot + '/config/postProcessing/isRarSupported', function (data) {
+                    if (data !== "supported") {
+                        $('#unpack').qtip('option', {
+                            'content.text': 'Unrar Executable not found.',
+                            'style.classes': 'qtip-rounded qtip-shadow qtip-red'
+                        });
+                        $('#unpack').qtip('toggle', true);
+                        $('#unpack').css('background-color', '#FFFFDD');
+                    }
+                });
+            }
+
+            function fill_examples() {
+                var pattern = $('#naming_pattern').val();
+                var multi = $('#naming_multi_ep :selected').val();
+                var anime_type = $('input[name="naming_anime"]:checked').val();
+
+                $.get(srRoot + '/config/postProcessing/testNaming', {pattern: pattern, anime_type: 3}, function (data) {
+                    if (data) {
+                        $('#naming_example').text(data + '.ext');
+                        $('#naming_example_div').show();
+                    } else {
+                        $('#naming_example_div').hide();
+                    }
+                });
+
+                $.get(srRoot + '/config/postProcessing/testNaming', {pattern: pattern, multi: multi, anime_type: 3}, function (data) {
+                    if (data) {
+                        $('#naming_example_multi').text(data + '.ext');
+                        $('#naming_example_multi_div').show();
+                    } else {
+                        $('#naming_example_multi_div').hide();
+                    }
+                });
+
+                $.get(srRoot + '/config/postProcessing/isNamingValid', {pattern: pattern, multi: multi, anime_type: anime_type}, function (data) {
+                    if (data == "invalid") {
+                        $('#naming_pattern').qtip('option', {
+                            'content.text': 'This pattern is invalid.',
+                            'style.classes': 'qtip-rounded qtip-shadow qtip-red'
+                        });
+                        $('#naming_pattern').qtip('toggle', true);
+                        $('#naming_pattern').css('background-color', '#FFDDDD');
+                    } else if (data == "seasonfolders") {
+                        $('#naming_pattern').qtip('option', {
+                            'content.text': 'This pattern would be invalid without the folders, using it will force "Flatten" off for all shows.',
+                            'style.classes': 'qtip-rounded qtip-shadow qtip-red'
+                        });
+                        $('#naming_pattern').qtip('toggle', true);
+                        $('#naming_pattern').css('background-color', '#FFFFDD');
+                    } else {
+                        $('#naming_pattern').qtip('option', {
+                            'content.text': 'This pattern is valid.',
+                            'style.classes': 'qtip-rounded qtip-shadow qtip-green'
+                        });
+                        $('#naming_pattern').qtip('toggle', false);
+                        $('#naming_pattern').css('background-color', '#FFFFFF');
+                    }
+                });
+            }
+
+            function fill_abd_examples() {
+                var pattern = $('#naming_abd_pattern').val();
+
+                $.get(srRoot + '/config/postProcessing/testNaming', {pattern: pattern, abd: 'True'}, function (data) {
+                    if (data) {
+                        $('#naming_abd_example').text(data + '.ext');
+                        $('#naming_abd_example_div').show();
+                    } else {
+                        $('#naming_abd_example_div').hide();
+                    }
+                });
+
+                $.get(srRoot + '/config/postProcessing/isNamingValid', {pattern: pattern, abd: 'True'}, function (data) {
+                    if (data == "invalid") {
+                        $('#naming_abd_pattern').qtip('option', {
+                            'content.text': 'This pattern is invalid.',
+                            'style.classes': 'qtip-rounded qtip-shadow qtip-red'
+                        });
+                        $('#naming_abd_pattern').qtip('toggle', true);
+                        $('#naming_abd_pattern').css('background-color', '#FFDDDD');
+                    } else if (data == "seasonfolders") {
+                        $('#naming_abd_pattern').qtip('option', {
+                            'content.text': 'This pattern would be invalid without the folders, using it will force "Flatten" off for all shows.',
+                            'style.classes': 'qtip-rounded qtip-shadow qtip-red'
+                        });
+                        $('#naming_abd_pattern').qtip('toggle', true);
+                        $('#naming_abd_pattern').css('background-color', '#FFFFDD');
+                    } else {
+                        $('#naming_abd_pattern').qtip('option', {
+                            'content.text': 'This pattern is valid.',
+                            'style.classes': 'qtip-rounded qtip-shadow qtip-green'
+                        });
+                        $('#naming_abd_pattern').qtip('toggle', false);
+                        $('#naming_abd_pattern').css('background-color', '#FFFFFF');
+                    }
+                });
+            }
+
+            function fill_sports_examples() {
+                var pattern = $('#naming_sports_pattern').val();
+
+                $.get(srRoot + '/config/postProcessing/testNaming', {pattern: pattern, sports: 'True'}, function (data) {
+                    if (data) {
+                        $('#naming_sports_example').text(data + '.ext');
+                        $('#naming_sports_example_div').show();
+                    } else {
+                        $('#naming_sports_example_div').hide();
+                    }
+                });
+
+                $.get(srRoot + '/config/postProcessing/isNamingValid', {pattern: pattern, sports: 'True'}, function (data) {
+                    if (data == "invalid") {
+                        $('#naming_sports_pattern').qtip('option', {
+                            'content.text': 'This pattern is invalid.',
+                            'style.classes': 'qtip-rounded qtip-shadow qtip-red'
+                        });
+                        $('#naming_sports_pattern').qtip('toggle', true);
+                        $('#naming_sports_pattern').css('background-color', '#FFDDDD');
+                    } else if (data == "seasonfolders") {
+                        $('#naming_sports_pattern').qtip('option', {
+                            'content.text': 'This pattern would be invalid without the folders, using it will force "Flatten" off for all shows.',
+                            'style.classes': 'qtip-rounded qtip-shadow qtip-red'
+                        });
+                        $('#naming_sports_pattern').qtip('toggle', true);
+                        $('#naming_sports_pattern').css('background-color', '#FFFFDD');
+                    } else {
+                        $('#naming_sports_pattern').qtip('option', {
+                            'content.text': 'This pattern is valid.',
+                            'style.classes': 'qtip-rounded qtip-shadow qtip-green'
+                        });
+                        $('#naming_sports_pattern').qtip('toggle', false);
+                        $('#naming_sports_pattern').css('background-color', '#FFFFFF');
+                    }
+                });
+            }
+
+            function fill_anime_examples() {
+                var pattern = $('#naming_anime_pattern').val();
+                var multi = $('#naming_anime_multi_ep :selected').val();
+                var anime_type = $('input[name="naming_anime"]:checked').val();
+
+                $.get(srRoot + '/config/postProcessing/testNaming', {pattern: pattern, anime_type: anime_type}, function (data) {
+                    if (data) {
+                        $('#naming_example_anime').text(data + '.ext');
+                        $('#naming_example_anime_div').show();
+                    } else {
+                        $('#naming_example_anime_div').hide();
+                    }
+                });
+
+                $.get(srRoot + '/config/postProcessing/testNaming', {pattern: pattern, multi: multi, anime_type: anime_type}, function (data) {
+                    if (data) {
+                        $('#naming_example_multi_anime').text(data + '.ext');
+                        $('#naming_example_multi_anime_div').show();
+                    } else {
+                        $('#naming_example_multi_anime_div').hide();
+                    }
+                });
+
+                $.get(srRoot + '/config/postProcessing/isNamingValid', {pattern: pattern, multi: multi, anime_type: anime_type}, function (data) {
+                    if (data == "invalid") {
+                        $('#naming_pattern').qtip('option', {
+                            'content.text': 'This pattern is invalid.',
+                            'style.classes': 'qtip-rounded qtip-shadow qtip-red'
+                        });
+                        $('#naming_pattern').qtip('toggle', true);
+                        $('#naming_pattern').css('background-color', '#FFDDDD');
+                    } else if (data == "seasonfolders") {
+                        $('#naming_pattern').qtip('option', {
+                            'content.text': 'This pattern would be invalid without the folders, using it will force "Flatten" off for all shows.',
+                            'style.classes': 'qtip-rounded qtip-shadow qtip-red'
+                        });
+                        $('#naming_pattern').qtip('toggle', true);
+                        $('#naming_pattern').css('background-color', '#FFFFDD');
+                    } else {
+                        $('#naming_pattern').qtip('option', {
+                            'content.text': 'This pattern is valid.',
+                            'style.classes': 'qtip-rounded qtip-shadow qtip-green'
+                        });
+                        $('#naming_pattern').qtip('toggle', false);
+                        $('#naming_pattern').css('background-color', '#FFFFFF');
+                    }
+                });
+            }
+
+            function setup_naming() {
+                // if it is a custom selection then show the text box
+                if ($('#name_presets :selected').val() == "Custom...") {
+                    $('#naming_custom').show();
+                } else {
+                    $('#naming_custom').hide();
+                    $('#naming_pattern').val($('#name_presets :selected').attr('id'));
+                }
+                fill_examples();
+            }
+
+            function setup_abd_naming() {
+                // if it is a custom selection then show the text box
+                if ($('#name_abd_presets :selected').val() == "Custom...") {
+                    $('#naming_abd_custom').show();
+                } else {
+                    $('#naming_abd_custom').hide();
+                    $('#naming_abd_pattern').val($('#name_abd_presets :selected').attr('id'));
+                }
+                fill_abd_examples();
+            }
+
+            function setup_sports_naming() {
+                // if it is a custom selection then show the text box
+                if ($('#name_sports_presets :selected').val() == "Custom...") {
+                    $('#naming_sports_custom').show();
+                } else {
+                    $('#naming_sports_custom').hide();
+                    $('#naming_sports_pattern').val($('#name_sports_presets :selected').attr('id'));
+                }
+                fill_sports_examples();
+            }
+
+            function setup_anime_naming() {
+                // if it is a custom selection then show the text box
+                if ($('#name_anime_presets :selected').val() == "Custom...") {
+                    $('#naming_anime_custom').show();
+                } else {
+                    $('#naming_anime_custom').hide();
+                    $('#naming_anime_pattern').val($('#name_anime_presets :selected').attr('id'));
+                }
+                fill_anime_examples();
+            }
+
+            $('#unpack').on('change', function(){
+                if(this.checked) {
+                    israr_supported();
+                } else {
+                    $('#unpack').qtip('toggle', false);
+                }
+            });
+
+            $('#name_presets').on('change', function(){
+                setup_naming();
+            });
+
+            $('#name_abd_presets').on('change', function(){
+                setup_abd_naming();
+            });
+
+            $('#naming_custom_abd').on('change', function(){
+                setup_abd_naming();
+            });
+
+            $('#name_sports_presets').on('change', function(){
+                setup_sports_naming();
+            });
+
+            $('#naming_custom_sports').on('change', function(){
+                setup_sports_naming();
+            });
+
+            $('#name_anime_presets').on('change', function(){
+                setup_anime_naming();
+            });
+
+            $('#naming_custom_anime').on('change', function(){
+                setup_anime_naming();
+            });
+
+            $('input[name="naming_anime"]').on('click', function(){
+                setup_anime_naming();
+            });
+
+            $('#naming_multi_ep').change(fill_examples);
+            $('#naming_pattern').focusout(fill_examples);
+            $('#naming_pattern').keyup(function () {
+                typewatch(function () {
+                    fill_examples();
+                }, 500);
+            });
+
+            $('#naming_anime_multi_ep').change(fill_anime_examples);
+            $('#naming_anime_pattern').focusout(fill_anime_examples);
+            $('#naming_anime_pattern').keyup(function () {
+                typewatch(function () {
+                    fill_anime_examples();
+                }, 500);
+            });
+
+            $('#naming_abd_pattern').focusout(fill_examples);
+            $('#naming_abd_pattern').keyup(function () {
+                typewatch(function () {
+                    fill_abd_examples();
+                }, 500);
+            });
+
+            $('#naming_sports_pattern').focusout(fill_examples);
+            $('#naming_sports_pattern').keyup(function () {
+                typewatch(function () {
+                    fill_sports_examples();
+                }, 500);
+            });
+
+            $('#naming_anime_pattern').focusout(fill_examples);
+            $('#naming_anime_pattern').keyup(function () {
+                typewatch(function () {
+                    fill_anime_examples();
+                }, 500);
+            });
+
+            $('#show_naming_key').on('click', function(){
+                $('#naming_key').toggle();
+            });
+            $('#show_naming_abd_key').on('click', function(){
+                $('#naming_abd_key').toggle();
+            });
+            $('#show_naming_sports_key').on('click', function(){
+                $('#naming_sports_key').toggle();
+            });
+            $('#show_naming_anime_key').on('click', function(){
+                $('#naming_anime_key').toggle();
+            });
+            $('#do_custom').on('click', function(){
+                $('#naming_pattern').val($('#name_presets :selected').attr('id'));
+                $('#naming_custom').show();
+                $('#naming_pattern').focus();
+            });
+            setup_naming();
+            setup_abd_naming();
+            setup_sports_naming();
+            setup_anime_naming();
+
+            // -- start of metadata options div toggle code --
+            $('#metadataType').on('change keyup', function () {
+                $(this).showHideMetadata();
+            });
+
+            $.fn.showHideMetadata = function () {
+                $('.metadataDiv').each(function () {
+                    var targetName = $(this).attr('id');
+                    var selectedTarget = $('#metadataType :selected').val();
+
+                    if (selectedTarget == targetName) {
+                        $(this).show();
+                    } else {
+                        $(this).hide();
+                    }
+                });
+            };
+            //initialize to show the div
+            $(this).showHideMetadata();
+            // -- end of metadata options div toggle code --
+
+            $('.metadata_checkbox').on('click', function(){
+                $(this).refreshMetadataConfig(false);
+            });
+
+            $.fn.refreshMetadataConfig = function (first) {
+                var cur_most = 0;
+                var cur_most_provider = '';
+
+                $('.metadataDiv').each(function () {
+                    var generator_name = $(this).attr('id');
+
+                    var config_arr = [];
+                    var show_metadata = $("#" + generator_name + "_show_metadata").prop('checked');
+                    var episode_metadata = $("#" + generator_name + "_episode_metadata").prop('checked');
+                    var fanart = $("#" + generator_name + "_fanart").prop('checked');
+                    var poster = $("#" + generator_name + "_poster").prop('checked');
+                    var banner = $("#" + generator_name + "_banner").prop('checked');
+                    var episode_thumbnails = $("#" + generator_name + "_episode_thumbnails").prop('checked');
+                    var season_posters = $("#" + generator_name + "_season_posters").prop('checked');
+                    var season_banners = $("#" + generator_name + "_season_banners").prop('checked');
+                    var season_all_poster = $("#" + generator_name + "_season_all_poster").prop('checked');
+                    var season_all_banner = $("#" + generator_name + "_season_all_banner").prop('checked');
+
+                    config_arr.push(show_metadata ? '1' : '0');
+                    config_arr.push(episode_metadata ? '1' : '0');
+                    config_arr.push(fanart ? '1' : '0');
+                    config_arr.push(poster ? '1' : '0');
+                    config_arr.push(banner ? '1' : '0');
+                    config_arr.push(episode_thumbnails ? '1' : '0');
+                    config_arr.push(season_posters ? '1' : '0');
+                    config_arr.push(season_banners ? '1' : '0');
+                    config_arr.push(season_all_poster ? '1' : '0');
+                    config_arr.push(season_all_banner ? '1' : '0');
+
+                    var cur_num = 0;
+                    for (var i = 0, len = config_arr.length; i < len; i++) {
+                        cur_num += parseInt(config_arr[i]);
+                    }
+                    if (cur_num > cur_most) {
+                        cur_most = cur_num;
+                        cur_most_provider = generator_name;
+                    }
+
+                    $("#" + generator_name + "_eg_show_metadata").attr('class', show_metadata ? 'enabled' : 'disabled');
+                    $("#" + generator_name + "_eg_episode_metadata").attr('class', episode_metadata ? 'enabled' : 'disabled');
+                    $("#" + generator_name + "_eg_fanart").attr('class', fanart ? 'enabled' : 'disabled');
+                    $("#" + generator_name + "_eg_poster").attr('class', poster ? 'enabled' : 'disabled');
+                    $("#" + generator_name + "_eg_banner").attr('class', banner ? 'enabled' : 'disabled');
+                    $("#" + generator_name + "_eg_episode_thumbnails").attr('class', episode_thumbnails ? 'enabled' : 'disabled');
+                    $("#" + generator_name + "_eg_season_posters").attr('class', season_posters ? 'enabled' : 'disabled');
+                    $("#" + generator_name + "_eg_season_banners").attr('class', season_banners ? 'enabled' : 'disabled');
+                    $("#" + generator_name + "_eg_season_all_poster").attr('class', season_all_poster ? 'enabled' : 'disabled');
+                    $("#" + generator_name + "_eg_season_all_banner").attr('class', season_all_banner ? 'enabled' : 'disabled');
+                    $("#" + generator_name + "_data").val(config_arr.join('|'));
+
+                });
+
+                if (cur_most_provider !== '' && first) {
+                    $('#metadataType option[value=' + cur_most_provider + ']').attr('selected', 'selected');
+                    $(this).showHideMetadata();
+                }
+            };
+
+            $(this).refreshMetadataConfig(true);
+            $('img[title]').qtip({
+                position: {
+                    viewport: $(window),
+                    at: 'bottom center',
+                    my: 'top right'
+                },
+                style: {
+                    tip: {
+                        corner: true,
+                        method: 'polygon'
+                    },
+                    classes: 'qtip-shadow qtip-dark'
+                }
+            });
+            $('i[title]').qtip({
+                position: {
+                    viewport: $(window),
+                    at: 'top center',
+                    my: 'bottom center'
+                },
+                style: {
+                    tip: {
+                        corner: true,
+                        method: 'polygon'
+                    },
+                    classes: 'qtip-rounded qtip-shadow ui-tooltip-sb'
+                }
+            });
+            $('.custom-pattern,#unpack').qtip({
+                content: 'validating...',
+                show: {
+                    event: false,
+                    ready: false
+                },
+                hide: false,
+                position: {
+                    viewport: $(window),
+                    at: 'center left',
+                    my: 'center right'
+                },
+                style: {
+                    tip: {
+                        corner: true,
+                        method: 'polygon'
+                    },
+                    classes: 'qtip-rounded qtip-shadow qtip-red'
+                }
+            });
+        },
+        search: function() {
+            $('#config-components').tabs();
+            $('#nzb_dir').fileBrowser({ title: 'Select .nzb black hole/watch location' });
+            $('#torrent_dir').fileBrowser({ title: 'Select .torrent black hole/watch location' });
+            $('#torrent_path').fileBrowser({ title: 'Select .torrent download location' });
+
+            function toggleTorrentTitle(){
+                if ($('#use_torrents').prop('checked')){
+                    $('#no_torrents').show();
+                } else {
+                    $('#no_torrents').hide();
+                }
+            }
+
+            $.fn.nzbMethodHandler = function() {
+                var selectedProvider = $('#nzb_method :selected').val(),
+                    blackholeSettings = '#blackhole_settings',
+                    sabnzbdSettings = '#sabnzbd_settings',
+                    testSABnzbd = '#testSABnzbd',
+                    testSABnzbdResult = '#testSABnzbd_result',
+                    nzbgetSettings = '#nzbget_settings';
+
+                $(blackholeSettings).hide();
+                $(sabnzbdSettings).hide();
+                $(testSABnzbd).hide();
+                $(testSABnzbdResult).hide();
+                $(nzbgetSettings).hide();
+
+                if (selectedProvider.toLowerCase() === 'blackhole') {
+                    $(blackholeSettings).show();
+                } else if (selectedProvider.toLowerCase() === 'nzbget') {
+                    $(nzbgetSettings).show();
+                } else {
+                    $(sabnzbdSettings).show();
+                    $(testSABnzbd).show();
+                    $(testSABnzbdResult).show();
+                }
+            };
+
+            $.fn.rtorrentScgi = function(){
+                var selectedProvider = $('#torrent_method :selected').val();
+
+                if (selectedProvider.toLowerCase() === 'rtorrent') {
+                    var hostname = $('#torrent_host').prop('value');
+                    var isMatch = hostname.substr(0, 7) === "scgi://";
+
+                    if (isMatch) {
+                        $('#torrent_username_option').hide();
+                        $('#torrent_username').prop('value', '');
+                        $('#torrent_password_option').hide();
+                        $('#torrent_password').prop('value', '');
+                        $('#torrent_auth_type_option').hide();
+                        $("#torrent_auth_type option[value=none]").attr('selected', 'selected');
+                    } else {
+                        $('#torrent_username_option').show();
+                        $('#torrent_password_option').show();
+                        $('#torrent_auth_type_option').show();
+                    }
+                }
+            };
+
+            $.fn.torrentMethodHandler = function() {
+                $('#options_torrent_clients').hide();
+                $('#options_torrent_blackhole').hide();
+
+                var selectedProvider = $('#torrent_method :selected').val(),
+                    host = ' host:port',
+                    username = ' username',
+                    password = ' password',
+                    label = ' label',
+                    directory = ' directory',
+                    client = '',
+                    optionPanel = '#options_torrent_blackhole';
+                    rpcurl = ' RPC URL';
+
+                if (selectedProvider.toLowerCase() !== 'blackhole') {
+                    var label_warning_deluge = '#label_warning_deluge',
+                        label_anime_warning_deluge = '#label_anime_warning_deluge',
+                        host_desc_rtorrent = '#host_desc_rtorrent',
+                        host_desc_torrent = '#host_desc_torrent',
+                        torrent_verify_cert_option = '#torrent_verify_cert_option',
+                        torrent_path_option = '#torrent_path_option',
+                        torrent_seed_time_option = '#torrent_seed_time_option',
+                        torrent_high_bandwidth_option = '#torrent_high_bandwidth_option',
+                        torrent_label_option = '#torrent_label_option',
+                        torrent_label_anime_option = '#torrent_label_anime_option',
+                        path_synology = '#path_synology',
+                        torrent_paused_option = '#torrent_paused_option';
+
+                    $(label_warning_deluge).hide();
+                    $(label_anime_warning_deluge).hide();
+                    $(label_anime_warning_deluge).hide();
+                    $(host_desc_rtorrent).hide();
+                    $(host_desc_torrent).show();
+                    $(torrent_verify_cert_option).hide();
+                    $(torrent_verify_deluge).hide();
+                    $(torrent_verify_rtorrent).hide();
+                    $(torrent_auth_type_option).hide();
+                    $(torrent_path_option).show();
+                    $(torrent_path_option).find('.fileBrowser').show();
+                    $(torrent_seed_time_option).hide();
+                    $(torrent_high_bandwidth_option).hide();
+                    $(torrent_label_option).show();
+                    $(torrent_label_anime_option).show();
+                    $(path_synology).hide();
+                    $(torrent_paused_option).show();
+                    $(torrent_rpcurl_option).hide();
+                    $(this).rtorrentScgi();
+
+                    if (selectedProvider.toLowerCase() === 'utorrent') {
+                        client = 'uTorrent';
+                        $(torrent_path_option).hide();
+                        $('#torrent_seed_time_label').text('Minimum seeding time is');
+                        $(torrent_seed_time_option).show();
+                        $('#host_desc_torrent').text('URL to your uTorrent client (e.g. http://localhost:8000)');
+                    } else if (selectedProvider.toLowerCase() === 'transmission'){
+                        client = 'Transmission';
+                        $('#torrent_seed_time_label').text('Stop seeding when inactive for');
+                        $(torrent_seed_time_option).show();
+                        $(torrent_high_bandwidth_option).show();
+                        $(torrent_label_option).hide();
+                        $(torrent_label_anime_option).hide();
+                        $(torrent_rpcurl_option).show();
+                        $('#host_desc_torrent').text('URL to your Transmission client (e.g. http://localhost:9091)');
+                    } else if (selectedProvider.toLowerCase() === 'deluge'){
+                        client = 'Deluge';
+                        $(torrent_verify_cert_option).show();
+                        $(torrent_verify_deluge).show();
+                        $(torrent_verify_rtorrent).hide();
+                        $(label_warning_deluge).show();
+                        $(label_anime_warning_deluge).show();
+                        $('#torrent_username_option').hide();
+                        $('#torrent_username').prop('value', '');
+                        $('#host_desc_torrent').text('URL to your Deluge client (e.g. http://localhost:8112)');
+                    } else if ('deluged' == selectedProvider){
+                        client = 'Deluge';
+                        $(torrent_verify_cert_option).hide();
+                        $(torrent_verify_deluge).hide();
+                        $(torrent_verify_rtorrent).hide();
+                        $(label_warning_deluge).show();
+                        $(label_anime_warning_deluge).show();
+                        $('#torrent_username_option').show();
+                        $('#host_desc_torrent').text('IP or Hostname of your Deluge Daemon (e.g. scgi://localhost:58846)');
+                    } else if ('download_station' == selectedProvider){
+                        client = 'Synology DS';
+                        $(torrent_label_option).hide();
+                        $(torrent_label_anime_option).hide();
+                        $('#torrent_paused_option').hide();
+                        $(torrent_path_option).find('.fileBrowser').hide();
+                        $('#host_desc_torrent').text('URL to your Synology DS client (e.g. http://localhost:5000)');
+                        $(path_synology).show();
+                    } else if ('rtorrent' == selectedProvider){
+                        client = 'rTorrent';
+                        $(torrent_paused_option).hide();
+                        $('#host_desc_torrent').text('URL to your rTorrent client (e.g. scgi://localhost:5000 <br> or https://localhost/rutorrent/plugins/httprpc/action.php)');
+                        $(torrent_verify_cert_option).show();
+                        $(torrent_verify_deluge).hide();
+                        $(torrent_verify_rtorrent).show();
+                        $(torrent_auth_type_option).show();
+                    } else if ('qbittorrent' == selectedProvider){
+                        client = 'qbittorrent';
+                        $(torrent_path_option).hide();
+                        $(torrent_label_option).hide();
+                        $(torrent_label_anime_option).hide();
+                        $('#host_desc_torrent').text('URL to your qbittorrent client (e.g. http://localhost:8080)');
+                    } else if ('mlnet' == selectedProvider){
+                        client = 'mlnet';
+                        $(torrent_path_option).hide();
+                        $(torrent_label_option).hide();
+                        $(torrent_verify_cert_option).hide();
+                        $(torrent_verify_deluge).hide();
+                        $(torrent_verify_rtorrent).hide();
+                        $(torrent_label_anime_option).hide();
+                        $(torrent_paused_option).hide();
+                        $('#host_desc_torrent').text('URL to your MLDonkey (e.g. http://localhost:4080)');
+                    }
+                    $('#host_title').text(client + host);
+                    $('#username_title').text(client + username);
+                    $('#password_title').text(client + password);
+                    $('#torrent_client').text(client);
+                    $('#rpcurl_title').text(client + rpcurl);
+                    optionPanel = '#options_torrent_clients';
+                }
+                $(optionPanel).show();
+            };
+
+            $('#nzb_method').change($(this).nzbMethodHandler);
+
+            $(this).nzbMethodHandler();
+
+            $('#testSABnzbd').click(function(){
+                $('#testSABnzbd_result').html(loading);
+                var sab_host = $('#sab_host').val();
+                var sab_username = $('#sab_username').val();
+                var sab_password = $('#sab_password').val();
+                var sab_apiKey = $('#sab_apikey').val();
+
+                $.get(srRoot + '/home/testSABnzbd', {'host': sab_host, 'username': sab_username, 'password': sab_password, 'apikey': sab_apiKey}, function(data){
+                    $('#testSABnzbd_result').html(data);
+                });
+            });
+
+            $('#torrent_method').change($(this).torrentMethodHandler);
+
+            $(this).torrentMethodHandler();
+
+            $('#use_torrents').click(function(){
+                toggleTorrentTitle();
+            });
+
+            $('#test_torrent').click(function(){
+                $('#test_torrent_result').html(loading);
+                var torrent_method = $('#torrent_method :selected').val();
+                var torrent_host = $('#torrent_host').val();
+                var torrent_username = $('#torrent_username').val();
+                var torrent_password = $('#torrent_password').val();
+
+                $.get(srRoot + '/home/testTorrent', {'torrent_method': torrent_method, 'host': torrent_host, 'username': torrent_username, 'password': torrent_password}, function(data){
+                    $('#test_torrent_result').html(data);
+                });
+            });
+
+            $('#torrent_host').change($(this).rtorrentScgi);
+        },
+        subtitles: function() {
+            $.fn.showHideServices = function() {
+                $('.serviceDiv').each(function(){
+                    var serviceName = $(this).attr('id');
+                    var selectedService = $('#editAService :selected').val();
+
+                    if (selectedService+'Div' === serviceName){
+                        $(this).show();
+                    } else {
+                        $(this).hide();
+                    }
+                });
+            };
+
+            $.fn.addService = function(id, name, url, key, isDefault, showService) {
+                if (url.match('/$') === null) { url = url + '/'; }
+
+                if ($('#service_order_list > #'+id).length === 0 && showService !== false) {
+                    var toAdd = '<li class="ui-state-default" id="' + id + '"> <input type="checkbox" id="enable_' + id + '" class="service_enabler" CHECKED> <a href="' + anonURL + url + '" class="imgLink" target="_new"><img src="' + srRoot + '/images/services/newznab.gif" alt="' + name + '" width="16" height="16"></a> ' + name + '</li>';
+
+                    $('#service_order_list').append(toAdd);
+                    $('#service_order_list').sortable("refresh");
+                }
+            };
+
+            $.fn.deleteService = function(id) {
+                $('#service_order_list > #'+id).remove();
+            };
+
+            $.fn.refreshServiceList = function() {
+                var idArr = $("#service_order_list").sortable('toArray');
+                var finalArr = [];
+                $.each(idArr, function(key, val) {
+                    var checked = + $('#enable_'+val).prop('checked') ? '1' : '0';
+                    finalArr.push(val + ':' + checked);
+                });
+                $("#service_order").val(finalArr.join(' '));
+            };
+
+            $('#editAService').change(function(){
+                $(this).showHideServices();
+            });
+
+            $('.service_enabler').on('click', function(){
+                $(this).refreshServiceList();
+            });
+
+            // initialization stuff
+            $(this).showHideServices();
+
+            $("#service_order_list").sortable({
+                placeholder: 'ui-state-highlight',
+                update: function() {
+                    $(this).refreshServiceList();
+                }
+            });
+
+            $("#service_order_list").disableSelection();
+        },
+        providers: function() {
+            $.fn.showHideProviders = function() {
+                $('.providerDiv').each(function(){
+                    var providerName = $(this).attr('id');
+                    var selectedProvider = $('#editAProvider :selected').val();
+
+                    if (selectedProvider + 'Div' == providerName) { // jshint ignore:line
+                        $(this).show();
+                    } else {
+                        $(this).hide();
+                    }
+                });
+            };
+
+            var ifExists = function(loopThroughArray, searchFor) {
+                var found = false;
+
+                loopThroughArray.forEach(function(rootObject) {
+                    if (rootObject.name === searchFor) {
+                        found = true;
+                    }
+                    console.log(rootObject.name + " while searching for: "+  searchFor);
+                });
+                return found;
+            };
+
+            /**
+             * Gets categories for the provided newznab provider.
+             * @param {String} isDefault
+             * @param {Array} selectedProvider
+             * @return no return data. Function updateNewznabCaps() is run at callback
+             */
+            $.fn.getCategories = function (isDefault, selectedProvider) {
+
+                var name = selectedProvider[0];
+                var url = selectedProvider[1];
+                var key = selectedProvider[2];
+
+                if (!name || !url || !key) {
+                    return;
+                }
+
+                var params = {url: url, name: name, key: key};
+
+                $(".updating_categories").wrapInner('<span><img src="' + srRoot + '/images/loading16' + themeSpinner + '.gif"> Updating Categories ...</span>');
+                var jqxhr = $.getJSON(srRoot + '/config/providers/getNewznabCategories', params, function(data){
+                    $(this).updateNewznabCaps( data, selectedProvider );
+                    console.debug(data.tv_categories); // jshint ignore:line
+                });
+                jqxhr.always(function() {
+                    $(".updating_categories").empty();
+                });
+            };
+
+            $.fn.addProvider = function (id, name, url, key, cat, isDefault, showProvider) {
+                url = $.trim(url);
+                if (!url) {
+                    return;
+                }
+
+                if (!/^https?:\/\//i.test(url)) {
+                    url = "http://" + url;
+                }
+
+                if (url.match('/$') === null) {
+                    url = url + '/';
+                }
+
+                var newData = [isDefault, [name, url, key, cat]];
+                newznabProviders[id] = newData;
+
+                if (!isDefault){
+                    $('#editANewznabProvider').addOption(id, name);
+                    $(this).populateNewznabSection();
+                }
+
+                if ($('#provider_order_list > #'+id).length === 0 && showProvider !== false) {
+                    var toAdd = '<li class="ui-state-default" id="' + id + '"> <input type="checkbox" id="enable_' + id + '" class="provider_enabler" CHECKED> <a href="' + anonURL + url + '" class="imgLink" target="_new"><img src="' + srRoot + '/images/providers/newznab.png" alt="' + name + '" width="16" height="16"></a> ' + name + '</li>';
+
+                    $('#provider_order_list').append(toAdd);
+                    $('#provider_order_list').sortable("refresh");
+                }
+
+                $(this).makeNewznabProviderString();
+            };
+
+            $.fn.addTorrentRssProvider = function (id, name, url, cookies, titleTAG) {
+                var newData = [name, url, cookies, titleTAG];
+                torrentRssProviders[id] = newData;
+
+                $('#editATorrentRssProvider').addOption(id, name);
+                $(this).populateTorrentRssSection();
+
+                if ($('#provider_order_list > #'+id).length === 0) {
+                    $('#provider_order_list').append('<li class="ui-state-default" id="' + id + '"> <input type="checkbox" id="enable_' + id + '" class="provider_enabler" CHECKED> <a href="' + anonURL + url + '" class="imgLink" target="_new"><img src="' + srRoot + '/images/providers/torrentrss.png" alt="' + name + '" width="16" height="16"></a> ' + name + '</li>');
+                    $('#provider_order_list').sortable("refresh");
+                }
+
+                $(this).makeTorrentRssProviderString();
+            };
+
+            $.fn.updateProvider = function (id, url, key, cat) {
+                newznabProviders[id][1][1] = url;
+                newznabProviders[id][1][2] = key;
+                newznabProviders[id][1][3] = cat;
+
+                $(this).populateNewznabSection();
+
+                $(this).makeNewznabProviderString();
+            };
+
+            $.fn.deleteProvider = function (id) {
+                $('#editANewznabProvider').removeOption(id);
+                delete newznabProviders[id];
+                $(this).populateNewznabSection();
+                $('li').remove('#'+id);
+                $(this).makeNewznabProviderString();
+            };
+
+            $.fn.updateTorrentRssProvider = function (id, url, cookies, titleTAG) {
+                torrentRssProviders[id][1] = url;
+                torrentRssProviders[id][2] = cookies;
+                torrentRssProviders[id][3] = titleTAG;
+                $(this).populateTorrentRssSection();
+                $(this).makeTorrentRssProviderString();
+            };
+
+            $.fn.deleteTorrentRssProvider = function (id) {
+                $('#editATorrentRssProvider').removeOption(id);
+                delete torrentRssProviders[id];
+                $(this).populateTorrentRssSection();
+                $('li').remove('#'+id);
+                $(this).makeTorrentRssProviderString();
+            };
+
+            $.fn.populateNewznabSection = function() {
+                var selectedProvider = $('#editANewznabProvider :selected').val();
+                var data = '';
+                var isDefault = '';
+                var rrcat = '';
+
+                if (selectedProvider === 'addNewznab') {
+                    data = ['','',''];
+                    isDefault = 0;
+                    $('#newznab_add_div').show();
+                    $('#newznab_update_div').hide();
+                    $('#newznab_cat').attr('disabled','disabled');
+                    $('#newznab_cap').attr('disabled','disabled');
+                    $('#newznab_cat_update').attr('disabled','disabled');
+                    $('#newznabcapdiv').hide();
+
+                    $("#newznab_cat option").each(function() {
+                        $(this).remove();
+                        return;
+                    });
+
+                    $("#newznab_cap option").each(function() {
+                        $(this).remove();
+                        return;
+                    });
+
+                } else {
+                    data = newznabProviders[selectedProvider][1];
+                    isDefault = newznabProviders[selectedProvider][0];
+                    $('#newznab_add_div').hide();
+                    $('#newznab_update_div').show();
+                    $('#newznab_cat').removeAttr("disabled");
+                    $('#newznab_cap').removeAttr("disabled");
+                    $('#newznab_cat_update').removeAttr("disabled");
+                    $('#newznabcapdiv').show();
+                }
+
+                $('#newznab_name').val(data[0]);
+                $('#newznab_url').val(data[1]);
+                $('#newznab_key').val(data[2]);
+
+                //Check if not already array
+                if (typeof data[3] === 'string') {
+                    rrcat = data[3].split(",");
+                } else {
+                    rrcat = data[3];
+                }
+
+                // Update the category select box (on the right)
+                var newCatOptions = [];
+                if (rrcat) {
+                    rrcat.forEach(function (cat) {
+                        if (cat !== '') {
+                            newCatOptions.push({text : cat, value : cat});
+                        }
+                    });
+                    $("#newznab_cat").replaceOptions(newCatOptions);
+                }
+
+                if (selectedProvider === 'addNewznab') {
+                    $('#newznab_name').removeAttr("disabled");
+                    $('#newznab_url').removeAttr("disabled");
+                } else {
+                    $('#newznab_name').attr("disabled", "disabled");
+
+                    if (isDefault) {
+                        $('#newznab_url').attr("disabled", "disabled");
+                        $('#newznab_delete').attr("disabled", "disabled");
+                    } else {
+                        $('#newznab_url').removeAttr("disabled");
+                        $('#newznab_delete').removeAttr("disabled");
+
+                        //Get Categories Capabilities
+                        if (data[0] && data[1] && data[2] && !ifExists($.fn.newznabProvidersCapabilities, data[0])) {
+                            $(this).getCategories(isDefault, data);
+                        }
+                        $(this).updateNewznabCaps( null, data );
+                    }
+                }
+            };
+
+            /**
+             * Updates the Global array $.fn.newznabProvidersCapabilities with a combination of newznab prov name
+             * and category capabilities. Return
+             * @param {Array} newzNabCaps, is the returned object with newzNabprod Name and Capabilities.
+             * @param {Array} selectedProvider
+             * @return no return data. The multiselect input $("#newznab_cap") is updated, as a result.
+             */
+            $.fn.updateNewznabCaps = function( newzNabCaps, selectedProvider ) {
+                if (newzNabCaps && !ifExists($.fn.newznabProvidersCapabilities, selectedProvider[0])) {
+                    $.fn.newznabProvidersCapabilities.push({'name' : selectedProvider[0], 'categories' : newzNabCaps.tv_categories}); // jshint ignore:line
+                }
+
+                //Loop through the array and if currently selected newznab provider name matches one in the array, use it to
+                //update the capabilities select box (on the left).
+                if (selectedProvider[0]) {
+                    $.fn.newznabProvidersCapabilities.forEach(function(newzNabCap) {
+                        if (newzNabCap.name && newzNabCap.name === selectedProvider[0] && newzNabCap.categories instanceof Array) {
+                            var newCapOptions = [];
+                            newzNabCap.categories.forEach(function(categorySet) {
+                                if (categorySet.id && categorySet.name) {
+                                    newCapOptions.push({value : categorySet.id, text : categorySet.name + "(" + categorySet.id + ")"});
+                                }
+                            });
+                            $("#newznab_cap").replaceOptions(newCapOptions);
+                        }
+                    });
+                }
+            };
+
+            $.fn.makeNewznabProviderString = function() {
+                var provStrings = [];
+
+                for (var id in newznabProviders) {
+                    if (newznabProviders.hasOwnProperty(id)) {
+                        provStrings.push(newznabProviders[id][1].join('|'));
+                    }
+                }
+
+                $('#newznab_string').val(provStrings.join('!!!'));
+            };
+
+            $.fn.populateTorrentRssSection = function() {
+                var selectedProvider = $('#editATorrentRssProvider :selected').val();
+                var data = '';
+
+                if (selectedProvider === 'addTorrentRss') {
+                    data = ['','','','title'];
+                    $('#torrentrss_add_div').show();
+                    $('#torrentrss_update_div').hide();
+                } else {
+                    data = torrentRssProviders[selectedProvider];
+                    $('#torrentrss_add_div').hide();
+                    $('#torrentrss_update_div').show();
+                }
+
+                $('#torrentrss_name').val(data[0]);
+                $('#torrentrss_url').val(data[1]);
+                $('#torrentrss_cookies').val(data[2]);
+                $('#torrentrss_titleTAG').val(data[3]);
+
+                if (selectedProvider === 'addTorrentRss') {
+                    $('#torrentrss_name').removeAttr("disabled");
+                    $('#torrentrss_url').removeAttr("disabled");
+                    $('#torrentrss_cookies').removeAttr("disabled");
+                    $('#torrentrss_titleTAG').removeAttr("disabled");
+                } else {
+                    $('#torrentrss_name').attr("disabled", "disabled");
+                    $('#torrentrss_url').removeAttr("disabled");
+                    $('#torrentrss_cookies').removeAttr("disabled");
+                    $('#torrentrss_titleTAG').removeAttr("disabled");
+                    $('#torrentrss_delete').removeAttr("disabled");
+                }
+            };
+
+            $.fn.makeTorrentRssProviderString = function() {
+                var provStrings = [];
+                for (var id in torrentRssProviders) {
+                    if (torrentRssProviders.hasOwnProperty(id)) {
+                        provStrings.push(torrentRssProviders[id].join('|'));
+                    }
+                }
+
+                $('#torrentrss_string').val(provStrings.join('!!!'));
+            };
+
+
+            $.fn.refreshProviderList = function() {
+                var idArr = $("#provider_order_list").sortable('toArray');
+                var finalArr = [];
+                $.each(idArr, function(key, val) {
+                    var checked = + $('#enable_'+val).prop('checked') ? '1' : '0';
+                    finalArr.push(val + ':' + checked);
+                });
+
+                $("#provider_order").val(finalArr.join(' '));
+                $(this).refreshEditAProvider();
+            };
+
+            $.fn.refreshEditAProvider = function() {
+                $('#provider-list').empty();
+
+                var idArr = $("#provider_order_list").sortable('toArray');
+                var finalArr = [];
+                $.each(idArr, function(key, val) {
+                    if ($('#enable_'+val).prop('checked')) {
+                        finalArr.push(val);
+                    }
+                });
+
+                if (finalArr.length > 0) {
+                    $('<select>').prop('id','editAProvider').addClass('form-control input-sm').appendTo('#provider-list');
+                    for (var i = 0, len = finalArr.length; i < len; i++) {
+                        var provider = finalArr[i];
+                        $('#editAProvider').append($('<option>').prop('value',provider).text($.trim($('#'+provider).text()).replace(/\s\*$/, '').replace(/\s\*\*$/, '')));
+                    }
+                } else {
+                    document.getElementsByClassName('component-desc')[0].innerHTML = "No providers available to configure.";
+                }
+
+                $(this).showHideProviders();
+            };
+
+            var newznabProviders = [];
+            var torrentRssProviders = [];
+
+            $(this).on('change', '.newznab_key', function(){
+                var providerId = $(this).attr('id');
+                providerId = providerId.substring(0, providerId.length-'_hash'.length);
+
+                var url = $('#'+providerId+'_url').val();
+                var cat = $('#'+providerId+'_cat').val();
+                var key = $(this).val();
+
+                $(this).updateProvider(providerId, url, key, cat);
+            });
+
+            $('#newznab_key,#newznab_url').change(function(){
+                var selectedProvider = $('#editANewznabProvider :selected').val();
+
+                if (selectedProvider === "addNewznab"){
+                     return;
+                }
+
+                var url = $('#newznab_url').val();
+                var key = $('#newznab_key').val();
+
+                var cat = $('#newznab_cat option').map(function(i, opt) {
+                    return $(opt).text();
+                }).toArray().join(',');
+
+                $(this).updateProvider(selectedProvider, url, key, cat);
+            });
+
+            $('#torrentrss_url,#torrentrss_cookies,#torrentrss_titleTAG').change(function(){
+                var selectedProvider = $('#editATorrentRssProvider :selected').val();
+
+                if (selectedProvider === "addTorrentRss"){
+                     return;
+                }
+
+                var url = $('#torrentrss_url').val();
+                var cookies = $('#torrentrss_cookies').val();
+                var titleTAG = $('#torrentrss_titleTAG').val();
+
+                $(this).updateTorrentRssProvider(selectedProvider, url, cookies, titleTAG);
+            });
+
+            $('body').on('change', '#editAProvider',function(){
+                $(this).showHideProviders();
+            });
+
+            $('#editANewznabProvider').change(function(){
+                $(this).populateNewznabSection();
+            });
+
+            $('#editATorrentRssProvider').change(function(){
+                $(this).populateTorrentRssSection();
+            });
+
+            $(this).on('click', '.provider_enabler', function(){
+                $(this).refreshProviderList();
+            });
+
+            $('#newznab_cat_update').click(function(){
+                console.debug('Clicked Button');
+
+                // Maybe check if there is anything selected?
+                $("#newznab_cat option").each(function() {
+                    $(this).remove();
+                });
+
+                var newOptions = [];
+
+                // When the update botton is clicked, loop through the capabilities list
+                // and copy the selected category id's to the category list on the right.
+                $("#newznab_cap option:selected").each(function(){
+                    var selectedCat = $(this).val();
+                    console.debug(selectedCat);
+                    newOptions.push({text: selectedCat, value: selectedCat});
+                });
+
+                $("#newznab_cat").replaceOptions(newOptions);
+
+                var selectedProvider = $("#editANewznabProvider :selected").val();
+                if (selectedProvider === "addNewznab"){
+                    return;
+                }
+
+                var url = $('#newznab_url').val();
+                var key = $('#newznab_key').val();
+
+                var cat = $('#newznab_cat option').map(function(i, opt) {
+                    return $(opt).text();
+                }).toArray().join(',');
+
+                $("#newznab_cat option:not([value])").remove();
+
+                $(this).updateProvider(selectedProvider, url, key, cat);
+            });
+
+
+            $('#newznab_add').click(function(){
+                var name = $.trim($('#newznab_name').val());
+                var url = $.trim($('#newznab_url').val());
+                var key = $.trim($('#newznab_key').val());
+                //var cat = $.trim($('#newznab_cat').val());
+
+                var cat = $.trim($('#newznab_cat option').map(function(i, opt) {
+                    return $(opt).text();
+                }).toArray().join(','));
+
+                if (!name || !url || !key) {
+                    return;
+                }
+
+                var params = {name: name};
+
+                // send to the form with ajax, get a return value
+                $.getJSON(srRoot + '/config/providers/canAddNewznabProvider', params, function(data){
+                    if (data.error !== undefined) {
+                        alert(data.error);
+                        return;
+                    }
+                    $(this).addProvider(data.success, name, url, key, cat, 0);
+                });
+            });
+
+            $('.newznab_delete').click(function(){
+                var selectedProvider = $('#editANewznabProvider :selected').val();
+                $(this).deleteProvider(selectedProvider);
+            });
+
+            $('#torrentrss_add').click(function(){
+                var name = $('#torrentrss_name').val();
+                var url = $('#torrentrss_url').val();
+                var cookies = $('#torrentrss_cookies').val();
+                var titleTAG = $('#torrentrss_titleTAG').val();
+                var params = { name: name, url: url, cookies: cookies, titleTAG: titleTAG};
+
+                // send to the form with ajax, get a return value
+                $.getJSON(srRoot + '/config/providers/canAddTorrentRssProvider', params, function(data){
+                    if (data.error !== undefined) {
+                        alert(data.error);
+                        return;
+                    }
+
+                    $(this).addTorrentRssProvider(data.success, name, url, cookies, titleTAG);
+                    $(this).refreshEditAProvider();
+                });
+            });
+
+            $('.torrentrss_delete').on('click', function(){
+                $(this).deleteTorrentRssProvider($('#editATorrentRssProvider :selected').val());
+                $(this).refreshEditAProvider();
+            });
+
+            $(this).on('change', "[class='providerDiv_tip'] input", function(){
+                $('div .providerDiv ' + "[name=" + $(this).attr('name') + "]").replaceWith($(this).clone());
+                $('div .providerDiv ' + "[newznab_name=" + $(this).attr('id') + "]").replaceWith($(this).clone());
+            });
+
+            $(this).on('change', "[class='providerDiv_tip'] select", function(){
+                $(this).find('option').each( function() {
+                    if ($(this).is(':selected')) {
+                        $(this).prop('defaultSelected', true);
+                    } else {
+                        $(this).prop('defaultSelected', false);
+                    }
+                });
+                $('div .providerDiv ' + "[name=" + $(this).attr('name') + "]").empty().replaceWith($(this).clone());
+            });
+
+            $(this).on('change', '.enabler', function(){
+                if ($(this).is(':checked')) {
+                    $('.content_'+$(this).attr('id')).each( function() {
+                        $(this).show();
+                    });
+                } else {
+                    $('.content_'+$(this).attr('id')).each( function() {
+                        $(this).hide();
+                    });
+                }
+            });
+
+            $(".enabler").each(function(){
+                if (!$(this).is(':checked')) {
+                    $('.content_'+$(this).attr('id')).hide();
+                } else {
+                    $('.content_'+$(this).attr('id')).show();
+                }
+            });
+
+            $.fn.makeTorrentOptionString = function(providerId) {
+                var seedRatio  = $('.providerDiv_tip #' + providerId + '_seed_ratio').prop('value');
+                var seedTime   = $('.providerDiv_tip #' + providerId + '_seed_time').prop('value');
+                var processMet = $('.providerDiv_tip #' + providerId + '_process_method').prop('value');
+                var optionString = $('.providerDiv_tip #' + providerId + '_option_string');
+
+                optionString.val([seedRatio, seedTime, processMet].join('|'));
+            };
+
+            $(this).on('change', '.seed_option', function(){
+                var providerId = $(this).attr('id').split('_')[0];
+                $(this).makeTorrentOptionString(providerId);
+            });
+
+            $.fn.replaceOptions = function(options) {
+                var self, $option;
+
+                this.empty();
+                self = this;
+
+                $.each(options, function(index, option) {
+                    $option = $("<option></option>").attr("value", option.value).text(option.text);
+                    self.append($option);
+                });
+            };
+
+            // initialization stuff
+            $.fn.newznabProvidersCapabilities = [];
+
+            $(this).showHideProviders();
+
+            $("#provider_order_list").sortable({
+                placeholder: 'ui-state-highlight',
+                update: function () {
+                    $(this).refreshProviderList();
+                }
+            });
+
+            $("#provider_order_list").disableSelection();
+
+            if ($('#editANewznabProvider').length) {
+                $(this).populateNewznabSection();
+            }
+        }
+    },
+    manage: {
+        init: function() {
+            // controller-wide code
+        },
+        show: function() {
+            // action-specific code
+        }
+    }
+};
+
+var UTIL = {
+    exec: function(controller, action) {
+        var ns = SICKRAGE;
+        action = (action === undefined) ? "init" : action;
+
+        if (controller !== "" && ns[controller] && typeof ns[controller][action] === "function") {
+            ns[controller][action]();
+        }
+    },
+    init: function() {
+        var body = document.body,
+        controller = body.getAttribute("data-controller"),
+        action = body.getAttribute("data-action");
+
+        UTIL.exec("common");
+        UTIL.exec(controller);
+        UTIL.exec(controller, action);
+    }
+};
+
+$(document).ready(UTIL.init);
diff --git a/gui/slick/js/core.min.js b/gui/slick/js/core.min.js
new file mode 100644
index 0000000000000000000000000000000000000000..0e56469a964fe646a862dd294650d488358186c3
GIT binary patch
literal 51335
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

literal 0
HcmV?d00001

diff --git a/gui/slick/js/lib/jquery.scrolltopcontrol-1.1.js b/gui/slick/js/lib/jquery.scrolltopcontrol-1.1.js
index a914012a0..c53a58f7c 100644
--- a/gui/slick/js/lib/jquery.scrolltopcontrol-1.1.js
+++ b/gui/slick/js/lib/jquery.scrolltopcontrol-1.1.js
@@ -2,75 +2,78 @@
 //** Available/ usage terms at http://www.dynamicdrive.com (March 30th, 09')
 //** v1.1 (April 7th, 09'):
 //** 1) Adds ability to scroll to an absolute position (from top of page) or specific element on the page instead.
-//** 2) Fixes scroll animation not working in Opera. 
+//** 2) Fixes scroll animation not working in Opera.
 
 
 var scrolltotop={
-	//startline: Integer. Number of pixels from top of doc scrollbar is scrolled before showing control
-	//scrollto: Keyword (Integer, or "Scroll_to_Element_ID"). How far to scroll document up when control is clicked on (0=top).
-	setting: {startline:100, scrollto: 0, scrollduration:1000, fadeduration:[500, 100]},
-	controlHTML: top_image_html,//set in inc_top.tmpl so it can be $srRooted
-	controlattrs: {offsetx:10, offsety:10}, //offset of control relative to right/ bottom of window corner
-	anchorkeyword: '#top', //Enter href value of HTML anchors on the page that should also act as "Scroll Up" links
+    //startline: Integer. Number of pixels from top of doc scrollbar is scrolled before showing control
+    //scrollto: Keyword (Integer, or "Scroll_to_Element_ID"). How far to scroll document up when control is clicked on (0=top).
+    setting: {startline:100, scrollto: 0, scrollduration:1000, fadeduration:[500, 100]},
+    controlHTML: topImageHtml, // jshint ignore:line
+    controlattrs: {offsetx:10, offsety:10}, //offset of control relative to right/ bottom of window corner
+    anchorkeyword: '#top', //Enter href value of HTML anchors on the page that should also act as "Scroll Up" links
 
-	state: {isvisible:false, shouldvisible:false},
+    state: {isvisible:false, shouldvisible:false},
 
-	scrollup:function(){
-		if (!this.cssfixedsupport) //if control is positioned using JavaScript
-			this.$control.css({opacity:0}) //hide control immediately after clicking it
-		var dest=isNaN(this.setting.scrollto)? this.setting.scrollto : parseInt(this.setting.scrollto)
-		if (typeof dest=="string" && jQuery('#'+dest).length==1) //check element set by string exists
-			dest=jQuery('#'+dest).offset().top
-		else
-			dest=0
-		this.$body.animate({scrollTop: dest}, this.setting.scrollduration);
-	},
+    scrollup:function(){
+        if (!this.cssfixedsupport) { //if control is positioned using JavaScript
+            this.$control.css({opacity:0}); //hide control immediately after clicking it
+        }
+        var dest=isNaN(this.setting.scrollto)? this.setting.scrollto : parseInt(this.setting.scrollto);
+        if (typeof dest === "string" && jQuery('#'+dest).length === 1){ //check element set by string exists
+            dest=jQuery('#'+dest).offset().top;
+        } else {
+            dest = 0;
+        }
+        this.$body.animate({scrollTop: dest}, this.setting.scrollduration);
+    },
 
-	keepfixed:function(){
-		var $window=jQuery(window)
-		var controlx=$window.scrollLeft() + $window.width() - this.$control.width() - this.controlattrs.offsetx
-		var controly=$window.scrollTop() + $window.height() - this.$control.height() - this.controlattrs.offsety
-		this.$control.css({left:controlx+'px', top:controly+'px'})
-	},
+    keepfixed:function(){
+        var $window=jQuery(window);
+        var controlx=$window.scrollLeft() + $window.width() - this.$control.width() - this.controlattrs.offsetx;
+        var controly=$window.scrollTop() + $window.height() - this.$control.height() - this.controlattrs.offsety;
+        this.$control.css({left:controlx+'px', top:controly+'px'});
+    },
 
-	togglecontrol:function(){
-		var scrolltop=jQuery(window).scrollTop()
-		if (!this.cssfixedsupport)
-			this.keepfixed()
-		this.state.shouldvisible=(scrolltop>=this.setting.startline)? true : false
-		if (this.state.shouldvisible && !this.state.isvisible){
-			this.$control.stop().animate({opacity:1}, this.setting.fadeduration[0])
-			this.state.isvisible=true
-		}
-		else if (this.state.shouldvisible==false && this.state.isvisible){
-			this.$control.stop().animate({opacity:0}, this.setting.fadeduration[1])
-			this.state.isvisible=false
-		}
-	},
-	
-	init:function(){
-		jQuery(document).ready(function($){
-			var mainobj=scrolltotop
-			var iebrws=document.all
-			mainobj.cssfixedsupport=!iebrws || iebrws && document.compatMode=="CSS1Compat" && window.XMLHttpRequest //not IE or IE7+ browsers in standards mode
-			mainobj.$body=(window.opera)? (document.compatMode=="CSS1Compat"? $('html') : $('body')) : $('html,body')
-			mainobj.$control=$('<div id="topcontrol">'+mainobj.controlHTML+'</div>')
-				.css({position:mainobj.cssfixedsupport? 'fixed' : 'absolute', bottom:mainobj.controlattrs.offsety, right:mainobj.controlattrs.offsetx, opacity:0, cursor:'pointer'})
-				.attr({title:'Scroll Back to Top'})
-				.click(function(){mainobj.scrollup(); return false})
-				.appendTo('body')
-			if (document.all && !window.XMLHttpRequest && mainobj.$control.text()!='') //loose check for IE6 and below, plus whether control contains any text
-				mainobj.$control.css({width:mainobj.$control.width()}) //IE6- seems to require an explicit width on a DIV containing text
-			mainobj.togglecontrol()
-			$('a[href="' + mainobj.anchorkeyword +'"]').click(function(){
-				mainobj.scrollup()
-				return false
-			})
-			$(window).bind('scroll resize', function(e){
-				mainobj.togglecontrol()
-			})
-		})
-	}
-}
+    togglecontrol:function(){
+        var scrolltop=jQuery(window).scrollTop();
+        if (!this.cssfixedsupport) {
+            this.keepfixed();
+        }
+        this.state.shouldvisible=(scrolltop>=this.setting.startline)? true : false;
+        if (this.state.shouldvisible && !this.state.isvisible){
+            this.$control.stop().animate({opacity:1}, this.setting.fadeduration[0]);
+            this.state.isvisible = true;
+        } else if (this.state.shouldvisible === false && this.state.isvisible){
+            this.$control.stop().animate({opacity:0}, this.setting.fadeduration[1]);
+            this.state.isvisible=false;
+        }
+    },
 
-scrolltotop.init()
\ No newline at end of file
+    init:function(){
+        jQuery(document).ready(function($){
+            var mainobj = scrolltotop;
+            var iebrws = document.all;
+            mainobj.cssfixedsupport=!iebrws || iebrws && document.compatMode.toLowerCase() === "CSS1Compat".toLowerCase() && window.XMLHttpRequest; //not IE or IE7+ browsers in standards mode
+            mainobj.$body=(window.opera)? (document.compatMode.toLowerCase() === "CSS1Compat".toLowerCase() ? $('html') : $('body')) : $('html,body');
+            mainobj.$control=$('<div id="topcontrol">'+mainobj.controlHTML+'</div>')
+                .css({position:mainobj.cssfixedsupport? 'fixed' : 'absolute', bottom:mainobj.controlattrs.offsety, right:mainobj.controlattrs.offsetx, opacity:0, cursor:'pointer'})
+                .attr({title:'Scroll Back to Top'})
+                .click(function(){mainobj.scrollup(); return false;})
+                .appendTo('body');
+            if (document.all && !window.XMLHttpRequest && mainobj.$control.text()!==''){ //loose check for IE6 and below, plus whether control contains any text
+                mainobj.$control.css({width:mainobj.$control.width()}); //IE6- seems to require an explicit width on a DIV containing text
+            }
+            mainobj.togglecontrol();
+            $('a[href="' + mainobj.anchorkeyword +'"]').click(function(){
+                mainobj.scrollup();
+                return false;
+            });
+            $(window).bind('scroll resize', function(){
+                mainobj.togglecontrol();
+            });
+        });
+    }
+};
+
+scrolltotop.init();
diff --git a/gui/slick/js/new/config_backuprestore.js b/gui/slick/js/new/config_backuprestore.js
deleted file mode 100644
index b721fac14..000000000
--- a/gui/slick/js/new/config_backuprestore.js
+++ /dev/null
@@ -1,119 +0,0 @@
-$(document).ready(function(){
-    $('#backupDir').fileBrowser({ title: 'Select backup folder to save to', key: 'backupPath' });
-    $('#backupFile').fileBrowser({ title: 'Select backup files to restore', key: 'backupFile', includeFiles: 1 });
-    $('#config-components').tabs();
-
-    $(".enabler").each(function(){
-        if (!$(this).prop('checked')) $('#content_'+$(this).attr('id')).hide();
-    });
-
-    $(".enabler").click(function() {
-        if ($(this).prop('checked')){
-            $('#content_'+$(this).attr('id')).fadeIn("fast", "linear");
-        } else {
-            $('#content_'+$(this).attr('id')).fadeOut("fast", "linear");
-        }
-    });
-
-    $(".viewIf").click(function() {
-        if ($(this).prop('checked')) {
-            $('.hide_if_'+$(this).attr('id')).css('display','none');
-            $('.show_if_'+$(this).attr('id')).fadeIn("fast", "linear");
-        } else {
-            $('.show_if_'+$(this).attr('id')).css('display','none');
-            $('.hide_if_'+$(this).attr('id')).fadeIn("fast", "linear");
-        }
-    });
-
-    $(".datePresets").click(function() {
-        var def = $('#date_presets').val();
-        if ($(this).prop('checked') && '%x' == def) {
-            def = '%a, %b %d, %Y';
-            $('#date_use_system_default').html('1');
-        } else if (!$(this).prop('checked') && '1' == $('#date_use_system_default').html()){
-            def = '%x';
-        }
-
-        $('#date_presets').attr('name', 'date_preset_old');
-        $('#date_presets').attr('id', 'date_presets_old');
-
-        $('#date_presets_na').attr('name', 'date_preset');
-        $('#date_presets_na').attr('id', 'date_presets');
-
-        $('#date_presets_old').attr('name', 'date_preset_na');
-        $('#date_presets_old').attr('id', 'date_presets_na');
-
-        if (def) $('#date_presets').val(def);
-    });
-
-    // bind 'myForm' and provide a simple callback function
-    $('#configForm').ajaxForm({
-        beforeSubmit: function(){
-            $('.config_submitter .config_submitter_refresh').each(function(){
-                $(this).attr("disabled", "disabled");
-                $(this).after('<span><img src="' + srRoot + '/images/loading16' + themeSpinner + '.gif"> Saving...</span>');
-                $(this).hide();
-            });
-        },
-        success: function(){
-            setTimeout(function () {
-                "use strict";
-                config_success();
-            }, 2000);
-        }
-    });
-
-    $('#api_key').click(function(){
-        $('#api_key').select();
-    });
-
-    $("#generate_new_apikey").click(function(){
-        $.get(srRoot + '/config/general/generateApiKey',
-            function(data){
-                if (data.error !== undefined) {
-                    alert(data.error);
-                    return;
-                }
-                $('#api_key').val(data);
-        });
-    });
-
-    $('#branchCheckout').click(function() {
-        var url = srRoot+'/home/branchCheckout?branch='+$("#branchVersion").val();
-        var checkDBversion = srRoot + "/home/getDBcompare";
-        $.getJSON(checkDBversion, function(data){
-            if (data.status == "success") {
-                if (data.message == "equal") {
-                    //Checkout Branch
-                    window.location.href = url;
-                }
-                if (data.message == "upgrade") {
-                    if ( confirm("Changing branch will upgrade your database.\nYou won't be able to downgrade afterward.\nDo you want to continue?") ) {
-                        //Checkout Branch
-                        window.location.href = url;
-                    }
-                }
-                if (data.message == "downgrade") {
-                    alert("Can't switch branch as this will result in a database downgrade.");
-                }
-            }
-        });
-    });
-
-});
-
-function config_success(){
-    $('.config_submitter').each(function(){
-        $(this).removeAttr("disabled");
-        $(this).next().remove();
-        $(this).show();
-    });
-    $('.config_submitter_refresh').each(function(){
-        $(this).removeAttr("disabled");
-        $(this).next().remove();
-        $(this).show();
-        url = srRoot+'/config/providers/';
-        window.location.href = url;
-    });
-    $('#email_show').trigger('notify');
-}
diff --git a/gui/slick/js/new/config_general.js b/gui/slick/js/new/config_general.js
deleted file mode 100644
index 9e6c079ba..000000000
--- a/gui/slick/js/new/config_general.js
+++ /dev/null
@@ -1,131 +0,0 @@
-function configSuccess(){
-    $('.config_submitter').each(function(){
-        $(this).removeAttr("disabled");
-        $(this).next().remove();
-        $(this).show();
-    });
-    $('.config_submitter_refresh').each(function(){
-        $(this).removeAttr("disabled");
-        $(this).next().remove();
-        $(this).show();
-        window.location.href = srRoot + '/config/providers/';
-    });
-    $('#email_show').trigger('notify');
-}
-
-$(document).ready(function(){
-    if ($("input[name='proxy_setting']").val().length === 0) {
-        $("input[id='proxy_indexers']").prop('checked', false);
-        $("label[for='proxy_indexers']").hide();
-    }
-
-    $("input[name='proxy_setting']").on('input', function() {
-        if($(this).val().length === 0) {
-            $("input[id='proxy_indexers']").prop('checked', false);
-            $("label[for='proxy_indexers']").hide();
-        } else {
-            $("label[for='proxy_indexers']").show();
-        }
-    });
-
-    $('#log_dir').fileBrowser({ title: 'Select log file folder location' });
-    $('#config-components').tabs();
-
-    $(".enabler").each(function(){
-        if (!$(this).prop('checked')) { $('#content_'+$(this).attr('id')).hide(); }
-    });
-
-    $(".enabler").click(function() {
-        if ($(this).prop('checked')){
-            $('#content_'+$(this).attr('id')).fadeIn("fast", "linear");
-        } else {
-            $('#content_'+$(this).attr('id')).fadeOut("fast", "linear");
-        }
-    });
-
-    $(".viewIf").click(function() {
-        if ($(this).prop('checked')) {
-            $('.hide_if_'+$(this).attr('id')).css('display','none');
-            $('.show_if_'+$(this).attr('id')).fadeIn("fast", "linear");
-        } else {
-            $('.show_if_'+$(this).attr('id')).css('display','none');
-            $('.hide_if_'+$(this).attr('id')).fadeIn("fast", "linear");
-        }
-    });
-
-    $(".datePresets").click(function() {
-        var def = $('#date_presets').val();
-        if ($(this).prop('checked') && '%x' === def) {
-            def = '%a, %b %d, %Y';
-            $('#date_use_system_default').html('1');
-        } else if (!$(this).prop('checked') && '1' === $('#date_use_system_default').html()){
-            def = '%x';
-        }
-
-        $('#date_presets').attr('name', 'date_preset_old');
-        $('#date_presets').attr('id', 'date_presets_old');
-
-        $('#date_presets_na').attr('name', 'date_preset');
-        $('#date_presets_na').attr('id', 'date_presets');
-
-        $('#date_presets_old').attr('name', 'date_preset_na');
-        $('#date_presets_old').attr('id', 'date_presets_na');
-
-        if (def) { $('#date_presets').val(def); }
-    });
-
-    // bind 'myForm' and provide a simple callback function
-    $('#configForm').ajaxForm({
-        beforeSubmit: function(){
-            $('.config_submitter .config_submitter_refresh').each(function(){
-                $(this).attr("disabled", "disabled");
-                $(this).after('<span><img src="' + srRoot + '/images/loading16' + themeSpinner + '.gif"> Saving...</span>');
-                $(this).hide();
-            });
-        },
-        success: function(){
-            setTimeout(function () {
-                "use strict";
-                configSuccess();
-            }, 2000);
-        }
-    });
-
-    $('#api_key').click(function(){
-        $('#api_key').select();
-    });
-
-    $("#generate_new_apikey").click(function(){
-        $.get(srRoot + '/config/general/generateApiKey',
-            function(data){
-                if (data.error !== undefined) {
-                    alert(data.error);
-                    return;
-                }
-                $('#api_key').val(data);
-        });
-    });
-
-    $('#branchCheckout').click(function() {
-        var url = srRoot + '/home/branchCheckout?branch=' + $("#branchVersion").val();
-        var checkDBversion = srRoot + "/home/getDBcompare";
-        $.getJSON(checkDBversion, function(data){
-            if (data.status === "success") {
-                if (data.message === "equal") {
-                    //Checkout Branch
-                    window.location.href = url;
-                }
-                if (data.message === "upgrade") {
-                    if ( confirm("Changing branch will upgrade your database.\nYou won't be able to downgrade afterward.\nDo you want to continue?") ) {
-                        //Checkout Branch
-                        window.location.href = url;
-                    }
-                }
-                if (data.message === "downgrade") {
-                    alert("Can't switch branch as this will result in a database downgrade.");
-                }
-            }
-        });
-    });
-
-});
diff --git a/gui/slick/js/new/config_notifications.js b/gui/slick/js/new/config_notifications.js
deleted file mode 100644
index 072fca9a2..000000000
--- a/gui/slick/js/new/config_notifications.js
+++ /dev/null
@@ -1,3 +0,0 @@
-$(document).ready(function(){
-    $('#config-components').tabs();
-});
diff --git a/gui/slick/js/new/config_postProcessing.js b/gui/slick/js/new/config_postProcessing.js
deleted file mode 100644
index 731025565..000000000
--- a/gui/slick/js/new/config_postProcessing.js
+++ /dev/null
@@ -1,4 +0,0 @@
-$(document).ready(function(){
-    $('#config-components').tabs();
-    $('#tv_download_dir').fileBrowser({ title: 'Select TV Download Directory' });
-});
diff --git a/gui/slick/js/new/config_search.js b/gui/slick/js/new/config_search.js
deleted file mode 100644
index 0c706f7da..000000000
--- a/gui/slick/js/new/config_search.js
+++ /dev/null
@@ -1,4 +0,0 @@
-$('#config-components').tabs();
-$('#nzb_dir').fileBrowser({ title: 'Select .nzb black hole/watch location' });
-$('#torrent_dir').fileBrowser({ title: 'Select .torrent black hole/watch location' });
-$('#torrent_path').fileBrowser({ title: 'Select .torrent download location' });
diff --git a/gui/slick/js/new/config_subtitles.js b/gui/slick/js/new/config_subtitles.js
deleted file mode 100644
index e69de29bb..000000000
diff --git a/gui/slick/js/new/core.js b/gui/slick/js/new/core.js
deleted file mode 100644
index cb6889de6..000000000
--- a/gui/slick/js/new/core.js
+++ /dev/null
@@ -1,73 +0,0 @@
-var srRoot = getMeta('srRoot'),
-    themeSpinner = getMeta('themeSpinner'),
-    anonURL = getMeta('anonURL'),
-    top_image_html = '<img src="' + srRoot + '/images/top.gif" width="31" height="11" alt="Jump to top" />';
-
-$(document).ready(function () {
-    $("#config-components").tabs({
-        activate: function (event, ui) {
-            var lastOpenedPanel = $(this).data("lastOpenedPanel"),
-                selected = $(this).tabs('option', 'selected');
-
-            if (!lastOpenedPanel) { lastOpenedPanel = $(ui.oldPanel); }
-
-            if (!$(this).data("topPositionTab")) { $(this).data("topPositionTab", $(ui.newPanel).position().top); }
-
-            //Dont use the builtin fx effects. This will fade in/out both tabs, we dont want that
-            //Fadein the new tab yourself
-            $(ui.newPanel).hide().fadeIn(0);
-
-            if (lastOpenedPanel) {
-                // 1. Show the previous opened tab by removing the jQuery UI class
-                // 2. Make the tab temporary position:absolute so the two tabs will overlap
-                // 3. Set topposition so they will overlap if you go from tab 1 to tab 0
-                // 4. Remove position:absolute after animation
-                lastOpenedPanel
-                    .toggleClass("ui-tabs-hide")
-                    .css("position", "absolute")
-                    .css("top", $(this).data("topPositionTab") + "px")
-                    .fadeOut(0, function () {
-                        $(this)
-                            .css("position", "");
-                    });
-            }
-
-            //Saving the last tab has been opened
-            $(this).data("lastOpenedPanel", $(ui.newPanel));
-        }
-    });
-
-    // hack alert: if we don't have a touchscreen, and we are already hovering the mouse, then click should link instead of toggle
-    if ((navigator.maxTouchPoints || 0) < 2) {
-        $('.dropdown-toggle').on('click', function(e) {
-            var $this = $(this);
-            if ($this.attr('aria-expanded') === 'true') {
-                window.location.href = $this.attr('href');
-            }
-        });
-    }
-
-    if(metaToBool('sickbeard.FUZZY_DATING')){
-        $.timeago.settings.allowFuture = true;
-        $.timeago.settings.strings = {
-            prefixAgo: null,
-            prefixFromNow: 'In ',
-            suffixAgo: "ago",
-            suffixFromNow: "",
-            seconds: "less than a minute",
-            minute: "about a minute",
-            minutes: "%d minutes",
-            hour: "an hour",
-            hours: "%d hours",
-            day: "a day",
-            days: "%d days",
-            month: "a month",
-            months: "%d months",
-            year: "a year",
-            years: "%d years",
-            wordSeparator: " ",
-            numbers: []
-        };
-        $("[datetime]").timeago();
-    }
-});
diff --git a/gui/slick/views/config_anime.mako b/gui/slick/views/config_anime.mako
index bd83311e0..d006a1499 100644
--- a/gui/slick/views/config_anime.mako
+++ b/gui/slick/views/config_anime.mako
@@ -3,10 +3,6 @@
     import sickbeard
     from sickbeard.helpers import anon_url
 %>
-
-<%block name="scripts">
-<script type="text/javascript" src="${srRoot}/js/config.js?${sbPID}"></script>
-</%block>
 <%block name="content">
 <div id="content960">
 <h1 class="header">${header}</h1>
diff --git a/gui/slick/views/config_general.mako b/gui/slick/views/config_general.mako
index d96ff7f5c..0d74ea107 100644
--- a/gui/slick/views/config_general.mako
+++ b/gui/slick/views/config_general.mako
@@ -12,9 +12,7 @@
     from sickbeard.helpers import anon_url
 %>
 <%block name="scripts">
-<script type="text/javascript" src="${srRoot}/js/config.js?${sbPID}"></script>
 <script type="text/javascript" src="${srRoot}/js/rootDirs.js?${sbPID}"></script>
-<script type="text/javascript" src="${srRoot}/js/new/config_general.js"></script>
 </%block>
 <%block name="content">
 % if not header is UNDEFINED:
diff --git a/gui/slick/views/config_notifications.mako b/gui/slick/views/config_notifications.mako
index eca63e139..769cdacd3 100644
--- a/gui/slick/views/config_notifications.mako
+++ b/gui/slick/views/config_notifications.mako
@@ -6,12 +6,6 @@
     from sickbeard.common import SKIPPED, WANTED, UNAIRED, ARCHIVED, IGNORED, SNATCHED, SNATCHED_PROPER, SNATCHED_BEST, FAILED
     from sickbeard.common import Quality, qualityPresets, statusStrings, qualityPresetStrings, cpu_presets, multiEpStrings
 %>
-
-<%block name="scripts">
-<script type="text/javascript" src="${srRoot}/js/configNotifications.js?${sbPID}"></script>
-<script type="text/javascript" src="${srRoot}/js/config.js?${sbPID}"></script>
-<script type="text/javascript" src="${srRoot}/js/new/config_notifications.js"></script>
-</%block>
 <%block name="content">
 % if not header is UNDEFINED:
     <h1 class="header">${header}</h1>
diff --git a/gui/slick/views/config_postProcessing.mako b/gui/slick/views/config_postProcessing.mako
index 182f48771..e669c11d0 100644
--- a/gui/slick/views/config_postProcessing.mako
+++ b/gui/slick/views/config_postProcessing.mako
@@ -9,12 +9,6 @@
     from sickbeard.metadata.generic import GenericMetadata
     from sickbeard import naming
 %>
-
-<%block name="scripts">
-<script type="text/javascript" src="${srRoot}/js/configPostProcessing.js?${sbPID}"></script>
-<script type="text/javascript" src="${srRoot}/js/config.js?${sbPID}"></script>
-<script type="text/javascript" src="${srRoot}/js/new/config_postProcessing.js"></script>
-</%block>
 <%block name="content">
 <div id="content960">
 % if not header is UNDEFINED:
diff --git a/gui/slick/views/config_providers.mako b/gui/slick/views/config_providers.mako
index 28bf95490..eb25276a5 100644
--- a/gui/slick/views/config_providers.mako
+++ b/gui/slick/views/config_providers.mako
@@ -6,8 +6,6 @@
     from sickbeard.helpers import anon_url
 %>
 <%block name="scripts">
-<script type="text/javascript" src="${srRoot}/js/configProviders.js?${sbPID}"></script>
-<script type="text/javascript" src="${srRoot}/js/config.js?${sbPID}"></script>
 <script type="text/javascript">
 $(document).ready(function(){
     % if sickbeard.USE_NZBS:
diff --git a/gui/slick/views/layouts/main.mako b/gui/slick/views/layouts/main.mako
index e3375a7ce..af38d14bd 100644
--- a/gui/slick/views/layouts/main.mako
+++ b/gui/slick/views/layouts/main.mako
@@ -90,7 +90,7 @@
         % endif
         <%block name="css" />
     </head>
-    <body>
+    <body data-controller="${controller}" data-action="${action}">
         <nav class="navbar navbar-default navbar-fixed-top hidden-print" role="navigation">
             <div class="container-fluid">
                 <div class="navbar-header">
@@ -318,7 +318,11 @@
         <script type="text/javascript" src="${srRoot}/js/lib/formwizard.js?${sbPID}"></script><!-- Can't be added to bower -->
         <script type="text/javascript" src="${srRoot}/js/new/parsers.js?${sbPID}"></script>
         <script type="text/javascript" src="${srRoot}/js/new/meta.js?${sbPID}"></script>
-        <script type="text/javascript" src="${srRoot}/js/new/core.js?${sbPID}"></script>
+        % if sickbeard.DEVELOPER:
+        <script type="text/javascript" src="${srRoot}/js/core.js?${sbPID}"></script>
+        % else:
+        <script type="text/javascript" src="${srRoot}/js/core.min.js?${sbPID}"></script>
+        % endif
         <script type="text/javascript" src="${srRoot}/js/lib/jquery.scrolltopcontrol-1.1.js?${sbPID}"></script>
         <script type="text/javascript" src="${srRoot}/js/browser.js?${sbPID}"></script>
         <script type="text/javascript" src="${srRoot}/js/ajaxNotifications.js?${sbPID}"></script>
diff --git a/sickbeard/webserve.py b/sickbeard/webserve.py
index 00aef8bde..b53917465 100644
--- a/sickbeard/webserve.py
+++ b/sickbeard/webserve.py
@@ -141,6 +141,8 @@ class PageTemplate(MakoTemplate):
         self.arguments['title'] = "FixME"
         self.arguments['header'] = "FixME"
         self.arguments['topmenu'] = "FixME"
+        self.arguments['controller'] = "FixME"
+        self.arguments['action'] = "FixME"
 
     def render(self, *args, **kwargs):
         for key in self.arguments:
@@ -678,7 +680,7 @@ class Home(WebRoot):
             showlists = [["Shows", sickbeard.showList]]
 
         stats = self.show_statistics()
-        return t.render(title="Home", header="Show List", topmenu="home", showlists=showlists, show_stat=stats[0], max_download_count=stats[1])
+        return t.render(title="Home", header="Show List", topmenu="home", showlists=showlists, show_stat=stats[0], max_download_count=stats[1], controller="home", action="index")
 
     @staticmethod
     def show_statistics():
@@ -1287,7 +1289,9 @@ class Home(WebRoot):
             xem_numbering=get_xem_numbering_for_show(indexerid, indexer),
             scene_absolute_numbering=get_scene_absolute_numbering_for_show(indexerid, indexer),
             xem_absolute_numbering=get_xem_absolute_numbering_for_show(indexerid, indexer),
-            title=showObj.name
+            title=showObj.name,
+            controller="home",
+            action="displayShow"
         )
 
     @staticmethod
@@ -1362,9 +1366,10 @@ class Home(WebRoot):
 
             if showObj.is_anime:
                 return t.render(show=show, scene_exceptions=scene_exceptions, groups=groups, whitelist=whitelist,
-                                blacklist=blacklist, title='Edit Show', header='Edit Show')
+                                blacklist=blacklist, title='Edit Show', header='Edit Show', controller="home", action="editShow")
             else:
-                return t.render(show=show, scene_exceptions=scene_exceptions, title='Edit Show', header='Edit Show')
+                return t.render(show=show, scene_exceptions=scene_exceptions, title='Edit Show', header='Edit Show',
+                                controller="home", action="editShow")
 
         flatten_folders = not config.checkbox_to_value(flatten_folders)  # UI inverts this value
         dvdorder = config.checkbox_to_value(dvdorder)
@@ -1829,7 +1834,8 @@ class Home(WebRoot):
         t = PageTemplate(rh=self, filename="testRename.mako")
         submenu = [{'title': 'Edit', 'path': 'home/editShow?show=%d' % showObj.indexerid, 'icon': 'ui-icon ui-icon-pencil'}]
 
-        return t.render(submenu=submenu, ep_obj_list=ep_obj_rename_list, show=showObj, title='Preview Rename', header='Preview Rename')
+        return t.render(submenu=submenu, ep_obj_list=ep_obj_rename_list, show=showObj, title='Preview Rename', header='Preview Rename',
+                    controller="home", action="previewRename")
 
     def doRename(self, show=None, eps=None):
         if show is None or eps is None:
@@ -2121,7 +2127,7 @@ class HomeIRC(Home):
     def index(self):
 
         t = PageTemplate(rh=self, filename="IRC.mako")
-        return t.render(topmenu="system", header="IRC", title="IRC")
+        return t.render(topmenu="system", header="IRC", title="IRC", controller="IRC", action="index")
 
 
 @route('/news(/?.*)')
@@ -2143,7 +2149,7 @@ class HomeNews(Home):
         t = PageTemplate(rh=self, filename="markdown.mako")
         data = markdown2.markdown(news if news else "The was a problem connecting to github, please refresh and try again", extras=['header-ids'])
 
-        return t.render(title="News", header="News", topmenu="system", data=data)
+        return t.render(title="News", header="News", topmenu="system", data=data, controller="news", action="index")
 
 
 @route('/changes(/?.*)')
@@ -2161,7 +2167,7 @@ class HomeChangeLog(Home):
         t = PageTemplate(rh=self, filename="markdown.mako")
         data = markdown2.markdown(changes if changes else "The was a problem connecting to github, please refresh and try again", extras=['header-ids'])
 
-        return t.render(title="Changelog", header="Changelog", topmenu="system", data=data)
+        return t.render(title="Changelog", header="Changelog", topmenu="system", data=data, controller="changes", action="index")
 
 
 @route('/home/postprocess(/?.*)')
@@ -2171,7 +2177,7 @@ class HomePostProcess(Home):
 
     def index(self):
         t = PageTemplate(rh=self, filename="home_postprocess.mako")
-        return t.render(title='Post Processing', header='Post Processing', topmenu='home')
+        return t.render(title='Post Processing', header='Post Processing', topmenu='home', controller="postprocess", action="index")
 
     def processEpisode(self, proc_dir=None, nzbName=None, jobName=None, quiet=None, process_method=None, force=None,
                        is_priority=None, delete_on="0", failed="0", proc_type="auto", *args, **kwargs):
@@ -2213,7 +2219,7 @@ class HomeAddShows(Home):
 
     def index(self):
         t = PageTemplate(rh=self, filename="home_addShows.mako")
-        return t.render(title='Add Shows', header='Add Shows', topmenu='home')
+        return t.render(title='Add Shows', header='Add Shows', topmenu='home', controller="home", action="addShows")
 
     @staticmethod
     def getIndexerLanguages():
@@ -2394,7 +2400,7 @@ class HomeAddShows(Home):
         posts them to addNewShow
         """
         t = PageTemplate(rh=self, filename="home_recommendedShows.mako")
-        return t.render(title="Recommended Shows", header="Recommended Shows", enable_anime_options=False)
+        return t.render(title="Recommended Shows", header="Recommended Shows", enable_anime_options=False, controller="home", action="addShows|recommendedShows")
 
     def getRecommendedShows(self):
         t = PageTemplate(rh=self, filename="trendingShows.mako")
@@ -2766,7 +2772,7 @@ class Manage(Home, WebRoot):
 
     def index(self):
         t = PageTemplate(rh=self, filename="manage.mako")
-        return t.render(title='Mass Update', header='Mass Update', topmenu='manage')
+        return t.render(title='Mass Update', header='Mass Update', topmenu='manage', controller="manage", action="index")
 
     @staticmethod
     def showEpisodeStatuses(indexer_id, whichStatus):
@@ -2805,7 +2811,7 @@ class Manage(Home, WebRoot):
         if not status_list:
             return t.render(
                 title="Episode Overview", header="Episode Overview",
-                topmenu="manage", whichStatus=whichStatus)
+                topmenu="manage", whichStatus=whichStatus, controller="manage", action="episodeStatuses")
 
         myDB = db.DBConnection()
         status_results = myDB.select(
@@ -2831,7 +2837,8 @@ class Manage(Home, WebRoot):
         return t.render(
             title="Episode Overview", header="Episode Overview",
             topmenu='manage', whichStatus=whichStatus,
-            show_names=show_names, ep_counts=ep_counts, sorted_show_ids=sorted_show_ids)
+            show_names=show_names, ep_counts=ep_counts, sorted_show_ids=sorted_show_ids,
+            controller="manage", action="episodeStatuses")
 
     def changeEpisodeStatuses(self, oldStatus, newStatus, *args, **kwargs):
         status_list = [int(oldStatus)]
@@ -2903,7 +2910,8 @@ class Manage(Home, WebRoot):
         t = PageTemplate(rh=self, filename="manage_subtitleMissed.mako")
 
         if not whichSubs:
-            return t.render(whichSubs=whichSubs, title='Episode Overview', header='Episode Overview', topmenu='manage')
+            return t.render(whichSubs=whichSubs, title='Episode Overview', header='Episode Overview', topmenu='manage',
+                    controller="manage", action="subtitleMissed")
 
         myDB = db.DBConnection()
         status_results = myDB.select(
@@ -2933,7 +2941,8 @@ class Manage(Home, WebRoot):
                 sorted_show_ids.append(cur_indexer_id)
 
         return t.render(whichSubs=whichSubs, show_names=show_names, ep_counts=ep_counts, sorted_show_ids=sorted_show_ids,
-                        title='Missing Subtitles', header='Missing Subtitles', topmenu='manage')
+                        title='Missing Subtitles', header='Missing Subtitles', topmenu='manage',
+                        controller="manage", action="subtitleMissed")
 
     def downloadSubtitleMissed(self, *args, **kwargs):
         to_download = {}
@@ -3590,7 +3599,8 @@ class ConfigGeneral(Config):
     def index(self):
         t = PageTemplate(rh=self, filename="config_general.mako")
 
-        return t.render(title='Config - General', header='General Configuration', topmenu='config', submenu=self.ConfigMenu())
+        return t.render(title='Config - General', header='General Configuration', topmenu='config', submenu=self.ConfigMenu(),
+                controller="config", action="index")
 
     @staticmethod
     def generateApiKey():
@@ -3754,7 +3764,8 @@ class ConfigBackupRestore(Config):
     def index(self):
         t = PageTemplate(rh=self, filename="config_backuprestore.mako")
 
-        return t.render(submenu=self.ConfigMenu(), title='Config - Backup/Restore', header='Backup/Restore', topmenu='config')
+        return t.render(submenu=self.ConfigMenu(), title='Config - Backup/Restore', header='Backup/Restore', topmenu='config',
+                controller="config", action="backupRestore")
 
     @staticmethod
     def backup(backupDir=None):
@@ -3815,7 +3826,8 @@ class ConfigSearch(Config):
     def index(self):
         t = PageTemplate(rh=self, filename="config_search.mako")
 
-        return t.render(submenu=self.ConfigMenu(), title='Config - Episode Search', header='Search Settings', topmenu='config')
+        return t.render(submenu=self.ConfigMenu(), title='Config - Episode Search', header='Search Settings', topmenu='config',
+                controller="config", action="search")
 
     def saveSearch(self, use_nzbs=None, use_torrents=None, nzb_dir=None, sab_username=None, sab_password=None,
                    sab_apikey=None, sab_category=None, sab_category_anime=None, sab_category_backlog=None, sab_category_anime_backlog=None, sab_host=None, nzbget_username=None,
@@ -3917,7 +3929,8 @@ class ConfigPostProcessing(Config):
     def index(self):
         t = PageTemplate(rh=self, filename="config_postProcessing.mako")
 
-        return t.render(submenu=self.ConfigMenu(), title='Config - Post Processing', header='Post Processing', topmenu='config')
+        return t.render(submenu=self.ConfigMenu(), title='Config - Post Processing', header='Post Processing', topmenu='config',
+                controller="config", action="postProcessing")
 
     def savePostProcessing(self, naming_pattern=None, naming_multi_ep=None,
                            kodi_data=None, kodi_12plus_data=None,
@@ -4112,7 +4125,8 @@ class ConfigProviders(Config):
     def index(self):
         t = PageTemplate(rh=self, filename="config_providers.mako")
 
-        return t.render(submenu=self.ConfigMenu(), title='Config - Providers', header='Search Providers', topmenu='config')
+        return t.render(submenu=self.ConfigMenu(), title='Config - Providers', header='Search Providers', topmenu='config',
+                controller="config", action="providers")
 
     @staticmethod
     def canAddNewznabProvider(name):
@@ -4596,7 +4610,8 @@ class ConfigNotifications(Config):
     def index(self):
         t = PageTemplate(rh=self, filename="config_notifications.mako")
 
-        return t.render(submenu=self.ConfigMenu(), title='Config - Notifications', header='Notifications', topmenu='config')
+        return t.render(submenu=self.ConfigMenu(), title='Config - Notifications', header='Notifications', topmenu='config',
+                controller="config", action="notifications")
 
     def saveNotifications(self, use_kodi=None, kodi_always_on=None, kodi_notify_onsnatch=None,
                           kodi_notify_ondownload=None,
@@ -4828,7 +4843,8 @@ class ConfigSubtitles(Config):
     def index(self):
         t = PageTemplate(rh=self, filename="config_subtitles.mako")
 
-        return t.render(submenu=self.ConfigMenu(), title='Config - Subtitles', header='Subtitles', topmenu='config')
+        return t.render(submenu=self.ConfigMenu(), title='Config - Subtitles', header='Subtitles', topmenu='config',
+                controller="config", action="subtitles")
 
     def saveSubtitles(self, use_subtitles=None, subtitles_plugins=None, subtitles_languages=None, subtitles_dir=None,
                       service_order=None, subtitles_history=None, subtitles_finder_frequency=None,
@@ -4889,7 +4905,8 @@ class ConfigAnime(Config):
 
         t = PageTemplate(rh=self, filename="config_anime.mako")
 
-        return t.render(submenu=self.ConfigMenu(), title='Config - Anime', header='Anime', topmenu='config')
+        return t.render(submenu=self.ConfigMenu(), title='Config - Anime', header='Anime', topmenu='config',
+                controller="config", action="anime")
 
     def saveAnime(self, use_anidb=None, anidb_username=None, anidb_password=None, anidb_use_mylist=None,
                   split_home=None):
@@ -4936,7 +4953,8 @@ class ErrorLogs(WebRoot):
             level = logger.ERROR
 
         t = PageTemplate(rh=self, filename="errorlogs.mako")
-        return t.render(header="Logs &amp; Errors", title="Logs &amp; Errors", topmenu="system", submenu=self.ErrorLogsMenu(level), logLevel=level)
+        return t.render(header="Logs &amp; Errors", title="Logs &amp; Errors", topmenu="system", submenu=self.ErrorLogsMenu(level), logLevel=level,
+                controller="errorlogs", action="index")
 
     @staticmethod
     def haveErrors():
-- 
GitLab


From dc92c3373be2d3959ea1534503466176a9cb15cb Mon Sep 17 00:00:00 2001
From: Alexis Tyler <xo@wvvw.me>
Date: Sun, 15 Nov 2015 13:51:04 +1030
Subject: [PATCH 197/215] fix providers not saving

---
 gui/slick/js/configProviders.js       | 570 +++++++++++++++++++++++++
 gui/slick/js/core.js                  | 572 +-------------------------
 gui/slick/views/config_providers.mako |   1 +
 3 files changed, 573 insertions(+), 570 deletions(-)

diff --git a/gui/slick/js/configProviders.js b/gui/slick/js/configProviders.js
index b8ac98a50..e2a7a49ed 100644
--- a/gui/slick/js/configProviders.js
+++ b/gui/slick/js/configProviders.js
@@ -1,2 +1,572 @@
 $(document).ready(function(){
+    $.fn.showHideProviders = function() {
+        $('.providerDiv').each(function(){
+            var providerName = $(this).attr('id');
+            var selectedProvider = $('#editAProvider :selected').val();
+
+            if (selectedProvider + 'Div' == providerName) { // jshint ignore:line
+                $(this).show();
+            } else {
+                $(this).hide();
+            }
+        });
+    };
+
+    var ifExists = function(loopThroughArray, searchFor) {
+        var found = false;
+
+        loopThroughArray.forEach(function(rootObject) {
+            if (rootObject.name === searchFor) {
+                found = true;
+            }
+            console.log(rootObject.name + " while searching for: "+  searchFor);
+        });
+        return found;
+    };
+
+    /**
+     * Gets categories for the provided newznab provider.
+     * @param {String} isDefault
+     * @param {Array} selectedProvider
+     * @return no return data. Function updateNewznabCaps() is run at callback
+     */
+    $.fn.getCategories = function (isDefault, selectedProvider) {
+
+        var name = selectedProvider[0];
+        var url = selectedProvider[1];
+        var key = selectedProvider[2];
+
+        if (!name || !url || !key) {
+            return;
+        }
+
+        var params = {url: url, name: name, key: key};
+
+        $(".updating_categories").wrapInner('<span><img src="' + srRoot + '/images/loading16' + themeSpinner + '.gif"> Updating Categories ...</span>');
+        var jqxhr = $.getJSON(srRoot + '/config/providers/getNewznabCategories', params, function(data){
+            $(this).updateNewznabCaps( data, selectedProvider );
+            console.debug(data.tv_categories); // jshint ignore:line
+        });
+        jqxhr.always(function() {
+            $(".updating_categories").empty();
+        });
+    };
+
+    $.fn.addProvider = function (id, name, url, key, cat, isDefault, showProvider) {
+        url = $.trim(url);
+        if (!url) {
+            return;
+        }
+
+        if (!/^https?:\/\//i.test(url)) {
+            url = "http://" + url;
+        }
+
+        if (url.match('/$') === null) {
+            url = url + '/';
+        }
+
+        var newData = [isDefault, [name, url, key, cat]];
+        newznabProviders[id] = newData;
+
+        if (!isDefault){
+            $('#editANewznabProvider').addOption(id, name);
+            $(this).populateNewznabSection();
+        }
+
+        if ($('#provider_order_list > #'+id).length === 0 && showProvider !== false) {
+            var toAdd = '<li class="ui-state-default" id="' + id + '"> <input type="checkbox" id="enable_' + id + '" class="provider_enabler" CHECKED> <a href="' + anonURL + url + '" class="imgLink" target="_new"><img src="' + srRoot + '/images/providers/newznab.png" alt="' + name + '" width="16" height="16"></a> ' + name + '</li>';
+
+            $('#provider_order_list').append(toAdd);
+            $('#provider_order_list').sortable("refresh");
+        }
+
+        $(this).makeNewznabProviderString();
+    };
+
+    $.fn.addTorrentRssProvider = function (id, name, url, cookies, titleTAG) {
+        var newData = [name, url, cookies, titleTAG];
+        torrentRssProviders[id] = newData;
+
+        $('#editATorrentRssProvider').addOption(id, name);
+        $(this).populateTorrentRssSection();
+
+        if ($('#provider_order_list > #'+id).length === 0) {
+            $('#provider_order_list').append('<li class="ui-state-default" id="' + id + '"> <input type="checkbox" id="enable_' + id + '" class="provider_enabler" CHECKED> <a href="' + anonURL + url + '" class="imgLink" target="_new"><img src="' + srRoot + '/images/providers/torrentrss.png" alt="' + name + '" width="16" height="16"></a> ' + name + '</li>');
+            $('#provider_order_list').sortable("refresh");
+        }
+
+        $(this).makeTorrentRssProviderString();
+    };
+
+    $.fn.updateProvider = function (id, url, key, cat) {
+        newznabProviders[id][1][1] = url;
+        newznabProviders[id][1][2] = key;
+        newznabProviders[id][1][3] = cat;
+
+        $(this).populateNewznabSection();
+
+        $(this).makeNewznabProviderString();
+    };
+
+    $.fn.deleteProvider = function (id) {
+        $('#editANewznabProvider').removeOption(id);
+        delete newznabProviders[id];
+        $(this).populateNewznabSection();
+        $('li').remove('#'+id);
+        $(this).makeNewznabProviderString();
+    };
+
+    $.fn.updateTorrentRssProvider = function (id, url, cookies, titleTAG) {
+        torrentRssProviders[id][1] = url;
+        torrentRssProviders[id][2] = cookies;
+        torrentRssProviders[id][3] = titleTAG;
+        $(this).populateTorrentRssSection();
+        $(this).makeTorrentRssProviderString();
+    };
+
+    $.fn.deleteTorrentRssProvider = function (id) {
+        $('#editATorrentRssProvider').removeOption(id);
+        delete torrentRssProviders[id];
+        $(this).populateTorrentRssSection();
+        $('li').remove('#'+id);
+        $(this).makeTorrentRssProviderString();
+    };
+
+    $.fn.populateNewznabSection = function() {
+        var selectedProvider = $('#editANewznabProvider :selected').val();
+        var data = '';
+        var isDefault = '';
+        var rrcat = '';
+
+        if (selectedProvider === 'addNewznab') {
+            data = ['','',''];
+            isDefault = 0;
+            $('#newznab_add_div').show();
+            $('#newznab_update_div').hide();
+            $('#newznab_cat').attr('disabled','disabled');
+            $('#newznab_cap').attr('disabled','disabled');
+            $('#newznab_cat_update').attr('disabled','disabled');
+            $('#newznabcapdiv').hide();
+
+            $("#newznab_cat option").each(function() {
+                $(this).remove();
+                return;
+            });
+
+            $("#newznab_cap option").each(function() {
+                $(this).remove();
+                return;
+            });
+
+        } else {
+            data = newznabProviders[selectedProvider][1];
+            isDefault = newznabProviders[selectedProvider][0];
+            $('#newznab_add_div').hide();
+            $('#newznab_update_div').show();
+            $('#newznab_cat').removeAttr("disabled");
+            $('#newznab_cap').removeAttr("disabled");
+            $('#newznab_cat_update').removeAttr("disabled");
+            $('#newznabcapdiv').show();
+        }
+
+        $('#newznab_name').val(data[0]);
+        $('#newznab_url').val(data[1]);
+        $('#newznab_key').val(data[2]);
+
+        //Check if not already array
+        if (typeof data[3] === 'string') {
+            rrcat = data[3].split(",");
+        } else {
+            rrcat = data[3];
+        }
+
+        // Update the category select box (on the right)
+        var newCatOptions = [];
+        if (rrcat) {
+            rrcat.forEach(function (cat) {
+                if (cat !== '') {
+                    newCatOptions.push({text : cat, value : cat});
+                }
+            });
+            $("#newznab_cat").replaceOptions(newCatOptions);
+        }
+
+        if (selectedProvider === 'addNewznab') {
+            $('#newznab_name').removeAttr("disabled");
+            $('#newznab_url').removeAttr("disabled");
+        } else {
+            $('#newznab_name').attr("disabled", "disabled");
+
+            if (isDefault) {
+                $('#newznab_url').attr("disabled", "disabled");
+                $('#newznab_delete').attr("disabled", "disabled");
+            } else {
+                $('#newznab_url').removeAttr("disabled");
+                $('#newznab_delete').removeAttr("disabled");
+
+                //Get Categories Capabilities
+                if (data[0] && data[1] && data[2] && !ifExists($.fn.newznabProvidersCapabilities, data[0])) {
+                    $(this).getCategories(isDefault, data);
+                }
+                $(this).updateNewznabCaps( null, data );
+            }
+        }
+    };
+
+    /**
+     * Updates the Global array $.fn.newznabProvidersCapabilities with a combination of newznab prov name
+     * and category capabilities. Return
+     * @param {Array} newzNabCaps, is the returned object with newzNabprod Name and Capabilities.
+     * @param {Array} selectedProvider
+     * @return no return data. The multiselect input $("#newznab_cap") is updated, as a result.
+     */
+    $.fn.updateNewznabCaps = function( newzNabCaps, selectedProvider ) {
+        if (newzNabCaps && !ifExists($.fn.newznabProvidersCapabilities, selectedProvider[0])) {
+            $.fn.newznabProvidersCapabilities.push({'name' : selectedProvider[0], 'categories' : newzNabCaps.tv_categories}); // jshint ignore:line
+        }
+
+        //Loop through the array and if currently selected newznab provider name matches one in the array, use it to
+        //update the capabilities select box (on the left).
+        if (selectedProvider[0]) {
+            $.fn.newznabProvidersCapabilities.forEach(function(newzNabCap) {
+                if (newzNabCap.name && newzNabCap.name === selectedProvider[0] && newzNabCap.categories instanceof Array) {
+                    var newCapOptions = [];
+                    newzNabCap.categories.forEach(function(categorySet) {
+                        if (categorySet.id && categorySet.name) {
+                            newCapOptions.push({value : categorySet.id, text : categorySet.name + "(" + categorySet.id + ")"});
+                        }
+                    });
+                    $("#newznab_cap").replaceOptions(newCapOptions);
+                }
+            });
+        }
+    };
+
+    $.fn.makeNewznabProviderString = function() {
+        var provStrings = [];
+
+        for (var id in newznabProviders) {
+            if (newznabProviders.hasOwnProperty(id)) {
+                provStrings.push(newznabProviders[id][1].join('|'));
+            }
+        }
+
+        $('#newznab_string').val(provStrings.join('!!!'));
+    };
+
+    $.fn.populateTorrentRssSection = function() {
+        var selectedProvider = $('#editATorrentRssProvider :selected').val();
+        var data = '';
+
+        if (selectedProvider === 'addTorrentRss') {
+            data = ['','','','title'];
+            $('#torrentrss_add_div').show();
+            $('#torrentrss_update_div').hide();
+        } else {
+            data = torrentRssProviders[selectedProvider];
+            $('#torrentrss_add_div').hide();
+            $('#torrentrss_update_div').show();
+        }
+
+        $('#torrentrss_name').val(data[0]);
+        $('#torrentrss_url').val(data[1]);
+        $('#torrentrss_cookies').val(data[2]);
+        $('#torrentrss_titleTAG').val(data[3]);
+
+        if (selectedProvider === 'addTorrentRss') {
+            $('#torrentrss_name').removeAttr("disabled");
+            $('#torrentrss_url').removeAttr("disabled");
+            $('#torrentrss_cookies').removeAttr("disabled");
+            $('#torrentrss_titleTAG').removeAttr("disabled");
+        } else {
+            $('#torrentrss_name').attr("disabled", "disabled");
+            $('#torrentrss_url').removeAttr("disabled");
+            $('#torrentrss_cookies').removeAttr("disabled");
+            $('#torrentrss_titleTAG').removeAttr("disabled");
+            $('#torrentrss_delete').removeAttr("disabled");
+        }
+    };
+
+    $.fn.makeTorrentRssProviderString = function() {
+        var provStrings = [];
+        for (var id in torrentRssProviders) {
+            if (torrentRssProviders.hasOwnProperty(id)) {
+                provStrings.push(torrentRssProviders[id].join('|'));
+            }
+        }
+
+        $('#torrentrss_string').val(provStrings.join('!!!'));
+    };
+
+
+    $.fn.refreshProviderList = function() {
+        var idArr = $("#provider_order_list").sortable('toArray');
+        var finalArr = [];
+        $.each(idArr, function(key, val) {
+            var checked = + $('#enable_'+val).prop('checked') ? '1' : '0';
+            finalArr.push(val + ':' + checked);
+        });
+
+        $("#provider_order").val(finalArr.join(' '));
+        $(this).refreshEditAProvider();
+    };
+
+    $.fn.refreshEditAProvider = function() {
+        $('#provider-list').empty();
+
+        var idArr = $("#provider_order_list").sortable('toArray');
+        var finalArr = [];
+        $.each(idArr, function(key, val) {
+            if ($('#enable_'+val).prop('checked')) {
+                finalArr.push(val);
+            }
+        });
+
+        if (finalArr.length > 0) {
+            $('<select>').prop('id','editAProvider').addClass('form-control input-sm').appendTo('#provider-list');
+            for (var i = 0, len = finalArr.length; i < len; i++) {
+                var provider = finalArr[i];
+                $('#editAProvider').append($('<option>').prop('value',provider).text($.trim($('#'+provider).text()).replace(/\s\*$/, '').replace(/\s\*\*$/, '')));
+            }
+        } else {
+            document.getElementsByClassName('component-desc')[0].innerHTML = "No providers available to configure.";
+        }
+
+        $(this).showHideProviders();
+    };
+
+    var newznabProviders = [];
+    var torrentRssProviders = [];
+
+    $(this).on('change', '.newznab_key', function(){
+        var providerId = $(this).attr('id');
+        providerId = providerId.substring(0, providerId.length-'_hash'.length);
+
+        var url = $('#'+providerId+'_url').val();
+        var cat = $('#'+providerId+'_cat').val();
+        var key = $(this).val();
+
+        $(this).updateProvider(providerId, url, key, cat);
     });
+
+    $('#newznab_key,#newznab_url').change(function(){
+        var selectedProvider = $('#editANewznabProvider :selected').val();
+
+        if (selectedProvider === "addNewznab"){
+             return;
+        }
+
+        var url = $('#newznab_url').val();
+        var key = $('#newznab_key').val();
+
+        var cat = $('#newznab_cat option').map(function(i, opt) {
+            return $(opt).text();
+        }).toArray().join(',');
+
+        $(this).updateProvider(selectedProvider, url, key, cat);
+    });
+
+    $('#torrentrss_url,#torrentrss_cookies,#torrentrss_titleTAG').change(function(){
+        var selectedProvider = $('#editATorrentRssProvider :selected').val();
+
+        if (selectedProvider === "addTorrentRss"){
+             return;
+        }
+
+        var url = $('#torrentrss_url').val();
+        var cookies = $('#torrentrss_cookies').val();
+        var titleTAG = $('#torrentrss_titleTAG').val();
+
+        $(this).updateTorrentRssProvider(selectedProvider, url, cookies, titleTAG);
+    });
+
+    $('body').on('change', '#editAProvider',function(){
+        $(this).showHideProviders();
+    });
+
+    $('#editANewznabProvider').change(function(){
+        $(this).populateNewznabSection();
+    });
+
+    $('#editATorrentRssProvider').change(function(){
+        $(this).populateTorrentRssSection();
+    });
+
+    $(this).on('click', '.provider_enabler', function(){
+        $(this).refreshProviderList();
+    });
+
+    $('#newznab_cat_update').click(function(){
+        console.debug('Clicked Button');
+
+        // Maybe check if there is anything selected?
+        $("#newznab_cat option").each(function() {
+            $(this).remove();
+        });
+
+        var newOptions = [];
+
+        // When the update botton is clicked, loop through the capabilities list
+        // and copy the selected category id's to the category list on the right.
+        $("#newznab_cap option:selected").each(function(){
+            var selectedCat = $(this).val();
+            console.debug(selectedCat);
+            newOptions.push({text: selectedCat, value: selectedCat});
+        });
+
+        $("#newznab_cat").replaceOptions(newOptions);
+
+        var selectedProvider = $("#editANewznabProvider :selected").val();
+        if (selectedProvider === "addNewznab"){
+            return;
+        }
+
+        var url = $('#newznab_url').val();
+        var key = $('#newznab_key').val();
+
+        var cat = $('#newznab_cat option').map(function(i, opt) {
+            return $(opt).text();
+        }).toArray().join(',');
+
+        $("#newznab_cat option:not([value])").remove();
+
+        $(this).updateProvider(selectedProvider, url, key, cat);
+    });
+
+
+    $('#newznab_add').click(function(){
+        var name = $.trim($('#newznab_name').val());
+        var url = $.trim($('#newznab_url').val());
+        var key = $.trim($('#newznab_key').val());
+        //var cat = $.trim($('#newznab_cat').val());
+
+        var cat = $.trim($('#newznab_cat option').map(function(i, opt) {
+            return $(opt).text();
+        }).toArray().join(','));
+
+        if (!name || !url || !key) {
+            return;
+        }
+
+        var params = {name: name};
+
+        // send to the form with ajax, get a return value
+        $.getJSON(srRoot + '/config/providers/canAddNewznabProvider', params, function(data){
+            if (data.error !== undefined) {
+                alert(data.error);
+                return;
+            }
+            $(this).addProvider(data.success, name, url, key, cat, 0);
+        });
+    });
+
+    $('.newznab_delete').click(function(){
+        var selectedProvider = $('#editANewznabProvider :selected').val();
+        $(this).deleteProvider(selectedProvider);
+    });
+
+    $('#torrentrss_add').click(function(){
+        var name = $('#torrentrss_name').val();
+        var url = $('#torrentrss_url').val();
+        var cookies = $('#torrentrss_cookies').val();
+        var titleTAG = $('#torrentrss_titleTAG').val();
+        var params = { name: name, url: url, cookies: cookies, titleTAG: titleTAG};
+
+        // send to the form with ajax, get a return value
+        $.getJSON(srRoot + '/config/providers/canAddTorrentRssProvider', params, function(data){
+            if (data.error !== undefined) {
+                alert(data.error);
+                return;
+            }
+
+            $(this).addTorrentRssProvider(data.success, name, url, cookies, titleTAG);
+            $(this).refreshEditAProvider();
+        });
+    });
+
+    $('.torrentrss_delete').on('click', function(){
+        $(this).deleteTorrentRssProvider($('#editATorrentRssProvider :selected').val());
+        $(this).refreshEditAProvider();
+    });
+
+    $(this).on('change', "[class='providerDiv_tip'] input", function(){
+        $('div .providerDiv ' + "[name=" + $(this).attr('name') + "]").replaceWith($(this).clone());
+        $('div .providerDiv ' + "[newznab_name=" + $(this).attr('id') + "]").replaceWith($(this).clone());
+    });
+
+    $(this).on('change', "[class='providerDiv_tip'] select", function(){
+        $(this).find('option').each( function() {
+            if ($(this).is(':selected')) {
+                $(this).prop('defaultSelected', true);
+            } else {
+                $(this).prop('defaultSelected', false);
+            }
+        });
+        $('div .providerDiv ' + "[name=" + $(this).attr('name') + "]").empty().replaceWith($(this).clone());
+    });
+
+    $(this).on('change', '.enabler', function(){
+        if ($(this).is(':checked')) {
+            $('.content_'+$(this).attr('id')).each( function() {
+                $(this).show();
+            });
+        } else {
+            $('.content_'+$(this).attr('id')).each( function() {
+                $(this).hide();
+            });
+        }
+    });
+
+    $(".enabler").each(function(){
+        if (!$(this).is(':checked')) {
+            $('.content_'+$(this).attr('id')).hide();
+        } else {
+            $('.content_'+$(this).attr('id')).show();
+        }
+    });
+
+    $.fn.makeTorrentOptionString = function(providerId) {
+        var seedRatio  = $('.providerDiv_tip #' + providerId + '_seed_ratio').prop('value');
+        var seedTime   = $('.providerDiv_tip #' + providerId + '_seed_time').prop('value');
+        var processMet = $('.providerDiv_tip #' + providerId + '_process_method').prop('value');
+        var optionString = $('.providerDiv_tip #' + providerId + '_option_string');
+
+        optionString.val([seedRatio, seedTime, processMet].join('|'));
+    };
+
+    $(this).on('change', '.seed_option', function(){
+        var providerId = $(this).attr('id').split('_')[0];
+        $(this).makeTorrentOptionString(providerId);
+    });
+
+    $.fn.replaceOptions = function(options) {
+        var self, $option;
+
+        this.empty();
+        self = this;
+
+        $.each(options, function(index, option) {
+            $option = $("<option></option>").attr("value", option.value).text(option.text);
+            self.append($option);
+        });
+    };
+
+    // initialization stuff
+    $.fn.newznabProvidersCapabilities = [];
+
+    $(this).showHideProviders();
+
+    $("#provider_order_list").sortable({
+        placeholder: 'ui-state-highlight',
+        update: function () {
+            $(this).refreshProviderList();
+        }
+    });
+
+    $("#provider_order_list").disableSelection();
+
+    if ($('#editANewznabProvider').length) {
+        $(this).populateNewznabSection();
+    }
+});
diff --git a/gui/slick/js/core.js b/gui/slick/js/core.js
index 94a42be7c..f91e678bc 100644
--- a/gui/slick/js/core.js
+++ b/gui/slick/js/core.js
@@ -1664,576 +1664,8 @@ var SICKRAGE = {
             $("#service_order_list").disableSelection();
         },
         providers: function() {
-            $.fn.showHideProviders = function() {
-                $('.providerDiv').each(function(){
-                    var providerName = $(this).attr('id');
-                    var selectedProvider = $('#editAProvider :selected').val();
-
-                    if (selectedProvider + 'Div' == providerName) { // jshint ignore:line
-                        $(this).show();
-                    } else {
-                        $(this).hide();
-                    }
-                });
-            };
-
-            var ifExists = function(loopThroughArray, searchFor) {
-                var found = false;
-
-                loopThroughArray.forEach(function(rootObject) {
-                    if (rootObject.name === searchFor) {
-                        found = true;
-                    }
-                    console.log(rootObject.name + " while searching for: "+  searchFor);
-                });
-                return found;
-            };
-
-            /**
-             * Gets categories for the provided newznab provider.
-             * @param {String} isDefault
-             * @param {Array} selectedProvider
-             * @return no return data. Function updateNewznabCaps() is run at callback
-             */
-            $.fn.getCategories = function (isDefault, selectedProvider) {
-
-                var name = selectedProvider[0];
-                var url = selectedProvider[1];
-                var key = selectedProvider[2];
-
-                if (!name || !url || !key) {
-                    return;
-                }
-
-                var params = {url: url, name: name, key: key};
-
-                $(".updating_categories").wrapInner('<span><img src="' + srRoot + '/images/loading16' + themeSpinner + '.gif"> Updating Categories ...</span>');
-                var jqxhr = $.getJSON(srRoot + '/config/providers/getNewznabCategories', params, function(data){
-                    $(this).updateNewznabCaps( data, selectedProvider );
-                    console.debug(data.tv_categories); // jshint ignore:line
-                });
-                jqxhr.always(function() {
-                    $(".updating_categories").empty();
-                });
-            };
-
-            $.fn.addProvider = function (id, name, url, key, cat, isDefault, showProvider) {
-                url = $.trim(url);
-                if (!url) {
-                    return;
-                }
-
-                if (!/^https?:\/\//i.test(url)) {
-                    url = "http://" + url;
-                }
-
-                if (url.match('/$') === null) {
-                    url = url + '/';
-                }
-
-                var newData = [isDefault, [name, url, key, cat]];
-                newznabProviders[id] = newData;
-
-                if (!isDefault){
-                    $('#editANewznabProvider').addOption(id, name);
-                    $(this).populateNewznabSection();
-                }
-
-                if ($('#provider_order_list > #'+id).length === 0 && showProvider !== false) {
-                    var toAdd = '<li class="ui-state-default" id="' + id + '"> <input type="checkbox" id="enable_' + id + '" class="provider_enabler" CHECKED> <a href="' + anonURL + url + '" class="imgLink" target="_new"><img src="' + srRoot + '/images/providers/newznab.png" alt="' + name + '" width="16" height="16"></a> ' + name + '</li>';
-
-                    $('#provider_order_list').append(toAdd);
-                    $('#provider_order_list').sortable("refresh");
-                }
-
-                $(this).makeNewznabProviderString();
-            };
-
-            $.fn.addTorrentRssProvider = function (id, name, url, cookies, titleTAG) {
-                var newData = [name, url, cookies, titleTAG];
-                torrentRssProviders[id] = newData;
-
-                $('#editATorrentRssProvider').addOption(id, name);
-                $(this).populateTorrentRssSection();
-
-                if ($('#provider_order_list > #'+id).length === 0) {
-                    $('#provider_order_list').append('<li class="ui-state-default" id="' + id + '"> <input type="checkbox" id="enable_' + id + '" class="provider_enabler" CHECKED> <a href="' + anonURL + url + '" class="imgLink" target="_new"><img src="' + srRoot + '/images/providers/torrentrss.png" alt="' + name + '" width="16" height="16"></a> ' + name + '</li>');
-                    $('#provider_order_list').sortable("refresh");
-                }
-
-                $(this).makeTorrentRssProviderString();
-            };
-
-            $.fn.updateProvider = function (id, url, key, cat) {
-                newznabProviders[id][1][1] = url;
-                newznabProviders[id][1][2] = key;
-                newznabProviders[id][1][3] = cat;
-
-                $(this).populateNewznabSection();
-
-                $(this).makeNewznabProviderString();
-            };
-
-            $.fn.deleteProvider = function (id) {
-                $('#editANewznabProvider').removeOption(id);
-                delete newznabProviders[id];
-                $(this).populateNewznabSection();
-                $('li').remove('#'+id);
-                $(this).makeNewznabProviderString();
-            };
-
-            $.fn.updateTorrentRssProvider = function (id, url, cookies, titleTAG) {
-                torrentRssProviders[id][1] = url;
-                torrentRssProviders[id][2] = cookies;
-                torrentRssProviders[id][3] = titleTAG;
-                $(this).populateTorrentRssSection();
-                $(this).makeTorrentRssProviderString();
-            };
-
-            $.fn.deleteTorrentRssProvider = function (id) {
-                $('#editATorrentRssProvider').removeOption(id);
-                delete torrentRssProviders[id];
-                $(this).populateTorrentRssSection();
-                $('li').remove('#'+id);
-                $(this).makeTorrentRssProviderString();
-            };
-
-            $.fn.populateNewznabSection = function() {
-                var selectedProvider = $('#editANewznabProvider :selected').val();
-                var data = '';
-                var isDefault = '';
-                var rrcat = '';
-
-                if (selectedProvider === 'addNewznab') {
-                    data = ['','',''];
-                    isDefault = 0;
-                    $('#newznab_add_div').show();
-                    $('#newznab_update_div').hide();
-                    $('#newznab_cat').attr('disabled','disabled');
-                    $('#newznab_cap').attr('disabled','disabled');
-                    $('#newznab_cat_update').attr('disabled','disabled');
-                    $('#newznabcapdiv').hide();
-
-                    $("#newznab_cat option").each(function() {
-                        $(this).remove();
-                        return;
-                    });
-
-                    $("#newznab_cap option").each(function() {
-                        $(this).remove();
-                        return;
-                    });
-
-                } else {
-                    data = newznabProviders[selectedProvider][1];
-                    isDefault = newznabProviders[selectedProvider][0];
-                    $('#newznab_add_div').hide();
-                    $('#newznab_update_div').show();
-                    $('#newznab_cat').removeAttr("disabled");
-                    $('#newznab_cap').removeAttr("disabled");
-                    $('#newznab_cat_update').removeAttr("disabled");
-                    $('#newznabcapdiv').show();
-                }
-
-                $('#newznab_name').val(data[0]);
-                $('#newznab_url').val(data[1]);
-                $('#newznab_key').val(data[2]);
-
-                //Check if not already array
-                if (typeof data[3] === 'string') {
-                    rrcat = data[3].split(",");
-                } else {
-                    rrcat = data[3];
-                }
-
-                // Update the category select box (on the right)
-                var newCatOptions = [];
-                if (rrcat) {
-                    rrcat.forEach(function (cat) {
-                        if (cat !== '') {
-                            newCatOptions.push({text : cat, value : cat});
-                        }
-                    });
-                    $("#newznab_cat").replaceOptions(newCatOptions);
-                }
-
-                if (selectedProvider === 'addNewznab') {
-                    $('#newznab_name').removeAttr("disabled");
-                    $('#newznab_url').removeAttr("disabled");
-                } else {
-                    $('#newznab_name').attr("disabled", "disabled");
-
-                    if (isDefault) {
-                        $('#newznab_url').attr("disabled", "disabled");
-                        $('#newznab_delete').attr("disabled", "disabled");
-                    } else {
-                        $('#newznab_url').removeAttr("disabled");
-                        $('#newznab_delete').removeAttr("disabled");
-
-                        //Get Categories Capabilities
-                        if (data[0] && data[1] && data[2] && !ifExists($.fn.newznabProvidersCapabilities, data[0])) {
-                            $(this).getCategories(isDefault, data);
-                        }
-                        $(this).updateNewznabCaps( null, data );
-                    }
-                }
-            };
-
-            /**
-             * Updates the Global array $.fn.newznabProvidersCapabilities with a combination of newznab prov name
-             * and category capabilities. Return
-             * @param {Array} newzNabCaps, is the returned object with newzNabprod Name and Capabilities.
-             * @param {Array} selectedProvider
-             * @return no return data. The multiselect input $("#newznab_cap") is updated, as a result.
-             */
-            $.fn.updateNewznabCaps = function( newzNabCaps, selectedProvider ) {
-                if (newzNabCaps && !ifExists($.fn.newznabProvidersCapabilities, selectedProvider[0])) {
-                    $.fn.newznabProvidersCapabilities.push({'name' : selectedProvider[0], 'categories' : newzNabCaps.tv_categories}); // jshint ignore:line
-                }
-
-                //Loop through the array and if currently selected newznab provider name matches one in the array, use it to
-                //update the capabilities select box (on the left).
-                if (selectedProvider[0]) {
-                    $.fn.newznabProvidersCapabilities.forEach(function(newzNabCap) {
-                        if (newzNabCap.name && newzNabCap.name === selectedProvider[0] && newzNabCap.categories instanceof Array) {
-                            var newCapOptions = [];
-                            newzNabCap.categories.forEach(function(categorySet) {
-                                if (categorySet.id && categorySet.name) {
-                                    newCapOptions.push({value : categorySet.id, text : categorySet.name + "(" + categorySet.id + ")"});
-                                }
-                            });
-                            $("#newznab_cap").replaceOptions(newCapOptions);
-                        }
-                    });
-                }
-            };
-
-            $.fn.makeNewznabProviderString = function() {
-                var provStrings = [];
-
-                for (var id in newznabProviders) {
-                    if (newznabProviders.hasOwnProperty(id)) {
-                        provStrings.push(newznabProviders[id][1].join('|'));
-                    }
-                }
-
-                $('#newznab_string').val(provStrings.join('!!!'));
-            };
-
-            $.fn.populateTorrentRssSection = function() {
-                var selectedProvider = $('#editATorrentRssProvider :selected').val();
-                var data = '';
-
-                if (selectedProvider === 'addTorrentRss') {
-                    data = ['','','','title'];
-                    $('#torrentrss_add_div').show();
-                    $('#torrentrss_update_div').hide();
-                } else {
-                    data = torrentRssProviders[selectedProvider];
-                    $('#torrentrss_add_div').hide();
-                    $('#torrentrss_update_div').show();
-                }
-
-                $('#torrentrss_name').val(data[0]);
-                $('#torrentrss_url').val(data[1]);
-                $('#torrentrss_cookies').val(data[2]);
-                $('#torrentrss_titleTAG').val(data[3]);
-
-                if (selectedProvider === 'addTorrentRss') {
-                    $('#torrentrss_name').removeAttr("disabled");
-                    $('#torrentrss_url').removeAttr("disabled");
-                    $('#torrentrss_cookies').removeAttr("disabled");
-                    $('#torrentrss_titleTAG').removeAttr("disabled");
-                } else {
-                    $('#torrentrss_name').attr("disabled", "disabled");
-                    $('#torrentrss_url').removeAttr("disabled");
-                    $('#torrentrss_cookies').removeAttr("disabled");
-                    $('#torrentrss_titleTAG').removeAttr("disabled");
-                    $('#torrentrss_delete').removeAttr("disabled");
-                }
-            };
-
-            $.fn.makeTorrentRssProviderString = function() {
-                var provStrings = [];
-                for (var id in torrentRssProviders) {
-                    if (torrentRssProviders.hasOwnProperty(id)) {
-                        provStrings.push(torrentRssProviders[id].join('|'));
-                    }
-                }
-
-                $('#torrentrss_string').val(provStrings.join('!!!'));
-            };
-
-
-            $.fn.refreshProviderList = function() {
-                var idArr = $("#provider_order_list").sortable('toArray');
-                var finalArr = [];
-                $.each(idArr, function(key, val) {
-                    var checked = + $('#enable_'+val).prop('checked') ? '1' : '0';
-                    finalArr.push(val + ':' + checked);
-                });
-
-                $("#provider_order").val(finalArr.join(' '));
-                $(this).refreshEditAProvider();
-            };
-
-            $.fn.refreshEditAProvider = function() {
-                $('#provider-list').empty();
-
-                var idArr = $("#provider_order_list").sortable('toArray');
-                var finalArr = [];
-                $.each(idArr, function(key, val) {
-                    if ($('#enable_'+val).prop('checked')) {
-                        finalArr.push(val);
-                    }
-                });
-
-                if (finalArr.length > 0) {
-                    $('<select>').prop('id','editAProvider').addClass('form-control input-sm').appendTo('#provider-list');
-                    for (var i = 0, len = finalArr.length; i < len; i++) {
-                        var provider = finalArr[i];
-                        $('#editAProvider').append($('<option>').prop('value',provider).text($.trim($('#'+provider).text()).replace(/\s\*$/, '').replace(/\s\*\*$/, '')));
-                    }
-                } else {
-                    document.getElementsByClassName('component-desc')[0].innerHTML = "No providers available to configure.";
-                }
-
-                $(this).showHideProviders();
-            };
-
-            var newznabProviders = [];
-            var torrentRssProviders = [];
-
-            $(this).on('change', '.newznab_key', function(){
-                var providerId = $(this).attr('id');
-                providerId = providerId.substring(0, providerId.length-'_hash'.length);
-
-                var url = $('#'+providerId+'_url').val();
-                var cat = $('#'+providerId+'_cat').val();
-                var key = $(this).val();
-
-                $(this).updateProvider(providerId, url, key, cat);
-            });
-
-            $('#newznab_key,#newznab_url').change(function(){
-                var selectedProvider = $('#editANewznabProvider :selected').val();
-
-                if (selectedProvider === "addNewznab"){
-                     return;
-                }
-
-                var url = $('#newznab_url').val();
-                var key = $('#newznab_key').val();
-
-                var cat = $('#newznab_cat option').map(function(i, opt) {
-                    return $(opt).text();
-                }).toArray().join(',');
-
-                $(this).updateProvider(selectedProvider, url, key, cat);
-            });
-
-            $('#torrentrss_url,#torrentrss_cookies,#torrentrss_titleTAG').change(function(){
-                var selectedProvider = $('#editATorrentRssProvider :selected').val();
-
-                if (selectedProvider === "addTorrentRss"){
-                     return;
-                }
-
-                var url = $('#torrentrss_url').val();
-                var cookies = $('#torrentrss_cookies').val();
-                var titleTAG = $('#torrentrss_titleTAG').val();
-
-                $(this).updateTorrentRssProvider(selectedProvider, url, cookies, titleTAG);
-            });
-
-            $('body').on('change', '#editAProvider',function(){
-                $(this).showHideProviders();
-            });
-
-            $('#editANewznabProvider').change(function(){
-                $(this).populateNewznabSection();
-            });
-
-            $('#editATorrentRssProvider').change(function(){
-                $(this).populateTorrentRssSection();
-            });
-
-            $(this).on('click', '.provider_enabler', function(){
-                $(this).refreshProviderList();
-            });
-
-            $('#newznab_cat_update').click(function(){
-                console.debug('Clicked Button');
-
-                // Maybe check if there is anything selected?
-                $("#newznab_cat option").each(function() {
-                    $(this).remove();
-                });
-
-                var newOptions = [];
-
-                // When the update botton is clicked, loop through the capabilities list
-                // and copy the selected category id's to the category list on the right.
-                $("#newznab_cap option:selected").each(function(){
-                    var selectedCat = $(this).val();
-                    console.debug(selectedCat);
-                    newOptions.push({text: selectedCat, value: selectedCat});
-                });
-
-                $("#newznab_cat").replaceOptions(newOptions);
-
-                var selectedProvider = $("#editANewznabProvider :selected").val();
-                if (selectedProvider === "addNewznab"){
-                    return;
-                }
-
-                var url = $('#newznab_url').val();
-                var key = $('#newznab_key').val();
-
-                var cat = $('#newznab_cat option').map(function(i, opt) {
-                    return $(opt).text();
-                }).toArray().join(',');
-
-                $("#newznab_cat option:not([value])").remove();
-
-                $(this).updateProvider(selectedProvider, url, key, cat);
-            });
-
-
-            $('#newznab_add').click(function(){
-                var name = $.trim($('#newznab_name').val());
-                var url = $.trim($('#newznab_url').val());
-                var key = $.trim($('#newznab_key').val());
-                //var cat = $.trim($('#newznab_cat').val());
-
-                var cat = $.trim($('#newznab_cat option').map(function(i, opt) {
-                    return $(opt).text();
-                }).toArray().join(','));
-
-                if (!name || !url || !key) {
-                    return;
-                }
-
-                var params = {name: name};
-
-                // send to the form with ajax, get a return value
-                $.getJSON(srRoot + '/config/providers/canAddNewznabProvider', params, function(data){
-                    if (data.error !== undefined) {
-                        alert(data.error);
-                        return;
-                    }
-                    $(this).addProvider(data.success, name, url, key, cat, 0);
-                });
-            });
-
-            $('.newznab_delete').click(function(){
-                var selectedProvider = $('#editANewznabProvider :selected').val();
-                $(this).deleteProvider(selectedProvider);
-            });
-
-            $('#torrentrss_add').click(function(){
-                var name = $('#torrentrss_name').val();
-                var url = $('#torrentrss_url').val();
-                var cookies = $('#torrentrss_cookies').val();
-                var titleTAG = $('#torrentrss_titleTAG').val();
-                var params = { name: name, url: url, cookies: cookies, titleTAG: titleTAG};
-
-                // send to the form with ajax, get a return value
-                $.getJSON(srRoot + '/config/providers/canAddTorrentRssProvider', params, function(data){
-                    if (data.error !== undefined) {
-                        alert(data.error);
-                        return;
-                    }
-
-                    $(this).addTorrentRssProvider(data.success, name, url, cookies, titleTAG);
-                    $(this).refreshEditAProvider();
-                });
-            });
-
-            $('.torrentrss_delete').on('click', function(){
-                $(this).deleteTorrentRssProvider($('#editATorrentRssProvider :selected').val());
-                $(this).refreshEditAProvider();
-            });
-
-            $(this).on('change', "[class='providerDiv_tip'] input", function(){
-                $('div .providerDiv ' + "[name=" + $(this).attr('name') + "]").replaceWith($(this).clone());
-                $('div .providerDiv ' + "[newznab_name=" + $(this).attr('id') + "]").replaceWith($(this).clone());
-            });
-
-            $(this).on('change', "[class='providerDiv_tip'] select", function(){
-                $(this).find('option').each( function() {
-                    if ($(this).is(':selected')) {
-                        $(this).prop('defaultSelected', true);
-                    } else {
-                        $(this).prop('defaultSelected', false);
-                    }
-                });
-                $('div .providerDiv ' + "[name=" + $(this).attr('name') + "]").empty().replaceWith($(this).clone());
-            });
-
-            $(this).on('change', '.enabler', function(){
-                if ($(this).is(':checked')) {
-                    $('.content_'+$(this).attr('id')).each( function() {
-                        $(this).show();
-                    });
-                } else {
-                    $('.content_'+$(this).attr('id')).each( function() {
-                        $(this).hide();
-                    });
-                }
-            });
-
-            $(".enabler").each(function(){
-                if (!$(this).is(':checked')) {
-                    $('.content_'+$(this).attr('id')).hide();
-                } else {
-                    $('.content_'+$(this).attr('id')).show();
-                }
-            });
-
-            $.fn.makeTorrentOptionString = function(providerId) {
-                var seedRatio  = $('.providerDiv_tip #' + providerId + '_seed_ratio').prop('value');
-                var seedTime   = $('.providerDiv_tip #' + providerId + '_seed_time').prop('value');
-                var processMet = $('.providerDiv_tip #' + providerId + '_process_method').prop('value');
-                var optionString = $('.providerDiv_tip #' + providerId + '_option_string');
-
-                optionString.val([seedRatio, seedTime, processMet].join('|'));
-            };
-
-            $(this).on('change', '.seed_option', function(){
-                var providerId = $(this).attr('id').split('_')[0];
-                $(this).makeTorrentOptionString(providerId);
-            });
-
-            $.fn.replaceOptions = function(options) {
-                var self, $option;
-
-                this.empty();
-                self = this;
-
-                $.each(options, function(index, option) {
-                    $option = $("<option></option>").attr("value", option.value).text(option.text);
-                    self.append($option);
-                });
-            };
-
-            // initialization stuff
-            $.fn.newznabProvidersCapabilities = [];
-
-            $(this).showHideProviders();
-
-            $("#provider_order_list").sortable({
-                placeholder: 'ui-state-highlight',
-                update: function () {
-                    $(this).refreshProviderList();
-                }
-            });
-
-            $("#provider_order_list").disableSelection();
-
-            if ($('#editANewznabProvider').length) {
-                $(this).populateNewznabSection();
-            }
+            // @TODO This function need to be filled with ConfigProviders.js but can't be as we've got scope issues currently.
+            console.log('This function need to be filled with ConfigProviders.js but can\'t be as we\'ve got scope issues currently.');
         }
     },
     manage: {
diff --git a/gui/slick/views/config_providers.mako b/gui/slick/views/config_providers.mako
index eb25276a5..a8259e69c 100644
--- a/gui/slick/views/config_providers.mako
+++ b/gui/slick/views/config_providers.mako
@@ -6,6 +6,7 @@
     from sickbeard.helpers import anon_url
 %>
 <%block name="scripts">
+<script type="text/javascript" src="/js/ConfigProviders.js"></script>
 <script type="text/javascript">
 $(document).ready(function(){
     % if sickbeard.USE_NZBS:
-- 
GitLab


From 074dc947535de95c25e36ec0c240a7c321aa1a7f Mon Sep 17 00:00:00 2001
From: Alexis Tyler <xo@wvvw.me>
Date: Sun, 15 Nov 2015 13:52:16 +1030
Subject: [PATCH 198/215] update core.min.js to match core.js

---
 gui/slick/js/core.min.js | Bin 51335 -> 40257 bytes
 1 file changed, 0 insertions(+), 0 deletions(-)

diff --git a/gui/slick/js/core.min.js b/gui/slick/js/core.min.js
index 0e56469a964fe646a862dd294650d488358186c3..332e5cef3bd42e8931b41239fcb9f7991756bd05 100644
GIT binary patch
delta 142
zcmZpl$b4`Y(}uj+^~w2p#rZj@dO7*&8cHD<nZ*ierFqFEnfZANd8w%>3MKgpNvR5H
znK?PBDGKG8B^e6N`FUxX=>bLgWtl0dMa6nq#R^HKB?`%jdFmw~wTZ<F<*DjrsS4@&
sB?`sK`30#8nZ?DWsl^J(rA0-lc_lfOdP<tLwK}<pd5N2ikB2Y<00ezB!~g&Q

delta 8925
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

-- 
GitLab


From b668f1d91d08d207ff814be6f419ab2ea8b541df Mon Sep 17 00:00:00 2001
From: Alexis Tyler <xo@wvvw.me>
Date: Sun, 15 Nov 2015 16:00:01 +1030
Subject: [PATCH 199/215] add JSCS styling rules

---
 .build/.jscsrc | 3 +++
 1 file changed, 3 insertions(+)
 create mode 100644 .build/.jscsrc

diff --git a/.build/.jscsrc b/.build/.jscsrc
new file mode 100644
index 000000000..f5387e9af
--- /dev/null
+++ b/.build/.jscsrc
@@ -0,0 +1,3 @@
+{
+    "preset": "jquery"
+}
-- 
GitLab


From 149a382b4220d4a28e3e432cf8917605d77fb906 Mon Sep 17 00:00:00 2001
From: Alexis Tyler <xo@wvvw.me>
Date: Sun, 15 Nov 2015 16:00:16 +1030
Subject: [PATCH 200/215] move js into core file

---
 gui/slick/js/core.js                       | 555 +++++++++++++++------
 gui/slick/js/manageEpisodeStatuses.js      |  67 ---
 gui/slick/js/new/manage.js                 |  34 --
 gui/slick/js/new/manage_backlogOverview.js |   7 +-
 gui/slick/js/new/manage_failedDownloads.js |   9 +-
 gui/slick/js/new/manage_massEdit.js        |   1 -
 6 files changed, 394 insertions(+), 279 deletions(-)

diff --git a/gui/slick/js/core.js b/gui/slick/js/core.js
index f91e678bc..a3c13c819 100644
--- a/gui/slick/js/core.js
+++ b/gui/slick/js/core.js
@@ -1,27 +1,27 @@
-var srRoot = getMeta('srRoot'),
-    themeSpinner = getMeta('themeSpinner'),
-    anonURL = getMeta('anonURL'),
-    topImageHtml = '<img src="' + srRoot + '/images/top.gif" width="31" height="11" alt="Jump to top" />',
-    loading = '<img src="' + srRoot + '/images/loading16' + themeSpinner + '.gif" height="16" width="16" />';
-
-function configSuccess(){
-    $('.config_submitter').each(function(){
-        $(this).removeAttr("disabled");
-        $(this).next().remove();
-        $(this).show();
-    });
-    $('.config_submitter_refresh').each(function(){
-        $(this).removeAttr("disabled");
-        $(this).next().remove();
-        $(this).show();
-        window.location.href = srRoot + '/config/providers/';
-    });
-    $('#email_show').trigger('notify');
-}
-
 var SICKRAGE = {
     common: {
         init: function() {
+            var srRoot = getMeta('srRoot'),
+                themeSpinner = getMeta('themeSpinner'),
+                anonURL = getMeta('anonURL'),
+                topImageHtml = '<img src="' + srRoot + '/images/top.gif" width="31" height="11" alt="Jump to top" />',
+                loading = '<img src="' + srRoot + '/images/loading16' + themeSpinner + '.gif" height="16" width="16" />';
+
+            function configSuccess(){
+                $('.config_submitter').each(function(){
+                    $(this).removeAttr("disabled");
+                    $(this).next().remove();
+                    $(this).show();
+                });
+                $('.config_submitter_refresh').each(function(){
+                    $(this).removeAttr("disabled");
+                    $(this).next().remove();
+                    $(this).show();
+                    window.location.href = srRoot + '/config/providers/';
+                });
+                $('#email_show').trigger('notify');
+            }
+
             $("#config-components").tabs({
                 activate: function (event, ui) {
                     var lastOpenedPanel = $(this).data("lastOpenedPanel"),
@@ -333,9 +333,10 @@ var SICKRAGE = {
             $('#config-components').tabs();
 
             $('#testGrowl').click(function () {
-                var growlHost = $.trim($('#growl_host').val());
-                var growlPassword = $.trim($('#growl_password').val());
-                if (!growlHost) {
+                var growl = {};
+                growl.host = $.trim($('#growl_host').val());
+                growl.password = $.trim($('#growl_password').val());
+                if (!growl.ost) {
                     $('#testGrowl-result').html('Please fill out the necessary fields above.');
                     $('#growl_host').addClass('warning');
                     return;
@@ -343,16 +344,17 @@ var SICKRAGE = {
                 $('#growl_host').removeClass('warning');
                 $(this).prop('disabled', true);
                 $('#testGrowl-result').html(loading);
-                $.get(srRoot + '/home/testGrowl', {'host': growlHost, 'password': growlPassword}).done(function (data) {
+                $.get(srRoot + '/home/testGrowl', {'host': growl.host, 'password': growl.password}).done(function (data) {
                     $('#testGrowl-result').html(data);
                     $('#testGrowl').prop('disabled', false);
                 });
             });
 
             $('#testProwl').click(function () {
-                var prowlApi = $.trim($('#prowl_api').val());
-                var prowlPriority = $('#prowl_priority').val();
-                if (!prowlApi) {
+                var prowl = {};
+                prowl.api = $.trim($('#prowl_api').val());
+                prowl.priority = $('#prowl_priority').val();
+                if (!prowl.ai) {
                     $('#testProwl-result').html('Please fill out the necessary fields above.');
                     $('#prowl_api').addClass('warning');
                     return;
@@ -360,17 +362,18 @@ var SICKRAGE = {
                 $('#prowl_api').removeClass('warning');
                 $(this).prop('disabled', true);
                 $('#testProwl-result').html(loading);
-                $.get(srRoot + '/home/testProwl', {'prowl_api': prowlApi, 'prowl_priority': prowlPriority}).done(function (data) {
+                $.get(srRoot + '/home/testProwl', {'prowl_api': prowl.api, 'prowl_priority': prowl.priority}).done(function (data) {
                     $('#testProwl-result').html(data);
                     $('#testProwl').prop('disabled', false);
                 });
             });
 
             $('#testKODI').click(function () {
-                var kodi_host = $.trim($('#kodi_host').val());
-                var kodi_username = $.trim($('#kodi_username').val());
-                var kodi_password = $.trim($('#kodi_password').val());
-                if (!kodi_host) {
+                var kodi = {};
+                kodi.host = $.trim($('#kodi_host').val());
+                kodi.username = $.trim($('#kodi_username').val());
+                kodi.password = $.trim($('#kodi_password').val());
+                if (!kodi.host) {
                     $('#testKODI-result').html('Please fill out the necessary fields above.');
                     $('#kodi_host').addClass('warning');
                     return;
@@ -378,17 +381,19 @@ var SICKRAGE = {
                 $('#kodi_host').removeClass('warning');
                 $(this).prop('disabled', true);
                 $('#testKODI-result').html(loading);
-                $.get(srRoot + '/home/testKODI', {'host': kodi_host, 'username': kodi_username, 'password': kodi_password}).done(function (data) {
+                $.get(srRoot + '/home/testKODI', {'host': kodi.host, 'username': kodi.username, 'password': kodi.password}).done(function (data) {
                     $('#testKODI-result').html(data);
                     $('#testKODI').prop('disabled', false);
                 });
             });
 
             $('#testPMC').click(function () {
-                var plex_host = $.trim($('#plex_host').val());
-                var plex_client_username = $.trim($('#plex_client_username').val());
-                var plex_client_password = $.trim($('#plex_client_password').val());
-                if (!plex_host) {
+                var plex = {};
+                plex.client = {};
+                plex.client.host = $.trim($('#plex_host').val());
+                plex.client.username = $.trim($('#plex_client_username').val());
+                plex.client.password = $.trim($('#plex_client_password').val());
+                if (!plex.host) {
                     $('#testPMC-result').html('Please fill out the necessary fields above.');
                     $('#plex_host').addClass('warning');
                     return;
@@ -396,18 +401,20 @@ var SICKRAGE = {
                 $('#plex_host').removeClass('warning');
                 $(this).prop('disabled', true);
                 $('#testPMC-result').html(loading);
-                $.get(srRoot + '/home/testPMC', {'host': plex_host, 'username': plex_client_username, 'password': plex_client_password}).done(function (data) {
+                $.get(srRoot + '/home/testPMC', {'host': plex.client.host, 'username': plex.client.username, 'password': plex.client.password}).done(function (data) {
                     $('#testPMC-result').html(data);
                     $('#testPMC').prop('disabled', false);
                 });
             });
 
             $('#testPMS').click(function () {
-                var plex_server_host = $.trim($('#plex_server_host').val());
-                var plex_username = $.trim($('#plex_username').val());
-                var plex_password = $.trim($('#plex_password').val());
-                var plex_server_token = $.trim($('#plex_server_token').val());
-                if (!plex_server_host) {
+                var plex = {};
+                plex.server = {};
+                plex.server.host = $.trim($('#plex_server_host').val());
+                plex.username = $.trim($('#plex_username').val());
+                plex.password = $.trim($('#plex_password').val());
+                plex.server.token = $.trim($('#plex_server_token').val());
+                if (!plex.server.host) {
                     $('#testPMS-result').html('Please fill out the necessary fields above.');
                     $('#plex_server_host').addClass('warning');
                     return;
@@ -415,23 +422,24 @@ var SICKRAGE = {
                 $('#plex_server_host').removeClass('warning');
                 $(this).prop('disabled', true);
                 $('#testPMS-result').html(loading);
-                $.get(srRoot + '/home/testPMS', {'host': plex_server_host, 'username': plex_username, 'password': plex_password, 'plex_server_token': plex_server_token}).done(function (data) {
+                $.get(srRoot + '/home/testPMS', {'host': plex.server.host, 'username': plex.username, 'password': plex.password, 'plex_server_token': plex.server.token}).done(function (data) {
                     $('#testPMS-result').html(data);
                     $('#testPMS').prop('disabled', false);
                 });
             });
 
             $('#testEMBY').click(function () {
-                var emby_host = $('#emby_host').val();
-                var emby_apikey = $('#emby_apikey').val();
-                if (!emby_host || !emby_apikey) {
+                var emby = {};
+                emby.host = $('#emby_host').val();
+                emby.apikey = $('#emby_apikey').val();
+                if (!emby.host || !emby.apikey) {
                     $('#testEMBY-result').html('Please fill out the necessary fields above.');
-                    if (!emby_host) {
+                    if (!emby.host) {
                         $('#emby_host').addClass('warning');
                     } else {
                         $('#emby_host').removeClass('warning');
                     }
-                    if (!emby_apikey) {
+                    if (!emby.apikey) {
                         $('#emby_apikey').addClass('warning');
                     } else {
                         $('#emby_apikey').removeClass('warning');
@@ -441,15 +449,16 @@ var SICKRAGE = {
                 $('#emby_host,#emby_apikey').removeClass('warning');
                 $(this).prop('disabled', true);
                 $('#testEMBY-result').html(loading);
-                $.get(srRoot + '/home/testEMBY', {'host': emby_host, 'emby_apikey': emby_apikey}).done(function (data) {
+                $.get(srRoot + '/home/testEMBY', {'host': emby.host, 'emby_apikey': emby.apikey}).done(function (data) {
                     $('#testEMBY-result').html(data);
                     $('#testEMBY').prop('disabled', false);
                 });
             });
 
             $('#testBoxcar').click(function() {
-                var boxcar_username = $.trim($('#boxcar_username').val());
-                if (!boxcar_username) {
+                var boxcar = {};
+                boxcar.username = $.trim($('#boxcar_username').val());
+                if (!boxcar.username) {
                     $('#testBoxcar-result').html('Please fill out the necessary fields above.');
                     $('#boxcar_username').addClass('warning');
                     return;
@@ -457,15 +466,16 @@ var SICKRAGE = {
                 $('#boxcar_username').removeClass('warning');
                 $(this).prop('disabled', true);
                 $('#testBoxcar-result').html(loading);
-                $.get(srRoot + '/home/testBoxcar', {'username': boxcar_username}).done(function (data) {
+                $.get(srRoot + '/home/testBoxcar', {'username': boxcar.username}).done(function (data) {
                     $('#testBoxcar-result').html(data);
                     $('#testBoxcar').prop('disabled', false);
                 });
             });
 
             $('#testBoxcar2').click(function () {
-                var boxcar2_accesstoken = $.trim($('#boxcar2_accesstoken').val());
-                if (!boxcar2_accesstoken) {
+                var boxcar2 = {};
+                boxcar2.accesstoken = $.trim($('#boxcar2_accesstoken').val());
+                if (!boxcar2.accesstoken) {
                     $('#testBoxcar2-result').html('Please fill out the necessary fields above.');
                     $('#boxcar2_accesstoken').addClass('warning');
                     return;
@@ -473,23 +483,24 @@ var SICKRAGE = {
                 $('#boxcar2_accesstoken').removeClass('warning');
                 $(this).prop('disabled', true);
                 $('#testBoxcar2-result').html(loading);
-                $.get(srRoot + '/home/testBoxcar2', {'accesstoken': boxcar2_accesstoken}).done(function (data) {
+                $.get(srRoot + '/home/testBoxcar2', {'accesstoken': boxcar2.accesstoken}).done(function (data) {
                     $('#testBoxcar2-result').html(data);
                     $('#testBoxcar2').prop('disabled', false);
                 });
             });
 
             $('#testPushover').click(function () {
-                var pushover_userkey = $('#pushover_userkey').val();
-                var pushover_apikey = $('#pushover_apikey').val();
-                if (!pushover_userkey || !pushover_apikey) {
+                var pushover = {};
+                pushover.userkey = $('#pushover_userkey').val();
+                pushover.apikey = $('#pushover_apikey').val();
+                if (!pushover.userkey || !pushover.apikey) {
                     $('#testPushover-result').html('Please fill out the necessary fields above.');
-                    if (!pushover_userkey) {
+                    if (!pushover.userkey) {
                         $('#pushover_userkey').addClass('warning');
                     } else {
                         $('#pushover_userkey').removeClass('warning');
                     }
-                    if (!pushover_apikey) {
+                    if (!pushover.apikey) {
                         $('#pushover_apikey').addClass('warning');
                     } else {
                         $('#pushover_apikey').removeClass('warning');
@@ -499,7 +510,7 @@ var SICKRAGE = {
                 $('#pushover_userkey,#pushover_apikey').removeClass('warning');
                 $(this).prop('disabled', true);
                 $('#testPushover-result').html(loading);
-                $.get(srRoot + '/home/testPushover', {'userKey': pushover_userkey, 'apiKey': pushover_apikey}).done(function (data) {
+                $.get(srRoot + '/home/testPushover', {'userKey': pushover.userkey, 'apiKey': pushover.apikey}).done(function (data) {
                     $('#testPushover-result').html(data);
                     $('#testPushover').prop('disabled', false);
                 });
@@ -522,15 +533,16 @@ var SICKRAGE = {
             });
 
             $('#twitterStep2').click(function () {
-                var twitter_key = $.trim($('#twitter_key').val());
-                if (!twitter_key) {
+                var twitter = {};
+                twitter.key = $.trim($('#twitter_key').val());
+                if (!twitter.key) {
                     $('#testTwitter-result').html('Please fill out the necessary fields above.');
                     $('#twitter_key').addClass('warning');
                     return;
                 }
                 $('#twitter_key').removeClass('warning');
                 $('#testTwitter-result').html(loading);
-                $.get(srRoot + '/home/twitterStep2', {'key': twitter_key}, function(data) {
+                $.get(srRoot + '/home/twitterStep2', {'key': twitter.key}, function(data) {
                     $('#testTwitter-result').html(data);
                 });
             });
@@ -542,15 +554,16 @@ var SICKRAGE = {
             });
 
             $('#settingsNMJ').click(function() {
+                var nmj = {};
                 if (!$('#nmj_host').val()) {
                     alert('Please fill in the Popcorn IP address');
                     $('#nmj_host').focus();
                     return;
                 }
                 $('#testNMJ-result').html(loading);
-                var nmj_host = $('#nmj_host').val();
+                nmj.host = $('#nmj_host').val();
 
-                $.get(srRoot + '/home/settingsNMJ', {'host': nmj_host}, function (data) {
+                $.get(srRoot + '/home/settingsNMJ', {'host': nmj.host}, function (data) {
                     if (data === null) {
                         $('#nmj_database').removeAttr('readonly');
                         $('#nmj_mount').removeAttr('readonly');
@@ -574,10 +587,11 @@ var SICKRAGE = {
             });
 
             $('#testNMJ').click(function () {
-                var nmj_host = $.trim($('#nmj_host').val());
-                var nmj_database = $('#nmj_database').val();
-                var nmj_mount = $('#nmj_mount').val();
-                if (!nmj_host) {
+                var nmj = {};
+                nmj.host = $.trim($('#nmj_host').val());
+                nmj.database = $('#nmj_database').val();
+                nmj.mount = $('#nmj_mount').val();
+                if (!nmj.host) {
                     $('#testNMJ-result').html('Please fill out the necessary fields above.');
                     $('#nmj_host').addClass('warning');
                     return;
@@ -585,31 +599,32 @@ var SICKRAGE = {
                 $('#nmj_host').removeClass('warning');
                 $(this).prop('disabled', true);
                 $('#testNMJ-result').html(loading);
-                $.get(srRoot + '/home/testNMJ', {'host': nmj_host, 'database': nmj_database, 'mount': nmj_mount}).done(function (data) {
+                $.get(srRoot + '/home/testNMJ', {'host': nmj.host, 'database': nmj.database, 'mount': nmj.mount}).done(function (data) {
                     $('#testNMJ-result').html(data);
                     $('#testNMJ').prop('disabled', false);
                 });
             });
 
             $('#settingsNMJv2').click(function() {
-                if (!$('#nmjv2_host').val()) {
+                var nmjv2 = {};
+                if(!$('#nmjv2_host').val()) {
                     alert('Please fill in the Popcorn IP address');
                     $('#nmjv2_host').focus();
                     return;
                 }
                 $('#testNMJv2-result').html(loading);
-                var nmjv2_host = $('#nmjv2_host').val();
-                var nmjv2_dbloc;
+                nmjv2.host = $('#nmjv2_host').val();
+                nmjv2.dbloc = '';
                 var radios = document.getElementsByName('nmjv2_dbloc');
                 for(var i = 0, len = radios.length; i < len; i++) {
                     if (radios[i].checked) {
-                        nmjv2_dbloc=radios[i].value;
+                        nmjv2.dbloc = radios[i].value;
                         break;
                     }
                 }
 
-                var nmjv2_dbinstance=$('#NMJv2db_instance').val();
-                $.get(srRoot + '/home/settingsNMJv2', {'host': nmjv2_host,'dbloc': nmjv2_dbloc,'instance': nmjv2_dbinstance}, function (data){
+                nmjv2.dbinstance=$('#NMJv2db_instance').val();
+                $.get(srRoot + '/home/settingsNMJv2', {'host': nmjv2.host,'dbloc': nmjv2.dbloc,'instance': nmjv2.dbinstance}, function (data){
                     if (data === null) {
                         $('#nmjv2_database').removeAttr('readonly');
                     }
@@ -626,8 +641,9 @@ var SICKRAGE = {
             });
 
             $('#testNMJv2').click(function () {
-                var nmjv2_host = $.trim($('#nmjv2_host').val());
-                if (!nmjv2_host) {
+                var nmjv2 = {};
+                nmjv2.host = $.trim($('#nmjv2_host').val());
+                if (!nmjv2.host) {
                     $('#testNMJv2-result').html('Please fill out the necessary fields above.');
                     $('#nmjv2_host').addClass('warning');
                     return;
@@ -635,23 +651,24 @@ var SICKRAGE = {
                 $('#nmjv2_host').removeClass('warning');
                 $(this).prop('disabled', true);
                 $('#testNMJv2-result').html(loading);
-                $.get(srRoot + '/home/testNMJv2', {'host': nmjv2_host}) .done(function (data) {
+                $.get(srRoot + '/home/testNMJv2', {'host': nmjv2.host}) .done(function (data) {
                     $('#testNMJv2-result').html(data);
                     $('#testNMJv2').prop('disabled', false);
                 });
             });
 
             $('#testFreeMobile').click(function () {
-                var freemobile_id = $.trim($('#freemobile_id').val());
-                var freemobile_apikey = $.trim($('#freemobile_apikey').val());
-                if (!freemobile_id || !freemobile_apikey) {
+                var freemobile = {};
+                freemobile.id = $.trim($('#freemobile_id').val());
+                freemobile.apikey = $.trim($('#freemobile_apikey').val());
+                if (!freemobile.id || !freemobile.apikey) {
                     $('#testFreeMobile-result').html('Please fill out the necessary fields above.');
-                    if (!freemobile_id) {
+                    if (!freemobile.id) {
                         $('#freemobile_id').addClass('warning');
                     } else {
                         $('#freemobile_id').removeClass('warning');
                     }
-                    if (!freemobile_apikey) {
+                    if (!freemobile.apikey) {
                         $('#freemobile_apikey').addClass('warning');
                     } else {
                         $('#freemobile_apikey').removeClass('warning');
@@ -661,23 +678,24 @@ var SICKRAGE = {
                 $('#freemobile_id,#freemobile_apikey').removeClass('warning');
                 $(this).prop('disabled', true);
                 $('#testFreeMobile-result').html(loading);
-                $.get(srRoot + '/home/testFreeMobile', {'freemobile_id': freemobile_id, 'freemobile_apikey': freemobile_apikey}).done(function (data) {
+                $.get(srRoot + '/home/testFreeMobile', {'freemobile_id': freemobile.id, 'freemobile_apikey': freemobile.apikey}).done(function (data) {
                     $('#testFreeMobile-result').html(data);
                     $('#testFreeMobile').prop('disabled', false);
                 });
             });
 
             $('#TraktGetPin').click(function () {
-                var trakt_pin_url = $('#trakt_pin_url').val();
-                var w;
-                w = window.open(trakt_pin_url, "popUp", "toolbar=no, scrollbars=no, resizable=no, top=200, left=200, width=650, height=550");
-                 $('#trakt_pin').removeClass('hide');
+                var track = {};
+                trackt.pinUrl = $('#trakt_pin_url').val();
+                var w = window.open(trakt.pinUrl, "popUp", "toolbar=no, scrollbars=no, resizable=no, top=200, left=200, width=650, height=550");
+                $('#trakt_pin').removeClass('hide');
             });
 
             $('#trakt_pin').on('keyup change', function(){
-                var trakt_pin = $('#trakt_pin').val();
+                var trakt = {};
+                trakt.pin = $('#trakt_pin').val();
 
-                if (trakt_pin.length !== 0) {
+                if (trakt.pin.length !== 0) {
                     $('#TraktGetPin').addClass('hide');
                     $('#authTrakt').removeClass('hide');
                 } else {
@@ -687,9 +705,10 @@ var SICKRAGE = {
             });
 
             $('#authTrakt').click(function() {
-                var trakt_pin = $('#trakt_pin').val();
-                if (trakt_pin.length !== 0) {
-                    $.get(srRoot + '/home/getTraktToken', { "trakt_pin": trakt_pin }).done(function (data) {
+                var trakt = {};
+                trakt.pin = $('#trakt_pin').val();
+                if (trakt.pin.length !== 0) {
+                    $.get(srRoot + '/home/getTraktToken', { "trakt_pin": trakt.pin }).done(function (data) {
                         $('#testTrakt-result').html(data);
                         $('#authTrakt').addClass('hide');
                         $('#trakt_pin').addClass('hide');
@@ -699,11 +718,12 @@ var SICKRAGE = {
             });
 
             $('#testTrakt').click(function () {
-                var trakt_username = $.trim($('#trakt_username').val());
-                var trakt_trending_blacklist = $.trim($('#trakt_blacklist_name').val());
-                if (!trakt_username) {
+                var trakt = {};
+                trakt.username = $.trim($('#trakt_username').val());
+                trakt.trendingBlacklist = $.trim($('#trakt_blacklist_name').val());
+                if (!trakt.username) {
                     $('#testTrakt-result').html('Please fill out the necessary fields above.');
-                    if (!trakt_username) {
+                    if (!trakt.username) {
                         $('#trakt_username').addClass('warning');
                     } else {
                         $('#trakt_username').removeClass('warning');
@@ -711,7 +731,7 @@ var SICKRAGE = {
                     return;
                 }
 
-                if (/\s/g.test(trakt_trending_blacklist)) {
+                if (/\s/g.test(trakt.trendingBlacklist)) {
                     $('#testTrakt-result').html('Check blacklist name; the value need to be a trakt slug');
                     $('#trakt_blacklist_name').addClass('warning');
                     return;
@@ -720,7 +740,7 @@ var SICKRAGE = {
                 $('#trakt_blacklist_name').removeClass('warning');
                 $(this).prop('disabled', true);
                 $('#testTrakt-result').html(loading);
-                $.get(srRoot + '/home/testTrakt', {'username': trakt_username, 'blacklist_name': trakt_trending_blacklist}).done(function (data) {
+                $.get(srRoot + '/home/testTrakt', {'username': trakt.username, 'blacklist_name': trakt.trendingBlacklist}).done(function (data) {
                     $('#testTrakt-result').html(data);
                     $('#testTrakt').prop('disabled', false);
                 });
@@ -756,7 +776,15 @@ var SICKRAGE = {
                     if (to === null || to.length === 0 || to.match(/.*@.*/) === null) {
                         status.html('<p style="color: red;">You must provide a recipient email address!</p>');
                     } else {
-                        $.get(srRoot + '/home/testEmail', {host: host, port: port, smtp_from: from, use_tls: tls, user: user, pwd: pwd, to: to}, function (msg) {
+                        $.get(srRoot + '/home/testEmail', {
+                            host: host,
+                            port: port,
+                            smtp_from: from, // jshint ignore:line
+                            use_tls: tls, // jshint ignore:line
+                            user: user,
+                            pwd: pwd,
+                            to: to
+                        }, function (msg) {
                             $('#testEmail-result').html(msg);
                         });
                     }
@@ -764,9 +792,10 @@ var SICKRAGE = {
             });
 
             $('#testNMA').click(function () {
-                var nma_api = $.trim($('#nma_api').val());
-                var nma_priority = $('#nma_priority').val();
-                if (!nma_api) {
+                var nma = {};
+                nma.api = $.trim($('#nma_api').val());
+                nma.priority = $('#nma_priority').val();
+                if (!nma.api) {
                     $('#testNMA-result').html('Please fill out the necessary fields above.');
                     $('#nma_api').addClass('warning');
                     return;
@@ -774,15 +803,16 @@ var SICKRAGE = {
                 $('#nma_api').removeClass('warning');
                 $(this).prop('disabled', true);
                 $('#testNMA-result').html(loading);
-                $.get(srRoot + '/home/testNMA', {'nma_api': nma_api, 'nma_priority': nma_priority}).done(function (data) {
+                $.get(srRoot + '/home/testNMA', {'nma_api': nma.api, 'nma_priority': nma.priority}).done(function (data) {
                     $('#testNMA-result').html(data);
                     $('#testNMA').prop('disabled', false);
                 });
             });
 
             $('#testPushalot').click(function () {
-                var pushalot_authorizationtoken = $.trim($('#pushalot_authorizationtoken').val());
-                if (!pushalot_authorizationtoken) {
+                var pushalot = {};
+                pushalot.authToken = $.trim($('#pushalot_authorizationtoken').val());
+                if (!pushalot.authToken) {
                     $('#testPushalot-result').html('Please fill out the necessary fields above.');
                     $('#pushalot_authorizationtoken').addClass('warning');
                     return;
@@ -790,15 +820,16 @@ var SICKRAGE = {
                 $('#pushalot_authorizationtoken').removeClass('warning');
                 $(this).prop('disabled', true);
                 $('#testPushalot-result').html(loading);
-                $.get(srRoot + '/home/testPushalot', {'authorizationToken': pushalot_authorizationtoken}).done(function (data) {
+                $.get(srRoot + '/home/testPushalot', {'authorizationToken': pushalot.authToken}).done(function (data) {
                     $('#testPushalot-result').html(data);
                     $('#testPushalot').prop('disabled', false);
                 });
             });
 
             $('#testPushbullet').click(function () {
-                var pushbullet_api = $.trim($('#pushbullet_api').val());
-                if (!pushbullet_api) {
+                var pushbullet = {};
+                pushbullet.api = $.trim($('#pushbullet_api').val());
+                if (!pushbullet.api) {
                     $('#testPushbullet-result').html('Please fill out the necessary fields above.');
                     $('#pushbullet_api').addClass('warning');
                     return;
@@ -806,42 +837,47 @@ var SICKRAGE = {
                 $('#pushbullet_api').removeClass('warning');
                 $(this).prop('disabled', true);
                 $('#testPushbullet-result').html(loading);
-                $.get(srRoot + '/home/testPushbullet', {'api': pushbullet_api}).done(function (data) {
+                $.get(srRoot + '/home/testPushbullet', {'api': pushbullet.api}).done(function (data) {
                     $('#testPushbullet-result').html(data);
                     $('#testPushbullet').prop('disabled', false);
                 });
             });
 
-            function get_pushbullet_devices(msg){
-                if(msg) { $('#testPushbullet-result').html(loading); }
+            function getPushbulletDevices(msg){
+                var pushbullet = {};
+                pushbullet.api = $("#pushbullet_api").val();
 
-                var pushbullet_api = $("#pushbullet_api").val();
+                if(msg) {
+                    $('#testPushbullet-result').html(loading);
+                }
 
-                if(!pushbullet_api) {
+                if(!pushbullet.api) {
                     $('#testPushbullet-result').html("You didn't supply a Pushbullet api key");
                     $("#pushbullet_api").focus();
                     return false;
                 }
 
-                $.get(srRoot + "/home/getPushbulletDevices", {'api': pushbullet_api}, function (data) {
-                    var devices = jQuery.parseJSON(data).devices;
-                    var current_pushbullet_device = $("#pushbullet_device").val();
+                $.get(srRoot + "/home/getPushbulletDevices", {'api': pushbullet.api}, function (data) {
+                    pushbullet.devices = jQuery.parseJSON(data).devices;
+                    pushbullet.currentDevice = $("#pushbullet_device").val();
                     $("#pushbullet_device_list").html('');
                     for (var i = 0, len = devices.length; i < len; i++) {
                         if(devices[i].active === true) {
-                            if(current_pushbullet_device == devices[i].iden) {
-                                $("#pushbullet_device_list").append('<option value="'+devices[i].iden+'" selected>' + devices[i].nickname + '</option>');
+                            if(pushbullet.currentDevice === pushbullet.devices[i].iden) {
+                                $("#pushbullet_device_list").append('<option value="'+pushbullet.devices[i].iden+'" selected>' + pushbullet.devices[i].nickname + '</option>');
                             } else {
-                                $("#pushbullet_device_list").append('<option value="'+devices[i].iden+'">' + devices[i].nickname + '</option>');
+                                $("#pushbullet_device_list").append('<option value="'+pushbullet.devices[i].iden+'">' + pushbullet.devices[i].nickname + '</option>');
                             }
                         }
                     }
-                    if (current_pushbullet_device === '') {
+                    if (pushbullet.currentDevice === '') {
                         $("#pushbullet_device_list").prepend('<option value="" selected>All devices</option>');
                     } else {
                         $("#pushbullet_device_list").prepend('<option value="">All devices</option>');
                     }
-                    if(msg) $('#testPushbullet-result').html(msg);
+                    if(msg) {
+                        $('#testPushbullet-result').html(msg);
+                    }
                 });
 
                 $("#pushbullet_device_list").change(function(){
@@ -851,12 +887,13 @@ var SICKRAGE = {
             }
 
             $('#getPushbulletDevices').click(function(){
-                get_pushbullet_devices("Device list updated. Please choose a device to push to.");
+                getPushbulletDevices("Device list updated. Please choose a device to push to.");
             });
 
             // we have to call this function on dom ready to create the devices select
-            get_pushbullet_devices();
+            getPushbulletDevices();
 
+            // @TODO Find out what notify_data actually does since it doesn't seem to be a real function
             $('#email_show').change(function() {
                 var key = parseInt($('#email_show').val(), 10);
                 $('#email_show_list').val(key >= 0 ? notify_data[key.toString()].list : '');
@@ -864,15 +901,15 @@ var SICKRAGE = {
 
             // Update the internal data struct anytime settings are saved to the server
             $('#email_show').bind('notify', function() {
-                load_show_notify_lists();
+                loadShowNotifyLists();
             });
 
-            function load_show_notify_lists() {
+            function loadShowNotifyLists() {
                 $.get(srRoot + "/home/loadShowNotifyLists", function(data) {
                     var list, html, s;
                     list = $.parseJSON(data);
-                    notify_data = list;
-                    if (list._size === 0) return;
+                    notify_data = list; // @TODO This is the same as the $('#email_show') function above
+                    if (list._size === 0) { return; }
                     html = '<option value="-1">-- Select --</option>';
                     for (s in list) {
                         if (s.charAt(0) !== '_') {
@@ -884,12 +921,12 @@ var SICKRAGE = {
                 });
             }
             // Load the per show notify lists everytime this page is loaded
-            load_show_notify_lists();
+            loadShowNotifyLists();
 
             $('#email_show_save').click(function() {
                 $.post(srRoot + "/home/saveShowNotifyList", { show: $('#email_show').val(), emails: $('#email_show_list').val()}, function (data) {
                     // Reload the per show notify lists to reflect changes
-                    load_show_notify_lists();
+                    loadShowNotifyLists();
                 });
             });
 
@@ -915,7 +952,7 @@ var SICKRAGE = {
                 };
             })();
 
-            function israr_supported() {
+            function isRarSupported() {
                 var pattern = $('#naming_pattern').val();
                 $.get(srRoot + '/config/postProcessing/isRarSupported', function (data) {
                     if (data !== "supported") {
@@ -929,12 +966,17 @@ var SICKRAGE = {
                 });
             }
 
-            function fill_examples() {
-                var pattern = $('#naming_pattern').val();
-                var multi = $('#naming_multi_ep :selected').val();
-                var anime_type = $('input[name="naming_anime"]:checked').val();
+            function fillExamples() {
+                var example = {};
+
+                example.pattern = $('#naming_pattern').val();
+                example.multi = $('#naming_multi_ep :selected').val();
+                example.animeType = $('input[name="naming_anime"]:checked').val();
 
-                $.get(srRoot + '/config/postProcessing/testNaming', {pattern: pattern, anime_type: 3}, function (data) {
+                $.get(srRoot + '/config/postProcessing/testNaming', {
+                    pattern: example.pattern,
+                    anime_type: 3 // jshint ignore:line
+                }, function (data) {
                     if (data) {
                         $('#naming_example').text(data + '.ext');
                         $('#naming_example_div').show();
@@ -943,7 +985,11 @@ var SICKRAGE = {
                     }
                 });
 
-                $.get(srRoot + '/config/postProcessing/testNaming', {pattern: pattern, multi: multi, anime_type: 3}, function (data) {
+                $.get(srRoot + '/config/postProcessing/testNaming', {
+                    pattern: example.pattern,
+                    multi: example.multi,
+                    anime_type: 3 // jshint ignore:line
+                }, function (data) {
                     if (data) {
                         $('#naming_example_multi').text(data + '.ext');
                         $('#naming_example_multi_div').show();
@@ -952,15 +998,19 @@ var SICKRAGE = {
                     }
                 });
 
-                $.get(srRoot + '/config/postProcessing/isNamingValid', {pattern: pattern, multi: multi, anime_type: anime_type}, function (data) {
-                    if (data == "invalid") {
+                $.get(srRoot + '/config/postProcessing/isNamingValid', {
+                    pattern: example.pattern,
+                    multi: example.multi,
+                    anime_type: example.animeType // jshint ignore:line
+                }, function (data) {
+                    if (data === "invalid") {
                         $('#naming_pattern').qtip('option', {
                             'content.text': 'This pattern is invalid.',
                             'style.classes': 'qtip-rounded qtip-shadow qtip-red'
                         });
                         $('#naming_pattern').qtip('toggle', true);
                         $('#naming_pattern').css('background-color', '#FFDDDD');
-                    } else if (data == "seasonfolders") {
+                    } else if (data === "seasonfolders") {
                         $('#naming_pattern').qtip('option', {
                             'content.text': 'This pattern would be invalid without the folders, using it will force "Flatten" off for all shows.',
                             'style.classes': 'qtip-rounded qtip-shadow qtip-red'
@@ -991,14 +1041,14 @@ var SICKRAGE = {
                 });
 
                 $.get(srRoot + '/config/postProcessing/isNamingValid', {pattern: pattern, abd: 'True'}, function (data) {
-                    if (data == "invalid") {
+                    if (data === "invalid") {
                         $('#naming_abd_pattern').qtip('option', {
                             'content.text': 'This pattern is invalid.',
                             'style.classes': 'qtip-rounded qtip-shadow qtip-red'
                         });
                         $('#naming_abd_pattern').qtip('toggle', true);
                         $('#naming_abd_pattern').css('background-color', '#FFDDDD');
-                    } else if (data == "seasonfolders") {
+                    } else if (data === "seasonfolders") {
                         $('#naming_abd_pattern').qtip('option', {
                             'content.text': 'This pattern would be invalid without the folders, using it will force "Flatten" off for all shows.',
                             'style.classes': 'qtip-rounded qtip-shadow qtip-red'
@@ -1103,20 +1153,20 @@ var SICKRAGE = {
                 });
             }
 
-            function setup_naming() {
+            function setupNaming() {
                 // if it is a custom selection then show the text box
-                if ($('#name_presets :selected').val() == "Custom...") {
+                if ($('#name_presets :selected').val().toLowerCase() === "custom...") {
                     $('#naming_custom').show();
                 } else {
                     $('#naming_custom').hide();
                     $('#naming_pattern').val($('#name_presets :selected').attr('id'));
                 }
-                fill_examples();
+                fillExamples();
             }
 
             function setup_abd_naming() {
                 // if it is a custom selection then show the text box
-                if ($('#name_abd_presets :selected').val() == "Custom...") {
+                if ($('#name_abd_presets :selected').val().toLowerCase() === "custom...") {
                     $('#naming_abd_custom').show();
                 } else {
                     $('#naming_abd_custom').hide();
@@ -1127,7 +1177,7 @@ var SICKRAGE = {
 
             function setup_sports_naming() {
                 // if it is a custom selection then show the text box
-                if ($('#name_sports_presets :selected').val() == "Custom...") {
+                if ($('#name_sports_presets :selected').val().toLowerCase() === "custom...") {
                     $('#naming_sports_custom').show();
                 } else {
                     $('#naming_sports_custom').hide();
@@ -1149,14 +1199,14 @@ var SICKRAGE = {
 
             $('#unpack').on('change', function(){
                 if(this.checked) {
-                    israr_supported();
+                    isRarSupported();
                 } else {
                     $('#unpack').qtip('toggle', false);
                 }
             });
 
             $('#name_presets').on('change', function(){
-                setup_naming();
+                setupNaming();
             });
 
             $('#name_abd_presets').on('change', function(){
@@ -1187,11 +1237,11 @@ var SICKRAGE = {
                 setup_anime_naming();
             });
 
-            $('#naming_multi_ep').change(fill_examples);
-            $('#naming_pattern').focusout(fill_examples);
+            $('#naming_multi_ep').change(fillExamples);
+            $('#naming_pattern').focusout(fillExamples);
             $('#naming_pattern').keyup(function () {
                 typewatch(function () {
-                    fill_examples();
+                    fillExamples();
                 }, 500);
             });
 
@@ -1203,21 +1253,21 @@ var SICKRAGE = {
                 }, 500);
             });
 
-            $('#naming_abd_pattern').focusout(fill_examples);
+            $('#naming_abd_pattern').focusout(fillExamples);
             $('#naming_abd_pattern').keyup(function () {
                 typewatch(function () {
                     fill_abd_examples();
                 }, 500);
             });
 
-            $('#naming_sports_pattern').focusout(fill_examples);
+            $('#naming_sports_pattern').focusout(fillExamples);
             $('#naming_sports_pattern').keyup(function () {
                 typewatch(function () {
                     fill_sports_examples();
                 }, 500);
             });
 
-            $('#naming_anime_pattern').focusout(fill_examples);
+            $('#naming_anime_pattern').focusout(fillExamples);
             $('#naming_anime_pattern').keyup(function () {
                 typewatch(function () {
                     fill_anime_examples();
@@ -1241,7 +1291,7 @@ var SICKRAGE = {
                 $('#naming_custom').show();
                 $('#naming_pattern').focus();
             });
-            setup_naming();
+            setupNaming();
             setup_abd_naming();
             setup_sports_naming();
             setup_anime_naming();
@@ -1670,10 +1720,189 @@ var SICKRAGE = {
     },
     manage: {
         init: function() {
-            // controller-wide code
+            $.makeRow = function(indexerId, season, episode, name, checked) {
+                var row = '';
+                row += ' <tr class="' + $('#row_class').val() + ' show-' + indexerId + '">';
+                row += '  <td class="tableleft" align="center"><input type="checkbox" class="' + indexerId + '-epcheck" name="' + indexerId + '-' + season + 'x' + episode + '"' + (checked ? ' checked' : '') + '></td>';
+                row += '  <td>' + season + 'x' + episode + '</td>';
+                row += '  <td class="tableright" style="width: 100%">' + name + '</td>';
+                row += ' </tr>';
+
+                return row;
+            }
+        },
+        index: function() {
+            $("#massUpdateTable:has(tbody tr)").tablesorter({
+                sortList: [[1,0]],
+                textExtraction: {
+                    2: function(node) { return $(node).find("span").text().toLowerCase(); },
+                    3: function(node) { return $(node).find("img").attr("alt"); },
+                    4: function(node) { return $(node).find("img").attr("alt"); },
+                    5: function(node) { return $(node).find("img").attr("alt"); },
+                    6: function(node) { return $(node).find("img").attr("alt"); },
+                    7: function(node) { return $(node).find("img").attr("alt"); },
+                    8: function(node) { return $(node).find("img").attr("alt"); },
+                    9: function(node) { return $(node).find("img").attr("alt"); },
+                },
+                widgets: ['zebra'],
+                headers: {
+                    0: { sorter: false},
+                    1: { sorter: 'showNames'},
+                    2: { sorter: 'quality'},
+                    3: { sorter: 'sports'},
+                    4: { sorter: 'scene'},
+                    5: { sorter: 'anime'},
+                    6: { sorter: 'flatfold'},
+                    7: { sorter: 'archive_firstmatch'},
+                    8: { sorter: 'paused'},
+                    9: { sorter: 'subtitle'},
+                   10: { sorter: 'default_ep_status'},
+                   11: { sorter: 'status'},
+                   12: { sorter: false},
+                   13: { sorter: false},
+                   14: { sorter: false},
+                   15: { sorter: false},
+                   16: { sorter: false},
+                   17: { sorter: false}
+                }
+            });
         },
-        show: function() {
-            // action-specific code
+        backlogOverview: function() {
+            $('#pickShow').change(function(){
+                var id = $(this).val();
+                if (id) {
+                    $('html,body').animate({scrollTop: $('#show-' + id).offset().top -25},'slow');
+                }
+            });
+        },
+        failedDownloads: function() {
+            $("#failedTable:has(tbody tr)").tablesorter({
+                widgets: ['zebra'],
+                sortList: [[0,0]],
+                headers: { 3: { sorter: false } }
+            });
+            $('#limit').change(function(){
+                window.location.href = srRoot + '/manage/failedDownloads/?limit=' + $(this).val();;
+            });
+        },
+        massEdit: function() {
+            $('#location').fileBrowser({ title: 'Select Show Location' });
+        },
+        episodeStatuses: function() {
+            $('.allCheck').click(function(){
+                var indexerId = $(this).attr('id').split('-')[1];
+                $('.' + indexerId + '-epcheck').prop('checked', $(this).prop('checked'));
+            });
+
+            $('.get_more_eps').click(function(){
+                var curIndexerId = $(this).attr('id');
+                var checked = $('#allCheck-' + curIndexerId).prop('checked');
+                var lastRow = $('tr#' + curIndexerId);
+                var clicked = $(this).attr('data-clicked');
+                var action = $(this).attr('value');
+
+                if(!clicked) {
+                    $.getJSON(srRoot+'/manage/showEpisodeStatuses',{
+                        indexer_id: curIndexerId, // jshint ignore:line
+                        whichStatus: $('#oldStatus').val()
+                    }, function (data) {
+                        $.each(data, function(season,eps){
+                            $.each(eps, function(episode, name) {
+                                //alert(season+'x'+episode+': '+name);
+                                lastRow.after($.makeRow(curIndexerId, season, episode, name, checked));
+                            });
+                        });
+                    });
+                    $(this).attr('data-clicked',1);
+                    $(this).prop('value', 'Collapse');
+                } else {
+                    if (action.toLowerCase() === 'collapse') {
+                        $('table tr').filter('.show-' + curIndexerId).hide();
+                        $(this).prop('value', 'Expand');
+                    } else if (action.toLowerCase() === 'expand') {
+                        $('table tr').filter('.show-' + curIndexerId).show();
+                        $(this).prop('value', 'Collapse');
+                    }
+                }
+            });
+
+            // selects all visible episode checkboxes.
+            $('.selectAllShows').click(function(){
+                $('.allCheck').each(function(){
+                        this.checked = true;
+                });
+                $('input[class*="-epcheck"]').each(function(){
+                        this.checked = true;
+                });
+            });
+
+            // clears all visible episode checkboxes and the season selectors
+            $('.unselectAllShows').click(function(){
+                $('.allCheck').each(function(){
+                        this.checked = false;
+                });
+                $('input[class*="-epcheck"]').each(function(){
+                        this.checked = false;
+                });
+            });
+        },
+        subtitleMissed: function() {
+            $('.allCheck').click(function(){
+                var indexerId = $(this).attr('id').split('-')[1];
+                $('.'+indexerId+'-epcheck').prop('checked', $(this).prop('checked'));
+            });
+
+            $('.get_more_eps').click(function(){
+                var indexerId = $(this).attr('id');
+                var checked = $('#allCheck-'+indexerId).prop('checked');
+                var lastRow = $('tr#'+indexerId);
+                var clicked = $(this).attr('data-clicked');
+                var action = $(this).attr('value');
+
+                if (!clicked) {
+                    $.getJSON(srRoot + '/manage/showSubtitleMissed', {
+                        indexer_id: indexerId, // jshint ignore:line
+                        whichSubs: $('#selectSubLang').val()
+                    }, function(data) {
+                        $.each(data, function(season, eps) {
+                            $.each(eps, function(episode, data) {
+                                //alert(season+'x'+episode+': '+name);
+                                lastRow.after($.makeRow(indexerId, season, episode, data.name, data.subtitles, checked));
+                            });
+                        });
+                    });
+                    $(this).attr('data-clicked', 1);
+                    $(this).prop('value', 'Collapse');
+                } else {
+                    if (action === 'Collapse') {
+                        $('table tr').filter('.show-' + indexerId).hide();
+                        $(this).prop('value', 'Expand');
+                    } else if (action === 'Expand') {
+                        $('table tr').filter('.show-' + indexerId).show();
+                        $(this).prop('value', 'Collapse');
+                    }
+                }
+            });
+
+            // selects all visible episode checkboxes.
+            $('.selectAllShows').click(function(){
+                $('.allCheck').each(function(){
+                        this.checked = true;
+                });
+                $('input[class*="-epcheck"]').each(function(){
+                        this.checked = true;
+                });
+            });
+
+            // clears all visible episode checkboxes and the season selectors
+            $('.unselectAllShows').click(function(){
+                $('.allCheck').each(function(){
+                        this.checked = false;
+                });
+                $('input[class*="-epcheck"]').each(function(){
+                        this.checked = false;
+                });
+            });
         }
     }
 };
diff --git a/gui/slick/js/manageEpisodeStatuses.js b/gui/slick/js/manageEpisodeStatuses.js
index 8118aa478..74b148338 100644
--- a/gui/slick/js/manageEpisodeStatuses.js
+++ b/gui/slick/js/manageEpisodeStatuses.js
@@ -1,71 +1,4 @@
 $(document).ready(function() {
 
-    function makeRow(indexerId, season, episode, name, checked) {
-        var row = '';
-        row += ' <tr class="' + $('#row_class').val() + ' show-' + indexerId + '">';
-        row += '  <td class="tableleft" align="center"><input type="checkbox" class="' + indexerId + '-epcheck" name="' + indexerId + '-' + season + 'x' + episode + '"' + (checked ? ' checked' : '') + '></td>';
-        row += '  <td>' + season + 'x' + episode + '</td>';
-        row += '  <td class="tableright" style="width: 100%">' + name + '</td>';
-        row += ' </tr>';
-
-        return row;
-    }
-
-    $('.allCheck').click(function(){
-        var indexerId = $(this).attr('id').split('-')[1];
-        $('.' + indexerId + '-epcheck').prop('checked', $(this).prop('checked'));
-    });
-
-    $('.get_more_eps').click(function(){
-        var curIndexerId = $(this).attr('id');
-        var checked = $('#allCheck-' + curIndexerId).prop('checked');
-        var lastRow = $('tr#' + curIndexerId);
-        var clicked = $(this).attr('data-clicked');
-        var action = $(this).attr('value');
-
-        if(!clicked) {
-            $.getJSON(srRoot+'/manage/showEpisodeStatuses',{
-                indexer_id: curIndexerId, // jshint ignore:line
-                whichStatus: $('#oldStatus').val()
-            }, function (data) {
-                $.each(data, function(season,eps){
-                    $.each(eps, function(episode, name) {
-                        //alert(season+'x'+episode+': '+name);
-                        lastRow.after(makeRow(curIndexerId, season, episode, name, checked));
-                    });
-                });
-            });
-            $(this).attr('data-clicked',1);
-            $(this).prop('value', 'Collapse');
-        } else {
-            if (action.toLowerCase() === 'collapse') {
-                $('table tr').filter('.show-' + curIndexerId).hide();
-                $(this).prop('value', 'Expand');
-            } else if (action.toLowerCase() === 'expand') {
-                $('table tr').filter('.show-' + curIndexerId).show();
-                $(this).prop('value', 'Collapse');
-            }
-        }
-    });
-
-    // selects all visible episode checkboxes.
-    $('.selectAllShows').click(function(){
-        $('.allCheck').each(function(){
-                this.checked = true;
-        });
-        $('input[class*="-epcheck"]').each(function(){
-                this.checked = true;
-        });
-    });
-
-    // clears all visible episode checkboxes and the season selectors
-    $('.unselectAllShows').click(function(){
-        $('.allCheck').each(function(){
-                this.checked = false;
-        });
-        $('input[class*="-epcheck"]').each(function(){
-                this.checked = false;
-        });
-    });
 
 });
diff --git a/gui/slick/js/new/manage.js b/gui/slick/js/new/manage.js
index a601c7b5e..b8ac98a50 100644
--- a/gui/slick/js/new/manage.js
+++ b/gui/slick/js/new/manage.js
@@ -1,36 +1,2 @@
 $(document).ready(function(){
-    $("#massUpdateTable:has(tbody tr)").tablesorter({
-        sortList: [[1,0]],
-        textExtraction: {
-            2: function(node) { return $(node).find("span").text().toLowerCase(); },
-            3: function(node) { return $(node).find("img").attr("alt"); },
-            4: function(node) { return $(node).find("img").attr("alt"); },
-            5: function(node) { return $(node).find("img").attr("alt"); },
-            6: function(node) { return $(node).find("img").attr("alt"); },
-            7: function(node) { return $(node).find("img").attr("alt"); },
-            8: function(node) { return $(node).find("img").attr("alt"); },
-            9: function(node) { return $(node).find("img").attr("alt"); },
-        },
-        widgets: ['zebra'],
-        headers: {
-            0: { sorter: false},
-            1: { sorter: 'showNames'},
-            2: { sorter: 'quality'},
-            3: { sorter: 'sports'},
-            4: { sorter: 'scene'},
-            5: { sorter: 'anime'},
-            6: { sorter: 'flatfold'},
-            7: { sorter: 'archive_firstmatch'},
-            8: { sorter: 'paused'},
-            9: { sorter: 'subtitle'},
-           10: { sorter: 'default_ep_status'},
-           11: { sorter: 'status'},
-           12: { sorter: false},
-           13: { sorter: false},
-           14: { sorter: false},
-           15: { sorter: false},
-           16: { sorter: false},
-           17: { sorter: false}
-        }
     });
-});
diff --git a/gui/slick/js/new/manage_backlogOverview.js b/gui/slick/js/new/manage_backlogOverview.js
index d61b28a48..38637c688 100644
--- a/gui/slick/js/new/manage_backlogOverview.js
+++ b/gui/slick/js/new/manage_backlogOverview.js
@@ -1,8 +1,3 @@
 $(document).ready(function(){
-    $('#pickShow').change(function(){
-        var id = $(this).val();
-        if (id) {
-            $('html,body').animate({scrollTop: $('#show-' + id).offset().top -25},'slow');
-        }
-    });
+    
 });
diff --git a/gui/slick/js/new/manage_failedDownloads.js b/gui/slick/js/new/manage_failedDownloads.js
index 9184a54f8..38637c688 100644
--- a/gui/slick/js/new/manage_failedDownloads.js
+++ b/gui/slick/js/new/manage_failedDownloads.js
@@ -1,10 +1,3 @@
 $(document).ready(function(){
-    $("#failedTable:has(tbody tr)").tablesorter({
-        widgets: ['zebra'],
-        sortList: [[0,0]],
-        headers: { 3: { sorter: false } }
-    });
-    $('#limit').change(function(){
-        window.location.href = srRoot + '/manage/failedDownloads/?limit='+$(this).val();;
-    });
+    
 });
diff --git a/gui/slick/js/new/manage_massEdit.js b/gui/slick/js/new/manage_massEdit.js
index c5406abaf..e69de29bb 100644
--- a/gui/slick/js/new/manage_massEdit.js
+++ b/gui/slick/js/new/manage_massEdit.js
@@ -1 +0,0 @@
-$('#location').fileBrowser({ title: 'Select Show Location' });
-- 
GitLab


From ed0328fdf5f13fc8faf4e4e104236a918de3a639 Mon Sep 17 00:00:00 2001
From: Alexis Tyler <xo@wvvw.me>
Date: Sun, 15 Nov 2015 16:27:29 +1030
Subject: [PATCH 201/215] move global vars to top of file

---
 gui/slick/js/core.js     |  14 ++++++++------
 gui/slick/js/core.min.js | Bin 40257 -> 45036 bytes
 2 files changed, 8 insertions(+), 6 deletions(-)

diff --git a/gui/slick/js/core.js b/gui/slick/js/core.js
index a3c13c819..7438b426e 100644
--- a/gui/slick/js/core.js
+++ b/gui/slick/js/core.js
@@ -1,12 +1,14 @@
+// @TODO Move these into common.ini when possible,
+//       currently we can't do that as browser.js and a few others need it before this is loaded
+var srRoot = getMeta('srRoot'),
+    themeSpinner = getMeta('themeSpinner'),
+    anonURL = getMeta('anonURL'),
+    topImageHtml = '<img src="' + srRoot + '/images/top.gif" width="31" height="11" alt="Jump to top" />',
+    loading = '<img src="' + srRoot + '/images/loading16' + themeSpinner + '.gif" height="16" width="16" />';
+
 var SICKRAGE = {
     common: {
         init: function() {
-            var srRoot = getMeta('srRoot'),
-                themeSpinner = getMeta('themeSpinner'),
-                anonURL = getMeta('anonURL'),
-                topImageHtml = '<img src="' + srRoot + '/images/top.gif" width="31" height="11" alt="Jump to top" />',
-                loading = '<img src="' + srRoot + '/images/loading16' + themeSpinner + '.gif" height="16" width="16" />';
-
             function configSuccess(){
                 $('.config_submitter').each(function(){
                     $(this).removeAttr("disabled");
diff --git a/gui/slick/js/core.min.js b/gui/slick/js/core.min.js
index 332e5cef3bd42e8931b41239fcb9f7991756bd05..f714597a88296a8416cce2896afdf0c6e4b3ded0 100644
GIT binary patch
delta 6713
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

delta 2057
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
W<%DW=K-HubyoS@P-n?&}9wPvFKEEme

-- 
GitLab


From 03ec42ee7c81f7caa68e1f055ca1eed113fee1be Mon Sep 17 00:00:00 2001
From: Alexis Tyler <xo@wvvw.me>
Date: Sun, 15 Nov 2015 17:13:18 +1030
Subject: [PATCH 202/215] fix lint errors with camelCase

---
 gui/slick/js/core.js | 153 +++++++++++++++++++++++++------------------
 1 file changed, 88 insertions(+), 65 deletions(-)

diff --git a/gui/slick/js/core.js b/gui/slick/js/core.js
index 7438b426e..13d8f63d1 100644
--- a/gui/slick/js/core.js
+++ b/gui/slick/js/core.js
@@ -1030,10 +1030,13 @@ var SICKRAGE = {
                 });
             }
 
-            function fill_abd_examples() {
+            function fillAbdExamples() {
                 var pattern = $('#naming_abd_pattern').val();
 
-                $.get(srRoot + '/config/postProcessing/testNaming', {pattern: pattern, abd: 'True'}, function (data) {
+                $.get(srRoot + '/config/postProcessing/testNaming', {
+                    pattern: pattern,
+                    abd: 'True'
+                }, function (data) {
                     if (data) {
                         $('#naming_abd_example').text(data + '.ext');
                         $('#naming_abd_example_div').show();
@@ -1042,7 +1045,10 @@ var SICKRAGE = {
                     }
                 });
 
-                $.get(srRoot + '/config/postProcessing/isNamingValid', {pattern: pattern, abd: 'True'}, function (data) {
+                $.get(srRoot + '/config/postProcessing/isNamingValid', {
+                    pattern: pattern,
+                    abd: 'True'
+                }, function (data) {
                     if (data === "invalid") {
                         $('#naming_abd_pattern').qtip('option', {
                             'content.text': 'This pattern is invalid.',
@@ -1068,10 +1074,13 @@ var SICKRAGE = {
                 });
             }
 
-            function fill_sports_examples() {
+            function fillSportsExamples() {
                 var pattern = $('#naming_sports_pattern').val();
 
-                $.get(srRoot + '/config/postProcessing/testNaming', {pattern: pattern, sports: 'True'}, function (data) {
+                $.get(srRoot + '/config/postProcessing/testNaming', {
+                    pattern: pattern,
+                    sports: 'True'
+                }, function (data) {
                     if (data) {
                         $('#naming_sports_example').text(data + '.ext');
                         $('#naming_sports_example_div').show();
@@ -1080,15 +1089,18 @@ var SICKRAGE = {
                     }
                 });
 
-                $.get(srRoot + '/config/postProcessing/isNamingValid', {pattern: pattern, sports: 'True'}, function (data) {
-                    if (data == "invalid") {
+                $.get(srRoot + '/config/postProcessing/isNamingValid', {
+                    pattern: pattern,
+                    sports: 'True'
+                }, function (data) {
+                    if (data === "invalid") {
                         $('#naming_sports_pattern').qtip('option', {
                             'content.text': 'This pattern is invalid.',
                             'style.classes': 'qtip-rounded qtip-shadow qtip-red'
                         });
                         $('#naming_sports_pattern').qtip('toggle', true);
                         $('#naming_sports_pattern').css('background-color', '#FFDDDD');
-                    } else if (data == "seasonfolders") {
+                    } else if (data === "seasonfolders") {
                         $('#naming_sports_pattern').qtip('option', {
                             'content.text': 'This pattern would be invalid without the folders, using it will force "Flatten" off for all shows.',
                             'style.classes': 'qtip-rounded qtip-shadow qtip-red'
@@ -1106,12 +1118,16 @@ var SICKRAGE = {
                 });
             }
 
-            function fill_anime_examples() {
-                var pattern = $('#naming_anime_pattern').val();
-                var multi = $('#naming_anime_multi_ep :selected').val();
-                var anime_type = $('input[name="naming_anime"]:checked').val();
+            function fillAnimeExamples() {
+                var example = {};
+                example.pattern = $('#naming_anime_pattern').val();
+                example.multi = $('#naming_anime_multi_ep :selected').val();
+                example.animeType = $('input[name="naming_anime"]:checked').val();
 
-                $.get(srRoot + '/config/postProcessing/testNaming', {pattern: pattern, anime_type: anime_type}, function (data) {
+                $.get(srRoot + '/config/postProcessing/testNaming', {
+                    pattern: example.pattern,
+                    anime_type: example.animeType // jshint ignore:line
+                }, function (data) {
                     if (data) {
                         $('#naming_example_anime').text(data + '.ext');
                         $('#naming_example_anime_div').show();
@@ -1120,7 +1136,11 @@ var SICKRAGE = {
                     }
                 });
 
-                $.get(srRoot + '/config/postProcessing/testNaming', {pattern: pattern, multi: multi, anime_type: anime_type}, function (data) {
+                $.get(srRoot + '/config/postProcessing/testNaming', {
+                    pattern: example.pattern,
+                    multi: example.multi,
+                    anime_type: example.animeType // jshint ignore:line
+                }, function (data) {
                     if (data) {
                         $('#naming_example_multi_anime').text(data + '.ext');
                         $('#naming_example_multi_anime_div').show();
@@ -1129,15 +1149,19 @@ var SICKRAGE = {
                     }
                 });
 
-                $.get(srRoot + '/config/postProcessing/isNamingValid', {pattern: pattern, multi: multi, anime_type: anime_type}, function (data) {
-                    if (data == "invalid") {
+                $.get(srRoot + '/config/postProcessing/isNamingValid', {
+                    pattern: example.pattern,
+                    multi: example.multi,
+                    anime_type: example.animeType // jshint ignore:line
+                }, function (data) {
+                    if (data === "invalid") {
                         $('#naming_pattern').qtip('option', {
                             'content.text': 'This pattern is invalid.',
                             'style.classes': 'qtip-rounded qtip-shadow qtip-red'
                         });
                         $('#naming_pattern').qtip('toggle', true);
                         $('#naming_pattern').css('background-color', '#FFDDDD');
-                    } else if (data == "seasonfolders") {
+                    } else if (data === "seasonfolders") {
                         $('#naming_pattern').qtip('option', {
                             'content.text': 'This pattern would be invalid without the folders, using it will force "Flatten" off for all shows.',
                             'style.classes': 'qtip-rounded qtip-shadow qtip-red'
@@ -1166,7 +1190,7 @@ var SICKRAGE = {
                 fillExamples();
             }
 
-            function setup_abd_naming() {
+            function setupAbdNaming() {
                 // if it is a custom selection then show the text box
                 if ($('#name_abd_presets :selected').val().toLowerCase() === "custom...") {
                     $('#naming_abd_custom').show();
@@ -1174,10 +1198,10 @@ var SICKRAGE = {
                     $('#naming_abd_custom').hide();
                     $('#naming_abd_pattern').val($('#name_abd_presets :selected').attr('id'));
                 }
-                fill_abd_examples();
+                fillAbdExamples();
             }
 
-            function setup_sports_naming() {
+            function setupSportsNaming() {
                 // if it is a custom selection then show the text box
                 if ($('#name_sports_presets :selected').val().toLowerCase() === "custom...") {
                     $('#naming_sports_custom').show();
@@ -1185,18 +1209,18 @@ var SICKRAGE = {
                     $('#naming_sports_custom').hide();
                     $('#naming_sports_pattern').val($('#name_sports_presets :selected').attr('id'));
                 }
-                fill_sports_examples();
+                fillSportsExamples();
             }
 
-            function setup_anime_naming() {
+            function setupAnimeNaming() {
                 // if it is a custom selection then show the text box
-                if ($('#name_anime_presets :selected').val() == "Custom...") {
+                if ($('#name_anime_presets :selected').val().toLowerCase() === "custom...") {
                     $('#naming_anime_custom').show();
                 } else {
                     $('#naming_anime_custom').hide();
                     $('#naming_anime_pattern').val($('#name_anime_presets :selected').attr('id'));
                 }
-                fill_anime_examples();
+                fillAnimeExamples();
             }
 
             $('#unpack').on('change', function(){
@@ -1212,31 +1236,31 @@ var SICKRAGE = {
             });
 
             $('#name_abd_presets').on('change', function(){
-                setup_abd_naming();
+                setupAbdNaming();
             });
 
             $('#naming_custom_abd').on('change', function(){
-                setup_abd_naming();
+                setupAbdNaming();
             });
 
             $('#name_sports_presets').on('change', function(){
-                setup_sports_naming();
+                setupSportsNaming();
             });
 
             $('#naming_custom_sports').on('change', function(){
-                setup_sports_naming();
+                setupSportsNaming();
             });
 
             $('#name_anime_presets').on('change', function(){
-                setup_anime_naming();
+                setupAnimeNaming();
             });
 
             $('#naming_custom_anime').on('change', function(){
-                setup_anime_naming();
+                setupAnimeNaming();
             });
 
             $('input[name="naming_anime"]').on('click', function(){
-                setup_anime_naming();
+                setupAnimeNaming();
             });
 
             $('#naming_multi_ep').change(fillExamples);
@@ -1247,32 +1271,32 @@ var SICKRAGE = {
                 }, 500);
             });
 
-            $('#naming_anime_multi_ep').change(fill_anime_examples);
-            $('#naming_anime_pattern').focusout(fill_anime_examples);
+            $('#naming_anime_multi_ep').change(fillAnimeExamples);
+            $('#naming_anime_pattern').focusout(fillAnimeExamples);
             $('#naming_anime_pattern').keyup(function () {
                 typewatch(function () {
-                    fill_anime_examples();
+                    fillAnimeExamples();
                 }, 500);
             });
 
             $('#naming_abd_pattern').focusout(fillExamples);
             $('#naming_abd_pattern').keyup(function () {
                 typewatch(function () {
-                    fill_abd_examples();
+                    fillAbdExamples();
                 }, 500);
             });
 
             $('#naming_sports_pattern').focusout(fillExamples);
             $('#naming_sports_pattern').keyup(function () {
                 typewatch(function () {
-                    fill_sports_examples();
+                    fillSportsExamples();
                 }, 500);
             });
 
             $('#naming_anime_pattern').focusout(fillExamples);
             $('#naming_anime_pattern').keyup(function () {
                 typewatch(function () {
-                    fill_anime_examples();
+                    fillAnimeExamples();
                 }, 500);
             });
 
@@ -1294,9 +1318,9 @@ var SICKRAGE = {
                 $('#naming_pattern').focus();
             });
             setupNaming();
-            setup_abd_naming();
-            setup_sports_naming();
-            setup_anime_naming();
+            setupAbdNaming();
+            setupSportsNaming();
+            setupAnimeNaming();
 
             // -- start of metadata options div toggle code --
             $('#metadataType').on('change keyup', function () {
@@ -1308,7 +1332,7 @@ var SICKRAGE = {
                     var targetName = $(this).attr('id');
                     var selectedTarget = $('#metadataType :selected').val();
 
-                    if (selectedTarget == targetName) {
+                    if (selectedTarget === targetName) {
                         $(this).show();
                     } else {
                         $(this).hide();
@@ -1328,19 +1352,19 @@ var SICKRAGE = {
                 var cur_most_provider = '';
 
                 $('.metadataDiv').each(function () {
-                    var generator_name = $(this).attr('id');
+                    var generatorName = $(this).attr('id');
 
                     var config_arr = [];
-                    var show_metadata = $("#" + generator_name + "_show_metadata").prop('checked');
-                    var episode_metadata = $("#" + generator_name + "_episode_metadata").prop('checked');
-                    var fanart = $("#" + generator_name + "_fanart").prop('checked');
-                    var poster = $("#" + generator_name + "_poster").prop('checked');
-                    var banner = $("#" + generator_name + "_banner").prop('checked');
-                    var episode_thumbnails = $("#" + generator_name + "_episode_thumbnails").prop('checked');
-                    var season_posters = $("#" + generator_name + "_season_posters").prop('checked');
-                    var season_banners = $("#" + generator_name + "_season_banners").prop('checked');
-                    var season_all_poster = $("#" + generator_name + "_season_all_poster").prop('checked');
-                    var season_all_banner = $("#" + generator_name + "_season_all_banner").prop('checked');
+                    var show_metadata = $("#" + generatorName + "_show_metadata").prop('checked');
+                    var episode_metadata = $("#" + generatorName + "_episode_metadata").prop('checked');
+                    var fanart = $("#" + generatorName + "_fanart").prop('checked');
+                    var poster = $("#" + generatorName + "_poster").prop('checked');
+                    var banner = $("#" + generatorName + "_banner").prop('checked');
+                    var episode_thumbnails = $("#" + generatorName + "_episode_thumbnails").prop('checked');
+                    var season_posters = $("#" + generatorName + "_season_posters").prop('checked');
+                    var season_banners = $("#" + generatorName + "_season_banners").prop('checked');
+                    var season_all_poster = $("#" + generatorName + "_season_all_poster").prop('checked');
+                    var season_all_banner = $("#" + generatorName + "_season_all_banner").prop('checked');
 
                     config_arr.push(show_metadata ? '1' : '0');
                     config_arr.push(episode_metadata ? '1' : '0');
@@ -1359,20 +1383,20 @@ var SICKRAGE = {
                     }
                     if (cur_num > cur_most) {
                         cur_most = cur_num;
-                        cur_most_provider = generator_name;
+                        cur_most_provider = generatorName;
                     }
 
-                    $("#" + generator_name + "_eg_show_metadata").attr('class', show_metadata ? 'enabled' : 'disabled');
-                    $("#" + generator_name + "_eg_episode_metadata").attr('class', episode_metadata ? 'enabled' : 'disabled');
-                    $("#" + generator_name + "_eg_fanart").attr('class', fanart ? 'enabled' : 'disabled');
-                    $("#" + generator_name + "_eg_poster").attr('class', poster ? 'enabled' : 'disabled');
-                    $("#" + generator_name + "_eg_banner").attr('class', banner ? 'enabled' : 'disabled');
-                    $("#" + generator_name + "_eg_episode_thumbnails").attr('class', episode_thumbnails ? 'enabled' : 'disabled');
-                    $("#" + generator_name + "_eg_season_posters").attr('class', season_posters ? 'enabled' : 'disabled');
-                    $("#" + generator_name + "_eg_season_banners").attr('class', season_banners ? 'enabled' : 'disabled');
-                    $("#" + generator_name + "_eg_season_all_poster").attr('class', season_all_poster ? 'enabled' : 'disabled');
-                    $("#" + generator_name + "_eg_season_all_banner").attr('class', season_all_banner ? 'enabled' : 'disabled');
-                    $("#" + generator_name + "_data").val(config_arr.join('|'));
+                    $("#" + generatorName + "_eg_show_metadata").attr('class', show_metadata ? 'enabled' : 'disabled');
+                    $("#" + generatorName + "_eg_episode_metadata").attr('class', episode_metadata ? 'enabled' : 'disabled');
+                    $("#" + generatorName + "_eg_fanart").attr('class', fanart ? 'enabled' : 'disabled');
+                    $("#" + generatorName + "_eg_poster").attr('class', poster ? 'enabled' : 'disabled');
+                    $("#" + generatorName + "_eg_banner").attr('class', banner ? 'enabled' : 'disabled');
+                    $("#" + generatorName + "_eg_episode_thumbnails").attr('class', episode_thumbnails ? 'enabled' : 'disabled');
+                    $("#" + generatorName + "_eg_season_posters").attr('class', season_posters ? 'enabled' : 'disabled');
+                    $("#" + generatorName + "_eg_season_banners").attr('class', season_banners ? 'enabled' : 'disabled');
+                    $("#" + generatorName + "_eg_season_all_poster").attr('class', season_all_poster ? 'enabled' : 'disabled');
+                    $("#" + generatorName + "_eg_season_all_banner").attr('class', season_all_banner ? 'enabled' : 'disabled');
+                    $("#" + generatorName + "_data").val(config_arr.join('|'));
 
                 });
 
@@ -1868,7 +1892,6 @@ var SICKRAGE = {
                     }, function(data) {
                         $.each(data, function(season, eps) {
                             $.each(eps, function(episode, data) {
-                                //alert(season+'x'+episode+': '+name);
                                 lastRow.after($.makeRow(indexerId, season, episode, data.name, data.subtitles, checked));
                             });
                         });
-- 
GitLab


From e1d5fe885342b3577ce305d4c4e5730d1db4da35 Mon Sep 17 00:00:00 2001
From: Alexis Tyler <xo@wvvw.me>
Date: Sun, 15 Nov 2015 17:13:47 +1030
Subject: [PATCH 203/215] update core.min to match core

---
 gui/slick/js/core.min.js | Bin 45036 -> 45151 bytes
 1 file changed, 0 insertions(+), 0 deletions(-)

diff --git a/gui/slick/js/core.min.js b/gui/slick/js/core.min.js
index f714597a88296a8416cce2896afdf0c6e4b3ded0..8e83fff11b4a896a20357ec15dc2c18cb6d3a13d 100644
GIT binary patch
delta 150
zcmaEJpXvSsrVTRbleyyfC-Y>APYy`XoSc*EJ-Mz(aI$Qs=Vbm2$;mazFgc0ImhsC$
za+_r{;~6KrMN3SMEEbuZ6D>M<RhHu9InkYypT$Z}*3J=|oSwaK^350}DE|zIz4=+J
qE%RoZf>}(H9Sg)Jzb=xWTu>l2*`k<#vS*R-W{YAsj?J~z`6d8*hCAl~

delta 207
zcmccrfa%SBrVTRbOo{fB3o?BspUd^0%$FH8Ss+6aB4j<;GJg4HzRUu~$p?z%nKgBi
zCU4HtWlWy@I!kYI`AmVyA5wLB67w>1Q{zi23sS9;C;y32nLHzVp{P!7X--L|Rgw;x
ztmfqYoQ*hSKgLQ<W{x+Tyf^pYX6ASWrp@yUW-;+Nmll`g=j!R{DcRaizF(}&R+gBf
ap=m#PezDZ#6NMt1R~Nf-Z2nlCX957-zEau%

-- 
GitLab


From 3f2c3dc1c798532027187e8daedd901e54b8e39c Mon Sep 17 00:00:00 2001
From: Alexis Tyler <xo@wvvw.me>
Date: Sun, 15 Nov 2015 20:36:30 +1030
Subject: [PATCH 204/215] remove unneeded vars & fix camelCase

---
 gui/slick/js/core.js | 106 +++++++++++++++++++++++--------------------
 1 file changed, 56 insertions(+), 50 deletions(-)

diff --git a/gui/slick/js/core.js b/gui/slick/js/core.js
index 13d8f63d1..ac72d876e 100644
--- a/gui/slick/js/core.js
+++ b/gui/slick/js/core.js
@@ -863,8 +863,8 @@ var SICKRAGE = {
                     pushbullet.devices = jQuery.parseJSON(data).devices;
                     pushbullet.currentDevice = $("#pushbullet_device").val();
                     $("#pushbullet_device_list").html('');
-                    for (var i = 0, len = devices.length; i < len; i++) {
-                        if(devices[i].active === true) {
+                    for (var i = 0, len = pushbullet.devices.length; i < len; i++) {
+                        if(pushbullet.devices[i].active === true) {
                             if(pushbullet.currentDevice === pushbullet.devices[i].iden) {
                                 $("#pushbullet_device_list").append('<option value="'+pushbullet.devices[i].iden+'" selected>' + pushbullet.devices[i].nickname + '</option>');
                             } else {
@@ -898,7 +898,7 @@ var SICKRAGE = {
             // @TODO Find out what notify_data actually does since it doesn't seem to be a real function
             $('#email_show').change(function() {
                 var key = parseInt($('#email_show').val(), 10);
-                $('#email_show_list').val(key >= 0 ? notify_data[key.toString()].list : '');
+                $('#email_show_list').val(key >= 0 ? notify_data[key.toString()].list : ''); // jshint ignore:line
             });
 
             // Update the internal data struct anytime settings are saved to the server
@@ -909,8 +909,8 @@ var SICKRAGE = {
             function loadShowNotifyLists() {
                 $.get(srRoot + "/home/loadShowNotifyLists", function(data) {
                     var list, html, s;
-                    list = $.parseJSON(data);
-                    notify_data = list; // @TODO This is the same as the $('#email_show') function above
+                    list = $.parseJSON(data); // @TODO The line below this is the same as the $('#email_show') function above
+                    notify_data = list; // jshint ignore:line
                     if (list._size === 0) { return; }
                     html = '<option value="-1">-- Select --</option>';
                     for (s in list) {
@@ -1348,60 +1348,60 @@ var SICKRAGE = {
             });
 
             $.fn.refreshMetadataConfig = function (first) {
-                var cur_most = 0;
-                var cur_most_provider = '';
+                var curMost = 0;
+                var curMostProvider = '';
 
                 $('.metadataDiv').each(function () {
                     var generatorName = $(this).attr('id');
 
-                    var config_arr = [];
-                    var show_metadata = $("#" + generatorName + "_show_metadata").prop('checked');
-                    var episode_metadata = $("#" + generatorName + "_episode_metadata").prop('checked');
+                    var configArray = [];
+                    var showMetadata = $("#" + generatorName + "_show_metadata").prop('checked');
+                    var episodeMetadata = $("#" + generatorName + "_episode_metadata").prop('checked');
                     var fanart = $("#" + generatorName + "_fanart").prop('checked');
                     var poster = $("#" + generatorName + "_poster").prop('checked');
                     var banner = $("#" + generatorName + "_banner").prop('checked');
-                    var episode_thumbnails = $("#" + generatorName + "_episode_thumbnails").prop('checked');
-                    var season_posters = $("#" + generatorName + "_season_posters").prop('checked');
-                    var season_banners = $("#" + generatorName + "_season_banners").prop('checked');
-                    var season_all_poster = $("#" + generatorName + "_season_all_poster").prop('checked');
-                    var season_all_banner = $("#" + generatorName + "_season_all_banner").prop('checked');
-
-                    config_arr.push(show_metadata ? '1' : '0');
-                    config_arr.push(episode_metadata ? '1' : '0');
-                    config_arr.push(fanart ? '1' : '0');
-                    config_arr.push(poster ? '1' : '0');
-                    config_arr.push(banner ? '1' : '0');
-                    config_arr.push(episode_thumbnails ? '1' : '0');
-                    config_arr.push(season_posters ? '1' : '0');
-                    config_arr.push(season_banners ? '1' : '0');
-                    config_arr.push(season_all_poster ? '1' : '0');
-                    config_arr.push(season_all_banner ? '1' : '0');
-
-                    var cur_num = 0;
-                    for (var i = 0, len = config_arr.length; i < len; i++) {
-                        cur_num += parseInt(config_arr[i]);
+                    var episodeThumbnails = $("#" + generatorName + "_episode_thumbnails").prop('checked');
+                    var seasonPosters = $("#" + generatorName + "_season_posters").prop('checked');
+                    var seasonBanners = $("#" + generatorName + "_season_banners").prop('checked');
+                    var seasonAllPoster = $("#" + generatorName + "_season_all_poster").prop('checked');
+                    var seasonAllBanner = $("#" + generatorName + "_season_all_banner").prop('checked');
+
+                    configArray.push(showMetadata ? '1' : '0');
+                    configArray.push(episodeMetadata ? '1' : '0');
+                    configArray.push(fanart ? '1' : '0');
+                    configArray.push(poster ? '1' : '0');
+                    configArray.push(banner ? '1' : '0');
+                    configArray.push(episodeThumbnails ? '1' : '0');
+                    configArray.push(seasonPosters ? '1' : '0');
+                    configArray.push(seasonBanners ? '1' : '0');
+                    configArray.push(seasonAllPoster ? '1' : '0');
+                    configArray.push(seasonAllBanner ? '1' : '0');
+
+                    var curNumber = 0;
+                    for (var i = 0, len = configArray.length; i < len; i++) {
+                        curNumber += parseInt(configArray[i]);
                     }
-                    if (cur_num > cur_most) {
-                        cur_most = cur_num;
-                        cur_most_provider = generatorName;
+                    if (curNumber > curMost) {
+                        curMost = curNumber;
+                        curMostProvider = generatorName;
                     }
 
-                    $("#" + generatorName + "_eg_show_metadata").attr('class', show_metadata ? 'enabled' : 'disabled');
-                    $("#" + generatorName + "_eg_episode_metadata").attr('class', episode_metadata ? 'enabled' : 'disabled');
+                    $("#" + generatorName + "_eg_show_metadata").attr('class', showMetadata ? 'enabled' : 'disabled');
+                    $("#" + generatorName + "_eg_episode_metadata").attr('class', episodeMetadata ? 'enabled' : 'disabled');
                     $("#" + generatorName + "_eg_fanart").attr('class', fanart ? 'enabled' : 'disabled');
                     $("#" + generatorName + "_eg_poster").attr('class', poster ? 'enabled' : 'disabled');
                     $("#" + generatorName + "_eg_banner").attr('class', banner ? 'enabled' : 'disabled');
-                    $("#" + generatorName + "_eg_episode_thumbnails").attr('class', episode_thumbnails ? 'enabled' : 'disabled');
-                    $("#" + generatorName + "_eg_season_posters").attr('class', season_posters ? 'enabled' : 'disabled');
-                    $("#" + generatorName + "_eg_season_banners").attr('class', season_banners ? 'enabled' : 'disabled');
-                    $("#" + generatorName + "_eg_season_all_poster").attr('class', season_all_poster ? 'enabled' : 'disabled');
-                    $("#" + generatorName + "_eg_season_all_banner").attr('class', season_all_banner ? 'enabled' : 'disabled');
-                    $("#" + generatorName + "_data").val(config_arr.join('|'));
+                    $("#" + generatorName + "_eg_episode_thumbnails").attr('class', episodeThumbnails ? 'enabled' : 'disabled');
+                    $("#" + generatorName + "_eg_season_posters").attr('class', seasonPosters ? 'enabled' : 'disabled');
+                    $("#" + generatorName + "_eg_season_banners").attr('class', seasonBanners ? 'enabled' : 'disabled');
+                    $("#" + generatorName + "_eg_season_all_poster").attr('class', seasonAllPoster ? 'enabled' : 'disabled');
+                    $("#" + generatorName + "_eg_season_all_banner").attr('class', seasonAllBanner ? 'enabled' : 'disabled');
+                    $("#" + generatorName + "_data").val(configArray.join('|'));
 
                 });
 
-                if (cur_most_provider !== '' && first) {
-                    $('#metadataType option[value=' + cur_most_provider + ']').attr('selected', 'selected');
+                if (curMostProvider !== '' && first) {
+                    $('#metadataType option[value=' + curMostProvider + ']').attr('selected', 'selected');
                     $(this).showHideMetadata();
                 }
             };
@@ -1528,7 +1528,7 @@ var SICKRAGE = {
                     label = ' label',
                     directory = ' directory',
                     client = '',
-                    optionPanel = '#options_torrent_blackhole';
+                    optionPanel = '#options_torrent_blackhole',
                     rpcurl = ' RPC URL';
 
                 if (selectedProvider.toLowerCase() !== 'blackhole') {
@@ -1667,13 +1667,19 @@ var SICKRAGE = {
             });
 
             $('#test_torrent').click(function(){
+                var torrent = {};
                 $('#test_torrent_result').html(loading);
-                var torrent_method = $('#torrent_method :selected').val();
-                var torrent_host = $('#torrent_host').val();
-                var torrent_username = $('#torrent_username').val();
-                var torrent_password = $('#torrent_password').val();
-
-                $.get(srRoot + '/home/testTorrent', {'torrent_method': torrent_method, 'host': torrent_host, 'username': torrent_username, 'password': torrent_password}, function(data){
+                torrent.method = $('#torrent_method :selected').val();
+                torrent.host = $('#torrent_host').val();
+                torrent.username = $('#torrent_username').val();
+                torrent.password = $('#torrent_password').val();
+
+                $.get(srRoot + '/home/testTorrent', {
+                    'torrent_method': torrent.method,
+                    'host': torrent.host,
+                    'username': torrent.username,
+                    'password': torrent.password
+                }, function(data){
                     $('#test_torrent_result').html(data);
                 });
             });
-- 
GitLab


From 3032276820fec475736f70a798e885a83a187090 Mon Sep 17 00:00:00 2001
From: Alexis Tyler <xo@wvvw.me>
Date: Sun, 15 Nov 2015 20:47:39 +1030
Subject: [PATCH 205/215] fix js linting

---
 gui/slick/js/core.js     |  63 +++++++++++++++++++--------------------
 gui/slick/js/core.min.js | Bin 45151 -> 45487 bytes
 2 files changed, 31 insertions(+), 32 deletions(-)

diff --git a/gui/slick/js/core.js b/gui/slick/js/core.js
index ac72d876e..677d24c4e 100644
--- a/gui/slick/js/core.js
+++ b/gui/slick/js/core.js
@@ -6,38 +6,37 @@ var srRoot = getMeta('srRoot'),
     topImageHtml = '<img src="' + srRoot + '/images/top.gif" width="31" height="11" alt="Jump to top" />',
     loading = '<img src="' + srRoot + '/images/loading16' + themeSpinner + '.gif" height="16" width="16" />';
 
+var configSuccess = function(){
+    $('.config_submitter').each(function(){
+        $(this).removeAttr("disabled");
+        $(this).next().remove();
+        $(this).show();
+    });
+    $('.config_submitter_refresh').each(function(){
+        $(this).removeAttr("disabled");
+        $(this).next().remove();
+        $(this).show();
+        window.location.href = srRoot + '/config/providers/';
+    });
+    $('#email_show').trigger('notify');
+};
+
 var SICKRAGE = {
     common: {
         init: function() {
-            function configSuccess(){
-                $('.config_submitter').each(function(){
-                    $(this).removeAttr("disabled");
-                    $(this).next().remove();
-                    $(this).show();
-                });
-                $('.config_submitter_refresh').each(function(){
-                    $(this).removeAttr("disabled");
-                    $(this).next().remove();
-                    $(this).show();
-                    window.location.href = srRoot + '/config/providers/';
-                });
-                $('#email_show').trigger('notify');
-            }
-
             $("#config-components").tabs({
                 activate: function (event, ui) {
-                    var lastOpenedPanel = $(this).data("lastOpenedPanel"),
-                        selected = $(this).tabs('option', 'selected');
+                    var lastOpenedPanel = $(this).data("lastOpenedPanel");
 
-                    if (!lastOpenedPanel) { lastOpenedPanel = $(ui.oldPanel); }
+                    if(!lastOpenedPanel) { lastOpenedPanel = $(ui.oldPanel); }
 
-                    if (!$(this).data("topPositionTab")) { $(this).data("topPositionTab", $(ui.newPanel).position().top); }
+                    if(!$(this).data("topPositionTab")) { $(this).data("topPositionTab", $(ui.newPanel).position().top); }
 
                     //Dont use the builtin fx effects. This will fade in/out both tabs, we dont want that
                     //Fadein the new tab yourself
                     $(ui.newPanel).hide().fadeIn(0);
 
-                    if (lastOpenedPanel) {
+                    if(lastOpenedPanel) {
                         // 1. Show the previous opened tab by removing the jQuery UI class
                         // 2. Make the tab temporary position:absolute so the two tabs will overlap
                         // 3. Set topposition so they will overlap if you go from tab 1 to tab 0
@@ -58,8 +57,8 @@ var SICKRAGE = {
 
             // @TODO Replace this with a real touchscreen check
             // hack alert: if we don't have a touchscreen, and we are already hovering the mouse, then click should link instead of toggle
-            if ((navigator.maxTouchPoints || 0) < 2) {
-                $('.dropdown-toggle').on('click', function(e) {
+            if((navigator.maxTouchPoints || 0) < 2) {
+                $('.dropdown-toggle').on('click', function() {
                     var $this = $(this);
                     if ($this.attr('aria-expanded') === 'true') {
                         window.location.href = $this.attr('href');
@@ -67,7 +66,7 @@ var SICKRAGE = {
                 });
             }
 
-            if(metaToBool('sickbeard.FUZZY_DATING')){
+            if(metaToBool('sickbeard.FUZZY_DATING')) {
                 $.timeago.settings.allowFuture = true;
                 $.timeago.settings.strings = {
                     prefixAgo: null,
@@ -687,9 +686,9 @@ var SICKRAGE = {
             });
 
             $('#TraktGetPin').click(function () {
-                var track = {};
-                trackt.pinUrl = $('#trakt_pin_url').val();
-                var w = window.open(trakt.pinUrl, "popUp", "toolbar=no, scrollbars=no, resizable=no, top=200, left=200, width=650, height=550");
+                var trakt = {};
+                trakt.pinUrl = $('#trakt_pin_url').val();
+                window.open(trakt.pinUrl, "popUp", "toolbar=no, scrollbars=no, resizable=no, top=200, left=200, width=650, height=550");
                 $('#trakt_pin').removeClass('hide');
             });
 
@@ -926,7 +925,10 @@ var SICKRAGE = {
             loadShowNotifyLists();
 
             $('#email_show_save').click(function() {
-                $.post(srRoot + "/home/saveShowNotifyList", { show: $('#email_show').val(), emails: $('#email_show_list').val()}, function (data) {
+                $.post(srRoot + "/home/saveShowNotifyList", {
+                    show: $('#email_show').val(),
+                    emails: $('#email_show_list').val()
+                }, function() {
                     // Reload the per show notify lists to reflect changes
                     loadShowNotifyLists();
                 });
@@ -955,7 +957,6 @@ var SICKRAGE = {
             })();
 
             function isRarSupported() {
-                var pattern = $('#naming_pattern').val();
                 $.get(srRoot + '/config/postProcessing/isRarSupported', function (data) {
                     if (data !== "supported") {
                         $('#unpack').qtip('option', {
@@ -1525,8 +1526,6 @@ var SICKRAGE = {
                     host = ' host:port',
                     username = ' username',
                     password = ' password',
-                    label = ' label',
-                    directory = ' directory',
                     client = '',
                     optionPanel = '#options_torrent_blackhole',
                     rpcurl = ' RPC URL';
@@ -1761,7 +1760,7 @@ var SICKRAGE = {
                 row += ' </tr>';
 
                 return row;
-            }
+            };
         },
         index: function() {
             $("#massUpdateTable:has(tbody tr)").tablesorter({
@@ -1814,7 +1813,7 @@ var SICKRAGE = {
                 headers: { 3: { sorter: false } }
             });
             $('#limit').change(function(){
-                window.location.href = srRoot + '/manage/failedDownloads/?limit=' + $(this).val();;
+                window.location.href = srRoot + '/manage/failedDownloads/?limit=' + $(this).val();
             });
         },
         massEdit: function() {
diff --git a/gui/slick/js/core.min.js b/gui/slick/js/core.min.js
index 8e83fff11b4a896a20357ec15dc2c18cb6d3a13d..becd31a45f294a664cb5b8fc7c70b4ae2f771d89 100644
GIT binary patch
delta 1005
zcmccrfNA|>rVTQTe98HFX_@K4rOC;u#l^Oh*NV$eUc)NQU6h)eUzX}vQc|QbSx`bm
zB`>w2L_<>#BCMgQqoPrgky)&%SDcYwuAx~A5>T3aR@?+#qdb0%I+OFIMJLNG<FtUd
zL%*OXzbrE)wWwHM31X;nYHng?PCUpSB~87OqRjO4)FKU~y!?{Pv`Qt-+R4(4b(?oH
zu4J67<H0fcZVfxPwNgn@X{wT~t!?7udS*Sw#LerNmq|(|>7}HWWhSQ<>*b{8rI%z_
zr`n}hr)X<yCh2X?mc67o*};pGF>$i9yCR=Xd1hWpez{(LL28~x;^Z>-6h@uRx81V^
zC%Z?kpZq9QWwUA24n;<;&2OvsGHqU6SHmNylWwb|5ES675E|s8WSyC&G1<0TnK5H>
zVz(q?=H%*bd8sU0CFP9#;*$83)Z*m$qLTcgqSU++C7o>B$qy%pFzMt>KGiL6k!!1@
z43&y6NG!>S&o3y+%+FKO$wQJTPEAdTFUibJh0EqoR_sxdE<jR~lbDp61D7wH9M>Z+
zQe>;73^ug5GA}<TKfO{(r+D(j9vRyVO}&iFlvHrMX5wIHA&F<hB3?&DBWE(-6sgI%
z6OAXE_bT(|BFW@VPVZH)%|p_ckHjuOQdx+^E<#dMJo!j(E@v)GWU^qt>g4!7naOke
zO(w7JTQxbgpI;1=GQbWmfGN{a(I}i;*S~==XR`hTU)~HP!!swZov1!}!-PeQaA#x4
z@8(4{sdSPaWA5Z7lWG`?CM!<XU@V^8Gu3!<?c@Tm`AU-orW7*fPVSo`&R7VRIXlG%
z%178yh~zeq{x^*2o9m|eF@X}@<TEqWIdu~Ca#Kq(@>3@NoT0{+s0T_ZlNDx4aVP4P
z7N-{FCFZ8uPCnQnGC5!-CugEwL1J-nd4AF4$eD7JuSN?@{t&=9dBRL74yYkIlPlFt
OCV!qTy7}(RCNTh>&Rx3z

delta 846
zcmZ4gnCbolrVTQTlM9$?<yACFGBS%b^-2<xiZzt-3raHc^OSUyic@n^lS@)lHosz8
z!zi7oSzVS`q>y9_Rc)<QQdF9%WNT}iG<gGy9%Itx`z*^O#ZywtGLut_^>R}4(n~U|
zQ|(f$Q?#`;H!qO8q{&uNl$e}dGP%Y>QOLSHGcP5-Tra;MHBY0YC^5Ta@@kJ1M(fQ2
zp4ozoiIc0N)=!>PATs$&n)YVD=pBli*=zSQF>-A_QeVR(W}TU)QB;szT9jj}q!1L~
ztPmRHqogxAut!-s-Bw9CCow5CC%!zfC@(WFJw7Ehr!+lPNhf1+e~&z4=H&G~;!Ih#
zlRr)pVbaN-e6L5IF=z6>9toyg+sT3bB9nD`IT-UMoAxRR=G!VMm*f`}rRJ5ygN>Z*
z*DD>8n3tKG8V?JkLR%%}g2a-H_~OdE{G9ysN+q2lBy9zWrNyZ!FxA#78tIyP8JQ`m
z8k#yP8X0i*<o&%;yjhxh#TohKV5#iM|9T5}bC5)GCRg_<*yh5usA%LNvGb8s79g<;
zk<=7TzR{P<m@|1|m+0i^eiO#r$rJkTO6DS|&O>77Pu80zKKXH<_~b1U`q;A}GLv&B
z$xKe2sLh)W;e*|pG5O#m^~pavjVFJfn9m4uxi5zNZbpcCbGo=D&zmgCm@|3D<Qm4p
z$)-~@7>gz^m}WeA;*<g;TkIygP4#EYnLMXYYO>8V&dIB%X-s}N)kiW1$v^o>Y_P49
zEvNB-O?$%*NgSG!6?;S{_jhw_UOnA_X|j$b$7J2v;*;%tIVSth;GP`RslcR@G}&R6
z6jQS8<o})GY-Nc#8k#zjyJyKw-Z?{Z@}XH$(mEOW#U)lrI;F*_MR|$2saDB41&PJQ
S<@rS^lmE|<*sMFdNelqw95L1a

-- 
GitLab


From 0951345ee4a736488b95536497ee09762733f870 Mon Sep 17 00:00:00 2001
From: Alison Winters <alisonatwork@gmail.com>
Date: Sun, 15 Nov 2015 19:40:06 +0100
Subject: [PATCH 206/215] add some unit tests for exceptions helper

---
 tests/exceptions_helper_tests.py | 42 ++++++++++++++++++++++++++++++++
 1 file changed, 42 insertions(+)
 create mode 100644 tests/exceptions_helper_tests.py

diff --git a/tests/exceptions_helper_tests.py b/tests/exceptions_helper_tests.py
new file mode 100644
index 000000000..a1d4e4d29
--- /dev/null
+++ b/tests/exceptions_helper_tests.py
@@ -0,0 +1,42 @@
+# -*- coding: utf-8 -*-
+
+import sys, os.path
+sys.path.insert(1, os.path.abspath(os.path.join(os.path.dirname(__file__), '../lib')))
+sys.path.insert(1, os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
+
+import unittest
+
+import test_lib as test
+from sickrage.helper.exceptions import ex
+
+class ExceptionsHelperTestCase(unittest.TestCase):
+
+    def test_none_returns_empty(self):
+        self.assertEqual(ex(None), u'')
+
+    def test_empty_args_returns_empty(self):
+        self.assertEqual(ex(Exception()), u'')
+
+    def test_args_of_none_returns_empty(self):
+        self.assertEqual(ex(Exception(None, None)), u'')
+
+    def test_Exception_returns_args_string(self):
+        self.assertEqual(ex(Exception('hi')), 'hi')
+
+# TODO why doesn't this work?
+#    def test_Exception_returns_args_ustring(self):
+#        self.assertEqual(ex(Exception('\xc3\xa4h')), u'äh')
+
+    def test_Exception_returns_concatenated_args_strings(self):
+        self.assertEqual(ex(Exception('lots', 'of', 'strings')), 'lots : of : strings')
+
+    def test_Exception_returns_stringified_args(self):
+        self.assertEqual(ex(Exception(303)), 'error 303')
+
+if __name__ == '__main__':
+    if len(sys.argv) > 1:
+        suite = unittest.TestLoader().loadTestsFromName('exceptions_helper_tests.ExceptionsHelperTestCase.test_' + sys.argv[1])
+        unittest.TextTestRunner(verbosity=2).run(suite)
+    else:
+        suite = unittest.TestLoader().loadTestsFromTestCase(ExceptionsHelperTestCase)
+        unittest.TextTestRunner(verbosity=2).run(suite)
-- 
GitLab


From 18db07c698ae7c878aaf728e5b1ba6c02519b72d Mon Sep 17 00:00:00 2001
From: Alexis Tyler <xo@wvvw.me>
Date: Mon, 16 Nov 2015 11:18:48 +1030
Subject: [PATCH 207/215] add topImageHtml to globals

---
 .jshintrc | 1 +
 1 file changed, 1 insertion(+)

diff --git a/.jshintrc b/.jshintrc
index e24a91c93..7ec9ec8b6 100644
--- a/.jshintrc
+++ b/.jshintrc
@@ -23,6 +23,7 @@
         "metaToBool": true,
         "getMeta": true,
         "isMeta": true,
+        "topImageHtml": true,
         "generate_bwlist": true,
         "_": true,
         "bootbox": true,
-- 
GitLab


From 195a232f6d90f97868ae1e1d7a0e4f1f0759fc37 Mon Sep 17 00:00:00 2001
From: Alexis Tyler <xo@wvvw.me>
Date: Sun, 15 Nov 2015 22:55:39 +1030
Subject: [PATCH 208/215] update confirmations and move to SICKRAGE

---
 gui/slick/js/confirmations.js     | 129 ------------------------------
 gui/slick/js/core.js              |  43 ++++++++++
 gui/slick/js/core.min.js          | Bin 45487 -> 46706 bytes
 gui/slick/views/layouts/main.mako |   1 -
 4 files changed, 43 insertions(+), 130 deletions(-)
 delete mode 100644 gui/slick/js/confirmations.js

diff --git a/gui/slick/js/confirmations.js b/gui/slick/js/confirmations.js
deleted file mode 100644
index f20a64db0..000000000
--- a/gui/slick/js/confirmations.js
+++ /dev/null
@@ -1,129 +0,0 @@
-$(document).ready(function () {
-    $('a.shutdown').on('click', function(e) {
-        e.preventDefault();
-        var target = $(this).attr('href');
-        $.confirm({
-            'title'		: 'Shutdown',
-            'message'	: 'Are you sure you want to shutdown SickRage ?',
-            'buttons'	: {
-                'Yes'	: {
-                    'class'	: 'green',
-                    'action': function(){
-                        location.href = target;
-                    }
-                },
-                'No'	: {
-                    'class'	: 'red',
-                    'action': function(){}	// Nothing to do in this case. You can as well omit the action property.
-                }
-            }
-        });
-    });
-
-    $('a.restart').on('click', function(e) {
-        e.preventDefault();
-        var target = $(this).attr('href');
-        $.confirm({
-            'title'		: 'Restart',
-            'message'	: 'Are you sure you want to restart SickRage ?',
-            'buttons'	: {
-                'Yes'	: {
-                    'class'	: 'green',
-                    'action': function(){
-                        location.href = target;
-                    }
-                },
-                'No'	: {
-                    'class'	: 'red',
-                    'action': function(){}	// Nothing to do in this case. You can as well omit the action property.
-                }
-            }
-        });
-    });
-
-    $('a.removeshow').on('click', function(e) {
-        e.preventDefault();
-        var target = $(this).attr('href');
-        var showname = document.getElementById("showtitle").getAttribute('data-showname');
-        $.confirm({
-            'title'		: 'Remove Show',
-            'message'	: 'Are you sure you want to remove <span class="footerhighlight">' + showname + '</span> from the database ?<br><br><input type="checkbox" id="deleteFiles"> <span class="red-text">Check to delete files as well. IRREVERSIBLE</span></input>',
-            'buttons'	: {
-                'Yes'	: {
-                    'class'	: 'green',
-                    'action': function(){
-                        location.href = target + (document.getElementById('deleteFiles').checked ? '&full=1' : '');
-                        // If checkbox is ticked, remove show and delete files. Else just remove show.
-                    }
-                },
-                'No'	: {
-                    'class'	: 'red',
-                    'action': function(){}	// Nothing to do in this case. You can as well omit the action property.
-                }
-            }
-        });
-    });
-
-    $('a.clearhistory').on('click', function(e) {
-        e.preventDefault();
-        var target = $(this).attr('href');
-        $.confirm({
-            'title'		: 'Clear History',
-            'message'	: 'Are you sure you want to clear all download history ?',
-            'buttons'	: {
-                'Yes'	: {
-                    'class'	: 'green',
-                    'action': function(){
-                        location.href = target;
-                    }
-                },
-                'No'	: {
-                    'class'	: 'red',
-                    'action': function(){}	// Nothing to do in this case. You can as well omit the action property.
-                }
-            }
-        });
-    });
-
-    $('a.trimhistory').on('click', function(e) {
-        e.preventDefault();
-        var target = $(this).attr('href');
-        $.confirm({
-            'title'		: 'Trim History',
-            'message'	: 'Are you sure you want to trim all download history older than 30 days ?',
-            'buttons'	: {
-                'Yes'	: {
-                    'class'	: 'green',
-                    'action': function(){
-                        location.href = target;
-                    }
-                },
-                'No'	: {
-                    'class'	: 'red',
-                    'action': function(){}	// Nothing to do in this case. You can as well omit the action property.
-                }
-            }
-        });
-    });
-
-    $('a.submiterrors').on('click', function(e) {
-        e.preventDefault();
-        var target = $(this).attr('href');
-        $.confirm({
-            'title'		: 'Submit Errors',
-            'message'	: 'Are you sure you want to submit these errors ?<br><br><span class="red-text">Make sure SickRage is updated and trigger<br> this error with debug enabled before submitting</span>',
-            'buttons'	: {
-                'Yes'	: {
-                    'class' : 'green',
-                    'action': function(){
-                        location.href = target;
-                    }
-                },
-                'No'	: {
-                    'class' : 'red',
-                    'action': function(){}  // Nothing to do in this case. You can as well omit the action property.
-                }
-            }
-        });
-    });
-});
diff --git a/gui/slick/js/core.js b/gui/slick/js/core.js
index 677d24c4e..abd37f301 100644
--- a/gui/slick/js/core.js
+++ b/gui/slick/js/core.js
@@ -24,6 +24,49 @@ var configSuccess = function(){
 var SICKRAGE = {
     common: {
         init: function() {
+            $.confirm.options = {
+                confirmButton: "Yes",
+                cancelButton: "Cancel",
+                dialogClass: "modal-dialog",
+                post: false,
+                confirm: function(e) {
+                    location.href = e.context.href;
+                }
+            };
+
+            $("a.shutdown").confirm({
+                title: "Shutdown",
+                text: "Are you sure you want to shutdown SickRage?"
+            });
+
+            $("a.restart").confirm({
+                title: "Restart",
+                text: "Are you sure you want to restart SickRage?"
+            });
+
+            $("a.removeshow").confirm({
+                title: "Remove Show",
+                text: 'Are you sure you want to remove <span class="footerhighlight">' + $('#showtitle').data('showname') + '</span> from the database?<br><br><input type="checkbox" id="deleteFiles"> <span class="red-text">Check to delete files as well. IRREVERSIBLE</span></input>',
+                confirm: function(e) {
+                    location.href = e.context.href + ($('#deleteFiles')[0].checked ? '&full=1' : '');
+                }
+            });
+
+            $('a.clearhistory').confirm({
+                title: 'Clear History',
+                text: 'Are you sure you want to clear all download history?'
+            });
+
+            $('a.trimhistory').confirm({
+                title: 'Trim History',
+                text: 'Are you sure you want to trim all download history older than 30 days?'
+            });
+
+            $('a.submiterrors').confirm({
+                title: 'Submit Errors',
+                text: 'Are you sure you want to submit these errors ?<br><br><span class="red-text">Make sure SickRage is updated and trigger<br> this error with debug enabled before submitting</span>'
+            });
+
             $("#config-components").tabs({
                 activate: function (event, ui) {
                     var lastOpenedPanel = $(this).data("lastOpenedPanel");
diff --git a/gui/slick/js/core.min.js b/gui/slick/js/core.min.js
index becd31a45f294a664cb5b8fc7c70b4ae2f771d89..07c6080f5cac0873cd01ac7aea2ca82773f1a384 100644
GIT binary patch
delta 1233
zcmZ4gnCa6SrVW#s>h+TI^U^Yla`o~HN;32FifyZ*0#2nRCHZ+)N|C9>N;=7jdC93c
zFd=6!Pe~^wGchMW-8m<*xY$Z5H$NpYM;9Wbq*IVzTw<kYr~@_3Dy=jx8DzdjqGokY
zesUs+t(Q@hTAyZ{2y#M6YDEc%pH^F|qoSdds8^g(T9T4qo~NV<k_Nd@qq-!sBq!BM
zDHtZD1JY%s<XDudP?=w<P+SUSlqcquD3s(Yz|2qx&P>h@N=#3+SE|*77+;iHT#{H+
zqEwG*d=ONMkm*n(uo|A5UzS>&kzbC*^+Bm1NrhmLtWHUNYDI~aI!+%HK@{5*7bNB>
zB!dFlRw*q%za+INBQrfCCo?^xM9EHFTSY@j8Dt$efRr@#QW8rNHIzUid5O8HN}Ag0
zHu@kV>=e?9@^ckRGEx;lN|F+bxl-+Il8Wp=c=F3R()B5+IjJS7Zkai$#Y%PxDE1bm
zrs#qKT*=NkBQ-f26u=PG3TYta3W>!E<*7M2dJ3LFL9Su0LBXC*KCV!EZS*tq3Q9}t
z)CnYr`l3|y1fi_~@*Tt`h`ThS4Py0@L2gJ*u~$+{E6vHVHB_=vQqru2MQ?IWYGP4F
zW^qY=Q6-i*a0W>$ctGWmBDx-HIs%)fkeHLB07{WL`H3kCP_q#Us-!407b=Lw!jPiO
zTx|BCTUQTGw;;2yTBneolagAbP?C|Dr(kTLkdjzgjBr75X;N-xNorA1eo-+NCj^6~
z6<i_m5I<uiym|$A-hn7D$w)0uRe%_(08c77(uHqgb}A$n!ZMsfX0bwPK}uptYKlT)
zUW!6VQD%C2Y7r>8DU@Vn7DG%{D9<d(P)JElDpgKbNX<)3%1KR8NJ>r1F9I0{@>NM@
gUOF@>sZZ7sQP{kmX+<d`*XHnw^(>p&Ygd>602`*aH2?qr

delta 34
rcmezLhH3p{rVW#sCYN)|Y%XG7Q9Aj39q(q1+C?mkT$@idt}p=r7!wa9

diff --git a/gui/slick/views/layouts/main.mako b/gui/slick/views/layouts/main.mako
index af38d14bd..9ff550e1e 100644
--- a/gui/slick/views/layouts/main.mako
+++ b/gui/slick/views/layouts/main.mako
@@ -326,7 +326,6 @@
         <script type="text/javascript" src="${srRoot}/js/lib/jquery.scrolltopcontrol-1.1.js?${sbPID}"></script>
         <script type="text/javascript" src="${srRoot}/js/browser.js?${sbPID}"></script>
         <script type="text/javascript" src="${srRoot}/js/ajaxNotifications.js?${sbPID}"></script>
-        <script type="text/javascript" src="${srRoot}/js/confirmations.js?${sbPID}"></script>
     % endif
         <%block name="scripts" />
     </body>
-- 
GitLab


From 5ea38e4250cda915c2a2ec329b7d0ad9c7543008 Mon Sep 17 00:00:00 2001
From: Alexis Tyler <xo@wvvw.me>
Date: Sun, 15 Nov 2015 22:56:28 +1030
Subject: [PATCH 209/215] add temp CSS for confirm boxes

---
 gui/slick/css/dark.css | 1131 ++++++++++++++++++++++------------------
 1 file changed, 610 insertions(+), 521 deletions(-)

diff --git a/gui/slick/css/dark.css b/gui/slick/css/dark.css
index fe24eafcb..d2189bcdf 100644
--- a/gui/slick/css/dark.css
+++ b/gui/slick/css/dark.css
@@ -4,34 +4,34 @@ inc_top.mako
 
 .ui-dialog,
 .ui-dialog-buttonpane {
-	background: #2a2a2a !important;
+    background: #2a2a2a !important;
 }
 
 .ui-widget-content {
     background: #606060;
     border: 1px solid #111;
-	color: #fff;
+    color: #fff;
 }
 
 .ui-widget-content a {
-	color: #fff;
+    color: #fff;
 }
 
 .ui-widget-content a:hover {
-	color: #09A2FF;
-	text-decoration: none;
+    color: #09A2FF;
+    text-decoration: none;
 }
 
 .ui-widget-header {
-	background: #3d3d3d;
-	border: 1px solid #111;
-	color: #fff;
+    background: #3d3d3d;
+    border: 1px solid #111;
+    color: #fff;
 }
 
 .ui-state-default,
 .ui-widget-content .ui-state-default,
 .ui-widget-header .ui-state-default {
-	border: 1px solid #111;
+    border: 1px solid #111;
 }
 
 .ui-state-hover,
@@ -40,35 +40,35 @@ inc_top.mako
 .ui-state-focus,
 .ui-widget-content .ui-state-focus,
 .ui-widget-header .ui-state-focus {
-	background: #3d3d3d;
+    background: #3d3d3d;
 }
 
 .ui-state-active,
 .ui-widget-content .ui-state-active,
 .ui-widget-header .ui-state-active {
-	background: #3d3d3d;
+    background: #3d3d3d;
 }
 
 .ui-icon,
 .ui-widget-content .ui-icon {
-	background-image: url("../css/lib/images/ui-icons_ffffff_256x240.png");
+    background-image: url("../css/lib/images/ui-icons_ffffff_256x240.png");
 }
 
 .ui-state-default .ui-icon {
-	background-image: url('../css/lib/images/ui-icons_09a2ff_256x240.png');
+    background-image: url('../css/lib/images/ui-icons_09a2ff_256x240.png');
 }
 
 .ui-widget-overlay {
-	background: #000000 url("../css/lib/images/ui-bg_flat_0_000000_40x100.png") 50% 50% repeat-x;
+    background: #000000 url("../css/lib/images/ui-bg_flat_0_000000_40x100.png") 50% 50% repeat-x;
 }
 
 .ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited {
-	color: #fff;
-	text-decoration: none;
+    color: #fff;
+    text-decoration: none;
 }
 
 .ui-dialog .ui-dialog-titlebar-close {
-	background: #333;
+    background: #333;
 }
 
 .ui-tabs {
@@ -78,134 +78,134 @@ inc_top.mako
 }
 
 .ui-tabs .ui-tabs-panel {
-	background-color: #3d3d3d !important;
-	border: 1px solid #111 !important;
+    background-color: #3d3d3d !important;
+    border: 1px solid #111 !important;
 }
 
 .ui-tabs-nav > :not(.ui-tabs-active){
-	background: #333;
-	border-top-left-radius: 5px;
-	border-top-right-radius: 5px;
+    background: #333;
+    border-top-left-radius: 5px;
+    border-top-right-radius: 5px;
 }
 
 [class^="menu-icon-"], [class*=" menu-icon-"] {
-	background: url("../images/menu/menu-icons-white.png");
-	height: 16px;
-	width: 16px;
-	display: inline-block;
-	position: relative;
-	top: 2px;
-	float: left;
+    background: url("../images/menu/menu-icons-white.png");
+    height: 16px;
+    width: 16px;
+    display: inline-block;
+    position: relative;
+    top: 2px;
+    float: left;
 }
 
 .menu-icon-addshow {
-	background-position: 0px 0px;
+    background-position: 0px 0px;
 }
 
 .menu-icon-anime {
-	background-position: -21px 0px;
+    background-position: -21px 0px;
 }
 
 .menu-icon-backlog-view {
-	background-position: -42px 0px;
+    background-position: -42px 0px;
 }
 
 .menu-icon-backlog {
-	background-position: -63px 0px;
+    background-position: -63px 0px;
 }
 
 .menu-icon-bittorrent {
-	background-position: -84px 0px;
+    background-position: -84px 0px;
 }
 
 .menu-icon-config-index {
-	background-position: -105px 0px;
+    background-position: -105px 0px;
 }
 
 .menu-icon-config {
-	background-position: -126px 0px;
+    background-position: -126px 0px;
 }
 
 .menu-icon-failed-download {
-	background-position: -147px 0px;
+    background-position: -147px 0px;
 }
 
 .menu-icon-home {
-	background-position: -168px 0px;
+    background-position: -168px 0px;
 }
 
 .menu-icon-manage {
-	background-position: -189px 0px;
+    background-position: -189px 0px;
 }
 
 .menu-icon-manage-searches {
-	background-position: -210px 0px;
+    background-position: -210px 0px;
 }
 
 .menu-icon-poster {
-	background-position: -231px 0px;
+    background-position: -231px 0px;
 }
 
 .menu-icon-postprocess {
-	background-position: -252px 0px;
+    background-position: -252px 0px;
 }
 
 .menu-icon-restart {
-	background-position: -273px 0px;
+    background-position: -273px 0px;
 }
 
 .menu-icon-shutdown {
-	background-position: -294px 0px;
+    background-position: -294px 0px;
 }
 
 .menu-icon-update {
-	background-position: -315px 0px;
+    background-position: -315px 0px;
 }
 
 .menu-icon-viewlog-errors {
-	background-position: -336px 0px;
+    background-position: -336px 0px;
 }
 
 .menu-icon-viewlog {
-	background-position: -357px 0px;
+    background-position: -357px 0px;
 }
 
 .menu-icon-kodi {
-	background-position: -378px 0px;
+    background-position: -378px 0px;
 }
 
 .menu-icon-help {
-	background-position: -399px 0px;
+    background-position: -399px 0px;
 }
 
 [class^="submenu-icon-"], [class*=" submenu-icon-"] {
-	background: url("../images/menu/menu-icons-white.png");
-	height: 16px;
-	width: 16px;
+    background: url("../images/menu/menu-icons-white.png");
+    height: 16px;
+    width: 16px;
 }
 
 .submenu-icon-anime {
-	background-position: -21px 0px;
+    background-position: -21px 0px;
 }
 
 .submenu-icon-bittorrent {
-	background-position: -84px 0px;
+    background-position: -84px 0px;
 }
 
 .submenu-icon-failed-download {
-	background-position: -147px 0px;
+    background-position: -147px 0px;
 }
 
 .submenu-icon-restart {
-	background-position: -273px 0px;
+    background-position: -273px 0px;
 }
 
 .submenu-icon-shutdown {
-	background-position: -294px 0px;
+    background-position: -294px 0px;
 }
 
 .submenu-icon-kodi {
-	background-position: -378px 0px;
+    background-position: -378px 0px;
 }
 
 /* =======================================================================
@@ -213,16 +213,16 @@ inc_bottom.mako
 ========================================================================== */
 
 .footer {
-	width: 100%;
-	padding: 20px 0;
-	color: #fff;
-	text-align: center;
-	font-size: 12px;
+    width: 100%;
+    padding: 20px 0;
+    color: #fff;
+    text-align: center;
+    font-size: 12px;
 }
 
 .footerhighlight {
-	color: #09A2FF;
-	display: inline;
+    color: #09A2FF;
+    display: inline;
 }
 
 /* =======================================================================
@@ -230,88 +230,88 @@ home.mako
 ========================================================================== */
 
 .imgbanner .banner {
-	border: 1px solid #111;
-	overflow: hidden;
-	height: 66px;
-	overflow: hidden;
-	border-radius: 8px;
-	vertical-align: top;
-	width: 360px;
-	display: block;
-	margin-left: auto;
-	margin-right: auto;
+    border: 1px solid #111;
+    overflow: hidden;
+    height: 66px;
+    overflow: hidden;
+    border-radius: 8px;
+    vertical-align: top;
+    width: 360px;
+    display: block;
+    margin-left: auto;
+    margin-right: auto;
 }
 
 .imgsmallposter .small {
-	height: 66px;
-	overflow: hidden;
-	border-radius: 3px;
-	vertical-align: middle;
-	width: 45px;
-	border: 1px solid #111;
-	margin-right: 5px;
+    height: 66px;
+    overflow: hidden;
+    border-radius: 3px;
+    vertical-align: middle;
+    width: 45px;
+    border: 1px solid #111;
+    margin-right: 5px;
 }
 
 .progressbarText {
-	position: absolute;
-	top: 0;
-	width: 100%;
-	height: 100%;
-	overflow: visible;
-	text-align: center;
-	text-shadow: 0 0 0.1em #000;
-	vertical-align: middle;
-	font-size: 12px;
-	color: #fff;
+    position: absolute;
+    top: 0;
+    width: 100%;
+    height: 100%;
+    overflow: visible;
+    text-align: center;
+    text-shadow: 0 0 0.1em #000;
+    vertical-align: middle;
+    font-size: 12px;
+    color: #fff;
 }
 
 .show {
-	margin: 12px;
-	width: 188px;
-	height: 352px;
-	background-color: #333;
-	border: 1px solid #111;
-	border-radius: 6px;
+    margin: 12px;
+    width: 188px;
+    height: 352px;
+    background-color: #333;
+    border: 1px solid #111;
+    border-radius: 6px;
 }
 
 .show-title:after {
-	content: "";
-	pointer-events: none;
-	position: absolute;
-	width: 20px;
-	height: 100%;
-	top: 0;
-	right: 0;
-	background-image: -webkit-linear-gradient(right, rgba(51, 51, 51, 1), rgba(51, 51, 51, 0));
-	background-image: -moz-linear-gradient(right, rgba(51, 51, 51, 1), rgba(51, 51, 51, 0));
-	background-image: -ms-linear-gradient(right, rgba(51, 51, 51, 1), rgba(51, 51, 51, 0));
-	background-image: -o-linear-gradient(right, rgba(51, 51, 51, 1), rgba(51, 51, 51, 0));
-	background-image: linear-gradient(to left, rgba(51, 51, 51, 1), rgba(51, 51, 51, 0));
+    content: "";
+    pointer-events: none;
+    position: absolute;
+    width: 20px;
+    height: 100%;
+    top: 0;
+    right: 0;
+    background-image: -webkit-linear-gradient(right, rgba(51, 51, 51, 1), rgba(51, 51, 51, 0));
+    background-image: -moz-linear-gradient(right, rgba(51, 51, 51, 1), rgba(51, 51, 51, 0));
+    background-image: -ms-linear-gradient(right, rgba(51, 51, 51, 1), rgba(51, 51, 51, 0));
+    background-image: -o-linear-gradient(right, rgba(51, 51, 51, 1), rgba(51, 51, 51, 0));
+    background-image: linear-gradient(to left, rgba(51, 51, 51, 1), rgba(51, 51, 51, 0));
 }
 
 .show-date:after {
-	content: "";
-	pointer-events: none;
-	position: absolute;
-	width: 20px;
-	height: 100%;
-	top: 0;
-	right: 0;
-	background-image: -webkit-linear-gradient(right, rgba(51, 51, 51, 1), rgba(51, 51, 51, 0));
-	background-image: -moz-linear-gradient(right, rgba(51, 51, 51, 1), rgba(51, 51, 51, 0));
-	background-image: -ms-linear-gradient(right, rgba(51, 51, 51, 1), rgba(51, 51, 51, 0));
-	background-image: -o-linear-gradient(right, rgba(51, 51, 51, 1), rgba(51, 51, 51, 0));
-	background-image: linear-gradient(to left, rgba(51, 51, 51, 1), rgba(51, 51, 51, 0));
+    content: "";
+    pointer-events: none;
+    position: absolute;
+    width: 20px;
+    height: 100%;
+    top: 0;
+    right: 0;
+    background-image: -webkit-linear-gradient(right, rgba(51, 51, 51, 1), rgba(51, 51, 51, 0));
+    background-image: -moz-linear-gradient(right, rgba(51, 51, 51, 1), rgba(51, 51, 51, 0));
+    background-image: -ms-linear-gradient(right, rgba(51, 51, 51, 1), rgba(51, 51, 51, 0));
+    background-image: -o-linear-gradient(right, rgba(51, 51, 51, 1), rgba(51, 51, 51, 0));
+    background-image: linear-gradient(to left, rgba(51, 51, 51, 1), rgba(51, 51, 51, 0));
 }
 
 td.tvShow a {
-	color: #fff;
-	text-decoration: none;
+    color: #fff;
+    text-decoration: none;
 }
 
 td.tvShow a:hover {
-	cursor: pointer;
-	color: #09A2FF;
+    cursor: pointer;
+    color: #09A2FF;
 }
 
 .popover {
@@ -332,27 +332,27 @@ home_addShows.mako
 ========================================================================== */
 
 .icon-addnewshow {
-	background-image: url("../images/addshows/add-new32-white.png");
-	width: 32px;
-	height: 32px;
+    background-image: url("../images/addshows/add-new32-white.png");
+    width: 32px;
+    height: 32px;
 }
 
 .icon-addtrendingshow {
-	background-image: url("../images/addshows/add-trending32-white.png");
-	width: 32px;
-	height: 32px;
+    background-image: url("../images/addshows/add-trending32-white.png");
+    width: 32px;
+    height: 32px;
 }
 
 .icon-addrecommendedshow {
-	background-image: url("../images/addshows/add-trakt32-white.png");
-	width: 32px;
-	height: 32px;
+    background-image: url("../images/addshows/add-trakt32-white.png");
+    width: 32px;
+    height: 32px;
 }
 
 .icon-addexistingshow {
-	background-image: url("../images/addshows/add-existing32-white.png");
-	width: 32px;
-	height: 32px;
+    background-image: url("../images/addshows/add-existing32-white.png");
+    width: 32px;
+    height: 32px;
 }
 
 /* =======================================================================
@@ -360,11 +360,11 @@ home_newShow.mako
 ========================================================================== */
 
 #displayText {
-	padding: 8px;
-	overflow: hidden;
-	font-size: 14px;
-	background-color: #3d3d3d;
-	border: 1px solid #111;
+    padding: 8px;
+    overflow: hidden;
+    font-size: 14px;
+    background-color: #3d3d3d;
+    border: 1px solid #111;
 }
 
 /* =======================================================================
@@ -372,11 +372,11 @@ home_addExistingShow.mako
 ========================================================================== */
 
 ul#rootDirStaticList li {
-	padding: 4px 5px 4px 5px;
-	margin: 2px;
-	list-style: none outside none;
-	cursor: pointer;
-	background: #3d3d3d;
+    padding: 4px 5px 4px 5px;
+    margin: 2px;
+    list-style: none outside none;
+    cursor: pointer;
+    background: #3d3d3d;
 }
 
 /* =======================================================================
@@ -384,11 +384,11 @@ home_trendingShows.mako
 ========================================================================== */
 
 .traktContainer {
-	margin: 12px;
-	width: 188px;
-	background-color: #333;
-	border: 1px solid #111;
-	border-radius: 6px;
+    margin: 12px;
+    width: 188px;
+    background-color: #333;
+    border: 1px solid #111;
+    border-radius: 6px;
 }
 
 /* =======================================================================
@@ -398,95 +398,95 @@ displayShow.mako
 #prevShow,
 #nextShow,
 #topcontrol {
-	-webkit-filter: "none";
-	filter: none;
+    -webkit-filter: "none";
+    filter: none;
 }
 
 h1.title {
-	padding-bottom: 12px;
-	margin-bottom: 15px;
-	line-height: 30px;
-	text-align: left;
-	text-rendering: optimizelegibility;
-	border-bottom: 1px solid #555;
+    padding-bottom: 12px;
+    margin-bottom: 15px;
+    line-height: 30px;
+    text-align: left;
+    text-rendering: optimizelegibility;
+    border-bottom: 1px solid #555;
 }
 
 ul.tags li {
-	margin-right: 4px;
-	margin-bottom: 5px;
-	padding: 3px 4px 3px 25px;
-	background: url(../images/tag.png) no-repeat scroll 5px 4px #15528F;
-	border-radius: 3px;
-	border: 1px solid #111;
-	color: #FFF;
-	font: 14px/18px "Open Sans", "Helvetica Neue", Helvetica, Arial, Geneva, sans-serif;
-	text-shadow: 0px 1px rgba(0, 0, 0, 0.8);
-	float: left;
+    margin-right: 4px;
+    margin-bottom: 5px;
+    padding: 3px 4px 3px 25px;
+    background: url(../images/tag.png) no-repeat scroll 5px 4px #15528F;
+    border-radius: 3px;
+    border: 1px solid #111;
+    color: #FFF;
+    font: 14px/18px "Open Sans", "Helvetica Neue", Helvetica, Arial, Geneva, sans-serif;
+    text-shadow: 0px 1px rgba(0, 0, 0, 0.8);
+    float: left;
 }
 
 .tvshowImg {
-	border: 1px solid #111;
-	border-radius: 5px;
-	height: 311px;
-	width: auto;
-	float: left;
+    border: 1px solid #111;
+    border-radius: 5px;
+    height: 311px;
+    width: auto;
+    float: left;
 }
 
 #summary {
-	padding: 10px;
-	background-color: #3d3d3d;
-	border: 1px solid #111;
-	width: 100%;
-	height: 250px;
-	overflow: auto;
-	cursor: default;
+    padding: 10px;
+    background-color: #3d3d3d;
+    border: 1px solid #111;
+    width: 100%;
+    height: 250px;
+    overflow: auto;
+    cursor: default;
 }
 
 .sickbeardTable {
-	table-layout: auto;
-	width: 100%;
-	border-collapse: collapse;
-	border-spacing: 0;
-	text-align: center;
-	border: none;
-	empty-cells: show;
-	color: #000;
+    table-layout: auto;
+    width: 100%;
+    border-collapse: collapse;
+    border-spacing: 0;
+    text-align: center;
+    border: none;
+    empty-cells: show;
+    color: #000;
 }
 
 .sickbeardTable th{
-	color: #fff;
-	text-align: center;
-	background-color: #15528F;
-	white-space: nowrap;
+    color: #fff;
+    text-align: center;
+    background-color: #15528F;
+    white-space: nowrap;
 }
 
 .sickbeardTable th,
 .sickbeardTable td {
-	border-top: 1px solid #222;
-	border-left: 1px solid #222;
-	padding: 4px;
+    border-top: 1px solid #222;
+    border-left: 1px solid #222;
+    padding: 4px;
 }
 
 th.row-seasonheader {
-	border: none;
-	background-color: #222;
-	color: #fff;
-	padding-top: 15px;
-	text-align: left;
+    border: none;
+    background-color: #222;
+    color: #fff;
+    padding-top: 15px;
+    text-align: left;
 }
 
 tr.seasonheader {
-	padding-bottom: 5px;
-	padding-top: 10px;
-	text-align: left;
-	border: none;
+    padding-bottom: 5px;
+    padding-top: 10px;
+    text-align: left;
+    border: none;
 }
 
 th.col-checkbox,
 td.col-checkbox {
-	width: 30px;
-	border-left: none;
-	text-align: center;
+    width: 30px;
+    border-left: none;
+    text-align: center;
 }
 
 /* =======================================================================
@@ -494,59 +494,59 @@ schedule.mako
 ========================================================================== */
 
 h2.day, h2.network {
-	margin: 10px 0;
-	font-size: 24px;
-	line-height: 36px;
-	font-weight: bold;
-	letter-spacing: 1px;
-	color: #FFF;
-	text-align: center;
-	text-shadow: -1px -1px 0px rgba(0, 0, 0, 0.3);
-	background-color: #15528F;
+    margin: 10px 0;
+    font-size: 24px;
+    line-height: 36px;
+    font-weight: bold;
+    letter-spacing: 1px;
+    color: #FFF;
+    text-align: center;
+    text-shadow: -1px -1px 0px rgba(0, 0, 0, 0.3);
+    background-color: #15528F;
 }
 
 .tvshowDiv {
-	display: block;
-	clear: both;
-	border: 1px solid #ccc;
-	margin: auto;
-	padding: 0px;
-	text-align: left;
-	width: 750px;
-	border-radius: 5px;
-	background: #fff;
-	cursor: default;
-	overflow: hidden;
-	color: #000;
+    display: block;
+    clear: both;
+    border: 1px solid #ccc;
+    margin: auto;
+    padding: 0px;
+    text-align: left;
+    width: 750px;
+    border-radius: 5px;
+    background: #fff;
+    cursor: default;
+    overflow: hidden;
+    color: #000;
 }
 
 .tvshowDiv a:hover {
-	color: #09A2FF;
+    color: #09A2FF;
 }
 
 #showListTable td.tvShow a {
-	color: #000;
+    color: #000;
 }
 
 #showListTable td.tvShow a:hover {
-	cursor: pointer;
-	color: #09A2FF;
+    cursor: pointer;
+    color: #09A2FF;
 }
 
 table.cal-odd {
-	background-color: #333;
+    background-color: #333;
 }
 
 table.cal-even {
-	background-color: #3d3d3d;
+    background-color: #3d3d3d;
 }
 
 .calendarShow .text .airtime {
-	color:#fff
+    color:#fff
 }
 
 .calendarShow .text .episode-title {
-	color:#aaa
+    color:#aaa
 }
 
 /* =======================================================================
@@ -554,43 +554,43 @@ config*.mako
 ========================================================================== */
 
 .component-group {
-	padding: 15px 15px 25px;
-	border-bottom: 1px dotted #555;
-	min-height: 200px;
+    padding: 15px 15px 25px;
+    border-bottom: 1px dotted #555;
+    min-height: 200px;
 }
 
 .component-group-desc p {
-	width: 90%;
-	margin: 10px 0;
-	color: #ddd;
+    width: 90%;
+    margin: 10px 0;
+    color: #ddd;
 }
 
 #provider_order_list li,
 #service_order_list li {
-	padding: 5px;
-	margin: 5px 0;
-	font-size: 14px;
-	background: #333 !important;
-	color: #fff;
+    padding: 5px;
+    margin: 5px 0;
+    font-size: 14px;
+    background: #333 !important;
+    color: #fff;
 }
 
 #provider_order_list .ui-state-default.torrent-provider {
-	background-color: #555 !important;
+    background-color: #555 !important;
 }
 
 #provider_order_list .ui-state-default.nzb-provider {
-	background-color: #222 !important;
+    background-color: #222 !important;
 }
 
 [class^="icon16-"], [class*=" icon16-"] {
-	background-image: url("../images/glyphicons-config-white.png");
-	background-position: -40px 0;
-	background-repeat: no-repeat;
-	display: inline-block;
-	height: 16px;
-	line-height: 16px;
-	vertical-align: text-top;
-	width: 16px;
+    background-image: url("../images/glyphicons-config-white.png");
+    background-position: -40px 0;
+    background-repeat: no-repeat;
+    display: inline-block;
+    height: 16px;
+    line-height: 16px;
+    vertical-align: text-top;
+    width: 16px;
 }
 
 /* =======================================================================
@@ -598,35 +598,35 @@ config_postProcessing.mako
 ========================================================================== */
 
 #config div.example {
-	padding: 10px;
-	background-color: #333333;
-	border: 1px solid #111;
+    padding: 10px;
+    background-color: #333333;
+    border: 1px solid #111;
 }
 
 .Key {
-	width: 100%;
-	padding: 6px;
-	font-size: 13px;
-	background-color: #3d3d3d;
-	border: 1px solid #111;
-	border-collapse: collapse;
-	border-spacing: 0;
+    width: 100%;
+    padding: 6px;
+    font-size: 13px;
+    background-color: #3d3d3d;
+    border: 1px solid #111;
+    border-collapse: collapse;
+    border-spacing: 0;
 }
 
 .Key th, .tableHeader {
-	padding: 3px 9px;
-	margin: 0;
-	color: #fff;
-	text-align: center;
-	background: #15528F;
+    padding: 3px 9px;
+    margin: 0;
+    color: #fff;
+    text-align: center;
+    background: #15528F;
 }
 
 .Key tr {
-	border-bottom: 1px solid #111;
+    border-bottom: 1px solid #111;
 }
 
 .Key tr.even {
-	background-color: #333;
+    background-color: #333;
 }
 
 /* =======================================================================
@@ -634,31 +634,31 @@ config_notifications.mako
 ========================================================================== */
 
 div.metadata_options {
-	padding: 7px;
-	overflow: auto;
-	background: #333;
-	color: #fff;
-	border: 1px solid #111;
+    padding: 7px;
+    overflow: auto;
+    background: #333;
+    color: #fff;
+    border: 1px solid #111;
 }
 
 div.metadata_options label:hover {
-	color: #fff;
-	background-color: #15528F;
-	cursor: pointer;
+    color: #fff;
+    background-color: #15528F;
+    cursor: pointer;
 }
 
 div.metadata_options label {
-	display: block;
-	padding-left: 7px;
-	line-height: 20px;
-	color: #fff;
+    display: block;
+    padding-left: 7px;
+    line-height: 20px;
+    color: #fff;
 }
 
 div.metadata_example label {
-	display: block;
-	line-height: 21px;
-	color: #fff;
-	cursor: pointer;
+    display: block;
+    line-height: 21px;
+    color: #fff;
+    cursor: pointer;
 }
 
 /* =======================================================================
@@ -666,8 +666,8 @@ manage*.mako
 ========================================================================== */
 
 .separator {
-	font-size: 90%;
-	color: #fff;
+    font-size: 90%;
+    color: #fff;
 }
 
 a.whitelink {
@@ -678,9 +678,9 @@ Global
 ========================================================================== */
 
 span.path {
-	padding: 3px 6px;
-	color: #09A2FF;
-	background-color: #333;
+    padding: 3px 6px;
+    color: #09A2FF;
+    background-color: #333;
 }
 
 /* =======================================================================
@@ -688,48 +688,48 @@ bootstrap Overrides
 ========================================================================== */
 
 body {
-	padding-top: 60px;
-	overflow-y: scroll;
-	font-family: "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif;
-	color: #fff;
-	background-color: #222;
+    padding-top: 60px;
+    overflow-y: scroll;
+    font-family: "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif;
+    color: #fff;
+    background-color: #222;
 }
 
 /* navbar styling */
 .navbar-default {
-	background-color: #15528F;
-	filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#297AB8', endColorstr='#15528F');
-	background: -webkit-gradient(linear, left top, left bottom, from(#297AB8), to(#15528F));
-	background: -moz-linear-gradient(top,  #297AB8,  #15528F);
-	border-color: #3e3f3a;
+    background-color: #15528F;
+    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#297AB8', endColorstr='#15528F');
+    background: -webkit-gradient(linear, left top, left bottom, from(#297AB8), to(#15528F));
+    background: -moz-linear-gradient(top,  #297AB8,  #15528F);
+    border-color: #3e3f3a;
 }
 
 .navbar-default .navbar-nav > li > a:hover,
 .navbar-default .navbar-nav > li > a:focus {
-	background-color: #124477;
+    background-color: #124477;
 }
 
 .navbar-default .navbar-nav > .active > a,
 .navbar-default .navbar-nav > .active > a:hover,
 .navbar-default .navbar-nav > .active > a:focus {
-	color: #ffffff;
-	background-color: #124477;
+    color: #ffffff;
+    background-color: #124477;
 }
 
 .navbar-default .navbar-toggle:hover,
 .navbar-default .navbar-toggle:focus {
-	background-color: #124477;
+    background-color: #124477;
 }
 
 .navbar-default .navbar-toggle .icon-bar {
-	background-color: #124477;
+    background-color: #124477;
 }
 
 .navbar-default .navbar-nav > .open > a,
 .navbar-default .navbar-nav > .open > a:hover,
 .navbar-default .navbar-nav > .open > a:focus {
-	background-color: #124477;
-	color: #ffffff;
+    background-color: #124477;
+    color: #ffffff;
 }
 
 @media (max-width: 767px) {
@@ -742,59 +742,59 @@ body {
 }
 
 .dropdown-menu > li > a:hover, .dropdown-menu > li > a:focus {
-	color: #fff;
-	text-decoration: none;
-	background-color: #15528F;
+    color: #fff;
+    text-decoration: none;
+    background-color: #15528F;
 }
 
 .dropdown-menu > li > a {
-	padding: 4px 36px 4px 20px;
-	color: #fff;
+    padding: 4px 36px 4px 20px;
+    color: #fff;
 }
 
 .dropdown-menu {
-	background-color: #333;
-	border: 1px solid rgba(0, 0, 0, 0.15);
-	box-shadow: 0px 6px 12px rgba(0, 0, 0, 0.176);
+    background-color: #333;
+    border: 1px solid rgba(0, 0, 0, 0.15);
+    box-shadow: 0px 6px 12px rgba(0, 0, 0, 0.176);
 }
 
 .btn {
-	display: inline-block;
-	*display: inline;
-	padding: 4px 10px 4px;
-	margin-bottom: 0;
-	*margin-left: .3em;
-	font-size: 12px;
-	line-height: 16px;
-	*line-height: 20px;
-	color: #fff;
-	text-align: center;
-	text-shadow: 0 1px 1px rgba(0, 0, 0, 0.75);
-	vertical-align: middle;
-	cursor: pointer;
-	background-color: #2672B6;
-	*background-color: #2672B6;
-	background-image: -ms-linear-gradient(top, #297AB8, #15528F);
-	background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#297AB8), to(#15528F));
-	background-image: -webkit-linear-gradient(top, #297AB8, #15528F);
-	background-image: -o-linear-gradient(top, #297AB8, #15528F);
-	background-image: linear-gradient(top, #297AB8, #15528F);
-	background-image: -moz-linear-gradient(top, #297AB8, #15528F);
-	background-repeat: repeat-x;
-	border: 1px solid #111;
-	*border: 0;
-	border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
-	border-color: #111 #111 #111;
-	border-bottom-color: #111;
-	-webkit-border-radius: 4px;
-	-moz-border-radius: 4px;
-	border-radius: 4px;
-	filter: progid:dximagetransform.microsoft.gradient(startColorstr='#297AB8', endColorstr='#15528F', GradientType=0);
-	filter: progid:dximagetransform.microsoft.gradient(enabled=false);
-	*zoom: 1;
-	-webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.0), 0 1px 2px rgba(0, 0, 0, 0.05);
-	-moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.0), 0 1px 2px rgba(0, 0, 0, 0.05);
-	box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.0), 0 1px 2px rgba(0, 0, 0, 0.05);
+    display: inline-block;
+    *display: inline;
+    padding: 4px 10px 4px;
+    margin-bottom: 0;
+    *margin-left: .3em;
+    font-size: 12px;
+    line-height: 16px;
+    *line-height: 20px;
+    color: #fff;
+    text-align: center;
+    text-shadow: 0 1px 1px rgba(0, 0, 0, 0.75);
+    vertical-align: middle;
+    cursor: pointer;
+    background-color: #2672B6;
+    *background-color: #2672B6;
+    background-image: -ms-linear-gradient(top, #297AB8, #15528F);
+    background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#297AB8), to(#15528F));
+    background-image: -webkit-linear-gradient(top, #297AB8, #15528F);
+    background-image: -o-linear-gradient(top, #297AB8, #15528F);
+    background-image: linear-gradient(top, #297AB8, #15528F);
+    background-image: -moz-linear-gradient(top, #297AB8, #15528F);
+    background-repeat: repeat-x;
+    border: 1px solid #111;
+    *border: 0;
+    border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
+    border-color: #111 #111 #111;
+    border-bottom-color: #111;
+    -webkit-border-radius: 4px;
+    -moz-border-radius: 4px;
+    border-radius: 4px;
+    filter: progid:dximagetransform.microsoft.gradient(startColorstr='#297AB8', endColorstr='#15528F', GradientType=0);
+    filter: progid:dximagetransform.microsoft.gradient(enabled=false);
+    *zoom: 1;
+    -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.0), 0 1px 2px rgba(0, 0, 0, 0.05);
+    -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.0), 0 1px 2px rgba(0, 0, 0, 0.05);
+    box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.0), 0 1px 2px rgba(0, 0, 0, 0.05);
 }
 
 .btn:hover,
@@ -802,78 +802,78 @@ body {
 .btn.active,
 .btn.disabled,
 .btn[disabled] {
-	background-color: #2672B6;
-	*background-color: #2672B6;
-	color: #fff;
+    background-color: #2672B6;
+    *background-color: #2672B6;
+    color: #fff;
 }
 
 .btn:active,
 .btn.active {
-	background-color: #cccccc \9;
-	color: #fff;
+    background-color: #cccccc \9;
+    color: #fff;
 }
 
 .btn:hover {
-	color: #fff;
-	text-decoration: none;
-	background-color: #2672B6;
-	*background-color: #2672B6;
-	background-position: 0 -150px;
-	-webkit-transition: background-position 0.0s linear;
-	-moz-transition: background-position 0.0s linear;
-	-ms-transition: background-position 0.0s linear;
-	-o-transition: background-position 0.0s linear;
-	transition: background-position 0.0s linear;
+    color: #fff;
+    text-decoration: none;
+    background-color: #2672B6;
+    *background-color: #2672B6;
+    background-position: 0 -150px;
+    -webkit-transition: background-position 0.0s linear;
+    -moz-transition: background-position 0.0s linear;
+    -ms-transition: background-position 0.0s linear;
+    -o-transition: background-position 0.0s linear;
+    transition: background-position 0.0s linear;
 }
 
 .btn:focus {
-	outline: thin dotted #333;
-	outline: 5px auto -webkit-focus-ring-color;
-	outline-offset: -2px;
-	color: #fff;
+    outline: thin dotted #333;
+    outline: 5px auto -webkit-focus-ring-color;
+    outline-offset: -2px;
+    color: #fff;
 }
 
 .btn.active,
 .btn:active {
-	background-color: #2672B6;
-	background-color: #2672B6 \9;
-	background-image: none;
-	color: #fff;
-	outline: 0;
-	-webkit-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
-	-moz-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
-	box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
+    background-color: #2672B6;
+    background-color: #2672B6 \9;
+    background-image: none;
+    color: #fff;
+    outline: 0;
+    -webkit-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
+    -moz-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
+    box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
 }
 
 .btn.disabled,
 .btn[disabled] {
-	cursor: default;
-	background-color: #15528F;
-	background-image: none;
-	opacity: 0.65;
-	filter: alpha(opacity=65);
-	-webkit-box-shadow: none;
-	-moz-box-shadow: none;
-	box-shadow: none;
+    cursor: default;
+    background-color: #15528F;
+    background-image: none;
+    opacity: 0.65;
+    filter: alpha(opacity=65);
+    -webkit-box-shadow: none;
+    -moz-box-shadow: none;
+    box-shadow: none;
 }
 
 @media(min-width:768px){
-	.navbar .nav > li > .dropdown-menu:after {
-		position: absolute;
-		top: -6px;
-		right: 12px;
-		display: inline-block;
-		border-right: 6px solid transparent;
-		border-bottom: 6px solid #333;
-		border-left: 6px solid transparent;
-		content: "";
-	}
+    .navbar .nav > li > .dropdown-menu:after {
+        position: absolute;
+        top: -6px;
+        right: 12px;
+        display: inline-block;
+        border-right: 6px solid transparent;
+        border-bottom: 6px solid #333;
+        border-left: 6px solid transparent;
+        content: "";
+    }
 }
 
 pre {
-	color: #fff;
-	background-color: #3d3d3d;
-	border-color: #111;
+    color: #fff;
+    background-color: #3d3d3d;
+    border-color: #111;
 }
 
 /* =======================================================================
@@ -881,15 +881,15 @@ browser.css overrides
 ========================================================================== */
 
 #fileBrowserDialog ul li {
-	margin: 2px 0;
-	list-style-type: none;
-	cursor: pointer;
-	background: #333;
+    margin: 2px 0;
+    list-style-type: none;
+    cursor: pointer;
+    background: #333;
 }
 
 #fileBrowserDialog ul li a:hover {
-	color: #09a2ff;
-	background: none;
+    color: #09a2ff;
+    background: none;
 }
 
 /* =======================================================================
@@ -897,28 +897,28 @@ formWizard.css
 ========================================================================== */
 
 legend.legendStep {
-	color: #ffffff;
-	margin-bottom: 0px;
+    color: #ffffff;
+    margin-bottom: 0px;
 }
 
 div.stepsguide .step p {
-	margin: 12px 0;
-	border-bottom: 4px solid #23AFDC;
+    margin: 12px 0;
+    border-bottom: 4px solid #23AFDC;
 }
 
 div.stepsguide .disabledstep p {
-	border-bottom: 4px solid #1178B3;
+    border-bottom: 4px solid #1178B3;
 }
 
 div.formpaginate .prev, div.formpaginate .next {
-	padding: 3px 6px;
-	color: #fff;
-	cursor: hand;
-	cursor: pointer;
-	background: #2265A1;
-	-webkit-border-radius: 6px;
-		-moz-border-radius: 6px;
-			border-radius: 6px;
+    padding: 3px 6px;
+    color: #fff;
+    cursor: hand;
+    cursor: pointer;
+    background: #2265A1;
+    -webkit-border-radius: 6px;
+        -moz-border-radius: 6px;
+            border-radius: 6px;
 }
 
 /* =======================================================================
@@ -926,25 +926,25 @@ pnotify.css
 ========================================================================== */
 
 .ui-pnotify-container {
-	border: 1px solid #111;
-	background-image: -moz-linear-gradient(#333, #3d3d3d) !important;
-	background-image: linear-gradient(#333, #3d3d3d) !important;
-	background-image: -webkit-linear-gradient(#333, #3d3d3d) !important;
-	background-image: -o-linear-gradient(#333, #3d3d3d) !important;
-	filter: progid:dximagetransform.microsoft.gradient(startColorstr=#333, endColorstr=#3d3d3d) !important;
-	-ms-filter: progid:dximagetransform.microsoft.gradient(startColorstr=#333, endColorstr=#3d3d3d) !important;
-	-moz-box-shadow: 0px 0px 2px #000;
-	-webkit-box-shadow: 0px 0px 2px #000;
-	-o-box-shadow: 0px 0px 2px #000;
-	box-shadow: 0px 0px 2px #000;
+    border: 1px solid #111;
+    background-image: -moz-linear-gradient(#333, #3d3d3d) !important;
+    background-image: linear-gradient(#333, #3d3d3d) !important;
+    background-image: -webkit-linear-gradient(#333, #3d3d3d) !important;
+    background-image: -o-linear-gradient(#333, #3d3d3d) !important;
+    filter: progid:dximagetransform.microsoft.gradient(startColorstr=#333, endColorstr=#3d3d3d) !important;
+    -ms-filter: progid:dximagetransform.microsoft.gradient(startColorstr=#333, endColorstr=#3d3d3d) !important;
+    -moz-box-shadow: 0px 0px 2px #000;
+    -webkit-box-shadow: 0px 0px 2px #000;
+    -o-box-shadow: 0px 0px 2px #000;
+    box-shadow: 0px 0px 2px #000;
 }
 
 .ui-pnotify-title {
-	color: #ffffff;
+    color: #ffffff;
 }
 
 .ui-pnotify-text {
-	color: #ffffff;
+    color: #ffffff;
 }
 
 /* =======================================================================
@@ -952,90 +952,90 @@ tablesorter.css
 ========================================================================== */
 
 .tablesorter {
-	width: 100%;
-	margin-right: auto;
-	margin-left: auto;
-	color: #fff;
-	text-align: left;
-	background-color: #333;
-	border-spacing: 0;
+    width: 100%;
+    margin-right: auto;
+    margin-left: auto;
+    color: #fff;
+    text-align: left;
+    background-color: #333;
+    border-spacing: 0;
 }
 
 .tablesorter th,
 .tablesorter td {
-	padding: 4px;
-	border-top: #222 1px solid;
-	border-left: #222 1px solid;
-	vertical-align: middle;
+    padding: 4px;
+    border-top: #222 1px solid;
+    border-left: #222 1px solid;
+    vertical-align: middle;
 }
 
 .tablesorter th {
-	color: #fff;
-	text-align: center;
-	text-shadow: -1px -1px 0 rgba(0,0,0,0.3);
-	background-color: #15528F;
-	border-collapse: collapse;
-	font-weight: normal;
+    color: #fff;
+    text-align: center;
+    text-shadow: -1px -1px 0 rgba(0,0,0,0.3);
+    background-color: #15528F;
+    border-collapse: collapse;
+    font-weight: normal;
 }
 
 .tablesorter thead .tablesorter-headerDesc {
-	background-color: #297AB8;
-	background-image: url(data:image/gif;base64,R0lGODlhFQAEAIAAAP///////yH5BAEAAAEALAAAAAAVAAQAAAINjB+gC+jP2ptn0WskLQA7);
-	/* background-image: url(../images/tablesorter/asc.gif); */
+    background-color: #297AB8;
+    background-image: url(data:image/gif;base64,R0lGODlhFQAEAIAAAP///////yH5BAEAAAEALAAAAAAVAAQAAAINjB+gC+jP2ptn0WskLQA7);
+    /* background-image: url(../images/tablesorter/asc.gif); */
 }
 
 .tablesorter thead .tablesorter-headerAsc {
-	background-color: #297AB8;
-	background-image: url(data:image/gif;base64,R0lGODlhFQAEAIAAAP///////yH5BAEAAAEALAAAAAAVAAQAAAINjI8Bya2wnINUMopZAQA7);
-	/* background-image: url(../images/tablesorter/desc.gif); */
+    background-color: #297AB8;
+    background-image: url(data:image/gif;base64,R0lGODlhFQAEAIAAAP///////yH5BAEAAAEALAAAAAAVAAQAAAINjI8Bya2wnINUMopZAQA7);
+    /* background-image: url(../images/tablesorter/desc.gif); */
 }
 
 thead.tablesorter-stickyHeader {
-	border-top: 2px solid #222;
-	border-bottom: 2px solid #222;
+    border-top: 2px solid #222;
+    border-bottom: 2px solid #222;
 }
 
 /* Zebra Widget - row alternating colors */
 .tablesorter tr.odd, .sickbeardTable tr.odd {
-	background-color: #333333;
+    background-color: #333333;
 }
 
 .tablesorter tr.even, .sickbeardTable tr.even {
-	background-color: #2e2e2e;
+    background-color: #2e2e2e;
 }
 
 .tablesorter tr.tablesorter-filter-row,
 .tablesorter tr.tablesorter-filter-row td {
-	text-align: center;
-	background: #333;
-	border-bottom: 1px solid #111;
+    text-align: center;
+    background: #333;
+    border-bottom: 1px solid #111;
 }
 
 /* hidden filter row */
 .tablesorter-filter-row.hideme td {
-	/*** *********************************************** ***/
-	/*** change this padding to modify the thickness     ***/
-	/*** of the closed filter row (height = padding x 2) ***/
-	padding: 2px;
-	/*** *********************************************** ***/
-	margin: 0;
-	line-height: 0;
-	cursor: pointer;
+    /*** *********************************************** ***/
+    /*** change this padding to modify the thickness     ***/
+    /*** of the closed filter row (height = padding x 2) ***/
+    padding: 2px;
+    /*** *********************************************** ***/
+    margin: 0;
+    line-height: 0;
+    cursor: pointer;
 }
 
 .tablesorter-filter-row.hideme * {
-	height: 1px;
-	min-height: 0;
-	border: 0;
-	padding: 0;
-	margin: 0;
-	/* don't use visibility: hidden because it disables tabbing */
-	opacity: 0;
-	filter: alpha(opacity=0);
+    height: 1px;
+    min-height: 0;
+    border: 0;
+    padding: 0;
+    margin: 0;
+    /* don't use visibility: hidden because it disables tabbing */
+    opacity: 0;
+    filter: alpha(opacity=0);
 }
 
 #showListTable  tbody {
-	color: #000;
+    color: #000;
 }
 
 /* =======================================================================
@@ -1043,11 +1043,11 @@ token-input.css
 ========================================================================== */
 
 div.token-input-dropdown {
-	background-color: #fff;
-	color: #000;
-	border-left-color: #ccc;
-	border-right-color: #ccc;
-	border-bottom-color: #ccc;
+    background-color: #fff;
+    color: #000;
+    border-left-color: #ccc;
+    border-right-color: #ccc;
+    border-bottom-color: #ccc;
 }
 
 /* =======================================================================
@@ -1055,29 +1055,29 @@ jquery.confirm.css
 ========================================================================== */
 
 #confirmBox{
-	background: #222;
-	width: 460px;
-	position: fixed;
-	left: 50%;
-	top: 50%;
-	margin: -130px 0 0 -230px;
-	border: 1px solid #111;
-	box-shadow: 0px 0px 12px 0px rgba(0, 0, 0, 0.175);
+    background: #222;
+    width: 460px;
+    position: fixed;
+    left: 50%;
+    top: 50%;
+    margin: -130px 0 0 -230px;
+    border: 1px solid #111;
+    box-shadow: 0px 0px 12px 0px rgba(0, 0, 0, 0.175);
 }
 
 #confirmBox h1 {
-	background-color: #15528F;
-	border-bottom: 1px solid #111;
-	color: #fff;
-	margin: 0;
-	font-size: 22px;
-	text-shadow: 0px 1px 1px rgba(0, 0, 0, 0.75);
+    background-color: #15528F;
+    border-bottom: 1px solid #111;
+    color: #fff;
+    margin: 0;
+    font-size: 22px;
+    text-shadow: 0px 1px 1px rgba(0, 0, 0, 0.75);
 }
 
 #confirmBox p {
-	padding-top: 20px;
-	color: #fff;
-	text-shadow: 0px 1px 1px rgba(0, 0, 0, 0.75);
+    padding-top: 20px;
+    color: #fff;
+    text-shadow: 0px 1px 1px rgba(0, 0, 0, 0.75);
 }
 
 /* =======================================================================
@@ -1093,15 +1093,15 @@ bootstrap modal
 }
 
 .modal-header {
-	padding:9px 15px;
-	border-bottom:1px solid #eee;
-	background-color: #15528F;
-	-webkit-border-top-left-radius: 5px;
-	-webkit-border-top-right-radius: 5px;
-	-moz-border-radius-topleft: 5px;
-	-moz-border-radius-topright: 5px;
-	 border-top-left-radius: 5px;
-	 border-top-right-radius: 5px;
+    padding:9px 15px;
+    border-bottom:1px solid #eee;
+    background-color: #15528F;
+    -webkit-border-top-left-radius: 5px;
+    -webkit-border-top-right-radius: 5px;
+    -moz-border-radius-topleft: 5px;
+    -moz-border-radius-topright: 5px;
+     border-top-left-radius: 5px;
+     border-top-right-radius: 5px;
 }
 
 /* =======================================================================
@@ -1109,11 +1109,100 @@ bootstrap panel
 ========================================================================== */
 
 .panel-default {
-	background-color: #3D3D3D;
-	border-color: #111111;
+    background-color: #3D3D3D;
+    border-color: #111111;
 }
 
 .panel-heading {
-	background-color: #3D3D3D !important;
-	color: #FFFFFF !important;
+    background-color: #3D3D3D !important;
+    color: #FFFFFF !important;
+}
+
+
+/* =======================================================================
+new #confirmBox
+@TODO THIS NEEDS TO BE FIXED!
+========================================================================== */
+.modal-dialog {
+    width: 460px;
+    position: fixed;
+    left: 50%;
+    top: 50%;
+    margin: -130px 0 0 -230px;
+    border: 1px solid #111;
+    box-shadow: 0px 0px 12px 0px rgba(0, 0, 0, 0.175);
+    border-radius: 0px;
+}
+
+.modal-content {
+    border-radius: 0px;
+}
+
+.modal-header {
+    border-bottom: none;
+    border-radius: 0px;
+}
+
+.modal-body, .modal-content{
+    background: #222;
+}
+
+.modal-footer {
+    border-top: none;
+}
+
+.confirmation-modal {
+    background: -moz-linear-gradient(rgba(0,0,0,0.5), rgba(0,0,0,0.5)) repeat-x rgba(0,0,0,0.5);
+    background:-webkit-gradient(linear, 0% 0%, 0% 100%, from(rgba(0,0,0,0.5)), to(rgba(0,0,0,0.5))) repeat-x rgba(0,0,0,0.5);
+}
+
+.modal-footer {
+    text-align: center;
+}
+
+.modal-header .close {
+    display: none
+}
+
+.modal-footer button {
+    margin-right: 15px;
+    padding: 2px 15px;
+    text-decoration: none;
+    display: inline-block;
+    color: #fff;
+    text-align:center;
+    text-shadow: 0px 1px 1px rgba(0, 0, 0, 0.75);
+    background-clip: padding-box;
+    border: 1px solid #111;
+    border-radius: 3px;
+    cursor: pointer;
+    -webkit-box-sizing: border-box;
+    -moz-box-sizing: border-box;
+    box-sizing: border-box;
+    background-image: -webkit-linear-gradient(top, rgba(255,255,255,0.08),rgba(255,255,255,0) 50%,rgba(0,0,0,0) 51%,rgba(0,0,0,0.25));
+    background-image: -moz-linear-gradient(top, rgba(255,255,255,0.08),rgba(255,255,255,0) 50%,rgba(0,0,0,0) 51%,rgba(0,0,0,0.25));
+    background-image: -o-linear-gradient(top, rgba(255,255,255,0.08),rgba(255,255,255,0) 50%,rgba(0,0,0,0) 51%,rgba(0,0,0,0.25));
+    background-image: linear-gradient(to bottom, rgba(255,255,255,0.08),rgba(255,255,255,0) 50%,rgba(0,0,0,0) 51%,rgba(0,0,0,0.25));
+    -webkit-box-shadow: inset 0 1px rgba(255,255,255,0.1),inset 0 -1px 3px rgba(0,0,0,0.3),inset 0 0 0 1px rgba(255,255,255,0.08),0 1px 2px rgba(0,0,0,0.15);
+    box-shadow: inset 0 1px rgba(255,255,255,0.1),inset 0 -1px 3px rgba(0,0,0,0.3),inset 0 0 0 1px rgba(255,255,255,0.08),0 1px 2px rgba(0,0,0,0.15);
+}
+
+.modal-footer button:last-child {
+    margin-right:0;
+}
+
+.modal-footer button.confirm {
+    background-color: #3F7636;
+}
+
+.modal-footer button.confirm:hover {
+    background-color: #48873E;
+}
+
+.modal-footer button.cancel {
+    background-color: #8D2D2B;
+}
+
+.modal-footer button.cancel:hover {
+    background-color: #A13331;
 }
-- 
GitLab


From bdf4782dabe389eeaaa629dbf427458786a9aae1 Mon Sep 17 00:00:00 2001
From: labrys <labrys@useres.noreply.github.com>
Date: Sun, 8 Nov 2015 07:54:36 -0500
Subject: [PATCH 210/215] Change from UserDict to NumDict and add unittests

---
 sickbeard/__init__.py  |   2 +-
 sickbeard/common.py    |  81 +++----
 sickbeard/numdict.py   | 126 +++++++++++
 tests/common_tests.py  |  54 +++++
 tests/numdict_tests.py | 499 +++++++++++++++++++++++++++++++++++++++++
 5 files changed, 709 insertions(+), 53 deletions(-)
 create mode 100644 sickbeard/numdict.py
 create mode 100644 tests/numdict_tests.py

diff --git a/sickbeard/__init__.py b/sickbeard/__init__.py
index 311652323..54d8d0b8c 100644
--- a/sickbeard/__init__.py
+++ b/sickbeard/__init__.py
@@ -39,7 +39,7 @@ from sickbeard.providers.generic import GenericProvider
 from sickbeard.config import CheckSection, check_setting_int, check_setting_str, check_setting_float, ConfigMigrator, \
     naming_ep_type
 from sickbeard import searchBacklog, showUpdater, versionChecker, properFinder, autoPostProcesser, \
-    subtitles, traktChecker
+    subtitles, traktChecker, numdict
 from sickbeard import db
 from sickbeard import helpers
 from sickbeard import scheduler
diff --git a/sickbeard/common.py b/sickbeard/common.py
index 7cdd25229..a20d543ea 100644
--- a/sickbeard/common.py
+++ b/sickbeard/common.py
@@ -22,7 +22,13 @@ import operator
 import platform
 import re
 import uuid
-from UserDict import UserDict
+from numdict import NumDict
+
+import sys
+import os.path
+
+sys.path.insert(1, os.path.abspath(os.path.join(os.path.dirname(__file__), '../lib')))
+sys.path.insert(1, os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
 
 from random import shuffle
 
@@ -513,72 +519,43 @@ qualityPresetStrings = {SD: "SD",
                         ANY: "Any"}
 
 
-class StatusStrings(UserDict):
+class StatusStrings(NumDict):
     """
     Dictionary containing strings for status codes
-
-    Keys must be convertible to int or a ValueError will be raised.  This is intentional to match old functionality until
-    the old StatusStrings is fully deprecated, then we will raise a KeyError instead, where appropriate.
-
-    Membership checks using __contains__ (i.e. 'x in y') do not raise a ValueError to match expected dict functionality
     """
     # todo: Deprecate StatusStrings().statusStrings and use StatusStrings() directly
     # todo: Deprecate .has_key and switch to 'x in y'
-    # todo: Switch from raising ValueError to a saner KeyError
-    # todo: Raise KeyError when unable to resolve a missing key instead of returning ''
-    # todo: Make key of None match dict() functionality
+    # todo: Make views return Qualities too
+    # todo:
+
+    qualities = Quality.DOWNLOADED + Quality.SNATCHED + Quality.SNATCHED_PROPER + Quality.SNATCHED_BEST + Quality.ARCHIVED
 
     @property
     def statusStrings(self):  # for backwards compatibility
         return self.data
 
-    def __setitem__(self, key, value):
-        self.data[int(key)] = value  # make sure all keys being assigned values are ints
-
     def __missing__(self, key):
         """
-        If the key is not found, search for the missing key in qualities
+        If the key is not found try to determine a status from Quality
 
-        Keys must be convertible to int or a ValueError will be raised.  This is intentional to match old functionality until
-        the old StatusStrings is fully deprecated, then we will raise a KeyError instead, where appropriate.
+        :param key: A numeric key or None
+        :raise KeyError: if the key is invalid and can't be determined from Quality
         """
-        if isinstance(key, int):  # if the key is already an int...
-            if key in self.keys() + Quality.DOWNLOADED + Quality.SNATCHED + Quality.SNATCHED_PROPER + Quality.SNATCHED_BEST + Quality.ARCHIVED:
-                status, quality = Quality.splitCompositeStatus(key)
-                if quality == Quality.NONE:  # If a Quality is not listed... (shouldn't this be 'if not quality:'?)
-                    return self[status]  # ...return the status...
-                else:
-                    return self[status] + " (" + Quality.qualityStrings[quality] + ")"  # ...otherwise append the quality to the status
-            else:
-                return ''  # return '' to match old functionality when the numeric key is not found
-        return self[int(key)]  # Since the key was not an int, let's try int(key) instead
-
-    # Keep this until all has_key() checks are converted to 'key in dict'
-    # or else has_keys() won't search __missing__ for keys
-    def has_key(self, key):
-        """
-        Override has_key() to test membership using an 'x in y' search
-
-        Keys must be convertible to int or a ValueError will be raised.  This is intentional to match old functionality until
-        the old StatusStrings is fully deprecated, then we will raise a KeyError instead, where appropriate.
-        """
-        return key in self  # This will raise a ValueError if __missing__ can't convert the key to int
+        key = self.numeric(key)  # try to convert the key to a number which will raise KeyError if it can't
+        if key in self.qualities:  # the key wasn't found locally so check in qualities
+            status, quality = Quality.splitCompositeStatus(key)
+            return self[status] if not quality else self[status] + " (" + Quality.qualityStrings[quality] + ")"
+        else:  # the key wasn't found in qualities either
+            raise KeyError(key)  # ... so the key is invalid
 
     def __contains__(self, key):
-        """
-        Checks for existence of key
-
-        Unlike has_key() and __missing__() this will NOT raise a ValueError to match expected functionality
-        when checking for 'key in dict'
-        """
         try:
-            # This will raise a ValueError if we can't convert the key to int
-            return ((int(key) in self.data) or
-                    (int(key) in Quality.DOWNLOADED + Quality.SNATCHED + Quality.SNATCHED_PROPER + Quality.SNATCHED_BEST + Quality.ARCHIVED))
-        except ValueError:  # The key is not numeric and since we only want numeric keys...
-            # ...and we don't want this function to fail...
-            pass  # ...suppress the ValueError and do nothing, the key does not exist
+            key = self.numeric(key)
+            return key in self.data or key in self.qualities
+        except KeyError:
+            return False
 
+# Assign strings to statuses
 statusStrings = StatusStrings(
     {UNKNOWN: "Unknown",
      UNAIRED: "Unaired",
@@ -592,11 +569,11 @@ statusStrings = StatusStrings(
      SUBTITLED: "Subtitled",
      FAILED: "Failed",
      SNATCHED_BEST: "Snatched (Best)"
-     })
+     }
+)
 
 # pylint: disable=R0903
 class Overview(object):
-
     UNAIRED = UNAIRED  # 1
     QUAL = 2
     WANTED = WANTED  # 3
@@ -621,4 +598,4 @@ XML_NSMAP = {'xsi': 'http://www.w3.org/2001/XMLSchema-instance',
 countryList = {'Australia': 'AU',
                'Canada': 'CA',
                'USA': 'US'
-              }
+               }
diff --git a/sickbeard/numdict.py b/sickbeard/numdict.py
new file mode 100644
index 000000000..8549ba6d2
--- /dev/null
+++ b/sickbeard/numdict.py
@@ -0,0 +1,126 @@
+# coding=utf-8
+
+"""
+class NumDict - A dict with numeric keys
+"""
+
+from collections import MutableMapping
+
+
+class NumDict(MutableMapping):
+    """
+    NumDict() -> new empty dictionary
+
+    NumDict(mapping) -> new dictionary initialized from a mapping object's
+        (key, value) pairs
+
+    NumDict(iterable) -> new dictionary initialized as if via:
+        d = {}
+        for k, v in iterable:
+            d[k] = v
+
+    NumDict(**kwargs) -> TypeError - key words cannot be numeric
+
+    All keys must be numeric or None
+    """
+
+    def __init__(self, iterable=None, **kwargs):
+        self.data = {}
+        iterable = kwargs.pop('dict', None) if iterable is None else iterable
+        if iterable is not None:
+            self.update(iterable)
+        if len(kwargs):
+            self.update(kwargs)
+
+    def __len__(self):
+        return len(self.data)
+
+    def __getitem__(self, key):
+        key = self.numeric(key)
+        if key in self.data:
+            return self.data[key]
+        if hasattr(self.__class__, "__missing__"):
+            # noinspection PyUnresolvedReferences
+            return self.__class__.__missing__(self, key)
+        raise KeyError(key)
+
+    def __setitem__(self, key, item):
+        try:
+            key = self.numeric(key)
+        except KeyError:
+            raise TypeError(key)
+        self.data[key] = item
+
+    def __delitem__(self, key):
+        key = self.numeric(key)
+        del self.data[key]
+
+    def __iter__(self):
+        return iter(self.data)
+
+    def __contains__(self, key):
+        try:
+            key = self.numeric(key)
+            return key in self.data
+        except KeyError:
+            return False
+
+    def __repr__(self):
+        return repr(self.data)
+
+    def has_key(self, key):
+        """
+        DEPRECATED: Check for existence of key
+
+        :param key: A numeric key
+        :return: True if key is found, else False
+        """
+        return key in self
+
+    def copy(self):
+        """
+        Create a copy of a NumDict
+        :return: A copy
+        """
+        if self.__class__ is NumDict:
+            return NumDict(self.data.copy())
+        import copy
+        data = self.data
+        try:
+            self.data = {}
+            c = copy.copy(self)
+        finally:
+            self.data = data
+        c.update(self)
+        return c
+
+    @classmethod
+    def fromkeys(cls, iterable, value=None):
+        """
+        Build a NumDict from a dictionary
+
+        :param iterable:
+        :param value:
+        :return:
+        """
+        d = cls()
+        for key in iterable:
+            key = cls.numeric(key)
+            d[key] = value
+        return d
+
+    @staticmethod
+    def numeric(key):
+        """
+        Converts a key to its numeric representation
+
+        :param key: numeric dict key
+        :raise KeyError: if key can't be converted to an integer
+        :return: a numeric key
+        :rtype: int
+        """
+        try:
+            return int(key)
+        except (TypeError, ValueError):
+            if key is not None:
+                raise KeyError(key)
diff --git a/tests/common_tests.py b/tests/common_tests.py
index 024652ab3..eca9777d5 100644
--- a/tests/common_tests.py
+++ b/tests/common_tests.py
@@ -8,6 +8,7 @@ import unittest
 
 from sickbeard import common
 
+
 class QualityTests(unittest.TestCase):
 
     # TODO: repack / proper ? air-by-date ? season rip? multi-ep?
@@ -99,6 +100,59 @@ class QualityTests(unittest.TestCase):
 #        self.assertEqual(common.Quality.FULLHDBLURAY, common.Quality.nameQuality("Test Show - S01E02 - 1080p BluRay - GROUP"))
 #        self.assertEqual(common.Quality.UNKNOWN, common.Quality.nameQuality("Test Show - S01E02 - Unknown - SiCKBEARD"))
 
+
+class StatusStringsTest(unittest.TestCase):
+    # todo: Split tests into separate tests and add additional tests
+    def test_all(self):
+        ss = common.statusStrings
+
+        valid = 1, 112, '1', '112'
+        unused = 122, 99998989899878676, '99998989899878676', None
+        invalid = 'Elephant', (4, 1), [1, 233, 4, None]
+
+        for i in valid:
+            self.assertTrue(i in ss)
+
+        for i in unused:
+            self.assertFalse(i in ss)
+            with self.assertRaises(KeyError):
+                ss[i]
+
+        for i in ss:
+            self.assertEqual(ss[i], ss[str(i)])
+            self.assertEqual(i in ss, str(i) in ss)
+            self.assertEqual(ss.has_key(i), ss.has_key(str(i)))
+            self.assertEqual(i in ss, ss.has_key(i))
+            # self.assertEqual(ss.statusStrings[i], ss.statusStrings[str(i)])  # fails with KeyError
+
+        for i in ss.qualities:
+            self.assertEqual(ss[i], ss[str(i)])
+            self.assertEqual(i in ss, str(i) in ss)
+            self.assertEqual(ss.has_key(i), ss.has_key(str(i)))
+            self.assertEqual(i in ss, ss.has_key(i))
+            # self.assertEqual(ss.statusStrings[i], ss.statusStrings[str(i)])  # fails with KeyError
+
+        for i in invalid:
+            with self.assertRaises(TypeError):
+                ss[i] = 1
+
+        for i in unused:
+            if i is None:
+                with self.assertRaises(TypeError):
+                    ss[str(i)] = 1  # converting None to a string makes this invalid since 'None' != None...
+                ss[i] = 1  # ...but None can still be used as a key
+            else:
+                ss[str(i)] = 1
+            self.assertEqual(ss[i], 1)
+
 if __name__ == '__main__':
+    print "======================="
+    print "STARTING - COMMON TESTS"
+    print "======================="
+    print "######################################################################"
+
     suite = unittest.TestLoader().loadTestsFromTestCase(QualityTests)
     unittest.TextTestRunner(verbosity=2).run(suite)
+
+    suite = unittest.TestLoader().loadTestsFromTestCase(StatusStringsTest)
+    unittest.TextTestRunner(verbosity=2).run(suite)
diff --git a/tests/numdict_tests.py b/tests/numdict_tests.py
new file mode 100644
index 000000000..f2ed80c7b
--- /dev/null
+++ b/tests/numdict_tests.py
@@ -0,0 +1,499 @@
+# coding=utf-8
+
+"""
+Unit Tests for sickbeard/numdict.py
+"""
+
+import sys
+import os.path
+import unittest
+
+sys.path.insert(1, os.path.abspath(os.path.join(os.path.dirname(__file__), '../lib')))
+sys.path.insert(1, os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
+
+from sickbeard.numdict import NumDict
+
+PY3 = sys.version_info >= (3, )
+
+if PY3:
+    from collections import UserDict
+else:
+    from UserDict import UserDict
+
+
+class NumDictTest(unittest.TestCase):
+    """
+    Test the NumDict class
+    """
+    def test_constructors(self):
+        """
+        Test NumDict constructors
+        """
+        # dicts for testing
+        d0 = {}  # Empty dictionary
+        d1 = {1: 'Elephant'}  # Single numeric key
+        d2 = {1: 'Elephant', 2: 'Mouse'}  # Multiple numeric keys
+        d3 = {'3': 'Aardvark'}  # Numeric string key
+        d4 = {'3': 'Aardvark', '4': 'Ant'}  # Multiple numeric string keys
+        d5 = {5: 'Cat', '6': 'Dog'}  # Mixed numeric and numeric string keys
+        d6 = {1: None, '2': None}  # None as values
+        d7 = {None: 'Empty'}  # None as key
+
+        # Construct NumDicts from dicts
+        n = NumDict()
+        n0 = NumDict(d0)
+        n1 = NumDict(d1)
+        n2 = NumDict(d2)
+        n3 = NumDict(d3)
+        n4 = NumDict(d4)
+        n5 = NumDict(d5)
+        n6 = NumDict(d6)
+        n7 = NumDict(d7)
+
+        # Most NumDicts from dicts should compare equal...
+        self.assertEqual(n, {})
+        self.assertEqual(n0, d0)
+        self.assertEqual(n1, d1)
+        self.assertEqual(n2, d2)
+
+        # ...however, numeric keys are not equal to numeric string keys...
+        self.assertNotEqual(n3, d3)
+        self.assertNotEqual(n4, d4)
+        self.assertNotEqual(n5, d5)
+        self.assertNotEqual(n6, d6)
+
+        # ...but None keys work just fine
+        self.assertEqual(n7, d7)
+
+        # Construct dicts from NumDicts
+        dn = dict(n)
+        dn1 = dict(n1)
+        dn2 = dict(n2)
+        dn3 = dict(n3)
+        dn4 = dict(n4)
+        dn5 = dict(n5)
+        dn6 = dict(n6)
+        dn7 = dict(n7)
+
+        # All dicts from NumDicts should compare equal
+        self.assertEqual(n, dn)
+        self.assertEqual(n1, dn1)
+        self.assertEqual(n2, dn2)
+        self.assertEqual(n3, dn3)
+        self.assertEqual(n4, dn4)
+        self.assertEqual(n5, dn5)
+        self.assertEqual(n6, dn6)
+        self.assertEqual(n7, dn7)
+
+        # Construct NumDicts from NumDicts
+        nn = NumDict(n)
+        nn0 = NumDict(n0)
+        nn1 = NumDict(n1)
+        nn2 = NumDict(n2)
+        nn3 = NumDict(n3)
+        nn4 = NumDict(n4)
+        nn5 = NumDict(n5)
+        nn6 = NumDict(n6)
+        nn7 = NumDict(n7)
+
+        # All NumDicts from NumDicts should compare equal
+        self.assertEqual(n, nn)
+        self.assertEqual(n0, nn0)
+        self.assertEqual(n1, nn1)
+        self.assertEqual(n2, nn2)
+        self.assertEqual(n3, nn3)
+        self.assertEqual(n4, nn4)
+        self.assertEqual(n5, nn5)
+        self.assertEqual(n6, nn6)
+        self.assertEqual(n7, nn7)
+
+        # keyword arg constructor should fail
+        with self.assertRaises(TypeError):
+            NumDict(one=1, two=2)  # Raise TypeError since we can't have numeric keywords
+
+        # item sequence constructors work fine...
+        self.assertEqual(NumDict([(1, 'Elephant'), (2, 'Mouse')]), dn2)
+        self.assertEqual(NumDict(dict=[(1, 'Elephant'), (2, 'Mouse')]), dn2)
+        self.assertEqual(NumDict([(1, 'Elephant'), ('2', 'Mouse')]), dn2)
+        self.assertEqual(NumDict(dict=[('1', 'Elephant'), (2, 'Mouse')]), dn2)
+
+        # ...unless you have a non-numeric key
+        with self.assertRaises(TypeError):
+            NumDict([('Rat', 11), ('Snake', 12)])
+        with self.assertRaises(TypeError):
+            NumDict(dict=[('Rat', 11), ('Snake', 12)])
+
+        # combining item sequence constructors with keyword args does not work
+        with self.assertRaises(TypeError):  # Raise TypeError since we can't have numeric keywords
+            NumDict([(1, 'one'), (2, 'two')], two=3, five=4)
+
+        # alternate constructors
+        d8 = {1: 'Echo', 2: 'Echo'}
+
+        self.assertEqual(NumDict.fromkeys('1 2'.split()), dn6)
+        self.assertEqual(NumDict().fromkeys('1 2'.split()), dn6)
+        self.assertEqual(NumDict.fromkeys('1 2'.split(), 'Echo'), d8)
+        self.assertEqual(NumDict().fromkeys('1 2'.split(), 'Echo'), d8)
+        self.assertTrue(n1.fromkeys('1 2'.split()) is not n1)
+        self.assertIsInstance(n1.fromkeys('1 2'.split()), NumDict)
+        self.assertIsInstance(n2.fromkeys('1 2'.split()), NumDict)
+        self.assertIsInstance(n3.fromkeys('1 2'.split()), NumDict)
+        self.assertIsInstance(n4.fromkeys('1 2'.split()), NumDict)
+
+    def test_repr(self):
+        # dicts for testing
+        d0 = {}  # Empty dictionary
+        d1 = {1: 'Elephant'}  # Single numeric key
+        d2 = {1: 'Elephant', 2: 'Mouse'}  # Multiple numeric keys
+        d3 = {'3': 'Aardvark'}  # Numeric string key
+        d4 = {'3': 'Aardvark', '4': 'Ant'}  # Multiple numeric string keys
+        d5 = {5: 'Cat', '6': 'Dog'}  # Mixed numeric and numeric string keys
+        d6 = {1: None, '2': None}  # None as values
+        d7 = {None: 'Empty'}  # None as key
+
+        #  Construct NumDicts from dicts
+        n = NumDict()
+        n0 = NumDict(d0)
+        n1 = NumDict(d1)
+        n2 = NumDict(d2)
+        n3 = NumDict(d3)
+        n4 = NumDict(d4)
+        n5 = NumDict(d5)
+        n6 = NumDict(d6)
+        n7 = NumDict(d7)
+
+        reps = (
+            "{}",
+            "{1: 'Elephant'}",
+            "{1: 'Elephant', 2: 'Mouse'}",
+            "'3': 'Aardvark'",
+            "{'3': 'Aardvark', '4': 'Ant'}",
+            "{5: 'Cat', '6': 'Dog'}",
+            "{1: None, '2': None}",
+            "{None: 'Empty'}",
+        )
+
+        # Most representations of NumDicts should compare equal to dicts...
+        self.assertEqual(str(n), str({}))
+        self.assertEqual(repr(n), repr({}))
+        self.assertIn(repr(n), reps)
+
+        self.assertEqual(str(n0), str(d0))
+        self.assertEqual(repr(n0), repr(d0))
+        self.assertIn(repr(n0), reps)
+
+        self.assertEqual(str(n1), str(d1))
+        self.assertEqual(repr(n1), repr(d1))
+        self.assertIn(repr(n1), reps)
+
+        self.assertEqual(str(n2), str(d2))
+        self.assertEqual(repr(n2), repr(d2))
+        self.assertIn(repr(n2), reps)
+
+        # ...however, numeric keys are not equal to numeric string keys...
+        # ...so the string representations for those are different...
+        self.assertNotEqual(str(n3), str(d3))
+        self.assertNotEqual(repr(n3), repr(d3))
+        self.assertNotIn(repr(n3), reps)
+
+        self.assertNotEqual(str(n4), str(d4))
+        self.assertNotEqual(repr(n4), repr(d4))
+        self.assertNotIn(repr(n4), reps)
+
+        self.assertNotEqual(str(n5), str(d5))
+        self.assertNotEqual(repr(n5), repr(d5))
+        self.assertNotIn(repr(n5), reps)
+
+        self.assertNotEqual(str(n6), str(d6))
+        self.assertNotEqual(repr(n6), repr(d6))
+        self.assertNotIn(repr(n6), reps)
+
+        # ...but None keys work just fine
+        self.assertEqual(str(n7), str(d7))
+        self.assertEqual(repr(n7), repr(d7))
+        self.assertIn(repr(n7), reps)
+
+    def test_rich_comparison_and_len(self):
+        # dicts for testing
+        d0 = {}  # Empty dictionary
+        d1 = {1: 'Elephant'}  # Single numeric key
+        d2 = {1: 'Elephant', 2: 'Mouse'}  # Multiple numeric keys
+
+        # Construct NumDicts from dicts
+        n = NumDict()
+        n0 = NumDict(d0)
+        n1 = NumDict(d1)
+        n2 = NumDict(d2)
+
+        # Construct NumDicts from NumDicts
+        nn = NumDict(n)
+        nn0 = NumDict(n0)
+        nn1 = NumDict(n1)
+        nn2 = NumDict(n2)
+
+        all_dicts = [d0, d1, d2, n, n0, n1, n2, nn, nn0, nn1, nn2]
+        for a in all_dicts:
+            for b in all_dicts:
+                self.assertEqual(a == b, len(a) == len(b))
+
+    def test_dict_access_and_modification(self):
+        # dicts for testing
+        d0 = {}  # Empty dictionary
+        d1 = {1: 'Elephant'}  # Single numeric key
+        d2 = {1: 'Elephant', 2: 'Mouse'}  # Multiple numeric keys
+
+        #  Construct NumDicts from dicts
+        n0 = NumDict()
+        n1 = NumDict(d1)
+        n2 = NumDict(d2)
+
+        # test __getitem__
+        self.assertEqual(n2[1], 'Elephant')
+        with self.assertRaises(KeyError):
+            n1['Mouse']  # key is not numeric
+        with self.assertRaises(KeyError):
+            n1.__getitem__('Mouse')  # key is not numeric
+        with self.assertRaises(KeyError):
+            n1[None]  # key does not exist
+        with self.assertRaises(KeyError):
+            n1.__getitem__(None)  # key does not exist
+
+        # Test __setitem__
+        n3 = NumDict(n2)
+        self.assertEqual(n2, n3)
+
+        n3[2] = 'Frog'
+        self.assertNotEqual(n2, n3)
+
+        # Check None keys and numeric key conversion
+        n3['3'] = 'Armadillo'
+        n3[None] = 'Cockroach'
+
+        # Check long ints
+        n3[12390809518259081208909880312] = 'Squid'
+        n3['12390809518259081208909880312'] = 'Octopus'
+        self.assertEqual(n3[12390809518259081208909880312], 'Octopus')
+
+        with self.assertRaises(TypeError):
+            n3.__setitem__('Gorilla', 1)  # key is not numeric
+        with self.assertRaises(TypeError):
+            n3['Chimpanzee'] = 1  # key is not numeric
+        with self.assertRaises(TypeError):
+            n3[(4, 1)] = 1  # key is not numeric
+        with self.assertRaises(TypeError):
+            n3[[1, 3, 4]] = 1  # key is not numeric and is not hashable
+
+        # Test __delitem__
+        del n3[3]
+        del n3[None]
+        with self.assertRaises(KeyError):
+            del n3[3]  # already deleted
+        with self.assertRaises(KeyError):
+            n3.__delitem__(3)  # already deleted
+        with self.assertRaises(KeyError):
+            del n3['Mouse']  # key would not exist, since it is not numeric
+
+        # Test clear
+        n3.clear()
+        self.assertEqual(n3, {})
+
+        # Test copy()
+        n2a = d2.copy()
+        self.assertEqual(n2, n2a)
+        n2b = n2.copy()
+        self.assertEqual(n2b, n2)
+        n2c = UserDict({1: 'Elephant', 2: 'Mouse'})
+        n2d = n2c.copy()  # making a copy of a UserDict is special cased
+        self.assertEqual(n2c, n2d)
+
+        class MyNumDict(NumDict):
+            """
+            subclass Numdict for testing
+            """
+            def display(self):
+                """
+                add a method to subclass to differentiate from superclass
+                """
+                print('MyNumDict:', self)
+
+        m2 = MyNumDict(n2)
+        m2a = m2.copy()
+        self.assertEqual(m2a, m2)
+
+        m2[1] = 'Frog'
+        self.assertNotEqual(m2a, m2)
+
+        # Test keys, items, values
+        self.assertEqual(sorted(n2.keys()), sorted(d2.keys()))
+        self.assertEqual(sorted(n2.items()), sorted(d2.items()))
+        self.assertEqual(sorted(n2.values()), sorted(d2.values()))
+
+        # Test "in".
+        for i in n2:
+            self.assertIn(i, n2)
+            self.assertEqual(i in n1, i in d1)
+            self.assertEqual(i in n0, i in d0)
+
+        self.assertFalse(None in n2)
+        self.assertEqual(None in n2, None in d2)
+
+        d2[None] = 'Cow'
+        n2[None] = d2[None]
+        self.assertTrue(None in n2)
+        self.assertEqual(None in n2, None in d2)
+
+        self.assertEqual(n2.has_key(None), None in d2)
+        if not PY3:
+            self.assertEqual(n2.has_key(None), d2.has_key(None))
+        self.assertFalse('Penguin' in n2)
+
+        # Test update
+        t = NumDict()
+        t.update(d2)
+        self.assertEqual(t, n2)
+
+        # Test get
+        for i in n2:
+            self.assertEqual(n2.get(i), n2[i])
+            self.assertEqual(n1.get(i), d1.get(i))
+            self.assertEqual(n0.get(i), d0.get(i))
+
+        for i in ['purple', None, 12312301924091284, 23]:
+            self.assertEqual(n2.get(i), d2.get(i), i)
+
+        with self.assertRaises(AssertionError):
+            i = '1'
+            self.assertEqual(n2.get(i), d2.get(i), i)  # d2 expects string key which does not exist
+
+        # Test "in" iteration.
+        n2b = n2
+        for i in range(20):
+            n2[i] = str(i)
+            n2b[str(i)] = str(i)
+        self.assertEqual(n2, n2b)
+
+        ikeys = []
+        for k in n2:
+            ikeys.append(k)
+        self.assertEqual(set(ikeys), set(n2.keys()))
+
+        # Test setdefault
+        x = 1
+        t = NumDict()
+        self.assertEqual(t.setdefault(x, 42), 42)
+        self.assertEqual(t.setdefault(x, '42'), 42)
+        self.assertNotEqual(t.setdefault(x, 42), '42')
+        self.assertNotEqual(t.setdefault(x, '42'), '42')
+        self.assertIn(x, t)
+
+        self.assertEqual(t.setdefault(x, 23), 42)
+        self.assertEqual(t.setdefault(x, '23'), 42)
+        self.assertNotEqual(t.setdefault(x, 23), '42')
+        self.assertNotEqual(t.setdefault(x, '23'), '42')
+        self.assertIn(x, t)
+
+        # Test pop
+        x = 1
+        t = NumDict({x: 42})
+        self.assertEqual(t.pop(x), 42)
+        self.assertRaises(KeyError, t.pop, x)
+        self.assertEqual(t.pop(x, 1), 1)
+        t[x] = 42
+        self.assertEqual(t.pop(x, 1), 42)
+
+        # Test popitem
+        x = 1
+        t = NumDict({x: 42})
+        self.assertEqual(t.popitem(), (x, 42))
+        self.assertRaises(KeyError, t.popitem)
+
+    def test_missing(self):
+        # Make sure NumDict doesn't have a __missing__ method
+        self.assertEqual(hasattr(NumDict, "__missing__"), False)
+
+        class D(NumDict):
+            """
+            subclass defines __missing__ method returning a value
+            """
+            def __missing__(self, key):
+                return 42
+
+        d = D({1: 2, 3: 4})
+        self.assertEqual(d[1], 2)
+        self.assertEqual(d[3], 4)
+        self.assertNotIn(2, d)
+        self.assertNotIn(2, d.keys())
+        self.assertEqual(d[2], 42)
+
+        class E(NumDict):
+            """
+            subclass defines __missing__ method raising RuntimeError
+            """
+            def __missing__(self, key):
+                raise RuntimeError(key)
+
+        e = E()
+        try:
+            e[42]
+        except RuntimeError as err:
+            self.assertEqual(err.args, (42,))
+        else:
+            self.fail("e[42] didn't raise RuntimeError")
+
+        class F(NumDict):
+            """
+            subclass sets __missing__ instance variable (no effect)
+            """
+            def __init__(self):
+                # An instance variable __missing__ should have no effect
+                self.__missing__ = lambda key: None
+                NumDict.__init__(self)
+        f = F()
+        try:
+            f[42]
+        except KeyError as err:
+            self.assertEqual(err.args, (42,))
+        else:
+            self.fail("f[42] didn't raise KeyError")
+
+        class G(NumDict):
+            """
+            subclass doesn't define __missing__ at a all
+            """
+            pass
+
+        g = G()
+        try:
+            g[42]
+        except KeyError as err:
+            self.assertEqual(err.args, (42,))
+        else:
+            self.fail("g[42] didn't raise KeyError")
+
+        class H(D):
+            """
+            subclass calls super classes __missing__ and modifies the value before returning it
+            """
+            def __missing__(self, key):
+                return super(H, self).__missing__(key) + 1
+
+        h = H()
+        self.assertEqual(h[None], d[None]+1)
+
+
+def test_main():
+    import logging
+    log = logging.getLogger(__name__)
+    logging.basicConfig(level=logging.DEBUG)
+
+    log.info("=======================")
+    log.info("STARTING - COMMON TESTS")
+    log.info("=======================")
+    log.info("######################################################################")
+
+    suite = unittest.TestLoader().loadTestsFromTestCase(NumDictTest)
+    unittest.TextTestRunner(verbosity=2).run(suite)
+
+
+if __name__ == "__main__":
+    test_main()
-- 
GitLab


From 38e56b3bf5b168942b1d1e4ae5537dfd2da59edf Mon Sep 17 00:00:00 2001
From: labrys <labrys@useres.noreply.github.com>
Date: Sun, 15 Nov 2015 10:25:54 -0500
Subject: [PATCH 211/215] Streamline common tests and PEPs

---
 tests/common_tests.py | 284 ++++++++++++++++++++++++++++--------------
 1 file changed, 190 insertions(+), 94 deletions(-)

diff --git a/tests/common_tests.py b/tests/common_tests.py
index eca9777d5..1ba62d02d 100644
--- a/tests/common_tests.py
+++ b/tests/common_tests.py
@@ -1,155 +1,251 @@
+# coding=utf-8
+
+"""
+Unit Tests for sickbeard/common.py
+"""
+
 import sys
 import os.path
+import unittest
 
 sys.path.insert(1, os.path.abspath(os.path.join(os.path.dirname(__file__), '../lib')))
 sys.path.insert(1, os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
 
-import unittest
-
 from sickbeard import common
 
 
 class QualityTests(unittest.TestCase):
+    """
+    Test Case for common.Quality
+    """
 
     # TODO: repack / proper ? air-by-date ? season rip? multi-ep?
 
     def test_SDTV(self):
-        self.assertEqual(common.Quality.SDTV, common.Quality.nameQuality("Test.Show.S01E02.PDTV.XViD-GROUP"))
-        self.assertEqual(common.Quality.SDTV, common.Quality.nameQuality("Test.Show.S01E02.PDTV.x264-GROUP"))
-        self.assertEqual(common.Quality.SDTV, common.Quality.nameQuality("Test.Show.S01E02.HDTV.XViD-GROUP"))
-        self.assertEqual(common.Quality.SDTV, common.Quality.nameQuality("Test.Show.S01E02.HDTV.x264-GROUP"))
-        self.assertEqual(common.Quality.SDTV, common.Quality.nameQuality("Test.Show.S01E02.DSR.XViD-GROUP"))
-        self.assertEqual(common.Quality.SDTV, common.Quality.nameQuality("Test.Show.S01E02.DSR.x264-GROUP"))
-        self.assertEqual(common.Quality.SDTV, common.Quality.nameQuality("Test.Show.S01E02.TVRip.XViD-GROUP"))
-        self.assertEqual(common.Quality.SDTV, common.Quality.nameQuality("Test.Show.S01E02.TVRip.x264-GROUP"))
-        self.assertEqual(common.Quality.SDTV, common.Quality.nameQuality("Test.Show.S01E02.WEBRip.XViD-GROUP"))
-        self.assertEqual(common.Quality.SDTV, common.Quality.nameQuality("Test.Show.S01E02.WEBRip.x264-GROUP"))
-        self.assertEqual(common.Quality.SDTV, common.Quality.nameQuality("Test.Show.S01E02.WEB-DL.x264-GROUP"))
-        self.assertEqual(common.Quality.SDTV, common.Quality.nameQuality("Test.Show.S01E02.WEB-DL.AAC2.0.H.264-GROUP"))
-        self.assertEqual(common.Quality.SDTV, common.Quality.nameQuality("Test.Show.S01E02 WEB-DL H 264-GROUP"))
-        self.assertEqual(common.Quality.SDTV, common.Quality.nameQuality("Test.Show.S01E02_WEB-DL_H_264-GROUP"))
-        self.assertEqual(common.Quality.SDTV, common.Quality.nameQuality("Test.Show.S01E02.WEB-DL.AAC2.0.H264-GROUP"))
+        """
+        Test SDTV against nameQuality
+        """
+        tests = [
+            "Test.Show.S01E02.PDTV.XViD-GROUP",
+            "Test.Show.S01E02.PDTV.x264-GROUP",
+            "Test.Show.S01E02.HDTV.XViD-GROUP",
+            "Test.Show.S01E02.HDTV.x264-GROUP",
+            "Test.Show.S01E02.DSR.XViD-GROUP",
+            "Test.Show.S01E02.DSR.x264-GROUP",
+            "Test.Show.S01E02.TVRip.XViD-GROUP",
+            "Test.Show.S01E02.TVRip.x264-GROUP",
+            "Test.Show.S01E02.WEBRip.XViD-GROUP",
+            "Test.Show.S01E02.WEBRip.x264-GROUP",
+            "Test.Show.S01E02.WEB-DL.x264-GROUP",
+            "Test.Show.S01E02.WEB-DL.AAC2.0.H.264-GROUP",
+            "Test.Show.S01E02 WEB-DL H 264-GROUP",
+            "Test.Show.S01E02_WEB-DL_H_264-GROUP",
+            "Test.Show.S01E02.WEB-DL.AAC2.0.H264-GROUP",
+        ]
+        for test in tests:
+            self.assertEqual(common.Quality.SDTV, common.Quality.nameQuality(test))
 
     def test_SDDVD(self):
-        self.assertEqual(common.Quality.SDDVD, common.Quality.nameQuality("Test.Show.S01E02.DVDRiP.XViD-GROUP"))
-        self.assertEqual(common.Quality.SDDVD, common.Quality.nameQuality("Test.Show.S01E02.DVDRiP.DiVX-GROUP"))
-        self.assertEqual(common.Quality.SDDVD, common.Quality.nameQuality("Test.Show.S01E02.DVDRiP.x264-GROUP"))
-        self.assertEqual(common.Quality.SDDVD, common.Quality.nameQuality("Test.Show.S01E02.DVDRip.WS.XViD-GROUP"))
-        self.assertEqual(common.Quality.SDDVD, common.Quality.nameQuality("Test.Show.S01E02.DVDRip.WS.DiVX-GROUP"))
-        self.assertEqual(common.Quality.SDDVD, common.Quality.nameQuality("Test.Show.S01E02.DVDRip.WS.x264-GROUP"))
-        self.assertEqual(common.Quality.SDDVD, common.Quality.nameQuality("Test.Show.S01E02.BDRIP.XViD-GROUP"))
-        self.assertEqual(common.Quality.SDDVD, common.Quality.nameQuality("Test.Show.S01E02.BDRIP.DiVX-GROUP"))
-        self.assertEqual(common.Quality.SDDVD, common.Quality.nameQuality("Test.Show.S01E02.BDRIP.x264-GROUP"))
-        self.assertEqual(common.Quality.SDDVD, common.Quality.nameQuality("Test.Show.S01E02.BDRIP.WS.XViD-GROUP"))
-        self.assertEqual(common.Quality.SDDVD, common.Quality.nameQuality("Test.Show.S01E02.BDRIP.WS.DiVX-GROUP"))
-        self.assertEqual(common.Quality.SDDVD, common.Quality.nameQuality("Test.Show.S01E02.BDRIP.WS.x264-GROUP"))
+        """
+        Test SDDVD against nameQuality
+        """
+        tests = [
+            "Test.Show.S01E02.DVDRiP.XViD-GROUP",
+            "Test.Show.S01E02.DVDRiP.DiVX-GROUP",
+            "Test.Show.S01E02.DVDRiP.x264-GROUP",
+            "Test.Show.S01E02.DVDRip.WS.XViD-GROUP",
+            "Test.Show.S01E02.DVDRip.WS.DiVX-GROUP",
+            "Test.Show.S01E02.DVDRip.WS.x264-GROUP",
+            "Test.Show.S01E02.BDRIP.XViD-GROUP",
+            "Test.Show.S01E02.BDRIP.DiVX-GROUP",
+            "Test.Show.S01E02.BDRIP.x264-GROUP",
+            "Test.Show.S01E02.BDRIP.WS.XViD-GROUP",
+            "Test.Show.S01E02.BDRIP.WS.DiVX-GROUP",
+            "Test.Show.S01E02.BDRIP.WS.x264-GROUP",
+        ]
+        for test in tests:
+            self.assertEqual(common.Quality.SDDVD, common.Quality.nameQuality(test))
 
     def test_HDTV(self):
-        self.assertEqual(common.Quality.HDTV, common.Quality.nameQuality("Test.Show.S01E02.720p.HDTV.x264-GROUP"))
-        self.assertEqual(common.Quality.HDTV, common.Quality.nameQuality("Test.Show.S01E02.HR.WS.PDTV.x264-GROUP"))
+        """
+        Test HDTV against nameQuality
+        """
+        tests = [
+            "Test.Show.S01E02.720p.HDTV.x264-GROUP",
+            "Test.Show.S01E02.HR.WS.PDTV.x264-GROUP",
+        ]
+        for test in tests:
+            self.assertEqual(common.Quality.HDTV, common.Quality.nameQuality(test))
 
     def test_RAWHDTV(self):
-        self.assertEqual(common.Quality.RAWHDTV, common.Quality.nameQuality("Test.Show.S01E02.720p.HDTV.DD5.1.MPEG2-GROUP"))
-        self.assertEqual(common.Quality.RAWHDTV, common.Quality.nameQuality("Test.Show.S01E02.1080i.HDTV.DD2.0.MPEG2-GROUP"))
-        self.assertEqual(common.Quality.RAWHDTV, common.Quality.nameQuality("Test.Show.S01E02.1080i.HDTV.H.264.DD2.0-GROUP"))
-        self.assertEqual(common.Quality.RAWHDTV, common.Quality.nameQuality("Test Show - S01E02 - 1080i HDTV MPA1.0 H.264 - GROUP"))
-        self.assertEqual(common.Quality.RAWHDTV, common.Quality.nameQuality("Test.Show.S01E02.1080i.HDTV.DD.5.1.h264-GROUP"))
+        """
+        Test RAWHDTV against nameQuality
+        """
+        tests = [
+            "Test.Show.S01E02.720p.HDTV.DD5.1.MPEG2-GROUP",
+            "Test.Show.S01E02.1080i.HDTV.DD2.0.MPEG2-GROUP",
+            "Test.Show.S01E02.1080i.HDTV.H.264.DD2.0-GROUP",
+            "Test Show - S01E02 - 1080i HDTV MPA1.0 H.264 - GROUP",
+            "Test.Show.S01E02.1080i.HDTV.DD.5.1.h264-GROUP",
+        ]
+        for test in tests:
+            self.assertEqual(common.Quality.RAWHDTV, common.Quality.nameQuality(test))
 
     def test_FULLHDTV(self):
-        self.assertEqual(common.Quality.FULLHDTV, common.Quality.nameQuality("Test.Show.S01E02.1080p.HDTV.x264-GROUP"))
+        """
+        Test FULLHDTV against nameQuality
+        """
+        tests = [
+            "Test.Show.S01E02.1080p.HDTV.x264-GROUP",
+        ]
+        for test in tests:
+            self.assertEqual(common.Quality.FULLHDTV, common.Quality.nameQuality(test))
 
     def test_HDWEBDL(self):
-        self.assertEqual(common.Quality.HDWEBDL, common.Quality.nameQuality("Test.Show.S01E02.720p.WEB-DL-GROUP"))
-        self.assertEqual(common.Quality.HDWEBDL, common.Quality.nameQuality("Test.Show.S01E02.720p.WEBRip-GROUP"))
-        self.assertEqual(common.Quality.HDWEBDL, common.Quality.nameQuality("Test.Show.S01E02.WEBRip.720p.H.264.AAC.2.0-GROUP"))
-        self.assertEqual(common.Quality.HDWEBDL, common.Quality.nameQuality("Test.Show.S01E02.720p.WEB-DL.AAC2.0.H.264-GROUP"))
-        self.assertEqual(common.Quality.HDWEBDL, common.Quality.nameQuality("Test Show S01E02 720p WEB-DL AAC2 0 H 264-GROUP"))
-        self.assertEqual(common.Quality.HDWEBDL, common.Quality.nameQuality("Test_Show.S01E02_720p_WEB-DL_AAC2.0_H264-GROUP"))
-        self.assertEqual(common.Quality.HDWEBDL, common.Quality.nameQuality("Test.Show.S01E02.720p.WEB-DL.AAC2.0.H264-GROUP"))
-        self.assertEqual(common.Quality.HDWEBDL, common.Quality.nameQuality("Test.Show.S01E02.720p.iTunes.Rip.H264.AAC-GROUP"))
+        """
+        Test HDWEBDL against nameQuality
+        """
+        tests = [
+            "Test.Show.S01E02.720p.WEB-DL-GROUP",
+            "Test.Show.S01E02.720p.WEBRip-GROUP",
+            "Test.Show.S01E02.WEBRip.720p.H.264.AAC.2.0-GROUP",
+            "Test.Show.S01E02.720p.WEB-DL.AAC2.0.H.264-GROUP",
+            "Test Show S01E02 720p WEB-DL AAC2 0 H 264-GROUP",
+            "Test_Show.S01E02_720p_WEB-DL_AAC2.0_H264-GROUP",
+            "Test.Show.S01E02.720p.WEB-DL.AAC2.0.H264-GROUP",
+            "Test.Show.S01E02.720p.iTunes.Rip.H264.AAC-GROUP",
+        ]
+        for test in tests:
+            self.assertEqual(common.Quality.HDWEBDL, common.Quality.nameQuality(test))
 
     def test_FULLHDWEBDL(self):
-        self.assertEqual(common.Quality.FULLHDWEBDL, common.Quality.nameQuality("Test.Show.S01E02.1080p.WEB-DL-GROUP"))
-        self.assertEqual(common.Quality.FULLHDWEBDL, common.Quality.nameQuality("Test.Show.S01E02.1080p.WEBRip-GROUP"))
-        self.assertEqual(common.Quality.FULLHDWEBDL, common.Quality.nameQuality("Test.Show.S01E02.WEBRip.1080p.H.264.AAC.2.0-GROUP"))
-        self.assertEqual(common.Quality.FULLHDWEBDL, common.Quality.nameQuality("Test.Show.S01E02.WEBRip.1080p.H264.AAC.2.0-GROUP"))
-        self.assertEqual(common.Quality.FULLHDWEBDL, common.Quality.nameQuality("Test.Show.S01E02.1080p.iTunes.H.264.AAC-GROUP"))
-        self.assertEqual(common.Quality.FULLHDWEBDL, common.Quality.nameQuality("Test Show S01E02 1080p iTunes H 264 AAC-GROUP"))
-        self.assertEqual(common.Quality.FULLHDWEBDL, common.Quality.nameQuality("Test_Show_S01E02_1080p_iTunes_H_264_AAC-GROUP"))
+        """
+        Test FULLHDWEBDL against nameQuality
+        """
+        tests = [
+            "Test.Show.S01E02.1080p.WEB-DL-GROUP",
+            "Test.Show.S01E02.1080p.WEBRip-GROUP",
+            "Test.Show.S01E02.WEBRip.1080p.H.264.AAC.2.0-GROUP",
+            "Test.Show.S01E02.WEBRip.1080p.H264.AAC.2.0-GROUP",
+            "Test.Show.S01E02.1080p.iTunes.H.264.AAC-GROUP",
+            "Test Show S01E02 1080p iTunes H 264 AAC-GROUP",
+            "Test_Show_S01E02_1080p_iTunes_H_264_AAC-GROUP",
+        ]
+        for test in tests:
+            self.assertEqual(common.Quality.FULLHDWEBDL, common.Quality.nameQuality(test))
 
     def test_HDBLURAY(self):
-        self.assertEqual(common.Quality.HDBLURAY, common.Quality.nameQuality("Test.Show.S01E02.720p.BluRay.x264-GROUP"))
-        self.assertEqual(common.Quality.HDBLURAY, common.Quality.nameQuality("Test.Show.S01E02.720p.HDDVD.x264-GROUP"))
+        """
+        Test HDBLURAY against nameQuality
+        """
+        tests = [
+            "Test.Show.S01E02.720p.BluRay.x264-GROUP",
+            "Test.Show.S01E02.720p.HDDVD.x264-GROUP",
+        ]
+        for test in tests:
+            self.assertEqual(common.Quality.HDBLURAY, common.Quality.nameQuality(test))
 
     def test_FULLHDBLURAY(self):
-        self.assertEqual(common.Quality.FULLHDBLURAY, common.Quality.nameQuality("Test.Show.S01E02.1080p.BluRay.x264-GROUP"))
-        self.assertEqual(common.Quality.FULLHDBLURAY, common.Quality.nameQuality("Test.Show.S01E02.1080p.HDDVD.x264-GROUP"))
+        """
+        Test FULLHDBLURAY against nameQuality
+        """
+        tests = [
+            "Test.Show.S01E02.1080p.BluRay.x264-GROUP",
+            "Test.Show.S01E02.1080p.HDDVD.x264-GROUP",
+        ]
+        for test in tests:
+            self.assertEqual(common.Quality.FULLHDBLURAY, common.Quality.nameQuality(test))
 
     def test_UNKNOWN(self):
-        self.assertEqual(common.Quality.UNKNOWN, common.Quality.nameQuality("Test.Show.S01E02-SiCKBEARD"))
-
-#    def test_reverse_parsing(self):
-#        self.assertEqual(common.Quality.SDTV, common.Quality.nameQuality("Test Show - S01E02 - SDTV - GROUP"))
-#        self.assertEqual(common.Quality.SDDVD, common.Quality.nameQuality("Test Show - S01E02 - SD DVD - GROUP"))
-#        self.assertEqual(common.Quality.HDTV, common.Quality.nameQuality("Test Show - S01E02 - HDTV - GROUP"))
-#        self.assertEqual(common.Quality.RAWHDTV, common.Quality.nameQuality("Test Show - S01E02 - RawHD - GROUP"))
-#        self.assertEqual(common.Quality.FULLHDTV, common.Quality.nameQuality("Test Show - S01E02 - 1080p HDTV - GROUP"))
-#        self.assertEqual(common.Quality.HDWEBDL, common.Quality.nameQuality("Test Show - S01E02 - 720p WEB-DL - GROUP"))
-#        self.assertEqual(common.Quality.FULLHDWEBDL, common.Quality.nameQuality("Test Show - S01E02 - 1080p WEB-DL - GROUP"))
-#        self.assertEqual(common.Quality.HDBLURAY, common.Quality.nameQuality("Test Show - S01E02 - 720p BluRay - GROUP"))
-#        self.assertEqual(common.Quality.FULLHDBLURAY, common.Quality.nameQuality("Test Show - S01E02 - 1080p BluRay - GROUP"))
-#        self.assertEqual(common.Quality.UNKNOWN, common.Quality.nameQuality("Test Show - S01E02 - Unknown - SiCKBEARD"))
+        """
+        Test UNKNOWN against nameQuality
+        """
+        tests = [
+            "Test.Show.S01E02-SiCKBEARD",
+        ]
+        for test in tests:
+            self.assertEqual(common.Quality.UNKNOWN, common.Quality.nameQuality(test))
+
+    @unittest.expectedFailure
+    # reverse parsing does not work
+    def test_reverse_parsing(self):
+        """
+        Test reverse parsing for all qualities
+        """
+        tests = [
+            (common.Quality.SDTV, "Test Show - S01E02 - SDTV - GROUP"),
+            (common.Quality.SDDVD, "Test Show - S01E02 - SD DVD - GROUP"),
+            (common.Quality.HDTV, "Test Show - S01E02 - HDTV - GROUP"),
+            (common.Quality.RAWHDTV, "Test Show - S01E02 - RawHD - GROUP"),
+            (common.Quality.FULLHDTV, "Test Show - S01E02 - 1080p HDTV - GROUP"),
+            (common.Quality.HDWEBDL, "Test Show - S01E02 - 720p WEB-DL - GROUP"),
+            (common.Quality.FULLHDWEBDL, "Test Show - S01E02 - 1080p WEB-DL - GROUP"),
+            (common.Quality.HDBLURAY, "Test Show - S01E02 - 720p BluRay - GROUP"),
+            (common.Quality.FULLHDBLURAY, "Test Show - S01E02 - 1080p BluRay - GROUP"),
+            (common.Quality.UNKNOWN, "Test Show - S01E02 - Unknown - SiCKBEARD"),
+        ]
+        for test in tests:
+            quality, test = test
+            self.assertEqual(quality, common.Quality.nameQuality(test),
+                             (quality, common.Quality.nameQuality(test), test))
 
 
 class StatusStringsTest(unittest.TestCase):
-    # todo: Split tests into separate tests and add additional tests
+    """
+    Test Case for common.StatusStrings
+    """
+    # TODO: Split tests into separate tests and add additional tests
+
+    # Until .has_key() is removed from SickRage, we will test that it still works as expected
+    # pylint disable:W0402
+    # Use of a deprecated module
     def test_all(self):
-        ss = common.statusStrings
+        """
+        Run all status strings tests
+        """
+        status_strings = common.statusStrings
 
         valid = 1, 112, '1', '112'
         unused = 122, 99998989899878676, '99998989899878676', None
         invalid = 'Elephant', (4, 1), [1, 233, 4, None]
 
         for i in valid:
-            self.assertTrue(i in ss)
+            self.assertTrue(i in status_strings)
 
         for i in unused:
-            self.assertFalse(i in ss)
+            self.assertFalse(i in status_strings)
             with self.assertRaises(KeyError):
-                ss[i]
-
-        for i in ss:
-            self.assertEqual(ss[i], ss[str(i)])
-            self.assertEqual(i in ss, str(i) in ss)
-            self.assertEqual(ss.has_key(i), ss.has_key(str(i)))
-            self.assertEqual(i in ss, ss.has_key(i))
-            # self.assertEqual(ss.statusStrings[i], ss.statusStrings[str(i)])  # fails with KeyError
-
-        for i in ss.qualities:
-            self.assertEqual(ss[i], ss[str(i)])
-            self.assertEqual(i in ss, str(i) in ss)
-            self.assertEqual(ss.has_key(i), ss.has_key(str(i)))
-            self.assertEqual(i in ss, ss.has_key(i))
-            # self.assertEqual(ss.statusStrings[i], ss.statusStrings[str(i)])  # fails with KeyError
+                self.assertTrue(status_strings[i])
+
+        for i in status_strings:
+            self.assertEqual(status_strings[i], status_strings[str(i)])
+            self.assertEqual(i in status_strings, str(i) in status_strings)
+            self.assertEqual(status_strings.has_key(i), status_strings.has_key(str(i)))
+            self.assertEqual(i in status_strings, status_strings.has_key(i))
+
+        for i in status_strings.qualities:
+            self.assertEqual(status_strings[i], status_strings[str(i)])
+            self.assertEqual(i in status_strings, str(i) in status_strings)
+            self.assertEqual(status_strings.has_key(i), status_strings.has_key(str(i)))
+            self.assertEqual(i in status_strings, status_strings.has_key(i))
 
         for i in invalid:
             with self.assertRaises(TypeError):
-                ss[i] = 1
+                status_strings[i] = 1
 
         for i in unused:
             if i is None:
                 with self.assertRaises(TypeError):
-                    ss[str(i)] = 1  # converting None to a string makes this invalid since 'None' != None...
-                ss[i] = 1  # ...but None can still be used as a key
+                    status_strings[str(i)] = 1  # 'None' != None
+                status_strings[i] = 1  # ...but None can still be used as a key
             else:
-                ss[str(i)] = 1
-            self.assertEqual(ss[i], 1)
+                status_strings[str(i)] = 1
+            self.assertEqual(status_strings[i], 1)
 
 if __name__ == '__main__':
     print "======================="
     print "STARTING - COMMON TESTS"
     print "======================="
-    print "######################################################################"
 
     suite = unittest.TestLoader().loadTestsFromTestCase(QualityTests)
     unittest.TextTestRunner(verbosity=2).run(suite)
-- 
GitLab


From a1b993727e925792176262c22233b553a2921ec4 Mon Sep 17 00:00:00 2001
From: Alexis Tyler <xo@wvvw.me>
Date: Mon, 16 Nov 2015 13:50:24 +1030
Subject: [PATCH 212/215] fix failedDownload each loop

---
 gui/slick/js/failedDownloads.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/gui/slick/js/failedDownloads.js b/gui/slick/js/failedDownloads.js
index 7b8a16a81..f599e4129 100644
--- a/gui/slick/js/failedDownloads.js
+++ b/gui/slick/js/failedDownloads.js
@@ -23,7 +23,7 @@ $(document).ready(function(){
     });
 
     if($('.removeCheck').length){
-        $('.removeCheck').forEach(function(name) {
+        $('.removeCheck').each(function(name) {
             var lastCheck = null;
             $(name).click(function(event) {
                 if(!lastCheck || !event.shiftKey) {
-- 
GitLab


From 9ec13644e2d3494761c793511e43300a842411de Mon Sep 17 00:00:00 2001
From: Alexis Tyler <xo@wvvw.me>
Date: Mon, 16 Nov 2015 14:07:33 +1030
Subject: [PATCH 213/215] add bootstrap-formhelpers

---
 .build/Gruntfile.js        |   3 +++
 .build/bower.json          |   3 ++-
 gui/slick/js/vender.min.js | Bin 658226 -> 948578 bytes
 3 files changed, 5 insertions(+), 1 deletion(-)

diff --git a/.build/Gruntfile.js b/.build/Gruntfile.js
index 470fad0bf..56bac94ee 100644
--- a/.build/Gruntfile.js
+++ b/.build/Gruntfile.js
@@ -14,6 +14,9 @@ module.exports = function(grunt) {
                         'dist/js/widgets/widget-columnSelector.min.js',
                         'dist/js/widgets/widget-stickyHeaders.min.js',
                         'dist/css/theme.blue.min.css'
+                    ],
+                    'bootstrap-formhelpers': [
+                        'dist/js/bootstrap-formhelpers.min.js'
                     ]
                 },
                 bowerOptions: {
diff --git a/.build/bower.json b/.build/bower.json
index 431e80790..8954ee4c8 100644
--- a/.build/bower.json
+++ b/.build/bower.json
@@ -23,6 +23,7 @@
     "pnotify": "~2.1.0",
     "qtip2": "~2.2.1",
     "tablesorter": "jquery.tablesorter#~2.24.5",
-    "jquery-confirm": "~2.5.2"
+    "jquery-confirm": "~2.5.2",
+    "bootstrap-formhelpers": "~2.3.0"
   }
 }
diff --git a/gui/slick/js/vender.min.js b/gui/slick/js/vender.min.js
index c245f1543ebd54fe038c79c995029862505ada3e..183aaff7e388bfb2a7c84d7927c2a2dd9d0f255f 100644
GIT binary patch
delta 284852
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

delta 355
zcmaF#$#T;)jfO3ZnV!=HU$ZJ~@9|`8)}1a;&S=48&9&X5oKZe;I(HH;*Y^2tY?0#A
zvtrovw`;_)g|aYmZLdvYyHT+{>^7Sz3rKPIeYQ&#+v6hG>p+rsV%Qf}OkaAPJ$(Ds
ztL$7Lq5C)44^(Vl5X3PN#4`-%=&9Jg?>t8ph-YzyqpxE7aUaem5YID^b6Umr2PZkV
zvoLZ^FFeJmzx~)bPMwPFpWV1tgA~m3=Gsy*-De*c_x89WTtOhA4JWv^RZJK3=FZrD
z!I3)~<fQ3m{JAe~_qFAAVcH(x$!$|QeNqO`r0oj(xz#}CehB8#+g@^*Td`vMG;5wC
zAVZ=Yc)}~TZ`#4L6Qp3FIIqO^=Dj?%726rjcsGL-Y_Z}!S+TutGp`p56Ic24joWxd
ix8K{&yRc&W(i^;BpUB_k)nT3Psmsp2-O!59&>jG`vw=1M

-- 
GitLab


From 926c17ac4b00d3db86c68b9da0b5504de6039e15 Mon Sep 17 00:00:00 2001
From: Alexis Tyler <xo@wvvw.me>
Date: Mon, 16 Nov 2015 14:40:28 +1030
Subject: [PATCH 214/215] remove incorrect classes for modal

---
 gui/slick/js/core.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/gui/slick/js/core.js b/gui/slick/js/core.js
index abd37f301..1fcbeae56 100644
--- a/gui/slick/js/core.js
+++ b/gui/slick/js/core.js
@@ -3,7 +3,7 @@
 var srRoot = getMeta('srRoot'),
     themeSpinner = getMeta('themeSpinner'),
     anonURL = getMeta('anonURL'),
-    topImageHtml = '<img src="' + srRoot + '/images/top.gif" width="31" height="11" alt="Jump to top" />',
+    topImageHtml = '<img src="' + srRoot + '/images/top.gif" width="31" height="11" alt="Jump to top" />', // jshint ignore:line
     loading = '<img src="' + srRoot + '/images/loading16' + themeSpinner + '.gif" height="16" width="16" />';
 
 var configSuccess = function(){
-- 
GitLab


From 3d95f8c9346ac6b93b204fc8173e477eb0484284 Mon Sep 17 00:00:00 2001
From: Alexis Tyler <xo@wvvw.me>
Date: Mon, 16 Nov 2015 14:40:46 +1030
Subject: [PATCH 215/215] add jscsrc

---
 .build/.jscsrc | 3 ---
 .jscsrc        | 3 +++
 2 files changed, 3 insertions(+), 3 deletions(-)
 delete mode 100644 .build/.jscsrc
 create mode 100644 .jscsrc

diff --git a/.build/.jscsrc b/.build/.jscsrc
deleted file mode 100644
index f5387e9af..000000000
--- a/.build/.jscsrc
+++ /dev/null
@@ -1,3 +0,0 @@
-{
-    "preset": "jquery"
-}
diff --git a/.jscsrc b/.jscsrc
new file mode 100644
index 000000000..c13d13dcf
--- /dev/null
+++ b/.jscsrc
@@ -0,0 +1,3 @@
+{
+    "validateIndentation": 4
+}
-- 
GitLab