tor-commits
Threads by month
- ----- 2025 -----
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
July 2015
- 18 participants
- 1250 discussions

[translation/tor-messenger-conversationsproperties] Update translations for tor-messenger-conversationsproperties
by translation@torproject.org 27 Jul '15
by translation@torproject.org 27 Jul '15
27 Jul '15
commit 7f006577df590e74d233f67d5ee30610e9113bd3
Author: Translation commit bot <translation(a)torproject.org>
Date: Mon Jul 27 02:16:37 2015 +0000
Update translations for tor-messenger-conversationsproperties
---
ru/conversations.properties | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/ru/conversations.properties b/ru/conversations.properties
index cffddb1..dd54d95 100644
--- a/ru/conversations.properties
+++ b/ru/conversations.properties
@@ -61,11 +61,11 @@ topicCleared=%1$S очистил тему.
# nickname in a conversation.
# %1$S is the old nick.
# %2$S is the new nick.
-nickSet=%1$S is now known as %2$S.
+nickSet=%1$S теперь известен как %2$S.
# LOCALIZATION NOTE (nickSet.you):
# This is displayed as a system message when your nickname is changed.
# %S is your new nick.
-nickSet.you=You are now known as %S.
+nickSet.you=Теперь вы известны как %S.
# LOCALIZATION NOTE (messenger.conversations.selections.ellipsis):
# ellipsis is used when copying a part of a message to show that the message was cut
1
0

[translation/whisperback_completed] Update translations for whisperback_completed
by translation@torproject.org 27 Jul '15
by translation@torproject.org 27 Jul '15
27 Jul '15
commit 07ed1b05dab1655fa1c2eccd001af149f9c0876a
Author: Translation commit bot <translation(a)torproject.org>
Date: Mon Jul 27 02:15:20 2015 +0000
Update translations for whisperback_completed
---
ru/ru.po | 13 +++++++------
1 file changed, 7 insertions(+), 6 deletions(-)
diff --git a/ru/ru.po b/ru/ru.po
index 7a53424..9b5f061 100644
--- a/ru/ru.po
+++ b/ru/ru.po
@@ -3,6 +3,7 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# asdfqwer, 2015
# liquixis <liquixis(a)gmail.com>, 2013
# liquixis <liquixis(a)gmail.com>, 2012
# tavarysh <tavarysh(a)riseup.net>, 2013
@@ -11,8 +12,8 @@ msgstr ""
"Project-Id-Version: The Tor Project\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2014-03-17 17:40+0100\n"
-"PO-Revision-Date: 2015-06-23 09:33+0000\n"
-"Last-Translator: runasand <runa.sandvik(a)gmail.com>\n"
+"PO-Revision-Date: 2015-07-27 02:09+0000\n"
+"Last-Translator: asdfqwer\n"
"Language-Team: Russian (http://www.transifex.com/projects/p/torproject/language/ru/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -82,7 +83,7 @@ msgid ""
"The bug report could not be sent, likely due to network problems. Please try to reconnect to the network and click send again.\n"
"\n"
"If it does not work, you will be offered to save the bug report."
-msgstr "\n\nОтчет об ошибке не может быть отправлен, похоже из-за проблем с сетью. Пожалуйста, попробуйте переподключиться к сети и нажать отправить снова.\n\nЕсли это не работает, вам будет предложено сохранить отчет об ошибке."
+msgstr "\n\nОтчет об ошибке не может быть отправлен, похоже из-за проблем с сетью. Пожалуйста, попробуйте переподключиться к сети и нажать \"Отправить\" снова.\n\nЕсли это не работает, вам будет предложено сохранить отчет об ошибке."
#: ../whisperBack/gui.py:274
msgid "Your message has been sent."
@@ -106,7 +107,7 @@ msgid ""
"As a work-around you can save the bug report as a file on a USB drive and try to send it to us at %s from your email account using another system. Note that your bug report will not be anonymous when doing so unless you take further steps yourself (e.g. using Tor with a throw-away email account).\n"
"\n"
"Do you want to save the bug report to a file?"
-msgstr "Отчет об ошибке не может быть отправлен, возможно в связи с проблемами с сетью.\n\nКак временное решение вы можете сохранить отчет об ошибке в файл на флешку и попытаться отправить его нам в %s с вашего почтового ящика, используя другой компьютер. Заметьте, что ваш отчет об ошибке не будет анонимным если так сделать, если вы не примите следующие меры самостоятельно (например используя Tor вместе с одноразовым почтовым ящиком).\n\nХотите сохранить отчет об ошибке в файл?"
+msgstr "Отчет об ошибке не может быть отправлен, возможно в связи с проблемами с сетью.\n\nКак временное решение вы можете сохранить отчет об ошибке в файл на флешку и попытаться отправить его нам в %s с вашего почтового ящика, используя другой компьютер. Заметьте, что ваш отчет об ошибке не будет анонимным, если вы не примите соответствующие меры самостоятельно (например, использовать Tor вместе с одноразовым почтовым ящиком).\n\nХотите сохранить отчет об ошибке в файл?"
#: ../whisperBack/gui.py:389 ../data/whisperback.ui.h:21
msgid "WhisperBack"
@@ -163,7 +164,7 @@ msgstr "WhisperBack - Прислать отзыв в зашифрованном
msgid ""
"If you want us to encrypt messages when we respond to you, add your key ID, "
"a link to your key, or the key as a public key block:"
-msgstr "Если вы хотите, что бы мы шифровали сообщения, отвечая вам, добавьте ID вашего ключа, ссылку на ваш ключ или ключ в виде блока открытого ключа:"
+msgstr "Если вы хотите, чтобы мы шифровали сообщения, отвечая вам, добавьте ID вашего ключа, ссылку на ваш ключ или ключ в виде блока открытого ключа:"
#: ../data/whisperback.ui.h:22
msgid "Summary"
@@ -179,7 +180,7 @@ msgstr "Дополнительный e-mail адрес для связи с ва
#: ../data/whisperback.ui.h:25
msgid "optional PGP key"
-msgstr "опциональный ключ PGP"
+msgstr "дополнительный ключ PGP"
#: ../data/whisperback.ui.h:26
msgid "Technical details to include"
1
0

[translation/whisperback] Update translations for whisperback
by translation@torproject.org 27 Jul '15
by translation@torproject.org 27 Jul '15
27 Jul '15
commit 4620bfc7ec8d12ddd78d0a83e51f85b48e4444c5
Author: Translation commit bot <translation(a)torproject.org>
Date: Mon Jul 27 02:15:16 2015 +0000
Update translations for whisperback
---
ru/ru.po | 13 +++++++------
1 file changed, 7 insertions(+), 6 deletions(-)
diff --git a/ru/ru.po b/ru/ru.po
index 7a53424..9b5f061 100644
--- a/ru/ru.po
+++ b/ru/ru.po
@@ -3,6 +3,7 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# asdfqwer, 2015
# liquixis <liquixis(a)gmail.com>, 2013
# liquixis <liquixis(a)gmail.com>, 2012
# tavarysh <tavarysh(a)riseup.net>, 2013
@@ -11,8 +12,8 @@ msgstr ""
"Project-Id-Version: The Tor Project\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2014-03-17 17:40+0100\n"
-"PO-Revision-Date: 2015-06-23 09:33+0000\n"
-"Last-Translator: runasand <runa.sandvik(a)gmail.com>\n"
+"PO-Revision-Date: 2015-07-27 02:09+0000\n"
+"Last-Translator: asdfqwer\n"
"Language-Team: Russian (http://www.transifex.com/projects/p/torproject/language/ru/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -82,7 +83,7 @@ msgid ""
"The bug report could not be sent, likely due to network problems. Please try to reconnect to the network and click send again.\n"
"\n"
"If it does not work, you will be offered to save the bug report."
-msgstr "\n\nОтчет об ошибке не может быть отправлен, похоже из-за проблем с сетью. Пожалуйста, попробуйте переподключиться к сети и нажать отправить снова.\n\nЕсли это не работает, вам будет предложено сохранить отчет об ошибке."
+msgstr "\n\nОтчет об ошибке не может быть отправлен, похоже из-за проблем с сетью. Пожалуйста, попробуйте переподключиться к сети и нажать \"Отправить\" снова.\n\nЕсли это не работает, вам будет предложено сохранить отчет об ошибке."
#: ../whisperBack/gui.py:274
msgid "Your message has been sent."
@@ -106,7 +107,7 @@ msgid ""
"As a work-around you can save the bug report as a file on a USB drive and try to send it to us at %s from your email account using another system. Note that your bug report will not be anonymous when doing so unless you take further steps yourself (e.g. using Tor with a throw-away email account).\n"
"\n"
"Do you want to save the bug report to a file?"
-msgstr "Отчет об ошибке не может быть отправлен, возможно в связи с проблемами с сетью.\n\nКак временное решение вы можете сохранить отчет об ошибке в файл на флешку и попытаться отправить его нам в %s с вашего почтового ящика, используя другой компьютер. Заметьте, что ваш отчет об ошибке не будет анонимным если так сделать, если вы не примите следующие меры самостоятельно (например используя Tor вместе с одноразовым почтовым ящиком).\n\nХотите сохранить отчет об ошибке в файл?"
+msgstr "Отчет об ошибке не может быть отправлен, возможно в связи с проблемами с сетью.\n\nКак временное решение вы можете сохранить отчет об ошибке в файл на флешку и попытаться отправить его нам в %s с вашего почтового ящика, используя другой компьютер. Заметьте, что ваш отчет об ошибке не будет анонимным, если вы не примите соответствующие меры самостоятельно (например, использовать Tor вместе с одноразовым почтовым ящиком).\n\nХотите сохранить отчет об ошибке в файл?"
#: ../whisperBack/gui.py:389 ../data/whisperback.ui.h:21
msgid "WhisperBack"
@@ -163,7 +164,7 @@ msgstr "WhisperBack - Прислать отзыв в зашифрованном
msgid ""
"If you want us to encrypt messages when we respond to you, add your key ID, "
"a link to your key, or the key as a public key block:"
-msgstr "Если вы хотите, что бы мы шифровали сообщения, отвечая вам, добавьте ID вашего ключа, ссылку на ваш ключ или ключ в виде блока открытого ключа:"
+msgstr "Если вы хотите, чтобы мы шифровали сообщения, отвечая вам, добавьте ID вашего ключа, ссылку на ваш ключ или ключ в виде блока открытого ключа:"
#: ../data/whisperback.ui.h:22
msgid "Summary"
@@ -179,7 +180,7 @@ msgstr "Дополнительный e-mail адрес для связи с ва
#: ../data/whisperback.ui.h:25
msgid "optional PGP key"
-msgstr "опциональный ключ PGP"
+msgstr "дополнительный ключ PGP"
#: ../data/whisperback.ui.h:26
msgid "Technical details to include"
1
0

[translation/tor-messenger-ircproperties_completed] Update translations for tor-messenger-ircproperties_completed
by translation@torproject.org 27 Jul '15
by translation@torproject.org 27 Jul '15
27 Jul '15
commit b3ce83ed07c6a4e6c52b57bc8ced2454b7b716f6
Author: Translation commit bot <translation(a)torproject.org>
Date: Mon Jul 27 01:46:24 2015 +0000
Update translations for tor-messenger-ircproperties_completed
---
ru/irc.properties | 205 +++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 205 insertions(+)
diff --git a/ru/irc.properties b/ru/irc.properties
new file mode 100644
index 0000000..106e01e
--- /dev/null
+++ b/ru/irc.properties
@@ -0,0 +1,205 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+# LOCALIZATION NOTE (irc.usernameHint):
+# This is displayed inside the accountUsernameInfoWithDescription
+# string defined in imAccounts.properties when the user is
+# configuring an IRC account.
+irc.usernameHint=ник
+
+# LOCALIZATION NOTE (connection.error.*):
+# These will show in the account manager if the account is
+# disconnected because of an error.
+connection.error.lost=Потеряно подключение к серверу
+connection.error.timeOut=Истекло подключение
+connection.error.invalidUsername=%S не разрешенное имя
+connection.error.invalidPassword=Неверный пароль сервера
+connection.error.passwordRequired=Требуется парол
+
+# LOCALIZATION NOTE (joinChat.*):
+# These show up on the join chat menu. An underscore is for the access key.
+joinChat.channel=_Канал
+joinChat.password=_Пароль
+
+# LOCALIZATION NOTE (options.*):
+# These are the protocol specific options shown in the account manager and
+# account wizard windows.
+options.server=Сервер
+options.port=Порт
+options.ssl=Использовать SSL
+options.encoding=Набор символов
+options.quitMessage=Сообщение выхода
+options.partMessage=Сообщение част
+options.showServerTab=Показывать сообщения с сервера
+options.alternateNicks=Другие ники
+
+# LOCALIZATION NOTE (ctcp.version):
+# %1$S is the nickname of the user whose version was requested.
+# %2$S is the version response from the client.
+ctcp.version=%1$S использует "%2$S".
+# LOCALIZATION NOTE (ctcp.time):
+# %1$S is the nickname of the user whose time was requested.
+# %2$S is the time response.
+ctcp.time=Время %1$S - %2$S.
+
+# LOCALZIATION NOTE (command.*):
+# These are the help messages for each command, the %S is the command name
+# Each command first gives the parameter it accepts and then a description of
+# the command.
+command.action=%S <действие>: Совершить действие.
+command.ctcp=%S <ник> <сообщение>: Отправить сообщение пользователю.
+command.chanserv=%S <команда>: Послать команду ChanServ.
+command.deop=%S <ник1>[,<ник2>]*: Снять статус оператора с пользователя. Вы должны быть оператором для этого.
+command.devoice=%S <nick1>[,<nick2>]*: Снять право голоса с пользователя, в дальнейшем запретив его разговор, если канал модерируется (+m). Вы должны быть оператором для этого.
+command.invite2=%S <nick>[ <nick>]* [<channel>]: Пригласить одного или нескольких пользователей присоединиться к текущему или указанному каналу.
+command.join=%S <room1>[ <key1>][,<room2>[ <key2>]]*: Введите один или несколько каналов, дополнительно сопровождая их ключом, если таковой требуется.
+command.kick=%S <nick> [<message>]: Исключить пользователя из канала. Вы должны быть оператором для этого.
+command.list=%S: Вывести список чат-комнат в сети. Предупреждение: некоторые серверы могут разорвать соединение с Вами в процессе этой операции.
+command.memoserv=%S <command>: Послать команду на MemoServ.
+command.modeUser=%S (+|-)<new mode> [<nick>]: Установить или убрать режим пользователя.
+command.modeChannel=%S <channel>[ (+|-)<new mode> [<parameter>][,<parameter>]*]: Просмотреть, установить или убрать режим канала.
+command.msg=%S <nick> <message>: Отправить личное сообщение пользователю (в отличие от канала).
+command.nick=%S <new nickname>: Изменить имя пользователя.
+command.nickserv=%S <command>: Послать команду NickServ.
+command.notice=%S <target> <message>: Послать уведомление пользователю или каналу.
+command.op=%S <nick1>[,<nick2>]*: Предоставить статус оператора канала. Вы должны быть оператором для этого.
+command.operserv=%S <command>: Послать команду OperServ.
+command.part=%S [сообщение]: Отключиться от канала с сообщением.
+command.ping=%S [<nick>]: Спрашивает, какова задержка пользователя (или сервера, если ни один пользователь не указан).
+command.quit=%S <сообщение>: Отключиться от сервера с сообщением.
+command.quote=%S <команда>: Послать команду на сервер.
+command.time=%S: Показать местное время на сервере IRC.
+command.topic=%S [<тема>]: Установить тему канала.
+command.umode=%S (+|-)<Режим>: Снять или установить режим пользователя.
+command.version=%S <ник>: Запросил версию клиента пользователя.
+command.voice=%S <ник1>[,<ник2>]*: Дать право голоса на канале. Вы должны быть оператором.
+command.whois2=%S [<ник>]: Получить информацию о пользователе.
+
+# LOCALIZATION NOTE (message.*):
+# These are shown as system messages in the conversation.
+# %1$S is the nick and %2$S is the nick and host of the user who joined.
+message.join=%1$S [%2$S] вошел в комнату.
+message.rejoined=Вы перевошли в комнату.
+# %1$S is the nick of who kicked you.
+# %2$S is message.kicked.reason, if a kick message was given.
+message.kicked.you=Вы были выкинуты %1$S%2$S.
+# %1$S is the nick that is kicked, %2$S the nick of the person who kicked
+# %1$S. %3$S is message.kicked.reason, if a kick message was given.
+message.kicked=%1$S был выкинут %2$S%3$S.
+# %S is the kick message
+message.kicked.reason=: %S
+# %1$S is the new mode, %2$S is the nickname of the user whose mode
+# was changed, and %3$S is who set the mode.
+message.usermode=Режим %1$S для %2$S был установлен %3$S.
+# %1$S is the new channel mode and %2$S is who set the mode.
+message.channelmode=Режим канала %1$S установлен %2$S.
+# %S is the user's mode.
+message.yourmode=Ваш режим - %S.
+# Could not change the nickname. %S is the user's nick.
+message.nick.fail=Не могу использовать требуемое имя. Ваше имя остается %S.
+# The parameter is the message.parted.reason, if a part message is given.
+message.parted.you=Вы покинули комнату (Part%1$S).
+# %1$S is the user's nick, %2$S is message.parted.reason, if a part message is given.
+message.parted=%1$S покинул комнату (Part%2$S).
+# %S is the part message supplied by the user.
+message.parted.reason=: %S
+# %1$S is the user's nick, %2$S is message.quit2 if a quit message is given.
+message.quit=%1$S покинул комнату (Quit%2$S).
+# The parameter is the quit message given by the user.
+message.quit2=: %S
+# %1$S is the nickname of the user that invited us, %2$S is the conversation
+# name.
+message.inviteReceived=%1$S пригласил вас в %2$S.
+# %1$S is the nickname of the invited user, %2$S is the conversation name
+# they were invited to.
+message.invited=%1$S был приглашен в %2$S.
+# %1$S is the nickname of the invited user, %2$S is the conversation name
+# they were invited to but are already in
+message.alreadyInChannel=%1$S уже в %2$S.
+# %S is the nickname of the user who was summoned.
+message.summoned=%S был создан.
+# %S is the nickname of the user whose WHOIS information follows this message.
+message.whois=WHOIS для %S:
+# %1$S is the nickname of the (offline) user whose WHOWAS information follows this message.
+message.whowas=%1$S отключен. WHOWAS для %1$S:
+# %1$S is the entry description (from tooltip.*), %2$S is its value.
+message.whoisEntry=\\ua0\\ua0\\ua0\\ua0%1$S: %2$S
+# %S is the nickname that is not known to the server.
+message.unknownNick=%S неизвестный ник.
+# %1$S is the nickname of the user who changed the mode and %2$S is the new
+# channel key (password).
+message.channelKeyAdded=%1$S изменил пароль канала на %2$S.
+message.channelKeyRemoved=%S удалил пароль канала.
+# This will be followed by a list of ban masks.
+message.banMasks=Пользователи, подключенные из следующих мест, забанены на %S:
+message.noBanMasks=Нет забаненых мест для %S.
+message.banMaskAdded=Пользователи из мест %1$S были забанены %2$S.
+message.banMaskRemoved=Пользователи из мест %1$S более не забанены %2$S.
+# LOCALIZATION NOTE (message.ping): Semi-colon list of plural forms.
+# See: http://developer.mozilla.org/en/docs/Localization_and_Plurals
+# %1$S is the nickname of the user or the server that was pinged.
+# #2 is the delay (in milliseconds).
+message.ping=Пинг от %1$S составляет #2 мсек.;Пинг от %1$S составляет #2 мсек.
+
+
+# LOCALIZATION NOTE (error.*):
+# These are shown as error messages in the conversation or server tab.
+# %S is the channel name.
+error.noChannel=Нет такого канала: %S.
+error.tooManyChannels=Не подключусь к %S; вы подключены к слишком многим каналам.
+# %1$S is your new nick, %2$S is the kill message from the server.
+error.nickCollision=Ник уже используется, сменяю ник на %1$S [%2$S].
+error.erroneousNickname=%S не разрешенное имя.
+error.banned=Вы были забанены на этом сервере.
+error.bannedSoon=Вы скоро будете забанены на этом сервере.
+error.mode.wrongUser=Вы можете изменять режимы других пользователей.
+# %S is the nickname or channel name that isn't available.
+error.noSuchNick=%S не в сети.
+error.wasNoSuchNick=Такого имени здесь нет: %S
+error.noSuchChannel=Нет такого канала: %S.
+error.unavailable=%S временно недоступен.
+# %S is the channel name.
+error.channelBanned=Вы были забанены на %S.
+error.cannotSendToChannel=Вы не можете посылать сообщения %S.
+error.channelFull=Канал %S полон.
+error.inviteOnly=Вы должны быть приглашены в %S.
+error.nonUniqueTarget=%S не уникальное имя user@host или короткое или вы пытаетесь подключится к слишком многим каналам одновременно.
+error.notChannelOp=Вы не оператор канала %S.
+error.notChannelOwner=Вы не владелец %S.
+error.wrongKey=Не могу присоединиться к %S, неправильный пароль канала.
+error.sendMessageFailed=При отправке вашего последнего сообщения произошла ошибка. Пожалуйста, попытайтесь снова как только соединение будет восстановлено.
+# %1$S is the channel the user tried to join, %2$S is the channel
+# he was forwarded to.
+error.channelForward=Вы не можете присоединиться к %1$S, и будете автоматически перенаправлены в %2$S.
+
+# LOCALIZATION NOTE (tooltip.*):
+# These are the descriptions given in a tooltip with information received
+# from a whois response.
+# The human readable ("realname") description of the user.
+tooltip.realname=Имя
+tooltip.server=Подключен к
+# The username and hostname that the user connects from (usually based on the
+# reverse DNS of the user's IP, but often mangled by the server to
+# protect users).
+tooltip.connectedFrom=Подключен из
+tooltip.registered=Зарегистрирован
+tooltip.registeredAs=Зарегистрирован как
+tooltip.secure=Используется шифрованное соединение
+# The away message of the user
+tooltip.away=Отошел
+tooltip.ircOp=Оператор IRC
+tooltip.bot=Бот
+tooltip.lastActivity=Последняя активность
+# %S is the timespan elapsed since the last activity.
+tooltip.timespan=%S назад
+tooltip.channels=Сейчас на
+
+# %1$S is the server name, %2$S is some generic server information (usually a
+# location or the date the user was last seen).
+tooltip.serverValue=%1$S (%2$S)
+
+# LOCALIZATION NOTE (yes, no):
+# These are used to turn true/false values into a yes/no response.
+yes=Да
+no=Нет
1
0

[translation/tor-messenger-ircproperties] Update translations for tor-messenger-ircproperties
by translation@torproject.org 27 Jul '15
by translation@torproject.org 27 Jul '15
27 Jul '15
commit 28bbb35f2ca8d862d812ce5b831333707b907701
Author: Translation commit bot <translation(a)torproject.org>
Date: Mon Jul 27 01:46:20 2015 +0000
Update translations for tor-messenger-ircproperties
---
ru/irc.properties | 18 +++++++++---------
1 file changed, 9 insertions(+), 9 deletions(-)
diff --git a/ru/irc.properties b/ru/irc.properties
index 990b270..106e01e 100644
--- a/ru/irc.properties
+++ b/ru/irc.properties
@@ -51,22 +51,22 @@ command.action=%S <действие>: Совершить действие.
command.ctcp=%S <ник> <сообщение>: Отправить сообщение пользователю.
command.chanserv=%S <команда>: Послать команду ChanServ.
command.deop=%S <ник1>[,<ник2>]*: Снять статус оператора с пользователя. Вы должны быть оператором для этого.
-command.devoice=%S <nick1>[,<nick2>]*: Remove channel voice status from someone, preventing them from speaking if the channel is moderated (+m). You must be a channel operator to do this.
-command.invite2=%S <nick>[ <nick>]* [<channel>]: Invite one or more nicks to join you in the current channel, or to join the specified channel.
-command.join=%S <room1>[ <key1>][,<room2>[ <key2>]]*: Введите один или несколько каналов, дополнительно сопровождая имена каналов ключом, если таковой требуется.
+command.devoice=%S <nick1>[,<nick2>]*: Снять право голоса с пользователя, в дальнейшем запретив его разговор, если канал модерируется (+m). Вы должны быть оператором для этого.
+command.invite2=%S <nick>[ <nick>]* [<channel>]: Пригласить одного или нескольких пользователей присоединиться к текущему или указанному каналу.
+command.join=%S <room1>[ <key1>][,<room2>[ <key2>]]*: Введите один или несколько каналов, дополнительно сопровождая их ключом, если таковой требуется.
command.kick=%S <nick> [<message>]: Исключить пользователя из канала. Вы должны быть оператором для этого.
command.list=%S: Вывести список чат-комнат в сети. Предупреждение: некоторые серверы могут разорвать соединение с Вами в процессе этой операции.
command.memoserv=%S <command>: Послать команду на MemoServ.
command.modeUser=%S (+|-)<new mode> [<nick>]: Установить или убрать режим пользователя.
-command.modeChannel=%S <channel>[ (+|-)<new mode> [<parameter>][,<parameter>]*]: Get, set or unset a channel mode.
-command.msg=%S <nick> <message>: Send a private message to a user (as opposed to a channel).
+command.modeChannel=%S <channel>[ (+|-)<new mode> [<parameter>][,<parameter>]*]: Просмотреть, установить или убрать режим канала.
+command.msg=%S <nick> <message>: Отправить личное сообщение пользователю (в отличие от канала).
command.nick=%S <new nickname>: Изменить имя пользователя.
command.nickserv=%S <command>: Послать команду NickServ.
-command.notice=%S <target> <message>: Send a notice to a user or channel.
-command.op=%S <nick1>[,<nick2>]*: Grant channel operator status to someone. You must be a channel operator to do this.
+command.notice=%S <target> <message>: Послать уведомление пользователю или каналу.
+command.op=%S <nick1>[,<nick2>]*: Предоставить статус оператора канала. Вы должны быть оператором для этого.
command.operserv=%S <command>: Послать команду OperServ.
command.part=%S [сообщение]: Отключиться от канала с сообщением.
-command.ping=%S [<nick>]: Asks how much lag a user (or the server if no user specified) has.
+command.ping=%S [<nick>]: Спрашивает, какова задержка пользователя (или сервера, если ни один пользователь не указан).
command.quit=%S <сообщение>: Отключиться от сервера с сообщением.
command.quote=%S <команда>: Послать команду на сервер.
command.time=%S: Показать местное время на сервере IRC.
@@ -132,7 +132,7 @@ message.unknownNick=%S неизвестный ник.
message.channelKeyAdded=%1$S изменил пароль канала на %2$S.
message.channelKeyRemoved=%S удалил пароль канала.
# This will be followed by a list of ban masks.
-message.banMasks=Пользователи подключенные из следующих мест забанены на %S:
+message.banMasks=Пользователи, подключенные из следующих мест, забанены на %S:
message.noBanMasks=Нет забаненых мест для %S.
message.banMaskAdded=Пользователи из мест %1$S были забанены %2$S.
message.banMaskRemoved=Пользователи из мест %1$S более не забанены %2$S.
1
0

[translation/tor-messenger-ircproperties] Update translations for tor-messenger-ircproperties
by translation@torproject.org 27 Jul '15
by translation@torproject.org 27 Jul '15
27 Jul '15
commit c14ee81cc5c066539168263d08400c988e3c8b7d
Author: Translation commit bot <translation(a)torproject.org>
Date: Mon Jul 27 01:16:18 2015 +0000
Update translations for tor-messenger-ircproperties
---
ru/irc.properties | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/ru/irc.properties b/ru/irc.properties
index 7141aa9..990b270 100644
--- a/ru/irc.properties
+++ b/ru/irc.properties
@@ -53,9 +53,9 @@ command.chanserv=%S <команда>: Послать команду ChanSe
command.deop=%S <ник1>[,<ник2>]*: Снять статус оператора с пользователя. Вы должны быть оператором для этого.
command.devoice=%S <nick1>[,<nick2>]*: Remove channel voice status from someone, preventing them from speaking if the channel is moderated (+m). You must be a channel operator to do this.
command.invite2=%S <nick>[ <nick>]* [<channel>]: Invite one or more nicks to join you in the current channel, or to join the specified channel.
-command.join=%S <room1>[ <key1>][,<room2>[ <key2>]]*: Enter one or more channels, optionally providing a channel key for each if needed.
-command.kick=%S <nick> [<message>]: Remove someone from a channel. You must be a channel operator to do this.
-command.list=%S: Display a list of chat rooms on the network. Warning, some servers may disconnect you upon doing this.
+command.join=%S <room1>[ <key1>][,<room2>[ <key2>]]*: Введите один или несколько каналов, дополнительно сопровождая имена каналов ключом, если таковой требуется.
+command.kick=%S <nick> [<message>]: Исключить пользователя из канала. Вы должны быть оператором для этого.
+command.list=%S: Вывести список чат-комнат в сети. Предупреждение: некоторые серверы могут разорвать соединение с Вами в процессе этой операции.
command.memoserv=%S <command>: Послать команду на MemoServ.
command.modeUser=%S (+|-)<new mode> [<nick>]: Установить или убрать режим пользователя.
command.modeChannel=%S <channel>[ (+|-)<new mode> [<parameter>][,<parameter>]*]: Get, set or unset a channel mode.
1
0

[tor-commits] [translation/tor-messenger-conversationsproperties_completed] Update translations for tor-messenger-conversationsproperties_completed
by translation@torproject.org 26 Jul '15
by translation@torproject.org 26 Jul '15
26 Jul '15
commit 9a1a49d67a480a3738f5fbf2bb4c2f41f8251be3
Author: Translation commit bot <translation(a)torproject.org>
Date: Sun Jul 26 22:46:23 2015 +0000
Update translations for tor-messenger-conversationsproperties_completed
---
hu/conversations.properties | 11 +++++++++++
1 file changed, 11 insertions(+)
diff --git a/hu/conversations.properties b/hu/conversations.properties
index bcac36e..21e2f36 100644
--- a/hu/conversations.properties
+++ b/hu/conversations.properties
@@ -56,6 +56,17 @@ topicChanged=%1$S megváltoztatta a témát erre: %2$S.
# %1$S is the user who cleared the topic.
topicCleared=%1$S kitisztította a témát.
+# LOCALIZATION NOTE (nickSet):
+# This is displayed as a system message when a participant changes his/her
+# nickname in a conversation.
+# %1$S is the old nick.
+# %2$S is the new nick.
+nickSet=%1$S most %2$S néven ismert.
+# LOCALIZATION NOTE (nickSet.you):
+# This is displayed as a system message when your nickname is changed.
+# %S is your new nick.
+nickSet.you=Most %S néven vagy ismert.
+
# LOCALIZATION NOTE (messenger.conversations.selections.ellipsis):
# ellipsis is used when copying a part of a message to show that the message was cut
messenger.conversations.selections.ellipsis=[…]
1
0

[translation/tor-messenger-conversationsproperties] Update translations for tor-messenger-conversationsproperties
by translation@torproject.org 26 Jul '15
by translation@torproject.org 26 Jul '15
26 Jul '15
commit 1e8f25c2e81a01bf89556142879363c1cbcfe6a9
Author: Translation commit bot <translation(a)torproject.org>
Date: Sun Jul 26 22:46:18 2015 +0000
Update translations for tor-messenger-conversationsproperties
---
hu/conversations.properties | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/hu/conversations.properties b/hu/conversations.properties
index 8a7a5c3..21e2f36 100644
--- a/hu/conversations.properties
+++ b/hu/conversations.properties
@@ -61,11 +61,11 @@ topicCleared=%1$S kitisztította a témát.
# nickname in a conversation.
# %1$S is the old nick.
# %2$S is the new nick.
-nickSet=%1$S is now known as %2$S.
+nickSet=%1$S most %2$S néven ismert.
# LOCALIZATION NOTE (nickSet.you):
# This is displayed as a system message when your nickname is changed.
# %S is your new nick.
-nickSet.you=You are now known as %S.
+nickSet.you=Most %S néven vagy ismert.
# LOCALIZATION NOTE (messenger.conversations.selections.ellipsis):
# ellipsis is used when copying a part of a message to show that the message was cut
1
0
commit e059d91887da0e35a78c38d6f093d8c359dba90d
Merge: abece06 ac80d7d
Author: Isis Lovecruft <isis(a)torproject.org>
Date: Sat Jul 25 19:24:23 2015 +0000
Merge branch 'master' into develop
1
0

[bridgedb/master] Prettier error pages. I hear folks get less mad about downtime that way.
by isis@torproject.org 26 Jul '15
by isis@torproject.org 26 Jul '15
26 Jul '15
commit 2afaa4368e2723172d336fcb3e5f4e4cf5051afe
Author: Isis Lovecruft <isis(a)torproject.org>
Date: Tue May 12 05:26:58 2015 +0000
Prettier error pages. I hear folks get less mad about downtime that way.
---
bridgedb/https/server.py | 104 ++++--
bridgedb/https/templates/assets/css/error.css | 208 +++++++++++
.../templates/assets/images/404-excavator.svg | 260 ++++++++++++++
.../templates/assets/images/404-hills-left.svg | 20 ++
.../templates/assets/images/404-hills-right.svg | 34 ++
.../assets/images/500-hills-left-shade.svg | 8 +
.../templates/assets/images/500-hills-left.svg | 22 ++
.../assets/images/500-hills-right-shade.svg | 8 +
.../templates/assets/images/500-hills-right.svg | 41 +++
.../https/templates/assets/images/500-road.svg | 97 ++++++
.../assets/images/maintenance-hills-left-shade.svg | 7 +
.../assets/images/maintenance-hills-left.svg | 43 +++
.../images/maintenance-hills-right-shade.svg | 9 +
.../assets/images/maintenance-hills-right.svg | 21 ++
.../assets/images/maintenance-tractor.svg | 367 ++++++++++++++++++++
bridgedb/https/templates/base.html | 1 +
bridgedb/https/templates/error-404.html | 39 +++
bridgedb/https/templates/error-500.html | 36 ++
bridgedb/https/templates/error-503.html | 37 ++
setup.py | 3 +-
test/test_https.py | 9 +
test/test_https_server.py | 93 ++++-
22 files changed, 1434 insertions(+), 33 deletions(-)
diff --git a/bridgedb/https/server.py b/bridgedb/https/server.py
index 2f5ed83..346d81f 100644
--- a/bridgedb/https/server.py
+++ b/bridgedb/https/server.py
@@ -132,20 +132,28 @@ def getClientIP(request, useForwardedHeader=False):
return ip
-def replaceErrorPage(error, template_name=None):
+def replaceErrorPage(request, error, template_name=None, html=True):
"""Create a general error page for displaying in place of tracebacks.
Log the error to BridgeDB's logger, and then display a very plain "Sorry!
Something went wrong!" page to the client.
+ :type request: :api:`twisted.web.http.Request`
+ :param request: A ``Request`` object containing the HTTP method, full
+ URI, and any URL/POST arguments and headers present.
:type error: :exc:`Exception`
:param error: Any exeption which has occurred while attempting to retrieve
- a template, render a page, or retrieve a resource.
+ a template, render a page, or retrieve a resource.
:param str template_name: A string describing which template/page/resource
- was being used when the exception occurred,
- i.e. ``'index.html'``.
- :returns: A string containing HTML to serve to the client (rather than
- serving a traceback).
+ was being used when the exception occurred, i.e. ``'index.html'``.
+ :param bool html: If ``True``, return one of two HTML error pages. First,
+ we attempt to render a fancier error page. If that rendering failed,
+ or if **html** is ``False``, then we return a very simple HTML page
+ (without CSS, Javascript, images, etc.) which simply says
+ ``"Sorry! Something went wrong with your request."``
+ :rtype: str
+ :returns: A string containing some content to serve to the client (rather
+ than serving a Twisted traceback).
"""
logging.error("Error while attempting to render %s: %s"
% (template_name or 'template',
@@ -164,16 +172,16 @@ def replaceErrorPage(error, template_name=None):
# "Tor"
# "Tor Browser"
#
- errmsg = _("Sorry! Something went wrong with your request.")
- rendered = """<html>
- <head>
- <link href="/assets/bootstrap.min.css" rel="stylesheet">
- <link href="/assets/custom.css" rel="stylesheet">
- </head>
- <body>
- <p>{0}</p>
- </body>
- </html>""".format(errmsg)
+ errorMessage = _("Sorry! Something went wrong with your request.")
+
+ if not html:
+ return bytes(errorMessage)
+
+ try:
+ rendered = resource500.render(request)
+ except Exception as err:
+ logging.exception(err)
+ rendered = bytes(errorMessage)
return rendered
@@ -299,7 +307,49 @@ class CSPResource(resource.Resource):
return redirectTo(request.uri, request)
-class TranslatedTemplateResource(CSPResource):
+class ErrorResource(CSPResource):
+ """A resource which explains that BridgeDB is undergoing maintenance, or
+ that some other (unexpected) error has occured.
+ """
+ isLeaf = True
+
+ def __init__(self, template=None, code=200):
+ """Create a :api:`twisted.web.resource.Resource` for an error page."""
+ CSPResource.__init__(self)
+ self.template = template
+ self.code = code
+
+ def render_GET(self, request):
+ self.setCSPHeader(request)
+ request.setHeader("Content-Type", "text/html; charset=utf-8")
+ request.setResponseCode(self.code)
+
+ try:
+ template = lookup.get_template(self.template)
+ rendered = template.render()
+ except Exception as err:
+ rendered = replaceErrorPage(request, err, html=False)
+
+ return rendered
+
+ render_POST = render_GET
+
+resource404 = ErrorResource('error-404.html', code=404)
+resource500 = ErrorResource('error-500.html', code=500)
+maintenance = ErrorResource('error-503.html', code=503)
+
+
+class CustomErrorHandlingResource(resource.Resource):
+ """A :api:`twisted.web.resource.Resource` which wraps the
+ :api:`twisted.web.resource.Resource.getChild` method in order to use
+ custom error handling pages.
+ """
+ def getChild(self, path, request):
+ logging.debug("[404] %s" % request.uri)
+ return resource404
+
+
+class TranslatedTemplateResource(CustomErrorHandlingResource, CSPResource):
"""A generalised resource which uses gettext translations and Mako
templates.
"""
@@ -322,7 +372,7 @@ class TranslatedTemplateResource(CSPResource):
template = lookup.get_template(self.template)
rendered = template.render(strings, rtl=rtl, lang=langs[0])
except Exception as err: # pragma: no cover
- rendered = replaceErrorPage(err)
+ rendered = replaceErrorPage(request, err)
request.setHeader("Content-Type", "text/html; charset=utf-8")
return rendered
@@ -354,7 +404,7 @@ class HowtoResource(TranslatedTemplateResource):
TranslatedTemplateResource.__init__(self, 'howto.html')
-class CaptchaProtectedResource(CSPResource):
+class CaptchaProtectedResource(CustomErrorHandlingResource, CSPResource):
"""A general resource protected by some form of CAPTCHA."""
isLeaf = True
@@ -447,7 +497,7 @@ class CaptchaProtectedResource(CSPResource):
imgstr=imgstr,
challenge_field=challenge)
except Exception as err:
- rendered = replaceErrorPage(err, 'captcha.html')
+ rendered = replaceErrorPage(request, err, 'captcha.html')
request.setHeader("Content-Type", "text/html; charset=utf-8")
return rendered
@@ -476,7 +526,7 @@ class CaptchaProtectedResource(CSPResource):
try:
rendered = self.resource.render(request)
except Exception as err:
- rendered = replaceErrorPage(err)
+ rendered = replaceErrorPage(request, err)
return rendered
logging.debug("Client failed a CAPTCHA; returning redirect to %s"
@@ -638,7 +688,7 @@ class ReCaptchaProtectedResource(CaptchaProtectedResource):
try:
rendered = self.resource.render(request)
except Exception as err: # pragma: no cover
- rendered = replaceErrorPage(err)
+ rendered = replaceErrorPage(request, err)
else:
logging.info("Client failed a CAPTCHA; redirecting to %s"
% request.uri)
@@ -780,7 +830,7 @@ class ReCaptchaProtectedResource(CaptchaProtectedResource):
return NOT_DONE_YET
-class BridgesResource(CSPResource):
+class BridgesResource(CustomErrorHandlingResource, CSPResource):
"""This resource displays bridge lines in response to a request."""
isLeaf = True
@@ -930,7 +980,7 @@ class BridgesResource(CSPResource):
try:
rendered = bytes('\n'.join(bridgeLines))
except Exception as err:
- rendered = replaceErrorPage(err)
+ rendered = replaceErrorPage(request, err, html=False)
else:
request.setHeader("Content-Type", "text/html; charset=utf-8")
qrcode = None
@@ -948,7 +998,7 @@ class BridgesResource(CSPResource):
answer=bridgeLines,
qrcode=qrcode)
except Exception as err:
- rendered = replaceErrorPage(err)
+ rendered = replaceErrorPage(request, err)
return rendered
@@ -1008,13 +1058,15 @@ def addWebServer(config, distributor):
reportViolations=config.CSP_REPORT_ONLY,
useForwardedHeader=fwdHeaders)
- root = resource.Resource()
+ root = CustomErrorHandlingResource()
root.putChild('', index)
root.putChild('robots.txt', robots)
root.putChild('keys', keys)
root.putChild('assets', assets)
root.putChild('options', options)
root.putChild('howto', howto)
+ root.putChild('maintenance', maintenance)
+ root.putChild('error', resource500)
root.putChild(CSPResource.reportURI, csp)
if config.RECAPTCHA_ENABLED:
diff --git a/bridgedb/https/templates/assets/css/error.css b/bridgedb/https/templates/assets/css/error.css
new file mode 100644
index 0000000..a1cf350
--- /dev/null
+++ b/bridgedb/https/templates/assets/css/error.css
@@ -0,0 +1,208 @@
+.application,
+.application>.error,
+.application>.error>.main {
+ /*min-height: 100vh*/
+}
+.error,
+.maintenance {
+ height: 100%;
+ overflow: hidden
+}
+.error .full-size,
+.maintenance .full-size {
+ position: absolute;
+ top: 0;
+ height: 100%;
+ width: 100%;
+ overflow: hidden;
+ background-repeat: no-repeat
+}
+.main--error {
+ min-height: 100%;
+ overflow: hidden
+}
+.error-text,
+.maintenance-text {
+ position: absolute;
+ top: 6%;
+ left: 0;
+ right: 0;
+ z-index: 10
+}
+.error-text h1,
+.maintenance-text h1 {
+ margin: 1em 0 .4em;
+ font-weight: 600;
+ /*color: #357389;*/
+ font-size: 40px;
+ line-height: 1;
+ text-align: center
+}
+@media only screen and (min-width: 50.063em) {
+ .error-text h1,
+ .maintenance-text h1 {
+ margin: 1.5em 0 .4em;
+ font-size: 70px
+ }
+}
+.error-text p,
+.maintenance-text p {
+ padding: 0 1em;
+ /*color: #9d9fa1;*/
+ font-size: 18px;
+ text-align: center
+}
+.error-text a,
+.maintenance-text a {
+ /*color: #9d9fa1*/
+}
+.error-text a:focus,
+.error-text a:hover,
+.maintenance-text a:focus,
+.maintenance-text a:hover {
+ /*color: #9d9fa1;*/
+ /*text-decoration: underline*/
+}
+.error500 .error-bg {
+ background: -webkit-linear-gradient(90deg, #dcc682, #dcc682 38.9%, #ccebf7 39%, #fff 60%, #fff);
+ background: linear-gradient(0deg, #dcc682, #dcc682 38.9%, #ccebf7 39%, #fff 60%, #fff)
+}
+.error500 .hill-left {
+ background-image: url("/assets/images/500-hills-left.svg");
+ background-size: auto 10vh;
+ background-position: 0 58%
+}
+@media only screen and (min-width: 50.063em) {
+ .error500 .hill-left {
+ background-size: 38vw auto;
+ background-position: 0 58%
+ }
+}
+.error500 .hill-right {
+ background-image: url("/assets/images/500-hills-right.svg");
+ background-size: 38vw auto;
+ background-position: 99% 59%;
+ display: none
+}
+@media only screen and (min-width: 50.063em) {
+ .error500 .hill-right {
+ display: block
+ }
+}
+.error500 .shadow-left {
+ background-image: url("/assets/images/500-hills-left-shade.svg");
+ background-size: 24vw auto;
+ background-position: 6% 72%
+}
+.error500 .shadow-right {
+ background-image: url("/assets/images/500-hills-right-shade.svg");
+ background-size: 17vw auto;
+ background-position: 95% 79%
+}
+.error500 .road {
+ background-image: url("/assets/images/500-road.svg");
+ background-size: auto 27vh;
+ background-position: 42% 78%
+}
+@media only screen and (min-width: 50.063em) {
+ .error500 .road {
+ background-size: auto 40vh;
+ background-position: 42% 91.3%
+ }
+}
+.error404 .top {
+ position: absolute;
+ top: 0;
+ width: 100%;
+ z-index: 5
+}
+.error404 .error-bg {
+ background: -webkit-linear-gradient(90deg, #bbcac6, #bbcac6 38.9%, #ccebf7 39%, #fff 60%, #fff);
+ background: linear-gradient(0deg, #bbcac6, #bbcac6 38.9%, #ccebf7 39%, #fff 60%, #fff)
+}
+.error404 .hill-left {
+ display: none;
+ background-image: url("/assets/images/404-hills-left.svg");
+ background-size: 30vw auto;
+ background-position: 0 58%
+}
+@media only screen and (min-width: 50.063em) {
+ .error404 .hill-left {
+ display: block
+ }
+}
+.error404 .hill-right {
+ background-image: url("/assets/images/404-hills-right.svg");
+ background-size: auto 30vw;
+ background-position: 99% 58%
+}
+@media only screen and (min-width: 50.063em) {
+ .error404 .hill-right {
+ background-size: 50vw auto;
+ background-position: 99% 58%
+ }
+}
+@media only screen and (min-width: 64.063em) {
+ .error404 .hill-right {
+ background-size: 50vw auto;
+ background-position: 99% 54%
+ }
+}
+.error404 .error-excavator {
+ background-image: url("/assets/images/404-excavator.svg");
+ background-size: auto 25vh;
+ background-position: 71% 83%
+}
+.maintenance .maintenance-bg {
+ background: -webkit-linear-gradient(90deg, #8cad7d, #8cad7d 38.9%, #ccebf7 39%, #fff 60%, #fff);
+ background: linear-gradient(0deg, #8cad7d, #8cad7d 38.9%, #ccebf7 39%, #fff 60%, #fff)
+}
+.maintenance .hill-left {
+ background-image: url("/assets/images/maintenance-hills-left.svg");
+ background-size: 80vw auto;
+ background-position: 0 58%
+}
+@media only screen and (min-width: 50.063em) {
+ .maintenance .hill-left {
+ background-size: 58vw auto;
+ background-position: 0 58%
+ }
+}
+@media only screen and (min-width: 64.063em) {
+ .maintenance .hill-left {
+ background-size: 50vw auto;
+ background-position: 0 56%
+ }
+}
+.maintenance .hill-right {
+ background-image: url("/assets/images/maintenance-hills-right.svg");
+ background-size: 38vw auto;
+ background-position: 99% 59%;
+ display: none
+}
+@media only screen and (min-width: 50.063em) {
+ .maintenance .hill-right {
+ display: block
+ }
+}
+.maintenance .shadow-left {
+ background-image: url("/assets/images/maintenance-hills-left-shade.svg");
+ background-size: 24vw auto;
+ background-position: 6% 72%
+}
+.maintenance .shadow-right {
+ background-image: url("/assets/images/maintenance-hills-right-shade.svg");
+ background-size: 17vw auto;
+ background-position: 95% 79%
+}
+.maintenance .maintenance-tractor {
+ background-image: url("/assets/images/maintenance-tractor.svg");
+ background-size: 87vw auto;
+ background-position: 63% 87%
+}
+@media only screen and (min-width: 50.063em) {
+ .maintenance .maintenance-tractor {
+ background-size: auto 44vh;
+ background-position: 63% 83%
+ }
+}
diff --git a/bridgedb/https/templates/assets/images/404-excavator.svg b/bridgedb/https/templates/assets/images/404-excavator.svg
new file mode 100644
index 0000000..be053b4
--- /dev/null
+++ b/bridgedb/https/templates/assets/images/404-excavator.svg
@@ -0,0 +1,260 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.4, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="428.987px" height="182.097px" viewBox="0 0 428.987 182.097" enable-background="new 0 0 428.987 182.097"
+ xml:space="preserve">
+<g>
+ <polygon fill="#C9D7D4" points="394,127.112 276.388,93.224 277.151,93.225 265.363,73.113 255.724,73.113 251.999,65.205
+ 222.836,65.205 209.363,79.792 194.416,79.792 179.263,93.112 131.647,93.112 122.503,85.798 117.563,85.798 109.096,75.213
+ 84.21,75.213 63.913,93.112 49,93.112 0,133.112 45.016,163.097 178,163.097 223,182.097 403,182.097 428.987,154.112 "/>
+ <polygon fill="#C1D0CE" points="163.665,143.162 145.467,143.162 153.893,135.828 165.067,134.812 170.308,130.252
+ 178.498,130.252 "/>
+ <polygon fill="#CFDEDD" points="182.445,127.289 195.292,137.871 204.185,137.871 214.396,143.162 219.423,143.162
+ 205.168,135.837 197.48,135.837 184.302,125.252 160.513,125.252 156.945,127.289 "/>
+ <polygon fill="#C1D0CE" points="76.928,93.123 68.737,93.123 83.57,80.213 91.761,80.213 "/>
+ <polygon fill="#CFDEDD" points="108.278,77.25 116.532,87.832 122.246,87.832 128.808,93.123 132.037,93.123 122.878,85.798
+ 117.938,85.798 109.471,75.213 84.178,75.213 81.886,77.25 "/>
+ <polygon fill="#CFDEDD" points="206.86,82.795 209.363,79.792 194.416,79.792 191,82.795 "/>
+ <polygon fill="#C1D0CE" points="210.364,87.8 223.837,73.213 232.984,73.213 214.967,93.202 189.338,93.145 195.417,87.8 "/>
+ <polygon fill="#CFDEDD" points="249.997,68.208 253.722,76.116 263.361,76.116 273.387,93.221 277.151,93.225 265.363,73.113
+ 255.724,73.113 251.999,65.205 222.836,65.205 220.062,68.208 "/>
+</g>
+<g>
+ <path fill="#828E88" d="M332.502,144.806l-0.859-2.127c-0.063-0.153-0.24-0.229-0.393-0.165l-0.524,0.214l0.576-0.533
+ c0.122-0.114,0.13-0.308,0.018-0.43l-1.546-1.688c-0.113-0.121-0.306-0.129-0.428-0.017l-0.332,0.308
+ c-0.026-0.028-0.053-0.058-0.08-0.085l0.316-0.521c0.088-0.142,0.042-0.329-0.099-0.417l-1.948-1.196
+ c-0.141-0.087-0.328-0.042-0.414,0.101l-0.193,0.317c-0.018-0.01-0.035-0.02-0.054-0.028l0.09-0.414
+ c0.035-0.164-0.069-0.326-0.231-0.36l-2.232-0.48c-0.16-0.036-0.322,0.069-0.357,0.232l-0.06,0.276
+ c-0.049-0.003-0.094-0.005-0.139-0.006l-0.012-0.317c-0.006-0.167-0.146-0.299-0.312-0.293l-2.281,0.083
+ c-0.165,0.005-0.296,0.146-0.291,0.313l0.009,0.226l-0.245,0.009l-0.011-0.294c-0.005-0.166-0.146-0.299-0.311-0.292l-2.282,0.081
+ c-0.164,0.005-0.296,0.146-0.29,0.314l0.01,0.285l-0.257,0.008l-0.01-0.301c-0.006-0.166-0.145-0.298-0.312-0.292l-2.281,0.083
+ c-0.164,0.006-0.296,0.147-0.29,0.313l0.011,0.291l-0.269,0.009l-0.009-0.272c-0.007-0.166-0.146-0.299-0.312-0.292l-2.281,0.082
+ c-0.164,0.005-0.296,0.147-0.29,0.313l0.009,0.264l-0.238,0.007l-0.008-0.21c-0.006-0.171-0.149-0.306-0.319-0.299l-2.343,0.084
+ c-0.17,0.006-0.305,0.15-0.299,0.322l0.007,0.2l-0.198,0.007l-0.01-0.252c-0.006-0.176-0.153-0.312-0.326-0.306l-2.388,0.086
+ c-0.174,0.006-0.311,0.154-0.305,0.328l0.008,0.241l-0.279,0.009l-0.008-0.253c-0.007-0.178-0.156-0.318-0.335-0.312l-2.443,0.089
+ c-0.177,0.005-0.316,0.156-0.311,0.336l0.008,0.242l-0.261,0.009l-0.011-0.287c-0.006-0.187-0.163-0.333-0.348-0.327l-2.547,0.092
+ c-0.186,0.008-0.332,0.164-0.325,0.351l0.011,0.277l-0.407,0.014l-0.009-0.304c-0.008-0.187-0.164-0.333-0.35-0.326l-2.547,0.092
+ c-0.185,0.006-0.331,0.164-0.325,0.351l0.011,0.293l-0.227,0.007l-0.012-0.325c-0.007-0.166-0.146-0.298-0.312-0.292l-2.28,0.082
+ c-0.166,0.006-0.297,0.147-0.291,0.312l0.011,0.318l-0.266,0.009l-0.011-0.299c-0.006-0.166-0.146-0.299-0.312-0.293l-2.282,0.083
+ c-0.164,0.006-0.296,0.147-0.29,0.314l0.009,0.288l-0.236,0.008l-0.008-0.236c-0.007-0.171-0.15-0.306-0.32-0.3l-2.344,0.085
+ c-0.17,0.006-0.304,0.15-0.298,0.322l0.007,0.226l-0.198,0.008l-0.01-0.277c-0.007-0.176-0.153-0.312-0.327-0.307l-2.388,0.085
+ c-0.174,0.006-0.311,0.153-0.305,0.329l0.01,0.269l-0.279,0.009l-0.01-0.279c-0.006-0.179-0.156-0.318-0.335-0.313l-2.442,0.089
+ c-0.178,0.006-0.318,0.157-0.312,0.336l0.009,0.27l-0.261,0.008l-0.011-0.313c-0.006-0.186-0.162-0.333-0.348-0.327l-2.548,0.092
+ c-0.185,0.007-0.331,0.164-0.324,0.351l0.011,0.304l-0.406,0.014l-0.012-0.329c-0.007-0.188-0.164-0.334-0.348-0.327l-2.548,0.092
+ c-0.186,0.007-0.331,0.164-0.325,0.351l0.012,0.319l-0.374,0.012l-0.083-0.414c-0.037-0.184-0.216-0.303-0.397-0.265l-1.949,0.532
+ c-0.182,0.036-0.3,0.217-0.264,0.399l0.129,0.641c-0.172,0.068-0.349,0.142-0.527,0.219l-0.331-0.647
+ c-0.084-0.165-0.288-0.232-0.453-0.146l-2.268,1.171c-0.164,0.085-0.231,0.29-0.146,0.456l0.394,0.772
+ c-0.097,0.071-0.19,0.145-0.286,0.217l-0.603-0.639c-0.146-0.155-0.386-0.155-0.533,0l-2.023,2.15
+ c-0.146,0.153-0.146,0.408,0,0.563l0.636,0.675c-0.089,0.139-0.175,0.278-0.258,0.423l-0.689-0.362
+ c-0.188-0.1-0.418-0.021-0.509,0.173l-1.282,2.725c-0.091,0.194-0.011,0.433,0.178,0.532l1.031,0.543
+ c-0.015,0.093-0.027,0.188-0.04,0.282c-0.053-0.022-0.111-0.034-0.172-0.029l-1.201,0.107c-0.212,0.02-0.373,0.211-0.355,0.424
+ l0.227,3.034c0.015,0.215,0.201,0.374,0.414,0.354l1.146-0.103c0.031,0.163,0.065,0.323,0.104,0.48l-0.976,0.419
+ c-0.196,0.084-0.294,0.317-0.219,0.517l1.061,2.815c0.075,0.201,0.298,0.296,0.494,0.212l1.123-0.481
+ c0.017-0.006,0.029-0.021,0.044-0.029c0.051,0.075,0.102,0.15,0.153,0.224c-0.014,0.014-0.031,0.02-0.043,0.035l-0.82,0.975
+ c-0.139,0.163-0.123,0.417,0.031,0.563l2.118,2.008c0.154,0.147,0.395,0.135,0.533-0.029l0.725-0.86
+ c0.093,0.074,0.187,0.149,0.277,0.221l-0.186,0.791c-0.051,0.208,0.077,0.428,0.281,0.489l2.245,0.802
+ c0.155,0.047,13.595-0.089,13.595-0.089l0.656-1.729l42.13-2.704l4.654-1.203l2.609-4.277l0.764-4.83l-3.083-5.14l0.113,0.062
+ l1.17,0.933l0.815,2.016c0.062,0.154,0.239,0.229,0.394,0.166l0.907-0.372C332.49,145.137,332.564,144.96,332.502,144.806z"/>
+ <path fill="#94A39E" d="M333.067,150.386l-0.819-0.226c0.008-0.061,0.018-0.121,0.023-0.185l0.715-0.049
+ c0.17-0.012,0.302-0.161,0.29-0.334l-0.159-2.371c-0.012-0.172-0.162-0.303-0.333-0.292l-0.748,0.05
+ c-0.012-0.047-0.021-0.095-0.032-0.141l0.666-0.296c0.156-0.069,0.229-0.256,0.159-0.413l-0.954-2.175
+ c-0.068-0.157-0.254-0.229-0.411-0.16l-0.645,0.286c-0.034-0.054-0.067-0.107-0.101-0.161l0.571-0.6
+ c0.119-0.125,0.115-0.325-0.009-0.444l-1.706-1.644c-0.124-0.119-0.323-0.116-0.44,0.01l-0.438,0.46
+ c-0.041-0.031-0.082-0.06-0.124-0.089l0.253-0.627c0.063-0.161-0.013-0.344-0.172-0.409l-2.189-0.892
+ c-0.157-0.063-0.341,0.013-0.405,0.173l-0.227,0.561c-0.05-0.01-0.101-0.016-0.151-0.023l0.031-0.585
+ c0.008-0.171-0.125-0.32-0.297-0.329l-2.359-0.123c-0.172-0.009-0.318,0.124-0.328,0.297l-0.036,0.707l-0.229,0.016l-0.046-0.766
+ c-0.011-0.172-0.159-0.305-0.33-0.295l-2.357,0.147c-0.171,0.01-0.303,0.16-0.292,0.333l0.048,0.781l-0.247,0.016l-0.044-0.728
+ c-0.012-0.177-0.164-0.312-0.34-0.303l-2.422,0.151c-0.176,0.011-0.311,0.165-0.301,0.342l0.045,0.743l-0.205,0.015l-0.048-0.8
+ c-0.012-0.181-0.166-0.318-0.347-0.308l-2.469,0.151c-0.179,0.013-0.318,0.169-0.307,0.35l0.05,0.815l-0.289,0.02l-0.05-0.829
+ c-0.011-0.185-0.171-0.326-0.354-0.314l-2.524,0.157c-0.185,0.011-0.325,0.172-0.314,0.356l0.051,0.844l-0.289,0.021l-0.053-0.867
+ c-0.01-0.171-0.158-0.304-0.33-0.292l-2.359,0.146c-0.171,0.011-0.303,0.16-0.292,0.333l0.055,0.881l-0.277,0.019l-0.052-0.863
+ c-0.011-0.174-0.16-0.306-0.331-0.294l-2.357,0.145c-0.171,0.011-0.303,0.161-0.292,0.333l0.052,0.881l-0.244,0.016l-0.051-0.826
+ c-0.01-0.176-0.162-0.313-0.338-0.302l-2.424,0.149c-0.175,0.012-0.311,0.166-0.301,0.343l0.052,0.842l-0.204,0.014l-0.055-0.897
+ c-0.012-0.181-0.168-0.319-0.347-0.308l-2.47,0.152c-0.179,0.011-0.317,0.168-0.306,0.349l0.056,0.913l-0.288,0.021l-0.058-0.927
+ c-0.011-0.185-0.17-0.326-0.354-0.315l-2.524,0.157c-0.185,0.011-0.325,0.171-0.313,0.356l0.056,0.943l-0.269,0.018l-0.062-0.994
+ c-0.012-0.191-0.178-0.339-0.369-0.327l-2.632,0.163c-0.191,0.013-0.339,0.18-0.327,0.373l0.061,1.009l-0.418,0.028l-0.063-1.04
+ c-0.012-0.192-0.178-0.34-0.369-0.328l-2.633,0.163c-0.19,0.012-0.338,0.18-0.326,0.372l0.062,1.058l-0.465,0.03l-0.061-1.021
+ c-0.011-0.191-0.178-0.34-0.368-0.328l-2.635,0.163c-0.192,0.012-0.34,0.179-0.327,0.372l0.067,1.136
+ c0.002,0.009,0.007,0.014,0.007,0.022c-0.098,0.023-0.195,0.04-0.292,0.066c-0.003-0.006-0.003-0.014-0.005-0.02l-0.504-1.021
+ c-0.084-0.173-0.295-0.242-0.466-0.157l-2.363,1.181c-0.172,0.086-0.243,0.297-0.157,0.471l0.438,0.887
+ c-0.082,0.052-0.163,0.104-0.242,0.159l-0.722-0.724c-0.136-0.137-0.357-0.137-0.493,0l-1.864,1.878
+ c-0.134,0.137-0.135,0.36,0.001,0.496l0.605,0.608c-0.09,0.117-0.171,0.236-0.255,0.355l-0.644-0.321
+ c-0.172-0.086-0.382-0.014-0.467,0.158l-1.174,2.377c-0.086,0.173-0.014,0.384,0.157,0.47l0.806,0.403
+ c-0.017,0.1-0.027,0.2-0.038,0.299l-1.122,0.094c-0.19,0.016-0.334,0.187-0.318,0.378l0.215,2.645
+ c0.015,0.191,0.185,0.336,0.375,0.321l1.085-0.09c0.029,0.141,0.055,0.282,0.089,0.419l-0.916,0.371
+ c-0.178,0.072-0.265,0.277-0.192,0.456l0.982,2.461c0.071,0.179,0.277,0.266,0.454,0.195l1.004-0.407
+ c0.051,0.074,0.101,0.146,0.154,0.217l-0.728,0.82c-0.128,0.145-0.115,0.367,0.027,0.496l1.968,1.768
+ c0.142,0.13,0.363,0.116,0.49-0.027l0.755-0.851c0.005-0.005,0.006-0.01,0.009-0.015c0.104,0.058,0.207,0.115,0.316,0.167
+ l-0.255,0.904c-0.052,0.186,0.056,0.38,0.24,0.432l2.54,0.722c0.186,0.052,0.379-0.058,0.43-0.243l0.26-0.923
+ c0.092,0.01,0.178,0.025,0.27,0.034l0.056,0.004c0.015,0.001,0.043,0,0.062,0.001l0.058,0.796c0.013,0.191,0.181,0.338,0.372,0.324
+ l2.631-0.193c0.191-0.014,0.337-0.183,0.323-0.374l-0.054-0.747l0.337-0.018l0.057,0.806c0.013,0.19,0.182,0.337,0.373,0.322
+ l2.633-0.188c0.191-0.014,0.337-0.184,0.322-0.375l-0.053-0.744l0.259-0.014l0.057,0.786c0.014,0.192,0.181,0.339,0.372,0.325
+ l2.632-0.192c0.189-0.015,0.335-0.183,0.322-0.375l-0.052-0.723l0.27-0.016l0.051,0.72c0.014,0.185,0.176,0.324,0.357,0.311
+ l2.524-0.184c0.184-0.014,0.323-0.175,0.31-0.358l-0.048-0.659l0.273-0.015l0.045,0.655c0.015,0.192,0.182,0.339,0.373,0.324
+ l2.631-0.192c0.191-0.014,0.337-0.182,0.322-0.374l-0.042-0.593l0.338-0.017l0.046,0.647c0.014,0.192,0.181,0.338,0.372,0.325
+ l2.632-0.19c0.191-0.015,0.336-0.184,0.322-0.375l-0.041-0.586l0.26-0.014l0.045,0.629c0.014,0.192,0.182,0.339,0.372,0.325
+ l2.632-0.193c0.191-0.015,0.337-0.183,0.322-0.375l-0.041-0.565l0.271-0.014l0.041,0.561c0.011,0.185,0.173,0.326,0.356,0.312
+ l2.524-0.185c0.183-0.014,0.322-0.175,0.31-0.358l-0.036-0.503l0.289-0.015l0.033,0.485c0.013,0.179,0.171,0.316,0.35,0.303
+ l2.468-0.179c0.179-0.013,0.316-0.171,0.303-0.352l-0.039-0.56l0.282-0.028l0.042,0.582c0.012,0.179,0.166,0.312,0.343,0.299
+ l2.42-0.177c0.175-0.014,0.31-0.169,0.296-0.345l-0.047-0.659l0.271-0.026l0.045,0.628c0.012,0.172,0.163,0.303,0.333,0.29
+ l2.357-0.171c0.171-0.013,0.301-0.162,0.288-0.336l-0.051-0.703l0.345-0.034l0.052,0.711c0.012,0.174,0.163,0.304,0.334,0.291
+ l2.357-0.17c0.17-0.013,0.301-0.163,0.288-0.336l-0.057-0.789l0.169-0.017l0.09,0.656c0.025,0.171,0.184,0.291,0.354,0.267
+ l2.339-0.33c0.171-0.024,0.29-0.183,0.267-0.355l-0.117-0.834c0.04-0.016,0.082-0.029,0.121-0.046l0.524,0.751
+ c0.099,0.141,0.294,0.176,0.435,0.076l1.934-1.369c0.14-0.1,0.174-0.295,0.075-0.437l-0.506-0.723
+ c0.049-0.05,0.096-0.102,0.145-0.151l0.787,0.483c0.146,0.091,0.339,0.045,0.429-0.103l1.235-2.025
+ c0.09-0.147,0.045-0.343-0.103-0.433l-0.671-0.415c0.039-0.087,0.082-0.171,0.12-0.261l0.791,0.218
+ c0.167,0.045,0.34-0.054,0.386-0.221l0.624-2.293C333.332,150.605,333.233,150.432,333.067,150.386z M282.141,160.61l0.02-0.552
+ c-4.448-0.405-7.001-3.354-7.189-8.305c-0.057-1.552,0.624-3.175,1.92-4.571c1.69-1.823,4.179-3,6.51-3.072l40.068-2.693
+ c0.52-0.022,0.873-0.032,1.248-0.016c0.152,0.007,0.311,0.02,0.486,0.035c1.715,0.156,3.303,1.182,4.472,2.886
+ c1.111,1.62,1.676,3.679,1.51,5.51c-0.349,3.839-2.96,6.902-6.202,7.281l-14.086,1.387l-26.629,1.43l-0.078,0.009
+ c-0.21,0.038-1.72,0.134-2.024,0.12L282.141,160.61z"/>
+ <path fill="#767F79" d="M331.731,149.882c0.365-4.032-2.486-8.631-6.479-8.995c-0.621-0.056-1.018-0.055-1.808-0.021l-40.08,2.695
+ c-4.442,0.137-9.101,4.009-8.941,8.214c0.203,5.341,3.003,8.407,7.687,8.833c0.265,0.025,1.962-0.082,2.187-0.127l26.628-1.43
+ l14.11-1.388C328.479,157.26,331.354,154.038,331.731,149.882z"/>
+ <path fill="#707973" d="M328.651,156.044c1.67-1.409,2.849-3.608,3.08-6.162c0.365-4.032-2.486-8.631-6.479-8.995
+ c-0.621-0.056-1.018-0.055-1.808-0.021l-40.08,2.695c-1.606,0.049-3.239,0.589-4.663,1.453L328.651,156.044z"/>
+ <path fill="#94A39E" d="M325.508,145.672c-1.182-0.65-3.09-0.605-4.241,0.098c-0.553,0.338-1.438,1.205-1.438,1.205l-34.933,2.436
+ c-0.366-0.518-0.817-0.958-1.304-1.228c-1.183-0.65-3.091-0.605-4.241,0.098c-1.151,0.704-2.069,2.388-2.04,3.743
+ c0.029,1.354,1.021,2.994,2.2,3.646c1.183,0.651,3.091,0.606,4.241-0.098c0.457-0.279,0.874-0.716,1.213-1.223l35.136-2.448
+ c0.373,0.53,0.831,0.983,1.328,1.258c1.181,0.65,3.089,0.607,4.24-0.097s2.07-2.389,2.04-3.744
+ C327.679,147.963,326.689,146.322,325.508,145.672z"/>
+ <polyline fill="#B4BBA6" points="225.113,26.793 221.273,32.681 292.776,76.062 311.414,118.406 316.369,104.793 298.303,66.471
+ 225.19,25.084 "/>
+ <polygon fill="#BFC3A6" points="226.825,22.132 225.113,26.793 297.323,71.526 314.001,107.146 321.7,98.964 309.949,59.018 "/>
+ <path fill="#A6AA92" d="M332.548,97.035c0.626-1.238,1.054-1.915,1.054-1.915l-15.787,1.756c0,0-0.3,0.526-0.76,1.507l15.311-1.365
+ L332.548,97.035z"/>
+ <path fill="#B6B99C" d="M354.62,97.083l-21.019-1.963c0,0-0.428,0.677-1.054,1.915l22.106,2.15L354.62,97.083z"/>
+ <polygon fill="#BFC3A6" points="177.713,80.935 231.844,21.957 233.559,0.552 221.286,0 176.322,72.525 "/>
+ <polygon fill="#B4BBA6" points="214.881,2.502 173.011,68.087 178.215,75.15 221.286,0 "/>
+ <path fill="#828E88" d="M154.559,50.259l-19.388,6.167c0,0-12.852,5.93-12.029,25.848c0.817,19.812,2.029,29.532,2.029,29.532
+ l15.491-0.194l1.359-30.268L154.559,50.259z"/>
+ <path fill="#94A39E" d="M168.724,56.053c-2.498-3.515-6.896-7.101-11.574-6.415c-6.17,0.904-11.164,3.425-13.564,8.462
+ c-6.903,11.874-2.923,53.512-2.923,53.512l2.018-0.584l-0.543-9.717c0.14-9.815,12.638-13.326,12.638-13.326l27.521-8.361
+ C176.204,65.405,168.724,56.053,168.724,56.053z"/>
+ <polygon fill="#707973" points="308.684,135.338 308.762,145.788 340.373,141.313 340.074,135.729 "/>
+ <g>
+ <path fill="#828E88" d="M385.802,148.452l-1.01-2.493c-0.073-0.182-0.28-0.269-0.461-0.196l-0.614,0.252l0.676-0.626
+ c0.143-0.134,0.152-0.359,0.021-0.504l-1.813-1.979c-0.133-0.144-0.356-0.153-0.5-0.02l-0.846,0.783
+ c-0.144,0.133-0.152,0.358-0.02,0.502l1.812,1.981c0.044,0.047,0.097,0.073,0.153,0.092c-0.13,0.094-0.191,0.263-0.128,0.418
+ l1.009,2.494c0.073,0.182,0.282,0.271,0.463,0.196l1.063-0.438C385.788,148.841,385.875,148.633,385.802,148.452z"/>
+ <path fill="#828E88" d="M376.8,141.704l1.453,0.313c0.071,0.015,0.14,0.002,0.203-0.024c0.018,0.098,0.07,0.188,0.16,0.244
+ l2.285,1.402c0.165,0.102,0.385,0.049,0.487-0.118l0.598-0.986c0.103-0.167,0.049-0.387-0.117-0.489l-2.284-1.402
+ c-0.167-0.104-0.384-0.05-0.487,0.118l-0.332,0.547l0.149-0.694c0.04-0.191-0.082-0.382-0.272-0.423l-2.617-0.564
+ c-0.189-0.041-0.379,0.082-0.421,0.273l-0.156,0.735l-0.063-0.05l-0.025-0.741c-0.008-0.195-0.172-0.35-0.365-0.342l-2.676,0.095
+ c-0.194,0.008-0.348,0.173-0.342,0.369l0.01,0.265l-0.289,0.01l-0.011-0.346c-0.007-0.194-0.172-0.349-0.365-0.343l-2.677,0.096
+ c-0.193,0.007-0.347,0.173-0.341,0.368l0.013,0.336l-0.301,0.01l-0.013-0.353c-0.007-0.195-0.171-0.35-0.366-0.343l-2.676,0.096
+ c-0.193,0.007-0.347,0.173-0.341,0.368l0.013,0.342l-0.312,0.01l-0.012-0.319c-0.007-0.194-0.172-0.35-0.365-0.343l-2.676,0.096
+ c-0.194,0.007-0.349,0.174-0.342,0.368l0.011,0.31l-0.279,0.009l-0.009-0.245c-0.007-0.201-0.175-0.359-0.375-0.353l-2.749,0.099
+ c-0.2,0.007-0.356,0.177-0.351,0.378l0.009,0.235l-0.233,0.008l-0.01-0.295c-0.007-0.205-0.18-0.366-0.383-0.359l-2.803,0.1
+ c-0.203,0.009-0.364,0.182-0.357,0.387l0.011,0.283l-0.328,0.011l-0.01-0.297c-0.008-0.209-0.184-0.374-0.392-0.367l-2.867,0.104
+ c-0.208,0.009-0.371,0.186-0.364,0.395l0.01,0.285l-0.307,0.01l-0.012-0.338c-0.007-0.219-0.19-0.391-0.408-0.382l-2.989,0.106
+ c-0.217,0.007-0.389,0.193-0.381,0.41l0.013,0.326l-0.477,0.017l-0.013-0.356c-0.008-0.217-0.192-0.39-0.409-0.383l-2.986,0.108
+ c-0.218,0.007-0.389,0.191-0.382,0.41l0.013,0.345l-0.267,0.009l-0.014-0.382c-0.007-0.197-0.172-0.351-0.366-0.344l-2.675,0.097
+ c-0.195,0.007-0.348,0.172-0.342,0.367l0.014,0.372l-0.312,0.011l-0.013-0.35c-0.007-0.197-0.171-0.35-0.366-0.343l-2.676,0.096
+ c-0.193,0.006-0.348,0.171-0.34,0.368l0.011,0.339l-0.28,0.009l-0.009-0.276c-0.008-0.201-0.176-0.358-0.375-0.352l-2.749,0.099
+ c-0.2,0.007-0.357,0.178-0.351,0.378l0.009,0.266l-0.231,0.007l-0.012-0.323c-0.008-0.205-0.179-0.367-0.384-0.359l-2.802,0.1
+ c-0.204,0.007-0.364,0.18-0.358,0.386l0.012,0.314l-0.327,0.011l-0.011-0.327c-0.008-0.21-0.184-0.375-0.392-0.367l-2.866,0.103
+ c-0.209,0.007-0.373,0.186-0.365,0.396l0.011,0.314l-0.307,0.01l-0.013-0.369c-0.008-0.217-0.191-0.39-0.408-0.383l-2.989,0.109
+ c-0.217,0.007-0.388,0.192-0.38,0.41l0.012,0.357l-0.476,0.015l-0.015-0.386c-0.008-0.22-0.191-0.391-0.409-0.383l-2.986,0.107
+ c-0.217,0.007-0.388,0.192-0.381,0.41l0.014,0.374l-0.439,0.016l-0.098-0.486c-0.044-0.215-0.253-0.354-0.466-0.311l-2.932,0.595
+ c-0.213,0.045-0.353,0.255-0.309,0.47l0.15,0.751c-0.202,0.08-0.408,0.167-0.616,0.258l-0.389-0.761
+ c-0.1-0.194-0.339-0.271-0.531-0.172l-2.661,1.373c-0.193,0.101-0.271,0.341-0.172,0.535l0.463,0.906
+ c-0.112,0.083-0.224,0.168-0.335,0.256l-0.708-0.75c-0.171-0.182-0.453-0.183-0.624,0l-2.376,2.521
+ c-0.171,0.184-0.171,0.481,0.002,0.662l0.745,0.792c-0.104,0.162-0.206,0.326-0.304,0.496l-0.808-0.425
+ c-0.222-0.115-0.489-0.025-0.598,0.202l-1.503,3.197c-0.107,0.228-0.013,0.509,0.207,0.625l1.212,0.637
+ c-0.019,0.108-0.033,0.219-0.049,0.33c-0.062-0.024-0.129-0.039-0.202-0.033l-1.408,0.126c-0.247,0.022-0.437,0.245-0.417,0.497
+ l0.265,3.559c0.02,0.252,0.238,0.438,0.487,0.416l1.346-0.121c0.036,0.191,0.074,0.38,0.12,0.565l-1.145,0.49
+ c-0.229,0.1-0.346,0.372-0.257,0.607l1.246,3.303c0.089,0.236,0.348,0.347,0.578,0.248l1.319-0.565
+ c0.02-0.008,0.032-0.023,0.05-0.034c0.061,0.089,0.12,0.177,0.182,0.264c-0.019,0.014-0.037,0.022-0.052,0.04l-0.964,1.142
+ c-0.161,0.193-0.144,0.491,0.037,0.663l2.485,2.356c0.184,0.172,0.464,0.155,0.625-0.036l0.853-1.01
+ c0.107,0.089,0.217,0.175,0.324,0.26l-0.22,0.927c-0.058,0.245,0.091,0.503,0.33,0.574l3.278,0.97
+ c0.183,0.054,15.949-0.103,15.949-0.103l0.771-2.029l49.419-3.173l5.462-1.411l3.062-5.017l0.895-5.667l-3.744-6.243
+ L376.8,141.704z"/>
+ </g>
+ <path fill="#B4BBA6" d="M327.736,131.17l4.984-34.432l-15.647,1.63c0,0-7.701,12.955-5.316,32.196l-9.961-0.378l0.35,5.356
+ l26.518,1.191l-0.561-5.551L327.736,131.17z"/>
+ <g>
+ <path fill="#828E88" d="M319.786,99.882c-0.603,0.054-1.354,0.521-1.668,1.038c0,0-6.353,10.418-4.044,27.862l9.647,0.558
+ c0.604,0.035,0.979-0.417,0.833-1.004c0,0-1.326-5.333-0.212-14.279c0.562-4.521,1.532-9.666,4.632-15.004L319.786,99.882z"/>
+ </g>
+ <path fill="#767F79" d="M384.897,154.409c0.429-4.73-2.917-10.125-7.601-10.554c-0.729-0.064-1.192-0.064-2.12-0.024l-47.02,3.161
+ c-5.21,0.162-10.675,4.702-10.487,9.636c0.237,6.267,3.522,9.862,9.017,10.363c0.311,0.028,2.302-0.095,2.565-0.15l31.236-1.677
+ l16.554-1.628C381.08,163.063,384.454,159.285,384.897,154.409z"/>
+ <path fill="#707973" d="M381.284,161.638c1.96-1.655,3.341-4.232,3.613-7.229c0.429-4.73-2.917-10.125-7.601-10.554
+ c-0.729-0.064-1.192-0.064-2.12-0.024l-47.02,3.161c-1.884,0.059-3.798,0.691-5.47,1.706L381.284,161.638z"/>
+ <path fill="#828E88" d="M374.678,140.227c0,0,6.621-0.738,9.856,7.691l-2.781-2.22l-4.437-2.339L374.678,140.227z"/>
+ <path fill="#94A39E" d="M386.465,155l-1.055-0.288c0.008-0.064,0.019-0.124,0.025-0.188l0.933-0.063
+ c0.2-0.015,0.354-0.19,0.34-0.393l-0.185-2.781c-0.015-0.202-0.19-0.355-0.391-0.343l-0.939,0.064
+ c-0.011-0.049-0.024-0.096-0.037-0.145l0.841-0.372c0.184-0.082,0.268-0.301,0.187-0.486l-1.119-2.55
+ c-0.081-0.185-0.298-0.27-0.481-0.188l-0.813,0.36c-0.035-0.055-0.073-0.106-0.109-0.161l0.72-0.756
+ c0.139-0.146,0.135-0.381-0.012-0.521l-1.999-1.929c-0.146-0.14-0.38-0.135-0.519,0.011l-0.598,0.628
+ c-0.036-0.026-0.072-0.05-0.106-0.076l0.343-0.851c0.076-0.188-0.015-0.404-0.201-0.48l-2.569-1.047
+ c-0.186-0.076-0.4,0.016-0.476,0.202l-0.302,0.75c-0.05-0.009-0.099-0.014-0.146-0.022l0.041-0.781
+ c0.011-0.202-0.146-0.378-0.348-0.389l-2.767-0.144c-0.201-0.011-0.375,0.146-0.386,0.349l-0.048,0.927l-0.255,0.018l-0.062-0.993
+ c-0.012-0.204-0.187-0.358-0.388-0.346l-2.766,0.172c-0.201,0.011-0.355,0.187-0.343,0.389l0.062,1.012l-0.288,0.021l-0.059-0.95
+ c-0.013-0.208-0.191-0.366-0.397-0.353l-2.842,0.176c-0.206,0.013-0.365,0.193-0.352,0.4l0.059,0.968l-0.241,0.016l-0.062-1.032
+ c-0.014-0.212-0.195-0.374-0.406-0.361l-2.896,0.18c-0.211,0.014-0.373,0.196-0.36,0.408l0.064,1.053l-0.338,0.023l-0.064-1.068
+ c-0.014-0.216-0.201-0.383-0.416-0.37l-2.962,0.186c-0.216,0.013-0.381,0.201-0.368,0.418l0.065,1.087l-0.339,0.021l-0.067-1.11
+ c-0.013-0.203-0.187-0.358-0.388-0.346l-2.766,0.173c-0.201,0.012-0.355,0.188-0.345,0.389l0.069,1.131l-0.324,0.021l-0.067-1.108
+ c-0.013-0.203-0.188-0.357-0.388-0.346l-2.766,0.173c-0.2,0.011-0.354,0.187-0.344,0.389l0.069,1.128l-0.29,0.02l-0.062-1.065
+ c-0.014-0.208-0.193-0.366-0.399-0.353l-2.841,0.176c-0.207,0.013-0.364,0.192-0.353,0.399l0.066,1.085l-0.24,0.016l-0.069-1.148
+ c-0.015-0.212-0.197-0.374-0.406-0.361l-2.897,0.18c-0.211,0.014-0.372,0.196-0.359,0.408l0.071,1.169l-0.34,0.021l-0.07-1.183
+ c-0.013-0.217-0.201-0.383-0.416-0.37l-2.962,0.186c-0.215,0.013-0.381,0.201-0.368,0.418l0.073,1.201l-0.316,0.021l-0.077-1.26
+ c-0.014-0.227-0.209-0.399-0.433-0.385l-3.088,0.191c-0.225,0.014-0.397,0.21-0.384,0.436l0.076,1.28l-0.491,0.033l-0.079-1.316
+ c-0.015-0.226-0.209-0.398-0.434-0.385l-3.088,0.192c-0.224,0.014-0.396,0.21-0.383,0.436l0.08,1.333c0,0.001,0,0.002,0,0.003
+ l-0.545,0.036l-0.078-1.293c-0.014-0.226-0.209-0.399-0.434-0.385l-3.09,0.192c-0.225,0.014-0.397,0.21-0.384,0.436l0.081,1.331
+ c0.002,0.041,0.018,0.077,0.03,0.112c-0.113,0.026-0.229,0.054-0.342,0.082c-0.007-0.038-0.012-0.077-0.03-0.113l-0.59-1.194
+ c-0.101-0.204-0.347-0.287-0.549-0.187l-2.771,1.385c-0.201,0.101-0.283,0.35-0.184,0.553l0.551,1.118
+ c-0.088,0.056-0.177,0.11-0.264,0.169l-0.905-0.909c-0.158-0.16-0.418-0.16-0.577,0l-2.188,2.204c-0.158,0.16-0.159,0.422,0,0.581
+ l0.777,0.783c-0.099,0.13-0.187,0.262-0.279,0.391l-0.841-0.42c-0.2-0.101-0.447-0.018-0.549,0.185l-1.375,2.79
+ c-0.102,0.203-0.018,0.45,0.184,0.551l1.036,0.518c-0.019,0.105-0.029,0.21-0.043,0.316c-0.029-0.005-0.056-0.014-0.086-0.011
+ l-1.324,0.11c-0.224,0.019-0.392,0.218-0.373,0.442l0.251,3.104c0.02,0.225,0.217,0.395,0.44,0.376l1.324-0.111
+ c0.017-0.001,0.027-0.008,0.043-0.012c0.032,0.159,0.063,0.32,0.101,0.474l-1.164,0.472c-0.208,0.085-0.311,0.325-0.227,0.535
+ l1.153,2.886c0.084,0.211,0.324,0.313,0.532,0.229l1.231-0.498c0.014-0.004,0.022-0.016,0.034-0.022
+ c0.054,0.078,0.109,0.156,0.165,0.232c-0.014,0.012-0.028,0.018-0.041,0.031l-0.885,0.997c-0.149,0.169-0.136,0.43,0.033,0.581
+ l2.307,2.073c0.167,0.151,0.427,0.137,0.577-0.031l0.884-0.997c0.028-0.031,0.044-0.067,0.061-0.102
+ c0.114,0.062,0.229,0.126,0.348,0.184l-0.323,1.157c-0.063,0.218,0.064,0.446,0.28,0.508l2.979,0.845
+ c0.216,0.062,0.442-0.066,0.504-0.284l0.331-1.177c0.101,0.012,0.196,0.029,0.298,0.038l0.063,0.004
+ c0.018,0.001,0.039,0.002,0.061,0.002l0.073,1.029c0.016,0.226,0.212,0.397,0.437,0.381l3.086-0.226
+ c0.225-0.017,0.395-0.215,0.379-0.44l-0.069-0.973l0.396-0.021l0.073,1.04c0.017,0.226,0.213,0.396,0.438,0.381l3.088-0.224
+ c0.224-0.017,0.394-0.214,0.378-0.439l-0.068-0.967l0.304-0.017l0.073,1.018c0.017,0.226,0.213,0.396,0.438,0.381l3.087-0.227
+ c0.225-0.016,0.395-0.214,0.378-0.439l-0.066-0.943l0.316-0.016l0.067,0.938c0.014,0.216,0.202,0.381,0.417,0.365l2.962-0.216
+ c0.215-0.016,0.378-0.206,0.363-0.421l-0.062-0.869l0.317-0.017l0.062,0.863c0.016,0.227,0.212,0.397,0.437,0.382l3.087-0.227
+ c0.225-0.017,0.395-0.214,0.378-0.44l-0.056-0.788l0.396-0.021l0.061,0.855c0.016,0.225,0.212,0.396,0.437,0.38l3.088-0.223
+ c0.225-0.017,0.395-0.214,0.379-0.439l-0.056-0.784l0.304-0.017l0.06,0.835c0.017,0.226,0.214,0.396,0.437,0.38l3.088-0.226
+ c0.225-0.017,0.395-0.214,0.379-0.439l-0.055-0.759l0.316-0.018l0.054,0.755c0.016,0.217,0.204,0.381,0.418,0.366l2.962-0.216
+ c0.215-0.016,0.379-0.206,0.362-0.422l-0.047-0.685l0.338-0.017l0.046,0.662c0.016,0.212,0.201,0.372,0.41,0.357l2.896-0.21
+ c0.211-0.017,0.37-0.201,0.354-0.413l-0.052-0.751l0.332-0.033l0.056,0.779c0.013,0.208,0.194,0.364,0.4,0.35l2.84-0.208
+ c0.206-0.016,0.361-0.197,0.348-0.405l-0.062-0.866l0.318-0.032l0.06,0.832c0.015,0.202,0.19,0.354,0.392,0.34l2.765-0.199
+ c0.2-0.015,0.353-0.192,0.338-0.395l-0.065-0.922l0.405-0.038l0.066,0.93c0.015,0.202,0.191,0.354,0.392,0.34l2.764-0.199
+ c0.201-0.015,0.354-0.192,0.338-0.395l-0.073-1.02l0.192-0.02l0.121,0.864c0.027,0.201,0.214,0.342,0.414,0.314l2.743-0.389
+ c0.2-0.029,0.34-0.216,0.312-0.417l-0.149-1.074c0.032-0.015,0.065-0.024,0.098-0.038l0.671,0.96
+ c0.116,0.167,0.346,0.206,0.512,0.09l2.268-1.605c0.164-0.115,0.205-0.347,0.089-0.512l-0.648-0.928
+ c0.048-0.049,0.094-0.101,0.142-0.15l1.004,0.62c0.174,0.106,0.398,0.052,0.504-0.121l1.45-2.377c0.105-0.173,0.052-0.4-0.12-0.507
+ l-0.869-0.536c0.044-0.093,0.09-0.186,0.132-0.281l1.021,0.28c0.194,0.053,0.396-0.063,0.449-0.259l0.732-2.689
+ C386.774,155.257,386.658,155.053,386.465,155z M326.725,166.993l0.012-0.552c-5.271-0.48-8.296-3.973-8.519-9.835
+ c-0.07-1.845,0.737-3.773,2.276-5.431c2-2.155,4.943-3.547,7.7-3.634l47.006-3.16c0.612-0.026,1.028-0.036,1.473-0.017
+ c0.181,0.008,0.367,0.021,0.575,0.04c4.472,0.408,7.489,5.686,7.104,9.954c-0.414,4.548-3.514,8.177-7.361,8.628l-16.53,1.626
+ l-31.237,1.677l-0.08,0.011c-0.24,0.045-2.025,0.158-2.394,0.142L326.725,166.993z"/>
+ <path fill="#94A39E" d="M377.596,149.471c-1.386-0.764-3.624-0.712-4.976,0.113c-0.522,0.319-1.003,0.816-1.396,1.393
+ l-40.762,2.842c-0.426-0.579-0.938-1.073-1.491-1.379c-1.386-0.762-3.625-0.711-4.976,0.115c-1.351,0.824-2.427,2.801-2.392,4.39
+ c0.035,1.59,1.196,3.515,2.581,4.277c1.385,0.764,3.625,0.713,4.975-0.113c0.557-0.34,1.059-0.879,1.464-1.5l40.629-2.833
+ c0.437,0.621,0.974,1.154,1.559,1.477c1.385,0.763,3.623,0.712,4.974-0.114c1.352-0.825,2.428-2.802,2.393-4.391
+ C380.143,152.157,378.981,150.233,377.596,149.471z"/>
+ <path fill="#BFC3A6" d="M384.231,113.409l-29.379-2.072l-0.205-12.595l-21.927-2.004c0,0-9.462,14.98-5.043,34.145l0.985,5.852
+ l56.224-3.152L384.231,113.409z"/>
+ <g>
+ <path fill="#828E88" d="M335.304,98.867l6.75,0.598c0.603,0.053,1.073,0.591,1.047,1.195l-0.988,21.977
+ c-0.026,0.604-0.402,1.445-0.835,1.868l-3.866,3.79c-0.433,0.423-1.28,0.792-1.885,0.819l-3.916,0.178
+ c-0.604,0.027-1.236-0.426-1.406-1.007c0,0-1.134-3.9-0.816-11.101C329.646,111.313,331.092,103.582,335.304,98.867z"/>
+ </g>
+ <g>
+ <path fill="#828E88" d="M347.251,99.878c-0.602-0.058-1.11,0.39-1.129,0.994l-0.598,19.017c-0.019,0.604,0.331,0.766,0.777,0.357
+ l5.535-5.065c0.446-0.408,0.813-1.237,0.815-1.843l0.047-11.834c0.002-0.605-0.489-1.148-1.091-1.206L347.251,99.878z"/>
+ </g>
+ <polygon fill="#B6B99C" points="384.887,133.582 384.754,128.73 327.736,131.17 327.727,131.17 328.663,136.734 "/>
+ <polygon fill="#A6AA92" points="328.663,136.734 327.736,131.17 311.757,130.564 311.757,130.564 301.796,130.187 302.146,135.543
+ "/>
+</g>
+</svg>
diff --git a/bridgedb/https/templates/assets/images/404-hills-left.svg b/bridgedb/https/templates/assets/images/404-hills-left.svg
new file mode 100644
index 0000000..13901d4
--- /dev/null
+++ b/bridgedb/https/templates/assets/images/404-hills-left.svg
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.4, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="281.52px" height="112.055px" viewBox="0 0 281.52 112.055" enable-background="new 0 0 281.52 112.055"
+ xml:space="preserve">
+<g>
+
+ <image overflow="visible" opacity="0.1" width="1173" height="495" xlink:href="BEFA45F0C4EFA63F.png" transform="matrix(0.24 0 0 0.24 0 0)">
+ </image>
+ <g>
+ <polyline fill="#BBCAC6" points="275.011,102.099 245.136,64.12 231.537,64.12 185.894,6.48 106.606,6.48 83.963,41.12
+ 56.652,41.12 6.48,102.099 6.48,112.106 275.011,112.106 275.011,102.099 "/>
+ </g>
+</g>
+<polygon fill="#B4C0BF" points="101.003,30.779 90.214,49.96 64.831,49.96 41.867,81.083 118.687,81.083 132.261,64.343
+ 102.193,64.343 118.981,30.776 "/>
+<polygon fill="#CAD8D7" points="106.605,6.48 99.325,17.594 178.144,17.594 224.897,76.345 237.25,76.345 260.021,102.099
+ 275.011,101.977 245.136,64.12 231.537,64.12 185.894,6.48 "/>
+</svg>
diff --git a/bridgedb/https/templates/assets/images/404-hills-right.svg b/bridgedb/https/templates/assets/images/404-hills-right.svg
new file mode 100644
index 0000000..6ac747c
--- /dev/null
+++ b/bridgedb/https/templates/assets/images/404-hills-right.svg
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.4, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="397.299px" height="119.108px" viewBox="0 0 397.299 119.108" enable-background="new 0 0 397.299 119.108"
+ xml:space="preserve">
+<g>
+
+ <image overflow="visible" opacity="0.1" width="1333" height="602" xlink:href="392229F0603DFEAA.png" transform="matrix(0.24 0 0 0.24 -12.6143 -12.6143)">
+ </image>
+ <g>
+ <g>
+ <polygon fill="#BBCAC6" points="294.665,109.152 228.193,40.046 209.505,40.046 177.47,0 117.4,0 0,109.152 0,119.16
+ 294.665,119.16 "/>
+ <g>
+ <polygon fill="#CAD8D7" points="263.641,77.142 228.193,40.046 209.505,40.046 177.47,0 117.4,0 108.58,8.013 169.454,8.013
+ 201.49,48.06 221.179,48.06 255.625,85.158 254.624,109.152 263.641,109.152 "/>
+ </g>
+ </g>
+ </g>
+</g>
+<g>
+
+ <image overflow="visible" opacity="0.1" width="867" height="309" xlink:href="392229F0603DFEAE.png" transform="matrix(0.24 0 0 0.24 189.2192 51.5386)">
+ </image>
+ <g>
+ <polygon fill="#BBCAC6" points="195.699,109.152 281.896,58.019 326.86,58.019 350.841,87.996 364.83,87.996 390.81,109.152
+ 390.81,119.16 195.699,119.16 "/>
+ </g>
+</g>
+<polygon fill="#B4C0BF" points="233.388,109.152 210.191,109.152 267.733,72.18 290.93,72.18 "/>
+<polygon fill="#CAD8D7" points="323.482,63.788 346.859,93.758 363.043,93.758 381.624,109.152 390.77,109.152 364.83,87.996
+ 350.841,87.996 326.86,58.019 281.896,58.019 272.146,63.788 "/>
+</svg>
diff --git a/bridgedb/https/templates/assets/images/500-hills-left-shade.svg b/bridgedb/https/templates/assets/images/500-hills-left-shade.svg
new file mode 100644
index 0000000..904c64b
--- /dev/null
+++ b/bridgedb/https/templates/assets/images/500-hills-left-shade.svg
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.4, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="202.271px" height="25.842px" viewBox="0 0 202.271 25.842" enable-background="new 0 0 202.271 25.842"
+ xml:space="preserve">
+<polygon fill="#D6BA6B" points="176.225,0 51.492,0 21.469,11.69 6.005,11.69 -0.001,25.842 202.271,25.842 "/>
+</svg>
diff --git a/bridgedb/https/templates/assets/images/500-hills-left.svg b/bridgedb/https/templates/assets/images/500-hills-left.svg
new file mode 100644
index 0000000..a01274e
--- /dev/null
+++ b/bridgedb/https/templates/assets/images/500-hills-left.svg
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.4, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="331.68px" height="128.235px" viewBox="0 0 331.68 128.235" enable-background="new 0 0 331.68 128.235"
+ xml:space="preserve">
+<g>
+ <g>
+
+ <image overflow="visible" opacity="0.1" width="1382" height="561" xlink:href="6AB008E8BA7227E6.png" transform="matrix(0.24 0 0 0.24 0 0)">
+ </image>
+ <g>
+ <polygon fill="#DDC782" points="325.052,117.99 275.16,64.12 241.545,64.12 185.894,6.48 96.599,6.48 73.956,41.12 46.645,41.12
+ 6.48,118.112 6.48,128.12 325.052,128.12 "/>
+ </g>
+ </g>
+</g>
+<polygon fill="#E2D5A8" points="95.996,6.48 88.886,17.594 178.145,17.594 234.905,76.345 267.272,76.345 307.058,118.301
+ 325.052,117.99 275.16,64.12 241.545,64.12 185.894,6.48 "/>
+<polygon fill="#D6BA6B" points="90.997,34.783 80.208,53.964 52.821,53.964 17.847,117.112 94.667,117.112 114.246,68.347
+ 93.186,68.347 108.974,34.78 "/>
+</svg>
diff --git a/bridgedb/https/templates/assets/images/500-hills-right-shade.svg b/bridgedb/https/templates/assets/images/500-hills-right-shade.svg
new file mode 100644
index 0000000..5cfedae
--- /dev/null
+++ b/bridgedb/https/templates/assets/images/500-hills-right-shade.svg
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.4, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="202.271px" height="25.842px" viewBox="0 0 202.271 25.842" enable-background="new 0 0 202.271 25.842"
+ xml:space="preserve">
+<polygon fill="#D6BA6B" points="186.234,11.69 176.226,0 51.494,0 0,25.842 202.272,25.842 202.272,11.69 "/>
+</svg>
diff --git a/bridgedb/https/templates/assets/images/500-hills-right.svg b/bridgedb/https/templates/assets/images/500-hills-right.svg
new file mode 100644
index 0000000..1ceb110
--- /dev/null
+++ b/bridgedb/https/templates/assets/images/500-hills-right.svg
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.4, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="364.08px" height="99.524px" viewBox="0 0 364.08 99.524" enable-background="new 0 0 364.08 99.524" xml:space="preserve">
+<g>
+ <g>
+ <g>
+
+ <image overflow="visible" opacity="0.1" width="973" height="390" xlink:href="423B8197D66693F1.png" transform="matrix(0.24 0 0 0.24 127.1021 0)">
+ </image>
+ <g>
+ <polygon fill="#DDC782" points="357.594,90.549 274.083,3 210.635,3 182.937,36.624 164.445,36.624 130.102,90.549 "/>
+ </g>
+ </g>
+ <polygon fill="#D6BA6B" points="231.917,22.801 206.431,22.801 187.94,47.95 171.654,47.206 145.282,88.371 168.425,88.371
+ 182.449,63.548 199.237,63.572 "/>
+ <g>
+ <polygon fill="#E2D5A8" points="274.083,3 210.654,3 204.371,10.625 267.201,10.625 344.072,90.549 357.594,90.549 "/>
+ </g>
+ </g>
+ <g>
+
+ <image overflow="visible" opacity="0.1" width="1517" height="309" xlink:href="423B8197D66693F3.png" transform="matrix(0.24 0 0 0.24 0 32.2876)">
+ </image>
+ <g>
+ <polygon fill="#DDC782" points="189.581,89.523 163.601,68.745 149.612,68.745 125.631,38.768 80.667,38.768 6.48,89.779
+ 6.48,99.787 357.594,99.787 357.594,89.523 "/>
+ </g>
+ </g>
+ <linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="270.4526" y1="86.5244" x2="270.4526" y2="89.5244">
+ <stop offset="0" style="stop-color:#B5A339;stop-opacity:0"/>
+ <stop offset="0.4085" style="stop-color:#C2AC4D;stop-opacity:0.1"/>
+ <stop offset="1" style="stop-color:#D6BA6B"/>
+ </linearGradient>
+ <polygon fill="url(#SVGID_1_)" points="352.266,86.524 183.286,86.524 183.286,89.524 357.62,89.524 "/>
+ <polygon fill="#E2D5A8" points="122.253,44.537 145.63,74.507 161.814,74.507 180.395,89.492 189.541,89.492 163.601,68.745
+ 149.612,68.745 125.631,38.768 80.667,38.768 72.039,44.537 "/>
+ <polygon fill="#D6BA6B" points="42.167,89.492 18.97,89.492 69.507,52.929 92.704,52.929 "/>
+</g>
+</svg>
diff --git a/bridgedb/https/templates/assets/images/500-road.svg b/bridgedb/https/templates/assets/images/500-road.svg
new file mode 100644
index 0000000..3d5a5b1
--- /dev/null
+++ b/bridgedb/https/templates/assets/images/500-road.svg
@@ -0,0 +1,97 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.4, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="432.973px" height="305.408px" viewBox="0 0 432.973 305.408" enable-background="new 0 0 432.973 305.408"
+ xml:space="preserve">
+<g>
+ <polygon fill="#56524F" points="362.724,165.068 404.552,48.501 250.935,48.501 107.346,105.933 49.844,231.263 114.297,268.895
+ 389.082,268.895 407.378,232.175 "/>
+</g>
+<g>
+ <g>
+ <polygon fill="#FFFFFF" points="308.927,60.146 304.964,59.876 314.111,52.344 318.259,52.311 "/>
+ </g>
+ <g>
+ <path fill="#FFFFFF" d="M269.763,257.904l-23.545-42.796l7.771-0.163l24.545,43.797L269.763,257.904z M239.668,200.162
+ L223,166.075l7.982,0.34l16.457,33.584L239.668,200.162z M228.845,154.631l-6.869-0.887l10.46-27.177l5.869,0.887L228.845,154.631
+ z M243.781,117.623l-5.965-0.27l14.85-11.64l5.963,0.271L243.781,117.623z M267.365,97.261l-5.965-0.27l17.854-13.642l4.963,0.27
+ L267.365,97.261z M289.949,76.897l-3.963-0.27l13.729-10.752l3.963,0.27L289.949,76.897z"/>
+ </g>
+</g>
+<g>
+ <g>
+ <path fill="#FFFFFF" d="M111.666,304.173c-4.279,1.647-11.282,1.647-15.562,0L3.111,268.366c-4.279-1.647-4.125-3.842,0.343-4.875
+ l92.308-21.353c4.468-1.033,11.778-1.033,16.246,0l92.306,21.353c4.468,1.033,4.622,3.228,0.342,4.875L111.666,304.173z"/>
+ </g>
+ <polygon fill="#D25031" points="179.687,74.322 106.597,85.136 106.597,17.599 179.687,29.491 160.061,51.613 "/>
+ <path fill="#FFFFFF" d="M110.097,12.992c-0.011-3.069-2.511-5.549-5.581-5.538c-3.069,0.013-5.548,2.511-5.537,5.578
+ c0.007,1.555,1.485,2.956,2.518,3.962v135.272l6.112-0.03V16.993C108.633,15.981,110.101,14.548,110.097,12.992z"/>
+ <g>
+ <path fill="#CD6632" d="M175.843,261.758c-2.501-5.839-63.367-143.689-63.367-143.689s-1.186-3.058-3.056-3.058
+ c-2.189,0-7.214,0-9.402,0c-1.964,0-3.057,3.058-3.057,3.058S36.096,255.919,33.594,261.758c-2.502,5.835,1.111,6.112,1.111,6.112
+ c42.475,19.179,104.313,15.982,140.027,0C174.732,267.87,178.343,267.593,175.843,261.758z"/>
+ <path fill="#FFFFFF" d="M165.442,238.104c-3.729-8.463-8.184-18.562-12.902-29.261c-16.927,3.859-35.25,6.054-49.863,6.121
+ c-19.318,0.091-35.643-2.262-46.023-5.569c-4.623,10.482-8.985,20.371-12.649,28.681c8.834,2.624,29.308,10.009,58.882,9.849
+ C120.642,247.83,141.678,243.415,165.442,238.104z"/>
+ <path fill="#FFFFFF" d="M82.841,150.052c-3.585,8.122-7.609,17.241-11.774,26.674c8.936,1.415,19.597,2.471,31.82,2.413
+ c10.549-0.048,22.264-1.415,35.013-3.473c-4.11-9.316-8.075-18.298-11.602-26.285c-8.365,0.867-16.44,1.339-23.621,1.369
+ C95.615,150.779,88.959,150.522,82.841,150.052z"/>
+ </g>
+</g>
+<g>
+ <g>
+ <path fill="#FFFFFF" d="M384.685,177.18c-2.205,0.688-5.812,0.688-8.018,0l-46.656-14.549c-2.205-0.688-2.168-1.676,0.082-2.196
+ l46.492-10.754c2.25-0.521,5.932-0.521,8.184,0l46.492,10.754c2.25,0.521,2.287,1.509,0.082,2.196L384.685,177.18z"/>
+ </g>
+ <polygon fill="#D25031" points="418.652,65.256 382.044,70.603 382.044,36.587 418.652,41.933 409.099,53.174 "/>
+ <path fill="#FFFFFF" d="M383.806,34.267c-0.006-1.546-1.266-2.795-2.809-2.789c-1.549,0.006-2.797,1.264-2.789,2.81
+ c0.002,0.783,0.746,1.488,1.266,1.994v68.134l3.078-0.016l0.002-68.118C383.07,35.772,383.808,35.05,383.806,34.267z"/>
+ <g>
+ <path fill="#CD6632" d="M416.921,159.56c-1.262-2.938-31.918-72.368-31.918-72.368s-0.596-1.541-1.539-1.541
+ c-1.102,0-3.633,0-4.736,0c-0.986,0-1.537,1.541-1.537,1.541s-30.656,69.431-31.916,72.368c-1.26,2.94,0.559,3.08,0.559,3.08
+ c21.393,9.659,52.539,8.05,70.527,0C416.361,162.64,418.181,162.5,416.921,159.56z"/>
+ <path fill="#FFFFFF" d="M411.681,147.648c-1.877-4.262-4.121-9.351-6.498-14.737c-8.525,1.943-17.754,3.049-25.113,3.083
+ c-9.73,0.045-17.951-1.14-23.182-2.807c-2.328,5.281-4.525,10.261-6.369,14.448c4.449,1.318,14.762,5.039,29.656,4.958
+ C389.119,152.546,399.712,150.322,411.681,147.648z"/>
+ <path fill="#FFFFFF" d="M370.078,103.299c-1.805,4.092-3.832,8.684-5.93,13.435c4.5,0.713,9.871,1.244,16.027,1.216
+ c5.314-0.023,11.213-0.714,17.633-1.749c-2.068-4.692-4.064-9.216-5.842-13.238c-4.213,0.435-8.281,0.673-11.896,0.689
+ C376.513,103.665,373.162,103.536,370.078,103.299z"/>
+ </g>
+</g>
+<g>
+ <g>
+ <path fill="#FFFFFF" d="M248.083,59.489c-0.941,0.197-2.481,0.197-3.423,0l-19.341-4.045c-0.941-0.197-0.945-0.536-0.008-0.752
+ l19.356-4.478c0.937-0.216,2.47-0.216,3.407,0l19.357,4.478c0.937,0.216,0.934,0.555-0.008,0.752L248.083,59.489z"/>
+ </g>
+ <polygon fill="#D25031" points="262.183,14.063 246.941,16.29 246.941,2.127 262.183,4.353 258.206,9.033 "/>
+ <path fill="#FFFFFF" d="M247.675,1.161c-0.003-0.644-0.527-1.163-1.17-1.161c-0.645,0.002-1.164,0.526-1.162,1.17
+ c0.002,0.326,0.312,0.619,0.528,0.831v28.366l1.282-0.006V2.001C247.369,1.788,247.676,1.487,247.675,1.161z"/>
+ <g>
+ <path fill="#CD6632" d="M261.462,53.327c-0.525-1.224-13.289-30.131-13.289-30.131s-0.248-0.641-0.641-0.641
+ c-0.459,0-1.513,0-1.973,0c-0.41,0-0.64,0.641-0.64,0.641s-12.764,28.907-13.288,30.131c-0.524,1.225,0.232,1.282,0.232,1.282
+ c8.907,4.021,21.875,3.351,29.364,0C261.229,54.609,261.987,54.552,261.462,53.327z"/>
+ <path fill="#FFFFFF" d="M259.281,48.368c-0.781-1.775-1.716-3.894-2.705-6.136c-3.55,0.808-7.393,1.269-10.456,1.283
+ c-4.052,0.019-7.476-0.476-9.651-1.169c-0.971,2.198-1.885,4.272-2.652,6.016c1.852,0.55,6.146,2.099,12.347,2.064
+ C249.886,50.407,254.297,49.481,259.281,48.368z"/>
+ <path fill="#FFFFFF" d="M241.959,29.903c-0.752,1.703-1.597,3.615-2.47,5.594c1.874,0.296,4.11,0.517,6.673,0.505
+ c2.213-0.01,4.669-0.297,7.343-0.728c-0.862-1.954-1.693-3.837-2.433-5.512c-1.755,0.181-3.448,0.28-4.953,0.287
+ C244.638,30.055,243.243,30.002,241.959,29.903z"/>
+ </g>
+</g>
+<g opacity="0.6">
+ <path fill="#FFFFFF" d="M135.408,57.719c2.591,0.164,4.419,2.344,4.36,4.94c-0.06,2.599-1.98,4.538-4.571,4.374
+ c-2.59-0.164-4.418-2.342-4.359-4.94C130.896,59.496,132.818,57.555,135.408,57.719z M131.922,42.896l-0.123-7.646l8.543,0.978
+ l-0.979,7.121l-1.41,11.379l-5.209-0.316L131.922,42.896z"/>
+</g>
+<g>
+ <path opacity="0.6" fill="#FFFFFF" d="M395.474,56.781c1.379,0.088,2.352,1.247,2.32,2.628c-0.031,1.382-1.055,2.413-2.432,2.325
+ c-1.377-0.087-2.348-1.245-2.318-2.627C393.076,57.728,394.097,56.694,395.474,56.781z M393.621,48.899l-0.064-4.065l4.287,0.394
+ l-0.266,3.913l-0.748,6.051l-2.77-0.168L393.621,48.899z"/>
+</g>
+<g>
+ <path opacity="0.6" fill="#FFFFFF" d="M252.903,10.373c0.533,0.034,0.909,0.482,0.897,1.017c-0.012,0.535-0.408,0.934-0.941,0.9
+ c-0.532-0.034-0.908-0.482-0.896-1.017S252.371,10.339,252.903,10.373z M252.185,7.322l-0.025-1.573l1.646,0.307l-0.09,1.36
+ l-0.289,2.342l-1.072-0.065L252.185,7.322z"/>
+</g>
+</svg>
diff --git a/bridgedb/https/templates/assets/images/maintenance-hills-left-shade.svg b/bridgedb/https/templates/assets/images/maintenance-hills-left-shade.svg
new file mode 100644
index 0000000..696f772
--- /dev/null
+++ b/bridgedb/https/templates/assets/images/maintenance-hills-left-shade.svg
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.4, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="287.992px" height="34px" viewBox="0 0 287.992 34" enable-background="new 0 0 287.992 34" xml:space="preserve">
+<polygon opacity="0.1" fill="#49623D" points="41.02,0 287.992,0 272.992,14 57.992,14 47.992,23 168.992,23 160.992,34 0,34 "/>
+</svg>
diff --git a/bridgedb/https/templates/assets/images/maintenance-hills-left.svg b/bridgedb/https/templates/assets/images/maintenance-hills-left.svg
new file mode 100644
index 0000000..8b7d9d2
--- /dev/null
+++ b/bridgedb/https/templates/assets/images/maintenance-hills-left.svg
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.4, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="424.45px" height="127.792px" viewBox="0 0 424.45 127.792" enable-background="new 0 0 424.45 127.792"
+ xml:space="preserve">
+<g>
+
+ <image overflow="visible" opacity="0.1" width="887" height="370" xlink:href="6887344C08643948.png" transform="matrix(0.24 0 0 0.24 211.5703 38.9922)">
+ </image>
+ <g>
+ <polygon fill="#8DAE7D" points="415.362,118.76 329.481,47.992 284.517,47.992 260.536,77.97 246.548,77.97 220.57,118.76 "/>
+ </g>
+</g>
+<g>
+
+ <image overflow="visible" opacity="0.1" width="1173" height="522" xlink:href="6887344C08643949.png" transform="matrix(0.24 0 0 0.24 0 0)">
+ </image>
+ <g>
+ <polygon fill="#8DAE7D" points="6.48,118.76 46.645,41.12 73.956,41.12 96.598,6.48 165.878,6.48 211.521,64.12 245.136,64.12
+ 275.012,118.76 "/>
+ </g>
+</g>
+<polygon fill="#8DAE7D" points="415.362,118.76 329.481,47.992 284.517,47.992 260.536,77.97 246.548,77.97 220.57,118.76 "/>
+<polygon opacity="0.15" fill="#49623D" points="314.24,62.971 282.851,62.971 238.867,117.112 258.644,117.112 291.235,77.354 "/>
+<g>
+ <polygon fill="#B6C8A9" points="329.481,47.992 284.962,47.992 283.845,48.833 279.903,53.76 327.304,53.76 405.134,118.76
+ 415.362,118.76 "/>
+</g>
+<linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="328.7197" y1="115.2598" x2="328.7197" y2="118.7598">
+ <stop offset="0" style="stop-color:#345338;stop-opacity:0"/>
+ <stop offset="1" style="stop-color:#345338;stop-opacity:0.1"/>
+</linearGradient>
+<polygon fill="url(#SVGID_1_)" points="242.077,118.76 415.362,118.76 411.115,115.26 242.077,115.26 "/>
+<g>
+ <polygon fill="#8DAE7D" points="415.362,118.76 275.012,118.76 245.136,64.12 211.521,64.12 165.878,6.48 96.598,6.48
+ 73.956,41.12 46.645,41.12 6.48,118.76 6.479,123.765 415.362,123.765 "/>
+</g>
+<polygon opacity="0.15" fill="#49623D" points="90.996,30.779 80.207,49.96 53.822,49.96 17.847,117.112 94.667,117.112
+ 122.253,64.343 92.185,64.343 108.973,30.776 "/>
+<polygon fill="#B6C8A9" points="158.128,17.594 204.881,76.345 237.249,76.345 259.896,118.76 274.888,118.76 245.136,64.12
+ 211.521,64.12 165.878,6.48 96.598,6.48 89.333,17.594 "/>
+</svg>
diff --git a/bridgedb/https/templates/assets/images/maintenance-hills-right-shade.svg b/bridgedb/https/templates/assets/images/maintenance-hills-right-shade.svg
new file mode 100644
index 0000000..00c1757
--- /dev/null
+++ b/bridgedb/https/templates/assets/images/maintenance-hills-right-shade.svg
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.4, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="211.627px" height="24.984px" viewBox="0 0 211.627 24.984" enable-background="new 0 0 211.627 24.984"
+ xml:space="preserve">
+<polygon opacity="0.1" fill="#49623D" points="181.484,0 0,0 11.022,10.288 169.012,10.288 176.36,16.901 87.445,16.901
+ 93.324,24.984 211.627,24.984 "/>
+</svg>
diff --git a/bridgedb/https/templates/assets/images/maintenance-hills-right.svg b/bridgedb/https/templates/assets/images/maintenance-hills-right.svg
new file mode 100644
index 0000000..6225deb
--- /dev/null
+++ b/bridgedb/https/templates/assets/images/maintenance-hills-right.svg
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.4, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="213.12px" height="69.84px" viewBox="0 0 213.12 69.84" enable-background="new 0 0 213.12 69.84" xml:space="preserve">
+<g>
+
+ <image overflow="visible" opacity="0.1" width="888" height="291" xlink:href="7F0562F1CC30193A.png" transform="matrix(0.24 0 0 0.24 0 0)">
+ </image>
+ <g>
+ <polygon fill="#8DAE7D" points="204.111,60.781 178.13,38.978 164.142,38.978 140.162,9 95.196,9 9,60.781 "/>
+ </g>
+</g>
+<g>
+ <polygon fill="#8DAE7D" points="204.111,60.781 178.13,38.977 164.142,38.977 140.162,9 95.196,9 9,60.781 9,65.786
+ 204.111,65.786 "/>
+</g>
+<polygon fill="#B6C8A9" points="136.783,14.769 160.16,44.739 176.343,44.739 194.925,60.781 204.07,60.781 178.13,38.977
+ 164.142,38.977 140.162,9 95.196,9 85.447,14.769 "/>
+<polygon opacity="0.15" fill="#49623D" points="46.688,59.724 23.492,59.724 81.034,23.161 104.23,23.161 "/>
+</svg>
diff --git a/bridgedb/https/templates/assets/images/maintenance-tractor.svg b/bridgedb/https/templates/assets/images/maintenance-tractor.svg
new file mode 100644
index 0000000..6846f47
--- /dev/null
+++ b/bridgedb/https/templates/assets/images/maintenance-tractor.svg
@@ -0,0 +1,367 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.4, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="466.269px" height="318.696px" viewBox="0 0 466.269 318.696" enable-background="new 0 0 466.269 318.696"
+ xml:space="preserve">
+<g>
+ <polygon fill="#B6C8A9" points="452.322,251.25 421.783,109.235 124.896,109.235 0,219.235 0,271.848 78.523,317.695
+ 345.258,317.695 "/>
+ <g opacity="0.1">
+ <path fill="#414042" d="M455.162,203.627c-1.621-4.677-6.867-7.486-11.659-6.243l-118.478,30.744
+ c-4.792,1.243-7.386,6.088-5.765,10.765l2.957,8.534c1.621,4.677,6.867,7.486,11.659,6.243l118.478-30.744
+ c4.792-1.243,7.386-6.088,5.765-10.765L455.162,203.627z"/>
+ <path fill="#414042" d="M250.36,233.819c-4.297,2.457-11.807,3.799-16.689,2.982l-88.066-14.738
+ c-4.882-0.816-9.545,2.509-10.362,7.392l-0.873,5.213c-0.817,4.883,2.474,9.726,7.314,10.764l1.241,0.266
+ c4.84,1.038,4.75,1.887-0.2,1.887h-18.504c-4.95,0-9,1.95-9,4.333s-4.05,4.333-9,4.333h-24c-4.95,0-9,3.45-9,7.667
+ s4.05,7.667,9,7.667h92c4.95,0,9-2.7,9-6s4.05-6,9-6h6.481c4.95,0,12.96,0.849,17.8,1.887l11.938,2.559
+ c4.84,1.038,11.505,3.271,14.812,4.963s9.107,0.464,12.89-2.728l16.161-13.637c3.782-3.192,5.507-9.615,3.832-14.273l-2.704-7.52
+ c-1.676-4.658-6.562-6.458-10.858-4.001L250.36,233.819z"/>
+ </g>
+ <g>
+ <polygon fill="#162628" points="423.094,135.842 409.504,120.741 254.732,120.741 254.732,224.174 380.815,224.174 "/>
+ <rect x="362.695" y="14.288" fill="#24747F" width="57.38" height="110.606"/>
+ <polygon fill="#12353A" points="369.396,137.398 301.164,143.681 301.164,17.402 369.396,11.734 "/>
+ <path fill="#1A575F" d="M425.588,138.957c-0.01,0.66-0.559,1.192-1.219,1.182l-9.083-0.138c-0.66-0.011-1.192-0.559-1.182-1.219
+ l0.059-3.897c0.011-0.66,0.559-1.192,1.219-1.182l9.085,0.139c0.66,0.011,1.191,0.559,1.182,1.219L425.588,138.957z"/>
+ <path fill="#1A575F" d="M412.963,139.052c0.094,0.654-0.365,1.266-1.019,1.359l-8.992,1.291c-0.653,0.094-1.265-0.363-1.358-1.018
+ l-0.553-3.858c-0.094-0.653,0.365-1.265,1.019-1.358l8.991-1.29c0.654-0.093,1.266,0.364,1.358,1.019L412.963,139.052z"/>
+ <path fill="#1A575F" d="M400.553,140.903c0.094,0.654-0.365,1.266-1.019,1.359l-8.99,1.291c-0.653,0.094-1.265-0.363-1.358-1.018
+ l-0.554-3.857c-0.094-0.654,0.364-1.266,1.019-1.359l8.99-1.289c0.654-0.094,1.266,0.363,1.358,1.018L400.553,140.903z"/>
+ <path fill="#1A575F" d="M388.292,142.98c0.096,0.671-0.374,1.299-1.045,1.396l-9.235,1.326c-0.671,0.097-1.299-0.373-1.395-1.045
+ l-0.568-3.961c-0.096-0.672,0.374-1.3,1.045-1.396l9.235-1.326c0.671-0.096,1.299,0.374,1.395,1.045L388.292,142.98z"/>
+ <path fill="#1A575F" d="M375.817,144.643c0.099,0.685-0.381,1.324-1.065,1.423l-9.418,1.353c-0.685,0.099-1.324-0.381-1.423-1.065
+ l-0.578-4.041c-0.099-0.685,0.381-1.324,1.065-1.423l9.417-1.351c0.685-0.099,1.324,0.381,1.423,1.065L375.817,144.643z"/>
+ <path fill="#1A575F" d="M362.816,146.554c0.101,0.7-0.39,1.354-1.09,1.455l-9.631,1.384c-0.7,0.101-1.354-0.39-1.455-1.09
+ l-0.592-4.132c-0.101-0.7,0.39-1.354,1.09-1.455l9.631-1.382c0.7-0.101,1.354,0.39,1.455,1.09L362.816,146.554z"/>
+ <path fill="#1A575F" d="M349.611,148.444c0.104,0.73-0.406,1.413-1.137,1.518l-10.043,1.442c-0.73,0.104-1.413-0.406-1.517-1.137
+ l-0.617-4.308c-0.104-0.73,0.407-1.413,1.138-1.518l10.041-1.44c0.73-0.104,1.413,0.406,1.518,1.137L349.611,148.444z"/>
+ <path fill="#1A575F" d="M335.301,150.389c0.104,0.73-0.406,1.413-1.137,1.518l-10.042,1.443c-0.73,0.104-1.413-0.406-1.517-1.137
+ l-0.617-4.308c-0.104-0.73,0.407-1.413,1.138-1.518l10.04-1.44c0.73-0.104,1.413,0.406,1.518,1.137L335.301,150.389z"/>
+ <path fill="#1A575F" d="M320.853,152.61c0.104,0.73-0.406,1.413-1.137,1.518l-10.041,1.444c-0.73,0.104-1.413-0.406-1.518-1.137
+ l-0.617-4.308c-0.104-0.73,0.406-1.413,1.137-1.518l10.042-1.44c0.73-0.104,1.413,0.406,1.518,1.137L320.853,152.61z"/>
+ <path fill="#1A575F" d="M307.059,154.788c0.38,0.632,0.175,1.46-0.457,1.84l-8.689,5.235c-0.632,0.38-1.459,0.175-1.84-0.457
+ l-2.244-3.729c-0.381-0.632-0.175-1.46,0.457-1.84l8.688-5.233c0.632-0.38,1.46-0.175,1.84,0.457L307.059,154.788z"/>
+ <path fill="#1A575F" d="M295.289,162.064c0.595,0.436,0.726,1.278,0.291,1.873l-5.987,8.191c-0.436,0.595-1.278,0.726-1.873,0.291
+ l-3.514-2.571c-0.595-0.435-0.726-1.278-0.291-1.873l5.988-8.188c0.435-0.595,1.278-0.727,1.873-0.291L295.289,162.064z"/>
+ <path fill="#1A575F" d="M287.06,173.59c0.685,0.273,1.021,1.058,0.748,1.742l-3.761,9.421c-0.273,0.685-1.058,1.021-1.742,0.748
+ l-4.041-1.616c-0.685-0.273-1.021-1.058-0.748-1.742l3.761-9.417c0.273-0.685,1.058-1.021,1.742-0.748L287.06,173.59z"/>
+ <path fill="#1A575F" d="M437.191,139.15l-11.076-4.819l-106.076,13.968c0,0-36.616,4.906-40.014,47.186
+ c-3.397,42.28,32.086,46.811,32.086,46.811L437.191,139.15z"/>
+ <path fill="#153B3F" d="M459.709,178.122c0-15.477-12.517-31.994-27.931-31.994c-2.401,0-3.918,0.142-6.934,0.546l-98.969,14.461
+ l0.004,0.05c-17.336,0.975-31.135,21.845-31.135,38.035c0,21.032,14.659,38.083,32.742,38.083c1.021,0,2.028-0.062,3.025-0.168
+ l0.016,0.254l2.718-0.686c0.869-0.179,1.728-0.392,2.571-0.647l100.989-25.469l-0.041-0.523
+ C449.81,207.335,459.709,194.077,459.709,178.122z"/>
+ <path fill="#183235" d="M431.779,146.128c-2.401,0-3.918,0.142-6.934,0.546l-98.969,14.461l0.004,0.05
+ c-0.38,0.021-0.756,0.063-1.132,0.104l-9.639,3.141c-3.488,1.941-6.672,4.642-9.437,7.801l147.957,26.069
+ c3.794-5.541,6.079-12.542,6.079-20.177C459.709,162.646,447.193,146.128,431.779,146.128z"/>
+ <path fill="none" stroke="#387986" stroke-width="3.3974" stroke-miterlimit="10" d="M459.709,178.122
+ c0-15.477-12.517-31.994-27.931-31.994c-2.401,0-3.918,0.142-6.934,0.546l-98.969,14.461l0.004,0.05
+ c-17.336,0.975-31.135,21.845-31.135,38.035c0,21.032,14.659,38.083,32.742,38.083c1.021,0,2.028-0.062,3.025-0.168l0.016,0.254
+ l2.718-0.686c0.869-0.179,1.728-0.392,2.571-0.647l100.989-25.469l-0.041-0.523C449.81,207.335,459.709,194.077,459.709,178.122z"
+ />
+ <path fill="#C0D1D6" d="M355.24,83.699c0,4.485-3.67,8.154-8.154,8.154h-30.408c-4.484,0-8.153-3.669-8.153-8.154V34.048
+ c0-4.484,3.651-8.508,8.115-8.942l30.485-2.958c4.463-0.434,8.115,2.881,8.115,7.366V83.699z"/>
+ <path opacity="0.7" fill="#FFFFFF" d="M347.125,22.148l-30.485,2.958c-1.81,0.176-3.48,0.948-4.834,2.096l43.435,51.165V29.514
+ C355.24,25.029,351.587,21.714,347.125,22.148z"/>
+ <path fill="none" stroke="#1C3D43" stroke-width="3.3974" stroke-miterlimit="10" d="M355.24,83.699
+ c0,4.485-3.669,8.154-8.154,8.154h-30.407c-4.485,0-8.154-3.669-8.154-8.154V34.048c0-4.484,3.652-8.508,8.115-8.941l30.484-2.959
+ c4.464-0.433,8.116,2.882,8.116,7.366V83.699z"/>
+ <polygon fill="#24747F" points="420.072,132.438 362.315,138.105 362.315,12.779 420.072,17.314 "/>
+ <path fill="#C0D1D6" d="M412.998,84.566c0,4.485-3.67,8.154-8.154,8.154h-28.429c-4.484,0-8.153-3.669-8.153-8.154v-54.48
+ c0-4.485,3.65-7.784,8.112-7.332l28.512,2.89c4.461,0.453,8.112,4.492,8.112,8.977V84.566z"/>
+ <path opacity="0.7" fill="#FFFFFF" d="M404.885,25.644l-28.512-2.89c-2.273-0.23-4.331,0.516-5.808,1.893l42.432,49.983V34.62
+ C412.998,30.136,409.346,26.096,404.885,25.644z"/>
+ <path fill="none" stroke="#1C3D43" stroke-width="3.3974" stroke-miterlimit="10" d="M412.998,84.566
+ c0,4.485-3.669,8.154-8.154,8.154h-28.428c-4.485,0-8.154-3.669-8.154-8.154V30.085c0-4.484,3.65-7.784,8.112-7.332l28.512,2.89
+ c4.462,0.452,8.112,4.492,8.112,8.976V84.566z"/>
+ <polygon fill="#24747F" points="419.508,87.05 432.249,106.585 432.249,121.024 438.194,121.024 438.194,130.65 369.441,137.398
+ 369.396,119.608 "/>
+ <g>
+
+ <image overflow="visible" opacity="0.1" width="336" height="128" xlink:href="DA577FBAEA2E3E61.png" transform="matrix(0.24 0 0 0.24 351.7466 -0.8115)">
+ </image>
+ <g>
+ <polygon fill="#6FB4BF" points="425.359,22.978 358.542,15.042 358.542,5.983 425.359,13.918 "/>
+ </g>
+ </g>
+ <g>
+
+ <image overflow="visible" opacity="0.1" width="315" height="123" xlink:href="DA577FBAEA2E3E60.png" transform="matrix(0.24 0 0 0.24 289.8433 -1.001)">
+ </image>
+ <g>
+ <polygon fill="#12353A" points="358.637,14.854 296.638,21.653 296.638,13.727 358.637,5.794 "/>
+ </g>
+ </g>
+ <g>
+
+ <image overflow="visible" opacity="0.1" width="629" height="408" xlink:href="DA577FBAEA2E3E6E.png" transform="matrix(0.24 0 0 0.24 205.6558 65.6816)">
+ </image>
+ <g>
+ <polygon fill="#24747F" points="349.61,89.275 329.838,72.477 212.451,77.71 212.451,156.599 349.754,140.135 "/>
+ </g>
+ </g>
+ <path fill="#387986" d="M460.57,170.961c-0.619,0.23-1.313-0.087-1.544-0.706l-3.173-8.511c-0.23-0.619,0.087-1.313,0.706-1.544
+ l3.651-1.361c0.619-0.23,1.313,0.087,1.544,0.706l3.173,8.513c0.23,0.619-0.087,1.313-0.706,1.544L460.57,170.961z"/>
+ <path fill="#387986" d="M461.197,183.599c-0.66,0.013-1.211-0.517-1.224-1.177l-0.182-9.081c-0.013-0.66,0.517-1.211,1.177-1.224
+ l3.896-0.078c0.66-0.013,1.211,0.517,1.224,1.177l0.182,9.083c0.013,0.66-0.517,1.211-1.177,1.224L461.197,183.599z"/>
+ <path fill="#387986" d="M457.85,195.681c-0.633-0.188-0.995-0.861-0.807-1.493l2.605-8.703c0.189-0.632,0.862-0.994,1.494-0.806
+ l3.734,1.118c0.632,0.188,0.994,0.861,0.805,1.493l-2.605,8.703c-0.188,0.632-0.861,0.994-1.494,0.806L457.85,195.681z"/>
+ <path fill="#387986" d="M449.876,205.417c-0.518-0.41-0.604-1.169-0.194-1.687l5.647-7.115c0.41-0.518,1.169-0.604,1.687-0.194
+ l3.053,2.423c0.518,0.41,0.604,1.169,0.194,1.687l-5.647,7.115c-0.41,0.518-1.169,0.604-1.687,0.194L449.876,205.417z"/>
+ <path fill="#387986" d="M438.726,212.112c-0.321-0.577-0.112-1.312,0.465-1.633l7.938-4.419c0.577-0.321,1.312-0.112,1.633,0.465
+ l1.896,3.406c0.321,0.577,0.112,1.312-0.465,1.633l-7.937,4.418c-0.577,0.321-1.312,0.112-1.633-0.465L438.726,212.112z"/>
+ <path fill="#387986" d="M456.279,159.44c-0.507,0.423-1.268,0.355-1.69-0.151l-5.825-6.97c-0.423-0.507-0.354-1.268,0.151-1.69
+ l2.991-2.498c0.507-0.423,1.268-0.355,1.69,0.151l5.825,6.971c0.423,0.507,0.354,1.268-0.151,1.69L456.279,159.44z"/>
+ <path fill="#387986" d="M448.237,149.599c-0.285,0.595-1.006,0.849-1.601,0.562l-8.19-3.928c-0.595-0.285-0.849-1.006-0.563-1.601
+ l1.686-3.515c0.285-0.595,1.006-0.849,1.601-0.562l8.19,3.928c0.595,0.286,0.849,1.007,0.563,1.602L448.237,149.599z"/>
+ <path fill="#387986" d="M437.112,144.246c-0.01,0.66-0.559,1.192-1.219,1.182l-9.082-0.138c-0.66-0.011-1.192-0.559-1.182-1.219
+ l0.059-3.896c0.01-0.66,0.558-1.192,1.218-1.182l9.085,0.139c0.66,0.011,1.191,0.559,1.182,1.219L437.112,144.246z"/>
+ <path fill="#387986" d="M424.488,144.341c0.093,0.654-0.364,1.266-1.019,1.359l-8.992,1.292c-0.654,0.094-1.265-0.364-1.358-1.018
+ l-0.553-3.858c-0.094-0.654,0.364-1.266,1.019-1.358l8.991-1.29c0.653-0.094,1.265,0.365,1.358,1.019L424.488,144.341z"/>
+ <path fill="#387986" d="M412.078,146.193c0.093,0.653-0.364,1.266-1.019,1.359l-8.991,1.291c-0.653,0.094-1.265-0.364-1.358-1.018
+ l-0.554-3.857c-0.094-0.653,0.364-1.266,1.019-1.359l8.991-1.29c0.653-0.094,1.265,0.363,1.358,1.018L412.078,146.193z"/>
+ <path fill="#387986" d="M399.816,148.271c0.096,0.671-0.374,1.299-1.045,1.396l-9.236,1.326c-0.671,0.097-1.299-0.373-1.395-1.044
+ l-0.568-3.963c-0.096-0.671,0.374-1.299,1.045-1.395l9.236-1.326c0.671-0.096,1.299,0.374,1.395,1.045L399.816,148.271z"/>
+ <path fill="#387986" d="M387.341,149.933c0.099,0.685-0.381,1.324-1.065,1.423l-9.418,1.352c-0.685,0.099-1.324-0.381-1.423-1.065
+ l-0.579-4.041c-0.099-0.685,0.381-1.324,1.065-1.423l9.418-1.35c0.685-0.099,1.324,0.381,1.423,1.065L387.341,149.933z"/>
+ <path fill="#387986" d="M374.34,151.844c0.101,0.7-0.39,1.354-1.09,1.455l-9.632,1.383c-0.7,0.101-1.354-0.39-1.455-1.09
+ l-0.591-4.131c-0.101-0.7,0.39-1.354,1.09-1.455l9.63-1.383c0.7-0.101,1.354,0.39,1.455,1.09L374.34,151.844z"/>
+ <path fill="#387986" d="M361.135,153.734c0.104,0.73-0.406,1.413-1.137,1.518l-10.043,1.441c-0.73,0.104-1.413-0.406-1.518-1.137
+ l-0.616-4.308c-0.104-0.73,0.406-1.413,1.137-1.518l10.041-1.44c0.73-0.104,1.413,0.406,1.518,1.137L361.135,153.734z"/>
+ <path fill="#387986" d="M346.826,155.679c0.104,0.73-0.406,1.413-1.137,1.518l-10.042,1.442c-0.73,0.104-1.413-0.406-1.518-1.137
+ l-0.616-4.308c-0.104-0.73,0.406-1.413,1.137-1.518l10.04-1.44c0.73-0.104,1.413,0.406,1.518,1.137L346.826,155.679z"/>
+ <path fill="#387986" d="M332.377,157.9c0.104,0.73-0.406,1.413-1.137,1.518l-10.042,1.444c-0.73,0.104-1.413-0.406-1.518-1.137
+ l-0.617-4.308c-0.104-0.73,0.406-1.413,1.137-1.518l10.042-1.44c0.73-0.104,1.413,0.406,1.518,1.137L332.377,157.9z"/>
+ <path fill="#387986" d="M438.098,216.6c0.162,0.64-0.229,1.296-0.868,1.458l-8.808,2.233c-0.64,0.162-1.296-0.229-1.458-0.868
+ l-0.957-3.778c-0.162-0.64,0.229-1.296,0.868-1.458l8.805-2.233c0.64-0.162,1.296,0.229,1.458,0.868L438.098,216.6z"/>
+ <path fill="#387986" d="M425.675,219.752c0.162,0.64-0.229,1.296-0.868,1.458L416,223.444c-0.64,0.162-1.296-0.229-1.458-0.869
+ l-0.956-3.777c-0.162-0.64,0.229-1.296,0.868-1.458l8.805-2.232c0.64-0.162,1.296,0.229,1.458,0.868L425.675,219.752z"/>
+ <path fill="#387986" d="M413.562,222.972c0.166,0.656-0.235,1.331-0.892,1.498l-9.044,2.296c-0.656,0.167-1.331-0.234-1.497-0.892
+ l-0.983-3.879c-0.167-0.657,0.235-1.332,0.892-1.498l9.043-2.294c0.656-0.166,1.331,0.235,1.497,0.892L413.562,222.972z"/>
+ <path fill="#387986" d="M401.055,226.082c0.17,0.671-0.238,1.357-0.909,1.528l-9.225,2.34c-0.671,0.171-1.357-0.239-1.527-0.909
+ l-1.001-3.956c-0.17-0.67,0.239-1.357,0.91-1.527l9.221-2.34c0.671-0.17,1.357,0.239,1.528,0.91L401.055,226.082z"/>
+ <path fill="#387986" d="M388.33,229.356c0.174,0.686-0.244,1.389-0.93,1.562l-9.434,2.393c-0.686,0.174-1.388-0.244-1.562-0.93
+ l-1.023-4.045c-0.174-0.686,0.245-1.389,0.931-1.562l9.429-2.392c0.686-0.174,1.389,0.244,1.562,0.93L388.33,229.356z"/>
+ <path fill="#387986" d="M375.398,232.633c0.181,0.714-0.256,1.447-0.97,1.629l-9.834,2.495c-0.714,0.182-1.447-0.255-1.629-0.969
+ l-1.07-4.221c-0.181-0.714,0.256-1.447,0.971-1.628l9.834-2.494c0.714-0.181,1.447,0.256,1.628,0.97L375.398,232.633z"/>
+ <path fill="#387986" d="M361.374,236.079c0.181,0.714-0.256,1.447-0.97,1.629l-9.834,2.495c-0.714,0.182-1.447-0.255-1.628-0.97
+ l-1.07-4.22c-0.181-0.715,0.256-1.448,0.971-1.629l9.832-2.494c0.715-0.181,1.448,0.256,1.629,0.97L361.374,236.079z"/>
+ <path fill="#387986" d="M347.242,239.815c0.181,0.714-0.256,1.447-0.97,1.629l-9.835,2.494c-0.714,0.182-1.447-0.255-1.628-0.97
+ l-1.068-4.218c-0.181-0.715,0.256-1.448,0.97-1.629l9.833-2.494c0.714-0.182,1.447,0.255,1.628,0.969L347.242,239.815z"/>
+ <path fill="#387986" d="M318.583,160.078c0.38,0.632,0.175,1.46-0.457,1.84l-8.689,5.234c-0.632,0.38-1.459,0.175-1.84-0.457
+ l-2.243-3.729c-0.381-0.632-0.175-1.46,0.457-1.84l8.688-5.232c0.632-0.38,1.46-0.175,1.84,0.457L318.583,160.078z"/>
+ <path fill="#387986" d="M306.812,167.354c0.595,0.436,0.727,1.278,0.291,1.873l-5.987,8.192c-0.436,0.595-1.277,0.726-1.873,0.291
+ l-3.514-2.572c-0.596-0.435-0.726-1.278-0.291-1.873l5.988-8.188c0.435-0.595,1.278-0.727,1.873-0.291L306.812,167.354z"/>
+ <path fill="#387986" d="M306.331,231.972c0.366-0.64,1.189-0.863,1.829-0.497l8.806,5.04c0.64,0.366,0.863,1.189,0.497,1.829
+ l-2.164,3.778c-0.366,0.64-1.189,0.863-1.829,0.497l-8.804-5.04c-0.64-0.366-0.863-1.189-0.497-1.829L306.331,231.972z"/>
+ <path fill="#387986" d="M319.117,238.369c0.078-0.733,0.742-1.269,1.476-1.19l10.09,1.076c0.733,0.078,1.269,0.742,1.19,1.476
+ l-0.464,4.328c-0.078,0.733-0.742,1.269-1.476,1.19l-10.087-1.077c-0.733-0.078-1.269-0.742-1.19-1.476L319.117,238.369z"/>
+ <path fill="#387986" d="M298.583,178.88c0.685,0.273,1.021,1.058,0.748,1.742l-3.761,9.421c-0.273,0.685-1.058,1.021-1.742,0.748
+ l-4.041-1.616c-0.685-0.273-1.021-1.058-0.748-1.742l3.762-9.417c0.273-0.685,1.058-1.021,1.742-0.748L298.583,178.88z"/>
+ <path fill="#387986" d="M293.6,192.311c0.736,0.033,1.311,0.664,1.277,1.4l-0.47,10.133c-0.033,0.736-0.664,1.311-1.4,1.276
+ l-4.35-0.201c-0.736-0.034-1.311-0.665-1.276-1.401l0.471-10.132c0.034-0.736,0.665-1.311,1.401-1.277L293.6,192.311z"/>
+ <path fill="#387986" d="M293.418,206.434c0.705-0.216,1.459,0.185,1.675,0.89l2.967,9.698c0.216,0.705-0.185,1.459-0.889,1.675
+ l-4.162,1.273c-0.704,0.216-1.458-0.185-1.674-0.889l-2.969-9.7c-0.216-0.704,0.185-1.458,0.89-1.674L293.418,206.434z"/>
+ <path fill="#387986" d="M297.704,220.038c0.604-0.423,1.444-0.275,1.867,0.328l5.823,8.305c0.423,0.604,0.275,1.444-0.328,1.867
+ l-3.563,2.499c-0.604,0.423-1.444,0.275-1.867-0.328l-5.824-8.305c-0.423-0.604-0.275-1.444,0.328-1.867L297.704,220.038z"/>
+ <g>
+
+ <image overflow="visible" opacity="0.1" width="549" height="180" xlink:href="DA577FBAEA2E3E78.png" transform="matrix(0.24 0 0 0.24 275.4946 164.9082)">
+ </image>
+ <g>
+ <polygon fill="#6FB4BF" points="282.29,201.157 400.256,190.955 400.256,171.703 282.29,181.905 "/>
+ </g>
+ </g>
+ <polygon fill="#6FB4BF" points="214.776,77.606 232.977,98.345 349.61,89.275 329.838,72.477 "/>
+ <g>
+
+ <image overflow="visible" opacity="0.1" width="233" height="251" xlink:href="DA577FBAEA2E3E79.png" transform="matrix(0.24 0 0 0.24 185.1792 70.9141)">
+ </image>
+ <g>
+ <polygon fill="#12353A" points="234.11,98.345 220.2,77.709 207.049,77.709 192.118,98.345 191.974,124.269 234.255,124.269
+ "/>
+ </g>
+ </g>
+ <g opacity="0.2">
+
+ <image overflow="visible" opacity="0.1" width="233" height="251" xlink:href="DA577FBAEA2E3E7A.png" transform="matrix(0.24 0 0 0.24 185.1792 70.9141)">
+ </image>
+ <g>
+ <polygon fill="#24747F" points="234.11,98.345 220.2,77.709 207.049,77.709 192.118,98.345 191.974,124.269 234.255,124.269
+ "/>
+ </g>
+ </g>
+ <g>
+
+ <image overflow="visible" opacity="0.2" width="390" height="616" xlink:href="DA577FBAEA2E3E7B.png" transform="matrix(0.24 0 0 0.24 198.3687 118.166)">
+ </image>
+ <g>
+ <polygon fill="#6FB4BF" points="256.196,124.961 284.944,150.575 284.944,235.517 248.885,259.103 205.164,248.447 "/>
+ </g>
+ </g>
+ <polygon fill="#256870" points="136.366,138.442 136.366,213.418 273.61,235.517 273.61,150.575 "/>
+ <polygon fill="#24747F" points="115.01,231.371 248.888,260.236 273.61,235.517 136.366,213.418 "/>
+ <polygon opacity="0.6" fill="#6FB4BF" points="115.01,231.371 248.888,260.236 273.61,235.517 136.366,213.418 "/>
+ <polygon fill="#24747F" points="255.691,123.205 120.886,118.2 136.366,139.576 273.61,150.575 "/>
+ <g>
+
+ <image overflow="visible" opacity="0.1" width="177" height="188" xlink:href="DA577FBAEA2E3E7C.png" transform="matrix(0.24 0 0 0.24 379.0737 158.8359)">
+ </image>
+ <g>
+ <polygon fill="#24747F" points="391.871,176.532 400.206,171.72 408.542,176.532 408.542,186.157 400.206,190.971
+ 391.871,186.157 "/>
+ <polygon fill="none" stroke="#1E6C72" stroke-width="1.1325" stroke-miterlimit="10" points="391.871,176.532 400.206,171.72
+ 408.542,176.532 408.542,186.157 400.206,190.971 391.871,186.157 "/>
+ </g>
+ </g>
+ </g>
+ <g>
+
+ <image overflow="visible" opacity="0.1" width="698" height="391" xlink:href="DA577FBAEA2E3E7D.png" transform="matrix(0.24 0 0 0.24 52.6411 165.6338)">
+ </image>
+ <g>
+ <polygon fill="#D0B5A1" points="212.777,217.852 192.737,196.271 181.865,196.271 163.227,172.973 128.281,172.973
+ 61.29,218.214 59.979,218.214 59.979,252.055 212.777,252.055 "/>
+ <g>
+ <polygon fill="#E2D4C9" points="212.777,217.852 192.737,196.271 181.865,196.271 163.227,172.973 128.281,172.973
+ 120.819,177.635 158.564,177.635 177.202,200.933 188.074,200.933 208.114,222.516 208.114,252.055 212.777,252.055 "/>
+ </g>
+ </g>
+ </g>
+ <g>
+
+ <image overflow="visible" opacity="0.1" width="637" height="357" xlink:href="8EA57603D8AF04C2.png" transform="matrix(0.24 0 0 0.24 33.603 184.1553)">
+ </image>
+ <g>
+ <polygon fill="#DEC8B6" points="40.941,252.648 50.597,232.264 68.483,232.264 80.285,191.494 110.325,191.494 119.98,203.285
+ 156.458,203.285 178.988,239.773 171.478,262.304 65.617,262.304 "/>
+ <polygon fill="#EBE0D5" points="119.98,203.285 110.325,191.494 80.285,191.494 78.938,196.149 105.935,196.149 118.28,208.495
+ 152.054,208.495 171.619,240.405 164.32,262.304 171.478,262.304 178.988,239.773 156.458,203.285 "/>
+ </g>
+ </g>
+ <polygon opacity="0.5" fill="#D0B5A1" points="85.717,203.991 76.217,239.737 59.467,239.737 53.967,249.987 67.967,255.237
+ 104.79,255.237 104.79,241.148 93.95,230.987 100.465,203.991 "/>
+ <g opacity="0.25">
+ <path fill="none" d="M372.808,84.245c0.049-0.014,0.098-0.031,0.146-0.044c-1.018-1.453-1.854-3.109-2.441-4.944l-0.27-0.812
+ c-0.029-0.092-0.057-0.186-0.084-0.28c-0.02-0.066-0.041-0.133-0.059-0.2l-0.064-0.045v5.046
+ C370.975,83.395,372.339,84.027,372.808,84.245z"/>
+ <path fill="#FFFFFF" d="M385.226,64.212c3.107,0.007,6.201,0.213,9.283,0.531c3.375,0.348,7.17,0.621,9.006,0.02
+ c-0.131,0.148-0.297,0.257-0.465,0.354c-0.168,0.095-0.348,0.178-0.529,0.256c-0.363,0.146-0.738,0.263-1.119,0.356
+ c-0.055,0.014-0.111,0.026-0.17,0.039c1.834,0.339,2.9,0.616,3.016,0.646l0.217-0.035c0,0,0.279-1.2,0.363-1.816
+ c0.08-0.614,0.123-1.235,0.117-1.854c-0.004-0.311-0.016-0.619-0.041-0.927c-0.014-0.156-0.576-0.646-1.062-0.925
+ c-0.525-0.309-1.076-0.582-1.635-0.835c-0.559-0.266-1.131-0.504-1.705-0.735c-0.287-0.116-4.271-0.999-6.799-1.325
+ c-0.309-0.04-1.969-1.208-2.264-1.314c0.617,0.102,5.678,0.554,9.334,1.527c-2.768-7.234-8.197-10.562-15.424-10.562
+ c-7.137,0-12.517,3.445-15.312,10.5v0.233c0.983-0.205,8.822-1.402,9.412-1.501c-0.293,0.108-1.971,1.401-2.26,1.512
+ c-0.291,0.11-4.174,0.624-5.262,0.821c-0.535,0.098-1.243,0.24-1.891,0.391v5.543c1.793,0.011,3.917-0.163,5.904-0.368
+ C379.027,64.425,382.117,64.219,385.226,64.212z M380.585,53.992v-2.705v-1.187h9.703v1.187v2.705v1.186h-2.758v-1.135h-0.621
+ v4.064h0.939v1.187v1.748v1.188h-4.824v-1.188v-1.748v-1.187h0.934v-4.064h-0.619v1.135h-2.754V53.992z"/>
+ <path fill="#FFFFFF" d="M387.433,87.507c-0.314-0.328-0.596-0.636-0.814-0.882c-0.109,0.246-0.252,0.571-0.439,0.992h0.055
+ c0.15,0,0.314-0.018,0.473-0.025C386.947,87.571,387.187,87.54,387.433,87.507z"/>
+ <path fill="#FFFFFF" d="M398.941,78.376l-0.939,0.657c-0.061,0.042-0.139,0.063-0.215,0.055l-9.311-1.058l-0.139-0.017
+ l-0.541-0.06c-0.123-0.015-0.23-0.103-0.266-0.226l-1.459-4.799c-0.242-0.031-0.461-0.048-0.643-0.048
+ c-0.184,0-0.398,0.017-0.643,0.048l-1.414,4.661c-0.033,0.107-0.123,0.19-0.236,0.216l-0.678,0.15l-9.248,2.06
+ c-0.021,0.005-0.045,0.007-0.066,0.007c-0.064,0-0.129-0.02-0.186-0.058l-0.359-0.25l-1.08-0.757v-0.003l-0.438-0.306
+ c0.031,0.101,0.066,0.197,0.102,0.291v0.003c0.029,0.091,0.162,0.476,0.404,1.041c0.41,0.971,1.141,2.479,2.215,3.968
+ c1.82-0.536,3.396-1.035,3.898-1.195c1.025-1.58,2.486-3.148,3.521-3.202c0.18-0.008,0.367-0.013,0.549-0.013
+ c0.51,0,0.992,0.035,1.443,0.088c-0.381-0.346-0.459-0.752-0.516-0.933c0,0,1.322,1.035,3.01,0.818
+ c1.686-0.217,2.732-1.189,2.732-1.189s-0.006,0.709-0.74,1.258c1.412-0.428,1.996-0.573,2.398-0.573
+ c0.441,0,0.658,0.184,0.848,0.346c0.039,0.03,0.074,0.062,0.117,0.095c1.084,0.856,2.391,1.895,2.773,2.2
+ c0.441,0.051,1.848,0.21,2.73,0.291c0.508,0.048,0.971,0.085,1.42,0.085c0.145,0,0.281-0.005,0.41-0.012
+ c0.467-0.894,0.896-1.883,1.277-2.969c0.096-0.273,0.189-0.553,0.279-0.838c0.061-0.22,0.117-0.44,0.172-0.663l-0.32,0.225
+ L398.941,78.376z"/>
+ <path fill="#FFFFFF" d="M373.652,77.374l7.582-1.686l1.42-4.676c0.023-0.078,0.076-0.143,0.145-0.181
+ c0.021-0.015,0.045-0.027,0.072-0.032c0.043-0.013,0.801-0.229,1.678-0.336l1.391-0.84c0.416-0.253,0.818-0.544,1.199-0.852
+ c-0.547-0.008-1.1-0.016-1.664-0.016c-2.316,0-4.48,0.096-6.441,0.243c-1.967,0.963-3.17,1.755-3.197,1.774l-1.889,1.261
+ l1.297-1.862c0.215-0.311,0.441-0.604,0.674-0.882c-2.178,0.243-3.992,0.531-5.348,0.782l0.693,5.628L373.652,77.374z
+ M376.439,74.338c-0.094-0.208-0.154-0.499-0.17-0.899c-0.059-1.539,0.891-2.803,1.873-2.812c0.98-0.01,1.666,1.237,1.68,2.779
+ c0.016,1.541-0.801,1.446-1.781,1.455c-0.102,0.006-0.195,0.007-0.289,0.007c-0.109,0.001-0.215,0.004-0.316,0.001
+ c-0.953-0.001-1.561-0.045-2.102,0.247C375.345,75.082,375.583,74.554,376.439,74.338z"/>
+ <path fill="#FFFFFF" d="M387.847,87.928c-0.365,0.072-0.736,0.128-1.117,0.16c-0.158,0.008-0.311,0.021-0.477,0.021l-0.248,0.002
+ l-0.094-0.002c-1.006,1.496-3.236,1.786-3.338,1.799c-0.094,0.01-0.166,0.022-0.271,0.043c1.244,0.341,2.512,0.488,3.764,0.403
+ c1.256-0.084,2.885-0.356,4.615-1.057c-1.029-0.076-1.965-0.505-2.721-1.252C387.921,88.005,387.886,87.968,387.847,87.928z"/>
+ <path fill="#FFFFFF" d="M392.359,72.226c0.277-0.005,0.498-0.233,0.492-0.509c-0.004-0.279-0.232-0.5-0.508-0.494
+ c-0.279,0.006-0.5,0.233-0.494,0.511C391.853,72.01,392.082,72.23,392.359,72.226z"/>
+ <rect x="386.91" y="58.107" fill="#FFFFFF" width="0.939" height="1.187"/>
+ <rect x="380.585" y="50.101" fill="#FFFFFF" width="9.703" height="1.187"/>
+ <rect x="383.025" y="58.107" fill="#FFFFFF" width="0.934" height="1.187"/>
+ <path fill="#FFFFFF" d="M378.308,72.598c0.275-0.006,0.494-0.237,0.488-0.515c-0.01-0.277-0.242-0.496-0.516-0.486
+ c-0.279,0.005-0.496,0.238-0.488,0.513C377.798,72.387,378.029,72.605,378.308,72.598z"/>
+ <path fill="#FFFFFF" d="M386.191,70.419l-0.182,0.013c0.994,0.085,1.932,0.353,1.979,0.368c0.102,0.03,0.182,0.108,0.213,0.213
+ l1.416,4.653l7.574,0.862l2.408-1.688l0.682-4.788c-1.926-0.351-4.748-0.774-8.201-1.04
+ C388.96,70.088,386.347,70.408,386.191,70.419z M394.431,72.974c0.033,0.425-0.014,0.732-0.117,0.962
+ c0.912-0.108,1.117,0.512,1.129,0.548c-0.662-0.319-1.385,0.085-2.705,0.11c-0.979,0.035-1.803,0.046-1.857-1.494
+ c-0.055-1.543,0.574-2.818,1.557-2.853C393.416,70.213,394.312,71.437,394.431,72.974z"/>
+ <path fill="#A2B7BE" d="M390.88,73.1c0.055,1.54,0.879,1.529,1.857,1.494c1.32-0.025,2.043-0.43,2.705-0.11
+ c-0.012-0.036-0.217-0.656-1.129-0.548c0.104-0.229,0.15-0.537,0.117-0.962c-0.119-1.537-1.016-2.761-1.994-2.727
+ C391.455,70.281,390.826,71.557,390.88,73.1z M392.343,71.223c0.275-0.006,0.504,0.215,0.508,0.494
+ c0.006,0.275-0.215,0.504-0.492,0.509s-0.506-0.216-0.51-0.492C391.843,71.456,392.064,71.229,392.343,71.223z"/>
+ <path fill="#A2B7BE" d="M377.435,74.869c0.102,0.003,0.207,0,0.316-0.001c0.094,0,0.188-0.001,0.289-0.007
+ c0.98-0.009,1.797,0.086,1.781-1.455c-0.014-1.542-0.699-2.789-1.68-2.779c-0.982,0.009-1.932,1.272-1.873,2.812
+ c0.016,0.4,0.076,0.691,0.17,0.899c-0.855,0.216-1.094,0.744-1.105,0.778C375.875,74.824,376.482,74.868,377.435,74.869z
+ M378.281,71.597c0.273-0.01,0.506,0.209,0.516,0.486c0.006,0.277-0.213,0.509-0.488,0.515c-0.279,0.008-0.51-0.211-0.516-0.488
+ C377.785,71.835,378.001,71.602,378.281,71.597z"/>
+ <polygon fill="#A2B7BE" points="383.339,54.043 383.958,54.043 383.958,52.856 383.339,52.856 383.339,53.992 380.585,53.992
+ 380.585,55.178 383.339,55.178 "/>
+ <polygon fill="#A2B7BE" points="387.531,52.856 386.91,52.856 386.91,54.043 387.531,54.043 387.531,55.178 390.289,55.178
+ 390.289,53.992 387.531,53.992 "/>
+ <rect x="383.025" y="61.042" fill="#A2B7BE" width="4.824" height="1.188"/>
+ <polygon fill="#A2B7BE" points="383.339,52.856 383.958,52.856 383.958,54.043 383.958,58.107 383.958,59.294 383.025,59.294
+ 383.025,61.042 387.849,61.042 387.849,59.294 386.91,59.294 386.91,58.107 386.91,54.043 386.91,52.856 387.531,52.856
+ 387.531,53.992 390.289,53.992 390.289,51.287 380.585,51.287 380.585,53.992 383.339,53.992 "/>
+ <path fill="#A2B7BE" d="M406.431,62.681c-0.014-0.333-0.049-0.664-0.096-0.995c-0.021-0.165-0.047-0.331-0.082-0.496
+ c-0.031-0.168-0.064-0.324-0.117-0.506l-0.035-0.131l-0.092-0.072c-0.523-0.411-1.09-0.722-1.664-0.998
+ c-0.475-0.224-0.957-0.418-1.443-0.598c-1.359-3.77-3.693-7.11-6.762-9.439c-3.174-2.407-6.906-3.681-10.791-3.681
+ c-3.887,0-7.617,1.273-10.791,3.681c-1.768,1.342-3.288,3.024-4.521,4.928v1.513c2.243-3.688,7.053-9.286,15.6-9.286
+ c0,0,11.656-0.199,16.201,12.149c0,0,3.26,1.581,3.557,2.271c0.293,0.691,0.592,1.187,0.293,3.458
+ c-0.293,2.271-0.492,4.05-3.357,4.248l-0.395,5.036l-1.283,2.47c0,0-1.975,13.829-14.225,14.226
+ c-12.332,0.396-15.902-12.941-15.902-12.941l-0.488-2.302v2.704l0.064,0.045c0.018,0.067,0.039,0.134,0.059,0.2
+ c0.027,0.095,0.055,0.188,0.084,0.28l0.27,0.812c0.588,1.835,1.424,3.491,2.441,4.944c-0.049,0.013-0.098,0.03-0.146,0.044
+ c-0.469-0.218-1.833-0.85-2.771-1.28v2.372c0.482,0.704,1.031,1.478,1.537,2.129c1.174,1.506,2.779,3.047,5.811,3.047
+ c0.367,0,0.746-0.023,1.139-0.067c0.906-0.103,1.584-0.185,2.102-0.251c3.182,1.168,6.689,1.24,10.02-0.02
+ c0.91-0.346,1.74-0.768,2.502-1.238c0.018-0.001,0.033-0.005,0.047-0.01c1.238-0.299,2.643-0.632,3.336-0.827
+ c0.113-0.03,0.25-0.064,0.395-0.098c0.967-0.224,2.582-0.597,3.443-2.32c0.867-1.737,2.283-4.4,2.299-4.429l0.662-1.242
+ l-1.291,0.561c-0.068,0.03-1.703,0.742-2.551,1.188c-0.031,0.015-0.064,0.032-0.1,0.046c0.689-1.405,1.035-2.529,1.156-2.959
+ l0.469-1.921l1.342-3c0,0,0.373-3.278,0.381-3.275l0.133-1.253c0.117-0.051,0.834-0.1,0.975-0.155
+ c0.199-0.08,0.398-0.157,0.6-0.244l0.295-0.133c0.102-0.049,0.193-0.094,0.309-0.149l0.102-0.054l0.07-0.105
+ c0.035-0.056,0.055-0.089,0.08-0.131l0.062-0.115c0.045-0.08,0.084-0.158,0.119-0.235c0.074-0.158,0.141-0.316,0.205-0.474
+ c0.123-0.317,0.229-0.637,0.32-0.96c0.176-0.649,0.299-1.304,0.369-1.965C406.449,64.015,406.464,63.347,406.431,62.681z"/>
+ <path fill="#A2B7BE" d="M385.349,47.611c7.227,0,12.656,3.328,15.424,10.562c-3.656-0.974-8.717-1.426-9.334-1.527
+ c0.295,0.106,1.955,1.274,2.264,1.314c2.527,0.326,6.512,1.209,6.799,1.325c0.574,0.231,1.146,0.47,1.705,0.735
+ c0.559,0.253,1.109,0.526,1.635,0.835c0.486,0.279,1.049,0.769,1.062,0.925c0.025,0.308,0.037,0.616,0.041,0.927
+ c0.006,0.619-0.037,1.24-0.117,1.854c-0.084,0.616-0.363,1.816-0.363,1.816l-0.217,0.035c-0.115-0.03-1.182-0.308-3.016-0.646
+ c0.059-0.013,0.115-0.025,0.17-0.039c0.381-0.094,0.756-0.211,1.119-0.356c0.182-0.078,0.361-0.161,0.529-0.256
+ c0.168-0.097,0.334-0.205,0.465-0.354c-1.836,0.602-5.631,0.328-9.006-0.02c-3.082-0.318-6.176-0.524-9.283-0.531
+ c-3.109,0.007-6.199,0.213-9.285,0.531c-1.987,0.205-4.111,0.379-5.904,0.368v10.104l0.488,2.302c0,0,3.57,13.337,15.902,12.941
+ c12.25-0.396,14.225-14.226,14.225-14.226l1.283-2.47l0.395-5.036c2.865-0.198,3.064-1.978,3.357-4.248
+ c0.299-2.271,0-2.767-0.293-3.458c-0.297-0.69-3.557-2.271-3.557-2.271c-4.545-12.349-16.201-12.149-16.201-12.149
+ c-8.547,0-13.356,5.599-15.6,9.286v2.225C372.833,51.056,378.212,47.611,385.349,47.611z M375.917,69.291
+ c-0.232,0.278-0.459,0.571-0.674,0.882l-1.297,1.862l1.889-1.261c0.027-0.02,1.23-0.812,3.197-1.774
+ c1.961-0.147,4.125-0.243,6.441-0.243c0.564,0,1.117,0.008,1.664,0.016c-0.381,0.308-0.783,0.599-1.199,0.852l-1.391,0.84
+ c-0.877,0.107-1.635,0.323-1.678,0.336c-0.027,0.005-0.051,0.018-0.072,0.032c-0.068,0.038-0.121,0.103-0.145,0.181l-1.42,4.676
+ l-7.582,1.686l-2.389-1.673l-0.693-5.628C371.925,69.822,373.74,69.534,375.917,69.291z M386.066,90.354
+ c-1.252,0.085-2.52-0.062-3.764-0.403c0.105-0.021,0.178-0.033,0.271-0.043c0.102-0.013,2.332-0.303,3.338-1.799l0.094,0.002
+ l0.248-0.002c0.166,0,0.318-0.013,0.477-0.021c0.381-0.032,0.752-0.088,1.117-0.16c0.039,0.04,0.074,0.077,0.113,0.117
+ c0.756,0.747,1.691,1.176,2.721,1.252C388.951,89.997,387.322,90.27,386.066,90.354z M386.179,87.617
+ c0.188-0.421,0.33-0.746,0.439-0.992c0.219,0.246,0.5,0.554,0.814,0.882c-0.246,0.033-0.486,0.064-0.727,0.085
+ c-0.158,0.008-0.322,0.025-0.473,0.025H386.179z M399.955,78.21c-0.09,0.285-0.184,0.564-0.279,0.838
+ c-0.381,1.086-0.811,2.075-1.277,2.969c-0.129,0.007-0.266,0.012-0.41,0.012c-0.449,0-0.912-0.037-1.42-0.085
+ c-0.883-0.081-2.289-0.24-2.73-0.291c-0.383-0.306-1.689-1.344-2.773-2.2c-0.043-0.032-0.078-0.064-0.117-0.095
+ c-0.189-0.162-0.406-0.346-0.848-0.346c-0.402,0-0.986,0.146-2.398,0.573c0.734-0.549,0.74-1.258,0.74-1.258
+ s-1.047,0.973-2.732,1.189c-1.688,0.217-3.01-0.818-3.01-0.818c0.057,0.181,0.135,0.587,0.516,0.933
+ c-0.451-0.053-0.934-0.088-1.443-0.088c-0.182,0-0.369,0.005-0.549,0.013c-1.035,0.054-2.496,1.622-3.521,3.202
+ c-0.502,0.16-2.078,0.659-3.898,1.195c-1.074-1.488-1.805-2.997-2.215-3.968c-0.242-0.565-0.375-0.95-0.404-1.041v-0.003
+ c-0.035-0.094-0.07-0.19-0.102-0.291l0.438,0.306v0.003l1.08,0.757l0.359,0.25c0.057,0.038,0.121,0.058,0.186,0.058
+ c0.021,0,0.045-0.002,0.066-0.007l9.248-2.06l0.678-0.15c0.113-0.025,0.203-0.108,0.236-0.216l1.414-4.661
+ c0.244-0.031,0.459-0.048,0.643-0.048c0.182,0,0.4,0.017,0.643,0.048l1.459,4.799c0.035,0.123,0.143,0.211,0.266,0.226l0.541,0.06
+ l0.139,0.017l9.311,1.058c0.076,0.009,0.154-0.013,0.215-0.055l0.939-0.657l0.865-0.604l0.32-0.225
+ C400.072,77.77,400.015,77.99,399.955,78.21z M399.599,74.841l-2.408,1.688l-7.574-0.862l-1.416-4.653
+ c-0.031-0.104-0.111-0.183-0.213-0.213c-0.047-0.016-0.984-0.283-1.979-0.368l0.182-0.013c0.156-0.011,2.77-0.331,5.889-1.406
+ c3.453,0.266,6.275,0.689,8.201,1.04L399.599,74.841z"/>
+ <path fill="#A2B7BE" d="M377.189,58.355c0.289-0.11,1.967-1.403,2.26-1.512c-0.59,0.099-8.429,1.296-9.412,1.501v1.223
+ c0.647-0.151,1.355-0.293,1.891-0.391C373.015,58.979,376.898,58.466,377.189,58.355z"/>
+ <path fill="#FFFFFF" d="M369.929,58.368c0.016-0.005,0.065-0.015,0.107-0.023v-0.233C370.002,58.199,369.963,58.28,369.929,58.368
+ z"/>
+ </g>
+</g>
+</svg>
diff --git a/bridgedb/https/templates/base.html b/bridgedb/https/templates/base.html
index 8097c60..86bf85d 100644
--- a/bridgedb/https/templates/base.html
+++ b/bridgedb/https/templates/base.html
@@ -8,6 +8,7 @@
<head>
<meta charset="utf-8">
<title>BridgeDB</title>
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="Tor Bridges">
<meta name="author" content="The Tor Project">
diff --git a/bridgedb/https/templates/error-404.html b/bridgedb/https/templates/error-404.html
new file mode 100644
index 0000000..1e46b1c
--- /dev/null
+++ b/bridgedb/https/templates/error-404.html
@@ -0,0 +1,39 @@
+## -*- coding: utf-8 -*-
+
+<html>
+ <head>
+ <meta charset="utf-8">
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <title>BridgeDB - 404</title>
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <meta name="description" content="Bridge IP database">
+ <meta name="author" content="The Tor Project">
+
+ <!-- Le styles -->
+ <link rel="stylesheet" href="/assets/css/main.css">
+ <!--[if IE 7]>
+ <link rel="stylesheet" href="/assets/css/font-awesome-ie7.min.css">
+ <![endif]-->
+ <link rel="stylesheet" href="/assets/css/error.css">
+ </head>
+ <body>
+ <div class="application error error404">
+ <main class="main main--error" role="main">
+ <div class="error-bg full-size">
+ <div class="top full-size"></div>
+ <div class="hill-left full-size"></div>
+ <div class="hill-right full-size"></div>
+ <div class="shadow-left full-size"></div>
+ <div class="shadow-right full-size"></div>
+ </div>
+ <div class="error-excavator full-size"></div>
+ <div class="error-text">
+ <h1>Page Not Found</h1>
+ <p>We dug around for the page you requested, but we couldn't find it!
+ Please <a href="/">go back</a> and try again.
+ </p>
+ </div>
+ </main>
+ </div>
+ </body>
+</html>
diff --git a/bridgedb/https/templates/error-500.html b/bridgedb/https/templates/error-500.html
new file mode 100644
index 0000000..5c56c39
--- /dev/null
+++ b/bridgedb/https/templates/error-500.html
@@ -0,0 +1,36 @@
+## -*- coding: utf-8 -*-
+
+<html>
+ <head>
+ <meta charset="utf-8">
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <title>BridgeDB - 500</title>
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <meta name="description" content="Bridge IP database">
+ <meta name="author" content="The Tor Project">
+
+ <!-- Le styles -->
+ <link rel="stylesheet" href="/assets/css/main.css">
+ <!--[if IE 7]>
+ <link rel="stylesheet" href="/assets/css/font-awesome-ie7.min.css">
+ <![endif]-->
+ <link rel="stylesheet" href="/assets/css/error.css">
+ </head>
+ <body>
+ <div class="application error error500">
+ <main class="main main--error" role="main">
+ <div class="error-bg full-size">
+ <div class="hill-left full-size"></div>
+ <div class="hill-right full-size"></div>
+ <div class="shadow-left full-size"></div>
+ <div class="shadow-right full-size"></div>
+ </div>
+ <div class="road full-size"></div>
+ <div class="error-text">
+ <h1>Bad News Bears</h1>
+ <p>Something wicked totally just borked <a href="/">BridgeDB</a>… :'(</p>
+ </div>
+ </main>
+ </div>
+ </body>
+</html>
diff --git a/bridgedb/https/templates/error-503.html b/bridgedb/https/templates/error-503.html
new file mode 100644
index 0000000..c926743
--- /dev/null
+++ b/bridgedb/https/templates/error-503.html
@@ -0,0 +1,37 @@
+## -*- coding: utf-8 -*-
+
+<html>
+ <head>
+ <meta charset="utf-8">
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <title>BridgeDB - Under Maintenance</title>
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <meta name="description" content="Bridge IP database">
+ <meta name="author" content="The Tor Project">
+
+ <!-- Le styles -->
+ <link rel="stylesheet" href="/assets/css/main.css">
+ <!--[if IE 7]>
+ <link rel="stylesheet" href="/assets/css/font-awesome-ie7.min.css">
+ <![endif]-->
+ <link rel="stylesheet" href="/assets/css/error.css">
+ </head>
+ <body>
+ <div class="application error maintenance">
+ <main class="main main--error" role="main">
+ <div class="maintenance-bg full-size">
+ <div class="hill-left full-size"></div>
+ <div class="hill-right full-size"></div>
+ <div class="shadow-left full-size"></div>
+ <div class="shadow-right full-size"></div>
+ </div>
+ <div class="maintenance-tractor full-size"></div>
+ <div class="maintenance-text">
+ <h1>Under Maintenance</h1>
+ <p>Please try again in a minute…
+ <a href="/">BridgeDB</a> will be back soon!</p>
+ </div>
+ </main>
+ </div>
+ </body>
+</html>
diff --git a/setup.py b/setup.py
index 0402391..e92afee 100644
--- a/setup.py
+++ b/setup.py
@@ -174,7 +174,8 @@ def get_template_files():
'assets/font/*.ttf',
'assets/font/*.svg',
'assets/font/*.eot',
- 'assets/js/*.js']
+ 'assets/js/*.js',
+ 'assets/images/*.svg']
template_files = []
for include_pattern in include_patterns:
diff --git a/test/test_https.py b/test/test_https.py
index 2a12eee..c1c9772 100644
--- a/test/test_https.py
+++ b/test/test_https.py
@@ -172,6 +172,15 @@ class HTTPTests(unittest.TestCase):
self.assertIn("Content-Security-Policy", headers)
self.assertIn("default-src 'none';", headers)
+ def test_404(self):
+ """Asking for a non-existent resource should yield our custom 404 page,
+ but we can't actually check because Mechanize flips out if we get
+ anything response code other than 200. :/
+ """
+ page = '/'.join([HTTP_ROOT, '404'])
+ self.openBrowser()
+ self.assertRaises(mechanize.HTTPError, self.br.open, page)
+
def test_get_obfs2_ipv4(self):
if os.environ.get("CI"):
if not self.pid or not processExists(self.pid):
diff --git a/test/test_https_server.py b/test/test_https_server.py
index 020b050..ce388a1 100644
--- a/test/test_https_server.py
+++ b/test/test_https_server.py
@@ -116,13 +116,74 @@ class GetClientIPTests(unittest.TestCase):
class ReplaceErrorPageTests(unittest.TestCase):
"""Tests for :func:`bridgedb.https.server.replaceErrorPage`."""
+ def setUp(self):
+ self.resource500 = server.resource500
+
+ def tearDown(self):
+ server.resource500 = self.resource500
+
def test_replaceErrorPage(self):
- """``replaceErrorPage`` should return the expected html."""
+ """``replaceErrorPage`` should return the error-500.html page."""
+ request = DummyRequest([''])
exc = Exception("vegan gümmibären")
- errorPage = server.replaceErrorPage(exc)
- self.assertSubstring("Something went wrong", errorPage)
+ errorPage = server.replaceErrorPage(request, exc)
+ self.assertSubstring("Bad News Bears", errorPage)
self.assertNotSubstring("vegan gümmibären", errorPage)
+ def test_replaceErrorPage_matches_resource500(self):
+ """``replaceErrorPage`` should return the error-500.html page."""
+ request = DummyRequest([''])
+ exc = Exception("vegan gümmibären")
+ errorPage = server.replaceErrorPage(request, exc)
+ error500Page = server.resource500.render(request)
+ self.assertEqual(errorPage, error500Page)
+
+ def test_replaceErrorPage_no_resource500(self):
+ """If ``server.resource500`` is missing/broken, then
+ ``replaceErrorPage`` should return custom hardcoded HTML error text.
+ """
+ request = DummyRequest([''])
+ exc = Exception("vegan gümmibären")
+ server.resource500 = None
+ errorPage = server.replaceErrorPage(request, exc)
+ self.assertNotSubstring("Bad News Bears", errorPage)
+ self.assertNotSubstring("vegan gümmibären", errorPage)
+ self.assertSubstring("Sorry! Something went wrong with your request.",
+ errorPage)
+
+class ErrorResourceTests(unittest.TestCase):
+ """Tests for :class:`bridgedb.https.server.ErrorResource`."""
+
+ def setUp(self):
+ self.request = DummyRequest([''])
+
+ def test_resource404(self):
+ """``server.resource404`` should display the error-404.html page."""
+ page = server.resource404.render(self.request)
+ self.assertSubstring('We dug around for the page you requested', page)
+
+ def test_resource500(self):
+ """``server.resource500`` should display the error-500.html page."""
+ page = server.resource500.render(self.request)
+ self.assertSubstring('Bad News Bears', page)
+
+ def test_maintenance(self):
+ """``server.maintenance`` should display the error-503.html page."""
+ page = server.maintenance.render(self.request)
+ self.assertSubstring('Under Maintenance', page)
+
+
+class CustomErrorHandlingResourceTests(unittest.TestCase):
+ """Tests for :class:`bridgedb.https.server.CustomErrorHandlingResource`."""
+
+ def test_getChild(self):
+ """``CustomErrorHandlingResource.getChild`` should return a rendered
+ copy of ``server.resource404``.
+ """
+ request = DummyRequest([''])
+ resource = server.CustomErrorHandlingResource()
+ self.assertEqual(server.resource404, resource.getChild('foobar', request))
+
class CSPResourceTests(unittest.TestCase):
"""Tests for :class:`bridgedb.HTTPServer.CSPResource`."""
@@ -279,7 +340,7 @@ class CaptchaProtectedResourceTests(unittest.TestCase):
request = DummyRequest([self.pagename])
request.method = b'GET'
page = self.captchaResource.render_GET(request)
- errorPage = server.replaceErrorPage(Exception('kablam'))
+ errorPage = server.replaceErrorPage(request, Exception('kablam'))
self.assertEqual(page, errorPage)
finally:
server.lookup = oldLookup
@@ -423,7 +484,7 @@ class GimpCaptchaProtectedResourceTests(unittest.TestCase):
server.lookup = None
self.request.method = b'GET'
page = self.captchaResource.render_GET(self.request)
- errorPage = server.replaceErrorPage(Exception('kablam'))
+ errorPage = server.replaceErrorPage(self.request, Exception('kablam'))
self.assertEqual(page, errorPage)
finally:
server.lookup = oldLookup
@@ -583,7 +644,7 @@ class ReCaptchaProtectedResourceTests(unittest.TestCase):
server.lookup = None
self.request.method = b'GET'
page = self.captchaResource.render_GET(self.request)
- errorPage = server.replaceErrorPage(Exception('kablam'))
+ errorPage = server.replaceErrorPage(self.request, Exception('kablam'))
self.assertEqual(page, errorPage)
finally:
server.lookup = oldLookup
@@ -864,6 +925,26 @@ class BridgesResourceTests(unittest.TestCase):
self.assertGreater(int(port), 0)
self.assertLessEqual(int(port), 65535)
+ def test_renderAnswer_textplain_error(self):
+ """If we hit some error while returning bridge lines in text/plain
+ format, then our custom plaintext error message (the hardcoded HTML in
+ ``server.replaceErrorPage``) should be returned.
+ """
+ self.useBenignBridges()
+
+ request = DummyRequest([self.pagename])
+ request.args.update({'format': ['plain']})
+ request.getClientIP = lambda: '4.4.4.4'
+ request.method = b'GET'
+
+ # We'll cause a TypeError here due to calling '\n'.join(None)
+ page = self.bridgesResource.renderAnswer(request, bridgeLines=None)
+
+ # We don't want the fancy version:
+ self.assertNotSubstring("Bad News Bears", page)
+ self.assertSubstring("Sorry! Something went wrong with your request.",
+ page)
+
class OptionsResourceTests(unittest.TestCase):
"""Tests for :class:`bridgedb.https.server.OptionsResource`."""
1
0